340 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=ALL3--- |4 5 define i64 @test_lshr_i64(i64 %arg1, i64 %arg2) {6 %res = lshr i64 %arg1, %arg27 ret i64 %res8 }9 10 define i64 @test_lshr_i64_imm(i64 %arg1) {11 %res = lshr i64 %arg1, 512 ret i64 %res13 }14 15 define i32 @test_lshr_i32(i32 %arg1, i32 %arg2) {16 %res = lshr i32 %arg1, %arg217 ret i32 %res18 }19 20 define i32 @test_lshr_i32_imm(i32 %arg1) {21 %res = lshr i32 %arg1, 522 ret i32 %res23 }24 25 define i16 @test_lshr_i16(i32 %arg1, i32 %arg2) {26 %a = trunc i32 %arg1 to i1627 %a2 = trunc i32 %arg2 to i1628 %res = lshr i16 %a, %a229 ret i16 %res30 }31 32 define i16 @test_lshr_i16_imm(i32 %arg1) {33 %a = trunc i32 %arg1 to i1634 %res = lshr i16 %a, 535 ret i16 %res36 }37 38 define i8 @test_lshr_i8(i32 %arg1, i32 %arg2) {39 %a = trunc i32 %arg1 to i840 %a2 = trunc i32 %arg2 to i841 %res = lshr i8 %a, %a242 ret i8 %res43 }44 45 define i8 @test_lshr_i8_imm(i32 %arg1) {46 %a = trunc i32 %arg1 to i847 %res = lshr i8 %a, 548 ret i8 %res49 }50 51...52---53name: test_lshr_i6454alignment: 1655legalized: true56regBankSelected: true57tracksRegLiveness: true58registers:59 - { id: 0, class: gpr, preferred-register: '' }60 - { id: 1, class: gpr, preferred-register: '' }61 - { id: 2, class: gpr, preferred-register: '' }62 - { id: 3, class: gpr, preferred-register: '' }63liveins:64fixedStack:65stack:66constants:67body: |68 bb.1 (%ir-block.0):69 liveins: $rdi, $rsi70 71 ; ALL-LABEL: name: test_lshr_i6472 ; ALL: liveins: $rdi, $rsi73 ; ALL-NEXT: {{ $}}74 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi75 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr64_with_sub_8bit = COPY $rsi76 ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit77 ; ALL-NEXT: $cl = COPY [[COPY2]]78 ; ALL-NEXT: [[SHR64rCL:%[0-9]+]]:gr64 = SHR64rCL [[COPY]], implicit-def dead $eflags, implicit $cl79 ; ALL-NEXT: $rax = COPY [[SHR64rCL]]80 ; ALL-NEXT: RET 0, implicit $rax81 %0(s64) = COPY $rdi82 %1(s64) = COPY $rsi83 %2(s8) = G_TRUNC %184 %3(s64) = G_LSHR %0, %285 $rax = COPY %3(s64)86 RET 0, implicit $rax87 88...89---90name: test_lshr_i64_imm91alignment: 1692legalized: true93regBankSelected: true94tracksRegLiveness: true95registers:96 - { id: 0, class: gpr, preferred-register: '' }97 - { id: 1, class: gpr, preferred-register: '' }98 - { id: 2, class: gpr, preferred-register: '' }99liveins:100fixedStack:101stack:102constants:103body: |104 bb.1 (%ir-block.0):105 liveins: $rdi106 107 ; ALL-LABEL: name: test_lshr_i64_imm108 ; ALL: liveins: $rdi109 ; ALL-NEXT: {{ $}}110 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rdi111 ; ALL-NEXT: [[SHR64ri:%[0-9]+]]:gr64 = SHR64ri [[COPY]], 5, implicit-def dead $eflags112 ; ALL-NEXT: $rax = COPY [[SHR64ri]]113 ; ALL-NEXT: RET 0, implicit $rax114 %0(s64) = COPY $rdi115 %1(s8) = G_CONSTANT i8 5116 %2(s64) = G_LSHR %0, %1117 $rax = COPY %2(s64)118 RET 0, implicit $rax119 120...121---122name: test_lshr_i32123alignment: 16124legalized: true125regBankSelected: true126tracksRegLiveness: true127registers:128 - { id: 0, class: gpr, preferred-register: '' }129 - { id: 1, class: gpr, preferred-register: '' }130 - { id: 2, class: gpr, preferred-register: '' }131 - { id: 3, class: gpr, preferred-register: '' }132liveins:133fixedStack:134stack:135constants:136body: |137 bb.1 (%ir-block.0):138 liveins: $edi, $esi139 140 ; ALL-LABEL: name: test_lshr_i32141 ; ALL: liveins: $edi, $esi142 ; ALL-NEXT: {{ $}}143 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi144 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi145 ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit146 ; ALL-NEXT: $cl = COPY [[COPY2]]147 ; ALL-NEXT: [[SHR32rCL:%[0-9]+]]:gr32 = SHR32rCL [[COPY]], implicit-def dead $eflags, implicit $cl148 ; ALL-NEXT: $eax = COPY [[SHR32rCL]]149 ; ALL-NEXT: RET 0, implicit $eax150 %0(s32) = COPY $edi151 %1(s32) = COPY $esi152 %2(s8) = G_TRUNC %1153 %3(s32) = G_LSHR %0, %2154 $eax = COPY %3(s32)155 RET 0, implicit $eax156 157...158---159name: test_lshr_i32_imm160alignment: 16161legalized: true162regBankSelected: true163tracksRegLiveness: true164registers:165 - { id: 0, class: gpr, preferred-register: '' }166 - { id: 1, class: gpr, preferred-register: '' }167 - { id: 2, class: gpr, preferred-register: '' }168liveins:169fixedStack:170stack:171constants:172body: |173 bb.1 (%ir-block.0):174 liveins: $edi175 176 ; ALL-LABEL: name: test_lshr_i32_imm177 ; ALL: liveins: $edi178 ; ALL-NEXT: {{ $}}179 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi180 ; ALL-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 5, implicit-def dead $eflags181 ; ALL-NEXT: $eax = COPY [[SHR32ri]]182 ; ALL-NEXT: RET 0, implicit $eax183 %0(s32) = COPY $edi184 %1(s8) = G_CONSTANT i8 5185 %2(s32) = G_LSHR %0, %1186 $eax = COPY %2(s32)187 RET 0, implicit $eax188 189...190---191name: test_lshr_i16192alignment: 16193legalized: true194regBankSelected: true195tracksRegLiveness: true196registers:197 - { id: 0, class: gpr, preferred-register: '' }198 - { id: 1, class: gpr, preferred-register: '' }199 - { id: 2, class: gpr, preferred-register: '' }200 - { id: 3, class: gpr, preferred-register: '' }201 - { id: 4, class: gpr, preferred-register: '' }202liveins:203fixedStack:204stack:205constants:206body: |207 bb.1 (%ir-block.0):208 liveins: $edi, $esi209 210 ; ALL-LABEL: name: test_lshr_i16211 ; ALL: liveins: $edi, $esi212 ; ALL-NEXT: {{ $}}213 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi214 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi215 ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit216 ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit217 ; ALL-NEXT: $cl = COPY [[COPY3]]218 ; ALL-NEXT: [[SHR16rCL:%[0-9]+]]:gr16 = SHR16rCL [[COPY2]], implicit-def dead $eflags, implicit $cl219 ; ALL-NEXT: $ax = COPY [[SHR16rCL]]220 ; ALL-NEXT: RET 0, implicit $ax221 %0(s32) = COPY $edi222 %1(s32) = COPY $esi223 %2(s16) = G_TRUNC %0(s32)224 %3(s8) = G_TRUNC %1(s32)225 %4(s16) = G_LSHR %2, %3226 $ax = COPY %4(s16)227 RET 0, implicit $ax228 229...230---231name: test_lshr_i16_imm232alignment: 16233legalized: true234regBankSelected: true235tracksRegLiveness: true236registers:237 - { id: 0, class: gpr, preferred-register: '' }238 - { id: 1, class: gpr, preferred-register: '' }239 - { id: 2, class: gpr, preferred-register: '' }240 - { id: 3, class: gpr, preferred-register: '' }241liveins:242fixedStack:243stack:244constants:245body: |246 bb.1 (%ir-block.0):247 liveins: $edi248 249 ; ALL-LABEL: name: test_lshr_i16_imm250 ; ALL: liveins: $edi251 ; ALL-NEXT: {{ $}}252 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi253 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr16 = COPY [[COPY]].sub_16bit254 ; ALL-NEXT: [[SHR16ri:%[0-9]+]]:gr16 = SHR16ri [[COPY1]], 5, implicit-def dead $eflags255 ; ALL-NEXT: $ax = COPY [[SHR16ri]]256 ; ALL-NEXT: RET 0, implicit $ax257 %0(s32) = COPY $edi258 %2(s8) = G_CONSTANT i8 5259 %1(s16) = G_TRUNC %0(s32)260 %3(s16) = G_LSHR %1, %2261 $ax = COPY %3(s16)262 RET 0, implicit $ax263 264...265---266name: test_lshr_i8267alignment: 16268legalized: true269regBankSelected: true270tracksRegLiveness: true271registers:272 - { id: 0, class: gpr, preferred-register: '' }273 - { id: 1, class: gpr, preferred-register: '' }274 - { id: 2, class: gpr, preferred-register: '' }275 - { id: 3, class: gpr, preferred-register: '' }276 - { id: 4, class: gpr, preferred-register: '' }277liveins:278fixedStack:279stack:280constants:281body: |282 bb.1 (%ir-block.0):283 liveins: $edi, $esi284 285 ; ALL-LABEL: name: test_lshr_i8286 ; ALL: liveins: $edi, $esi287 ; ALL-NEXT: {{ $}}288 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi289 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $esi290 ; ALL-NEXT: [[COPY2:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit291 ; ALL-NEXT: [[COPY3:%[0-9]+]]:gr8 = COPY [[COPY1]].sub_8bit292 ; ALL-NEXT: $cl = COPY [[COPY3]]293 ; ALL-NEXT: [[SHR8rCL:%[0-9]+]]:gr8 = SHR8rCL [[COPY2]], implicit-def dead $eflags, implicit $cl294 ; ALL-NEXT: $al = COPY [[SHR8rCL]]295 ; ALL-NEXT: RET 0, implicit $al296 %0(s32) = COPY $edi297 %1(s32) = COPY $esi298 %2(s8) = G_TRUNC %0(s32)299 %3(s8) = G_TRUNC %1(s32)300 %4(s8) = G_LSHR %2, %3301 $al = COPY %4(s8)302 RET 0, implicit $al303 304...305---306name: test_lshr_i8_imm307alignment: 16308legalized: true309regBankSelected: true310tracksRegLiveness: true311registers:312 - { id: 0, class: gpr, preferred-register: '' }313 - { id: 1, class: gpr, preferred-register: '' }314 - { id: 2, class: gpr, preferred-register: '' }315 - { id: 3, class: gpr, preferred-register: '' }316liveins:317fixedStack:318stack:319constants:320body: |321 bb.1 (%ir-block.0):322 liveins: $edi323 324 ; ALL-LABEL: name: test_lshr_i8_imm325 ; ALL: liveins: $edi326 ; ALL-NEXT: {{ $}}327 ; ALL-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $edi328 ; ALL-NEXT: [[COPY1:%[0-9]+]]:gr8 = COPY [[COPY]].sub_8bit329 ; ALL-NEXT: [[SHR8ri:%[0-9]+]]:gr8 = SHR8ri [[COPY1]], 5, implicit-def dead $eflags330 ; ALL-NEXT: $al = COPY [[SHR8ri]]331 ; ALL-NEXT: RET 0, implicit $al332 %0(s32) = COPY $edi333 %2(s8) = G_CONSTANT i8 5334 %1(s8) = G_TRUNC %0(s32)335 %3(s8) = G_LSHR %1, %2336 $al = COPY %3(s8)337 RET 0, implicit $al338 339...340