1 ; Check that [sl]dc1 are normally emitted. MIPS32r2 should have [sl]dxc1 too. 2 ; RUN: llc -march=mipsel -mcpu=mips32 < %s | \ 3 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R1-LDC1 4 ; RUN: llc -march=mipsel -mcpu=mips32r2 < %s | \ 5 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R2-LDXC1 6 ; RUN: llc -march=mipsel -mcpu=mips32r6 < %s | \ 7 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R6-LDC1 8 9 ; Check that -mno-ldc1-sdc1 disables [sl]dc1 10 ; RUN: llc -march=mipsel -relocation-model=pic -mno-ldc1-sdc1 \ 11 ; RUN: -mcpu=mips32 < %s | \ 12 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R1 \ 13 ; RUN: -check-prefix=32R1-LE -check-prefix=32R1-LE-PIC 14 ; RUN: llc -march=mipsel -relocation-model=pic -mno-ldc1-sdc1 \ 15 ; RUN: -mcpu=mips32r2 < %s | \ 16 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R2 \ 17 ; RUN: -check-prefix=32R2-LE -check-prefix=32R2-LE-PIC 18 ; RUN: llc -march=mipsel -relocation-model=pic -mno-ldc1-sdc1 \ 19 ; RUN: -mcpu=mips32r6 < %s | \ 20 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R6 \ 21 ; RUN: -check-prefix=32R6-LE -check-prefix=32R6-LE-PIC 22 23 ; Check again for big-endian 24 ; RUN: llc -march=mips -relocation-model=pic -mno-ldc1-sdc1 \ 25 ; RUN: -mcpu=mips32 < %s | \ 26 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R1 \ 27 ; RUN: -check-prefix=32R1-BE -check-prefix=32R1-BE-PIC 28 ; RUN: llc -march=mips -relocation-model=pic -mno-ldc1-sdc1 \ 29 ; RUN: -mcpu=mips32r2 < %s | \ 30 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R2 \ 31 ; RUN: -check-prefix=32R2-BE -check-prefix=32R2-BE-PIC 32 ; RUN: llc -march=mips -relocation-model=pic -mno-ldc1-sdc1 \ 33 ; RUN: -mcpu=mips32r6 < %s | \ 34 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R6 \ 35 ; RUN: -check-prefix=32R6-BE -check-prefix=32R6-BE-PIC 36 37 ; Check again for the static relocation model 38 ; RUN: llc -march=mipsel -relocation-model=static -mno-ldc1-sdc1 \ 39 ; RUN: -mcpu=mips32 < %s | \ 40 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R1 \ 41 ; RUN: -check-prefix=32R1-LE -check-prefix=32R1-LE-STATIC 42 ; RUN: llc -march=mipsel -relocation-model=static -mno-ldc1-sdc1 \ 43 ; RUN: -mcpu=mips32r2 < %s | \ 44 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R2 \ 45 ; RUN: -check-prefix=32R2-LE -check-prefix=32R2-LE-STATIC 46 ; RUN: llc -march=mipsel -relocation-model=static -mno-ldc1-sdc1 \ 47 ; RUN: -mcpu=mips32r6 < %s | \ 48 ; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32R6 \ 49 ; RUN: -check-prefix=32R6-LE -check-prefix=32R6-LE-STATIC 50 51 @g0 = common global double 0.000000e+00, align 8 52 53 ; ALL-LABEL: test_ldc1: 54 55 ; 32R1-LE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 56 ; 32R1-LE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 57 ; 32R1-LE-PIC-DAG: mtc1 $[[R0]], $f0 58 ; 32R1-LE-PIC-DAG: mtc1 $[[R1]], $f1 59 60 ; 32R2-LE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 61 ; 32R2-LE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 62 ; 32R2-LE-PIC-DAG: mtc1 $[[R0]], $f0 63 ; 32R2-LE-PIC-DAG: mthc1 $[[R1]], $f0 64 65 ; 32R6-LE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 66 ; 32R6-LE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 67 ; 32R6-LE-PIC-DAG: mtc1 $[[R0]], $f0 68 ; 32R6-LE-PIC-DAG: mthc1 $[[R1]], $f0 69 70 ; 32R1-LE-STATIC-DAG: lui $[[R0:[0-9]+]], %hi(g0) 71 ; 32R1-LE-STATIC-DAG: lw $[[R1:[0-9]+]], %lo(g0)($[[R0]]) 72 ; 32R1-LE-STATIC-DAG: addiu $[[R2:[0-9]+]], $[[R0]], %lo(g0) 73 ; 32R1-LE-STATIC-DAG: lw $[[R3:[0-9]+]], 4($[[R2]]) 74 ; 32R1-LE-STATIC-DAG: mtc1 $[[R1]], $f0 75 ; 32R1-LE-STATIC-DAG: mtc1 $[[R3]], $f1 76 77 ; 32R2-LE-STATIC-DAG: lui $[[R0:[0-9]+]], %hi(g0) 78 ; 32R2-LE-STATIC-DAG: lw $[[R1:[0-9]+]], %lo(g0)($[[R0]]) 79 ; 32R2-LE-STATIC-DAG: addiu $[[R2:[0-9]+]], $[[R0]], %lo(g0) 80 ; 32R2-LE-STATIC-DAG: lw $[[R3:[0-9]+]], 4($[[R2]]) 81 ; 32R2-LE-STATIC-DAG: mtc1 $[[R1]], $f0 82 ; 32R2-LE-STATIC-DAG: mthc1 $[[R3]], $f0 83 84 ; 32R6-LE-STATIC-DAG: lui $[[R0:[0-9]+]], %hi(g0) 85 ; 32R6-LE-STATIC-DAG: lw $[[R1:[0-9]+]], %lo(g0)($[[R0]]) 86 ; 32R6-LE-STATIC-DAG: addiu $[[R2:[0-9]+]], $[[R0]], %lo(g0) 87 ; 32R6-LE-STATIC-DAG: lw $[[R3:[0-9]+]], 4($[[R2]]) 88 ; 32R6-LE-STATIC-DAG: mtc1 $[[R1]], $f0 89 ; 32R6-LE-STATIC-DAG: mthc1 $[[R3]], $f0 90 91 ; 32R1-BE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 92 ; 32R1-BE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 93 ; 32R1-BE-PIC-DAG: mtc1 $[[R1]], $f0 94 ; 32R1-BE-PIC-DAG: mtc1 $[[R0]], $f1 95 96 ; 32R2-BE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 97 ; 32R2-BE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 98 ; 32R2-BE-PIC-DAG: mtc1 $[[R1]], $f0 99 ; 32R2-BE-PIC-DAG: mthc1 $[[R0]], $f0 100 101 ; 32R6-BE-PIC-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 102 ; 32R6-BE-PIC-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 103 ; 32R6-BE-PIC-DAG: mtc1 $[[R1]], $f0 104 ; 32R6-BE-PIC-DAG: mthc1 $[[R0]], $f0 105 106 ; 32R1-LDC1: ldc1 $f0, 0(${{[0-9]+}}) 107 108 ; 32R2-LDXC1: ldc1 $f0, 0(${{[0-9]+}}) 109 110 ; 32R6-LDC1: ldc1 $f0, 0(${{[0-9]+}}) 111 112 define double @test_ldc1() { 113 entry: 114 %0 = load double, double* @g0, align 8 115 ret double %0 116 } 117 118 ; ALL-LABEL: test_sdc1: 119 120 ; 32R1-LE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 121 ; 32R1-LE-PIC-DAG: mfc1 $[[R1:[0-9]+]], $f13 122 ; 32R1-LE-PIC-DAG: sw $[[R0]], 0(${{[0-9]+}}) 123 ; 32R1-LE-PIC-DAG: sw $[[R1]], 4(${{[0-9]+}}) 124 125 ; 32R2-LE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 126 ; 32R2-LE-PIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 127 ; 32R2-LE-PIC-DAG: sw $[[R0]], 0(${{[0-9]+}}) 128 ; 32R2-LE-PIC-DAG: sw $[[R1]], 4(${{[0-9]+}}) 129 130 ; 32R6-LE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 131 ; 32R6-LE-PIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 132 ; 32R6-LE-PIC-DAG: sw $[[R0]], 0(${{[0-9]+}}) 133 ; 32R6-LE-PIC-DAG: sw $[[R1]], 4(${{[0-9]+}}) 134 135 ; 32R1-LE-STATIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 136 ; 32R1-LE-STATIC-DAG: mfc1 $[[R1:[0-9]+]], $f13 137 ; 32R1-LE-STATIC-DAG: lui $[[R2:[0-9]+]], %hi(g0) 138 ; 32R1-LE-STATIC-DAG: sw $[[R0]], %lo(g0)($[[R2]]) 139 ; 32R1-LE-STATIC-DAG: addiu $[[R3:[0-9]+]], $[[R2]], %lo(g0) 140 ; 32R1-LE-STATIC-DAG: sw $[[R1]], 4($[[R3]]) 141 142 ; 32R2-LE-STATIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 143 ; 32R2-LE-STATIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 144 ; 32R2-LE-STATIC-DAG: lui $[[R2:[0-9]+]], %hi(g0) 145 ; 32R2-LE-STATIC-DAG: sw $[[R0]], %lo(g0)($[[R2]]) 146 ; 32R2-LE-STATIC-DAG: addiu $[[R3:[0-9]+]], $[[R2]], %lo(g0) 147 ; 32R2-LE-STATIC-DAG: sw $[[R1]], 4($[[R3]]) 148 149 ; 32R6-LE-STATIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 150 ; 32R6-LE-STATIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 151 ; 32R6-LE-STATIC-DAG: lui $[[R2:[0-9]+]], %hi(g0) 152 ; 32R6-LE-STATIC-DAG: sw $[[R0]], %lo(g0)($[[R2]]) 153 ; 32R6-LE-STATIC-DAG: addiu $[[R3:[0-9]+]], $[[R2]], %lo(g0) 154 ; 32R6-LE-STATIC-DAG: sw $[[R1]], 4($[[R3]]) 155 156 ; 32R1-BE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 157 ; 32R1-BE-PIC-DAG: mfc1 $[[R1:[0-9]+]], $f13 158 ; 32R1-BE-PIC-DAG: sw $[[R1]], 0(${{[0-9]+}}) 159 ; 32R1-BE-PIC-DAG: sw $[[R0]], 4(${{[0-9]+}}) 160 161 ; 32R2-BE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 162 ; 32R2-BE-PIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 163 ; 32R2-BE-PIC-DAG: sw $[[R1]], 0(${{[0-9]+}}) 164 ; 32R2-BE-PIC-DAG: sw $[[R0]], 4(${{[0-9]+}}) 165 166 ; 32R6-BE-PIC-DAG: mfc1 $[[R0:[0-9]+]], $f12 167 ; 32R6-BE-PIC-DAG: mfhc1 $[[R1:[0-9]+]], $f12 168 ; 32R6-BE-PIC-DAG: sw $[[R1]], 0(${{[0-9]+}}) 169 ; 32R6-BE-PIC-DAG: sw $[[R0]], 4(${{[0-9]+}}) 170 171 ; 32R1-LDC1: sdc1 $f{{[0-9]+}}, 0(${{[0-9]+}}) 172 173 ; 32R2-LDXC1: sdc1 $f{{[0-9]+}}, 0(${{[0-9]+}}) 174 175 ; 32R6-LDC1: sdc1 $f{{[0-9]+}}, 0(${{[0-9]+}}) 176 177 define void @test_sdc1(double %a) { 178 entry: 179 store double %a, double* @g0, align 8 180 ret void 181 } 182 183 ; ALL-LABEL: test_ldxc1: 184 185 ; 32R1-LE-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 186 ; 32R1-LE-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 187 ; 32R1-BE-DAG: lw $[[R0:[0-9]+]], 4(${{[0-9]+}}) 188 ; 32R1-BE-DAG: lw $[[R1:[0-9]+]], 0(${{[0-9]+}}) 189 ; 32R1-DAG: mtc1 $[[R0]], $f0 190 ; 32R1-DAG: mtc1 $[[R1]], $f1 191 192 ; 32R2-LE-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 193 ; 32R2-LE-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 194 ; 32R2-BE-DAG: lw $[[R0:[0-9]+]], 4(${{[0-9]+}}) 195 ; 32R2-BE-DAG: lw $[[R1:[0-9]+]], 0(${{[0-9]+}}) 196 ; 32R2-DAG: mtc1 $[[R0]], $f0 197 ; 32R2-DAG: mthc1 $[[R1]], $f0 198 199 ; 32R6-LE-DAG: lw $[[R0:[0-9]+]], 0(${{[0-9]+}}) 200 ; 32R6-LE-DAG: lw $[[R1:[0-9]+]], 4(${{[0-9]+}}) 201 ; 32R6-BE-DAG: lw $[[R0:[0-9]+]], 4(${{[0-9]+}}) 202 ; 32R6-BE-DAG: lw $[[R1:[0-9]+]], 0(${{[0-9]+}}) 203 ; 32R6-DAG: mtc1 $[[R0]], $f0 204 ; 32R6-DAG: mthc1 $[[R1]], $f0 205 206 ; 32R1-LDC1: ldc1 $f0, 0(${{[0-9]+}}) 207 208 ; 32R2-LDXC1: sll $[[OFFSET:[0-9]+]], $5, 3 209 ; 32R2-LDXC1: ldxc1 $f0, $[[OFFSET]]($4) 210 211 ; 32R6-LDC1: ldc1 $f0, 0(${{[0-9]+}}) 212 213 define double @test_ldxc1(double* nocapture readonly %a, i32 %i) { 214 entry: 215 %arrayidx = getelementptr inbounds double, double* %a, i32 %i 216 %0 = load double, double* %arrayidx, align 8 217 ret double %0 218 } 219 220 ; ALL-LABEL: test_sdxc1: 221 222 ; 32R1-DAG: mfc1 $[[R0:[0-9]+]], $f12 223 ; 32R1-DAG: mfc1 $[[R1:[0-9]+]], $f13 224 ; 32R1-DAG: sw $[[R0]], 0(${{[0-9]+}}) 225 ; 32R1-DAG: sw $[[R1]], 4(${{[0-9]+}}) 226 227 ; 32R2-DAG: mfc1 $[[R0:[0-9]+]], $f12 228 ; 32R2-DAG: mfhc1 $[[R1:[0-9]+]], $f12 229 ; 32R2-DAG: sw $[[R0]], 0(${{[0-9]+}}) 230 ; 32R2-DAG: sw $[[R1]], 4(${{[0-9]+}}) 231 232 ; 32R6-DAG: mfc1 $[[R0:[0-9]+]], $f12 233 ; 32R6-DAG: mfhc1 $[[R1:[0-9]+]], $f12 234 ; 32R6-DAG: sw $[[R0]], 0(${{[0-9]+}}) 235 ; 32R6-DAG: sw $[[R1]], 4(${{[0-9]+}}) 236 237 ; 32R1-LDC1: sdc1 $f{{[0-9]+}}, 0(${{[0-9]+}}) 238 239 ; 32R2-LDXC1: sll $[[OFFSET:[0-9]+]], $7, 3 240 ; 32R2-LDXC1: sdxc1 $f{{[0-9]+}}, $[[OFFSET]]($6) 241 242 ; 32R6-LDC1: sdc1 $f{{[0-9]+}}, 0(${{[0-9]+}}) 243 244 define void @test_sdxc1(double %b, double* nocapture %a, i32 %i) { 245 entry: 246 %arrayidx = getelementptr inbounds double, double* %a, i32 %i 247 store double %b, double* %arrayidx, align 8 248 ret void 249 } 250