276 lines · plain
1# RUN: llc -O0 -mtriple arm-- -mattr=+v6 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,ARM2# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2,+dsp -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,THUMB3--- |4 define void @test_pkhbt() { ret void }5 define void @test_pkhbt_commutative() { ret void }6 define void @test_pkhbt_imm16_31() { ret void }7 define void @test_pkhbt_unshifted() { ret void }8 9 define void @test_pkhtb_imm16() { ret void }10 define void @test_pkhtb_imm1_15() { ret void }11...12---13name: test_pkhbt14# CHECK-LABEL: name: test_pkhbt15legalized: true16regBankSelected: true17selected: false18# CHECK: selected: true19registers:20 - { id: 0, class: gprb }21 - { id: 1, class: gprb }22 - { id: 2, class: gprb }23 - { id: 3, class: gprb }24 - { id: 4, class: gprb }25 - { id: 5, class: gprb }26 - { id: 6, class: gprb }27 - { id: 7, class: gprb }28 - { id: 8, class: gprb }29body: |30 bb.0:31 liveins: $r0, $r132 33 %0(s32) = COPY $r034 %1(s32) = COPY $r135 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r036 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r137 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r038 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r139 40 %2(s32) = G_CONSTANT i32 65535 ; 0xFFFF41 %3(s32) = G_AND %0, %242 43 %4(s32) = G_CONSTANT i32 744 %5(s32) = G_SHL %1, %445 %6(s32) = G_CONSTANT i32 4294901760 ; 0xFFFF000046 %7(s32) = G_AND %5, %647 48 %8(s32) = G_OR %3, %749 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHBT [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg50 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHBT [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg51 52 $r0 = COPY %8(s32)53 ; CHECK: $r0 = COPY [[VREGR]]54 55 BX_RET 14, $noreg, implicit $r056 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r057...58---59name: test_pkhbt_commutative60# CHECK-LABEL: name: test_pkhbt_commutative61legalized: true62regBankSelected: true63selected: false64# CHECK: selected: true65registers:66 - { id: 0, class: gprb }67 - { id: 1, class: gprb }68 - { id: 2, class: gprb }69 - { id: 3, class: gprb }70 - { id: 4, class: gprb }71 - { id: 5, class: gprb }72 - { id: 6, class: gprb }73 - { id: 7, class: gprb }74 - { id: 8, class: gprb }75body: |76 bb.0:77 liveins: $r0, $r178 79 %0(s32) = COPY $r080 %1(s32) = COPY $r181 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r082 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r183 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r084 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r185 86 %2(s32) = G_CONSTANT i32 65535 ; 0xFFFF87 %3(s32) = G_AND %0, %288 89 %4(s32) = G_CONSTANT i32 790 %5(s32) = G_SHL %1, %491 %6(s32) = G_CONSTANT i32 4294901760 ; 0xFFFF000092 %7(s32) = G_AND %5, %693 94 %8(s32) = G_OR %7, %395 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHBT [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg96 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHBT [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg97 98 $r0 = COPY %8(s32)99 ; CHECK: $r0 = COPY [[VREGR]]100 101 BX_RET 14, $noreg, implicit $r0102 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0103...104---105name: test_pkhbt_imm16_31106# CHECK-LABEL: name: test_pkhbt_imm16_31107legalized: true108regBankSelected: true109selected: false110# CHECK: selected: true111registers:112 - { id: 0, class: gprb }113 - { id: 1, class: gprb }114 - { id: 2, class: gprb }115 - { id: 3, class: gprb }116 - { id: 4, class: gprb }117 - { id: 5, class: gprb }118 - { id: 6, class: gprb }119body: |120 bb.0:121 liveins: $r0, $r1122 123 %0(s32) = COPY $r0124 %1(s32) = COPY $r1125 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r0126 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r1127 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0128 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1129 130 %2(s32) = G_CONSTANT i32 65535 ; 0xFFFF131 %3(s32) = G_AND %0, %2132 133 %4(s32) = G_CONSTANT i32 17134 %5(s32) = G_SHL %1, %4135 136 %6(s32) = G_OR %3, %5137 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHBT [[VREGX]], [[VREGY]], 17, 14 /* CC::al */, $noreg138 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHBT [[VREGX]], [[VREGY]], 17, 14 /* CC::al */, $noreg139 140 $r0 = COPY %6(s32)141 ; CHECK: $r0 = COPY [[VREGR]]142 143 BX_RET 14, $noreg, implicit $r0144 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0145...146---147name: test_pkhbt_unshifted148# CHECK-LABEL: name: test_pkhbt_unshifted149legalized: true150regBankSelected: true151selected: false152# CHECK: selected: true153registers:154 - { id: 0, class: gprb }155 - { id: 1, class: gprb }156 - { id: 2, class: gprb }157 - { id: 3, class: gprb }158 - { id: 4, class: gprb }159 - { id: 5, class: gprb }160 - { id: 6, class: gprb }161body: |162 bb.0:163 liveins: $r0, $r1164 165 %0(s32) = COPY $r0166 %1(s32) = COPY $r1167 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r0168 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r1169 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0170 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1171 172 %2(s32) = G_CONSTANT i32 65535 ; 0xFFFF173 %3(s32) = G_AND %0, %2174 175 %4(s32) = G_CONSTANT i32 4294901760 ; 0xFFFF0000176 %5(s32) = G_AND %1, %4177 178 %6(s32) = G_OR %3, %5179 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHBT [[VREGX]], [[VREGY]], 0, 14 /* CC::al */, $noreg180 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHBT [[VREGX]], [[VREGY]], 0, 14 /* CC::al */, $noreg181 182 $r0 = COPY %6(s32)183 ; CHECK: $r0 = COPY [[VREGR]]184 185 BX_RET 14, $noreg, implicit $r0186 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0187...188---189name: test_pkhtb_imm16190# CHECK-LABEL: name: test_pkhtb_imm16191legalized: true192regBankSelected: true193selected: false194# CHECK: selected: true195registers:196 - { id: 0, class: gprb }197 - { id: 1, class: gprb }198 - { id: 2, class: gprb }199 - { id: 3, class: gprb }200 - { id: 4, class: gprb }201 - { id: 5, class: gprb }202 - { id: 6, class: gprb }203body: |204 bb.0:205 liveins: $r0, $r1206 207 %0(s32) = COPY $r0208 %1(s32) = COPY $r1209 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r0210 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r1211 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0212 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1213 214 %2(s32) = G_CONSTANT i32 4294901760 ; 0xFFFF0000215 %3(s32) = G_AND %0, %2216 217 %4(s32) = G_CONSTANT i32 16218 %5(s32) = G_LSHR %1, %4219 220 %6(s32) = G_OR %3, %5221 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHTB [[VREGX]], [[VREGY]], 16, 14 /* CC::al */, $noreg222 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHTB [[VREGX]], [[VREGY]], 16, 14 /* CC::al */, $noreg223 224 $r0 = COPY %6(s32)225 ; CHECK: $r0 = COPY [[VREGR]]226 227 BX_RET 14, $noreg, implicit $r0228 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0229...230---231name: test_pkhtb_imm1_15232# CHECK-LABEL: name: test_pkhtb_imm1_15233legalized: true234regBankSelected: true235selected: false236# CHECK: selected: true237registers:238 - { id: 0, class: gprb }239 - { id: 1, class: gprb }240 - { id: 2, class: gprb }241 - { id: 3, class: gprb }242 - { id: 4, class: gprb }243 - { id: 5, class: gprb }244 - { id: 6, class: gprb }245 - { id: 7, class: gprb }246 - { id: 8, class: gprb }247body: |248 bb.0:249 liveins: $r0, $r1250 251 %0(s32) = COPY $r0252 %1(s32) = COPY $r1253 ; ARM-DAG: [[VREGX:%[0-9]+]]:gprnopc = COPY $r0254 ; ARM-DAG: [[VREGY:%[0-9]+]]:gprnopc = COPY $r1255 ; THUMB-DAG: [[VREGX:%[0-9]+]]:rgpr = COPY $r0256 ; THUMB-DAG: [[VREGY:%[0-9]+]]:rgpr = COPY $r1257 258 %2(s32) = G_CONSTANT i32 4294901760 ; 0xFFFF0000259 %3(s32) = G_AND %0, %2260 261 %4(s32) = G_CONSTANT i32 7262 %5(s32) = G_LSHR %1, %4263 %6(s32) = G_CONSTANT i32 65535 ; 0xFFFF264 %7(s32) = G_AND %5, %6265 266 %8(s32) = G_OR %3, %7267 ; ARM: [[VREGR:%[0-9]+]]:gprnopc = PKHTB [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg268 ; THUMB: [[VREGR:%[0-9]+]]:rgpr = t2PKHTB [[VREGX]], [[VREGY]], 7, 14 /* CC::al */, $noreg269 270 $r0 = COPY %8(s32)271 ; CHECK: $r0 = COPY [[VREGR]]272 273 BX_RET 14, $noreg, implicit $r0274 ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0275...276