brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.4 KiB · 36ab851 Raw
744 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - %s -mtriple=x86_64-- -run-pass peephole-opt | FileCheck %s3 4---5name: opt_zerocmp_06body: |7  bb.0:8    ; CHECK-LABEL: name: opt_zerocmp_09    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi10    ; CHECK-NEXT: [[XOR32ri:%[0-9]+]]:gr32 = XOR32ri [[COPY]], i32 1234, implicit-def $eflags11    ; CHECK-NEXT: $al = SETCCr 5, implicit $eflags12    %0:gr32 = COPY $esi13    %1:gr32 = XOR32ri %0, i32 1234, implicit-def $eflags14    ; TEST should be removed.15    TEST32rr %1, %1, implicit-def $eflags16    $al = SETCCr 5, implicit $eflags17...18---19name: opt_zerocmp_120body: |21  bb.0:22    ; CHECK-LABEL: name: opt_zerocmp_123    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi24    ; CHECK-NEXT: [[DEC64r:%[0-9]+]]:gr64 = DEC64r [[COPY]], implicit-def $eflags25    ; CHECK-NEXT: [[LEA64r:%[0-9]+]]:gr64 = LEA64r [[DEC64r]], 5, $noreg, 12, $noreg26    ; CHECK-NEXT: $al = SETCCr 4, implicit $eflags27    %0:gr64 = COPY $rsi28    %1:gr64 = DEC64r %0, implicit-def $eflags29    ; CMP should be removed.30    CMP64ri32 %1, 0, implicit-def $eflags31    %2:gr64 = LEA64r %1, 5, $noreg, 12, $noreg32    $al = SETCCr 4, implicit $eflags33...34---35name: opt_multiple_blocks36tracksRegLiveness: true37body: |38  ; CHECK-LABEL: name: opt_multiple_blocks39  ; CHECK: bb.0:40  ; CHECK-NEXT:   successors: %bb.1(0x80000000)41  ; CHECK-NEXT: {{  $}}42  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY undef $rsi43  ; CHECK-NEXT:   [[INC64r:%[0-9]+]]:gr64 = INC64r [[COPY]], implicit-def $eflags44  ; CHECK-NEXT:   PUSH64r undef $rcx, implicit-def $rsp, implicit $rsp45  ; CHECK-NEXT:   $rcx = POP64r implicit-def $rsp, implicit $rsp46  ; CHECK-NEXT:   JMP_1 %bb.147  ; CHECK-NEXT: {{  $}}48  ; CHECK-NEXT: bb.1:49  ; CHECK-NEXT:   liveins: $eflags50  ; CHECK-NEXT: {{  $}}51  ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r [[INC64r]], 5, $noreg, 12, $noreg52  ; CHECK-NEXT:   $al = SETCCr 4, implicit $eflags53  bb.0:54    %0:gr64 = COPY undef $rsi55    %1:gr64 = INC64r %0, implicit-def $eflags56    PUSH64r undef $rcx, implicit-def $rsp, implicit $rsp57    $rcx = POP64r implicit-def $rsp, implicit $rsp58    JMP_1 %bb.159 60  bb.1:61    ; TEST should be removed.62    TEST64rr %1, %1, implicit-def $eflags63    %2:gr64 = LEA64r %1, 5, $noreg, 12, $noreg64    $al = SETCCr 4, implicit $eflags65...66---67name: opt_multiple_blocks_noopt_068body: |69  ; CHECK-LABEL: name: opt_multiple_blocks_noopt_070  ; CHECK: bb.0:71  ; CHECK-NEXT:   successors: %bb.1(0x80000000)72  ; CHECK-NEXT: {{  $}}73  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY undef $rsi74  ; CHECK-NEXT:   [[INC64r:%[0-9]+]]:gr64 = INC64r [[COPY]], implicit-def $eflags75  ; CHECK-NEXT:   JMP_1 %bb.176  ; CHECK-NEXT: {{  $}}77  ; CHECK-NEXT: bb.1:78  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)79  ; CHECK-NEXT: {{  $}}80  ; CHECK-NEXT:   TEST64rr [[INC64r]], [[INC64r]], implicit-def $eflags81  ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r [[INC64r]], 5, $noreg, 12, $noreg82  ; CHECK-NEXT:   $al = SETCCr 4, implicit $eflags83  ; CHECK-NEXT:   JCC_1 %bb.1, 2, implicit $eflags84  ; CHECK-NEXT: {{  $}}85  ; CHECK-NEXT: bb.2:86  bb.0:87    %0:gr64 = COPY undef $rsi88    %1:gr64 = INC64r %0, implicit-def $eflags89    JMP_1 %bb.190 91  bb.1:92    ; The TEST64rr should not be removed, since there are multiple preds.93    TEST64rr %1, %1, implicit-def $eflags94    %2:gr64 = LEA64r %1, 5, $noreg, 12, $noreg95    $al = SETCCr 4, implicit $eflags96    JCC_1 %bb.1, 2, implicit $eflags97 98  bb.2:99...100---101name: opt_multiple_blocks_noopt_1102body: |103  ; CHECK-LABEL: name: opt_multiple_blocks_noopt_1104  ; CHECK: bb.0:105  ; CHECK-NEXT:   successors: %bb.1(0x80000000)106  ; CHECK-NEXT: {{  $}}107  ; CHECK-NEXT:   JMP_1 %bb.1108  ; CHECK-NEXT: {{  $}}109  ; CHECK-NEXT: bb.1:110  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)111  ; CHECK-NEXT: {{  $}}112  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY undef $rsi113  ; CHECK-NEXT:   TEST64rr [[COPY]], [[COPY]], implicit-def $eflags114  ; CHECK-NEXT:   JCC_1 %bb.1, 2, implicit $eflags115  ; CHECK-NEXT: {{  $}}116  ; CHECK-NEXT: bb.2:117  ; CHECK-NEXT:   [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def $eflags118  ; CHECK-NEXT:   TEST64rr [[COPY]], [[COPY]], implicit-def $eflags119  ; CHECK-NEXT:   $al = SETCCr 4, implicit $eflags120  bb.0:121    JMP_1 %bb.1122 123  bb.1:124    %0:gr64 = COPY undef $rsi125    TEST64rr %0, %0, implicit-def $eflags126    JCC_1 %bb.1, 2, implicit $eflags127 128  bb.2:129    ; We should not move MOV32r0 up into the loop (that would be correct but130    ; slow).131    %1:gr32 = MOV32r0 implicit-def $eflags132    ; TEST should not be removed because of MOV32r0.133    TEST64rr %0, %0, implicit-def $eflags134    $al = SETCCr 4, implicit $eflags135...136---137name: opt_zerocmp_user_0138body: |139  bb.0:140    ; CHECK-LABEL: name: opt_zerocmp_user_0141    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi142    ; CHECK-NEXT: [[NEG32r:%[0-9]+]]:gr32 = NEG32r [[COPY]], implicit-def $eflags143    ; CHECK-NEXT: $al = SETCCr 3, implicit $eflags144    %0:gr32 = COPY $esi145    %1:gr32 = NEG32r %0, implicit-def dead $eflags146    ; TEST should be removed.147    TEST32rr %0, %0, implicit-def $eflags148    $al = SETCCr 4, implicit $eflags149...150---151name: opt_redundant_flags_0152body: |153  bb.0:154    ; CHECK-LABEL: name: opt_redundant_flags_0155    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi156    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi157    ; CHECK-NEXT: [[SUB32rr:%[0-9]+]]:gr32 = SUB32rr [[COPY]], [[COPY1]], implicit-def $eflags158    ; CHECK-NEXT: $eax = COPY [[SUB32rr]]159    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags160    %0:gr32 = COPY $esi161    %1:gr32 = COPY $edi162    %2:gr32 = SUB32rr %0, %1, implicit-def dead $eflags163    $eax = COPY %2164    ; CMP should be removed.165    CMP32rr %0, %1, implicit-def $eflags166    $bl = SETCCr 2, implicit $eflags167...168---169name: opt_redundant_flags_1170body: |171  bb.0:172    ; CHECK-LABEL: name: opt_redundant_flags_1173    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi174    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi175    ; CHECK-NEXT: [[SUB32rr:%[0-9]+]]:gr32 = SUB32rr [[COPY]], [[COPY1]], implicit-def $eflags176    ; CHECK-NEXT: $eax = COPY [[SUB32rr]]177    ; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags178    %0:gr32 = COPY $esi179    %1:gr32 = COPY $edi180    %2:gr32 = SUB32rr %0, %1, implicit-def dead $eflags181    $eax = COPY %2182    ; CMP should be removed.183    CMP32rr %1, %0, implicit-def $eflags184    $bl = SETCCr 3, implicit $eflags185...186---187name: opt_redundant_flags_2188body: |189  bb.0:190    ; CHECK-LABEL: name: opt_redundant_flags_2191    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi192    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi193    ; CHECK-NEXT: [[SUB32rr:%[0-9]+]]:gr32 = SUB32rr [[COPY]], [[COPY1]], implicit-def $eflags194    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags195    ; CHECK-NEXT: $eax = COPY [[SUB32rr]]196    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags197    %0:gr32 = COPY $esi198    %1:gr32 = COPY $edi199    %2:gr32 = SUB32rr %0, %1, implicit-def $eflags200    ; an extra eflags reader shouldn't stop optimization.201    $cl = SETCCr 2, implicit $eflags202    $eax = COPY %2203    CMP32rr %0, %1, implicit-def $eflags204    $bl = SETCCr 2, implicit $eflags205...206---207name: opt_redundant_flags_cmp_cmp208body: |209  bb.0:210    ; CHECK-LABEL: name: opt_redundant_flags_cmp_cmp211    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi212    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi213    ; CHECK-NEXT: CMP32rr [[COPY]], [[COPY1]], implicit-def $eflags214    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags215    ; CHECK-NEXT: $bl = SETCCr 7, implicit $eflags216    %0:gr32 = COPY $esi217    %1:gr32 = COPY $edi218    CMP32rr %0, %1, implicit-def $eflags219    $cl = SETCCr 2, implicit $eflags220    ; 2nd CMP should be removed.221    CMP32rr %1, %0, implicit-def $eflags222    $bl = SETCCr 2, implicit $eflags223...224---225name: opt_redundant_flags_cmp_cmp_2226body: |227  bb.0:228    ; CHECK-LABEL: name: opt_redundant_flags_cmp_cmp_2229    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi230    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi231    ; CHECK-NEXT: CMP64ri32 [[COPY]], 15, implicit-def $eflags232    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags233    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags234    %0:gr64 = COPY $rsi235    %1:gr64 = COPY $rdi236    CMP64ri32 %0, 15, implicit-def $eflags237    $cl = SETCCr 2, implicit $eflags238    ; 2nd CMP should be removed.239    CMP64ri32 %0, 15, implicit-def $eflags240    $bl = SETCCr 2, implicit $eflags241...242---243name: opt_redundant_flags_test_test244body: |245  bb.0:246    ; CHECK-LABEL: name: opt_redundant_flags_test_test247    ; CHECK: [[COPY:%[0-9]+]]:gr16 = COPY $ax248    ; CHECK-NEXT: TEST16rr [[COPY]], [[COPY]], implicit-def $eflags249    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags250    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags251    %0:gr16 = COPY $ax252    TEST16rr %0, %0, implicit-def $eflags253    $cl = SETCCr 2, implicit $eflags254    ; 2nd CMP should be removed.255    TEST16rr %0, %0, implicit-def $eflags256    $bl = SETCCr 2, implicit $eflags257...258---259name: opt_redundant_flags_cmp_sub260body: |261  bb.0:262    ; CHECK-LABEL: name: opt_redundant_flags_cmp_sub263    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi264    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi265    ; CHECK-NEXT: CMP32rr [[COPY]], [[COPY1]], implicit-def $eflags266    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags267    ; CHECK-NEXT: $bl = SETCCr 7, implicit $eflags268    %0:gr32 = COPY $esi269    %1:gr32 = COPY $edi270    CMP32rr %0, %1, implicit-def $eflags271    $cl = SETCCr 2, implicit $eflags272    ; SUB should be removed.273    dead %2:gr32 = SUB32rr %1, %0, implicit-def $eflags274    $bl = SETCCr 2, implicit $eflags275...276---277name: opt_redundant_flags_cmp_sub_2278body: |279  bb.0:280    ; CHECK-LABEL: name: opt_redundant_flags_cmp_sub_2281    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi282    ; CHECK-NEXT: CMP32ri [[COPY]], -12345, implicit-def $eflags283    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags284    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags285    %0:gr32 = COPY $esi286    CMP32ri %0, -12345, implicit-def $eflags287    $cl = SETCCr 2, implicit $eflags288    ; SUB should be removed289    dead %2:gr32 = SUB32ri %0, -12345, implicit-def $eflags290    $bl = SETCCr 2, implicit $eflags291...292---293name: opt_redundant_flags_cmp_sub_noopt294body: |295  bb.0:296    ; CHECK-LABEL: name: opt_redundant_flags_cmp_sub_noopt297    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi298    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi299    ; CHECK-NEXT: CMP32rr [[COPY]], [[COPY1]], implicit-def $eflags300    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags301    ; CHECK-NEXT: [[SUB32rr:%[0-9]+]]:gr32 = SUB32rr [[COPY]], [[COPY1]], implicit-def $eflags302    ; CHECK-NEXT: $rdx = COPY [[SUB32rr]]303    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags304    %0:gr32 = COPY $esi305    %1:gr32 = COPY $edi306    CMP32rr %0, %1, implicit-def $eflags307    $cl = SETCCr 2, implicit $eflags308    ; cannot optimize the SUB because the result value is used.309    %2:gr32 = SUB32rr %0, %1, implicit-def $eflags310    $rdx = COPY %2311    $bl = SETCCr 2, implicit $eflags312...313---314name: opt_redundant_flags_cmp_test315body: |316  bb.0:317    ; CHECK-LABEL: name: opt_redundant_flags_cmp_test318    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi319    ; CHECK-NEXT: CMP32ri [[COPY]], 0, implicit-def $eflags320    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags321    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags322    %0:gr32 = COPY $esi323    CMP32ri %0, 0, implicit-def $eflags324    $cl = SETCCr 2, implicit $eflags325    ; TEST should be removed326    TEST32rr %0, %0, implicit-def $eflags327    $bl = SETCCr 2, implicit $eflags328...329---330name: opt_redundant_flags_test_cmp331body: |332  bb.0:333    ; CHECK-LABEL: name: opt_redundant_flags_test_cmp334    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi335    ; CHECK-NEXT: TEST32rr [[COPY]], [[COPY]], implicit-def $eflags336    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags337    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags338    %0:gr32 = COPY $esi339    TEST32rr %0, %0, implicit-def $eflags340    $cl = SETCCr 2, implicit $eflags341    ; TEST should be removed342    CMP32ri %0, 0, implicit-def $eflags343    $bl = SETCCr 2, implicit $eflags344...345---346name: opt_redundant_flags_cmp_addr347stack:348  - { id: 0, size: 4, alignment: 4 }349body: |350  bb.0:351    ; CHECK-LABEL: name: opt_redundant_flags_cmp_addr352    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi353    ; CHECK-NEXT: CMP64ri32 [[COPY]], @opt_redundant_flags_cmp_addr + 4, implicit-def $eflags354    ; CHECK-NEXT: $cl = SETCCr 7, implicit $eflags355    ; CHECK-NEXT: $cl = SETCCr 3, implicit $eflags356    %0:gr64 = COPY $rsi357    CMP64ri32 %0, @opt_redundant_flags_cmp_addr + 4, implicit-def $eflags358    $cl = SETCCr 7, implicit $eflags359    ; CMP should be removed360    CMP64ri32 %0, @opt_redundant_flags_cmp_addr + 4, implicit-def $eflags361    $cl = SETCCr 3, implicit $eflags362...363---364name: opt_redundant_flags_cmp_addr_noopt365stack:366  - { id: 0, size: 4, alignment: 4 }367body: |368  bb.0:369    ; CHECK-LABEL: name: opt_redundant_flags_cmp_addr_noopt370    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi371    ; CHECK-NEXT: CMP64ri32 [[COPY]], @opt_redundant_flags_cmp_addr_noopt + 24, implicit-def $eflags372    ; CHECK-NEXT: $cl = SETCCr 7, implicit $eflags373    ; CHECK-NEXT: CMP64ri32 [[COPY]], 24, implicit-def $eflags374    ; CHECK-NEXT: $cl = SETCCr 3, implicit $eflags375    %0:gr64 = COPY $rsi376    CMP64ri32 %0, @opt_redundant_flags_cmp_addr_noopt + 24, implicit-def $eflags377    $cl = SETCCr 7, implicit $eflags378    ; CMP should not be removed379    CMP64ri32 %0, 24, implicit-def $eflags380    $cl = SETCCr 3, implicit $eflags381...382---383name: opt_redundant_flags_adjusted_imm_0384body: |385  bb.0:386    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_0387    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi388    ; CHECK-NEXT: CMP64ri32 [[COPY]], 1, implicit-def $eflags389    ; CHECK-NEXT: $cl = SETCCr 4, implicit $eflags390    ; CHECK-NEXT: $bl = SETCCr 15, implicit $eflags391    ; CHECK-NEXT: $bl = SETCCr 7, implicit $eflags392    ; CHECK-NEXT: $bl = SETCCr 14, implicit $eflags393    ; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags394    %0:gr64 = COPY $rsi395    ; CMP+SETCC   %0 == 1396    CMP64ri32 %0, 1, implicit-def $eflags397    $cl = SETCCr 4, implicit $eflags398    ; CMP+SETCC   %0 >= 2; CMP can be removed.399    CMP64ri32 %0, 2, implicit-def $eflags400    ; %0 >=s 2  -->  %0 >s 1401    $bl = SETCCr 13, implicit $eflags402    ; %0 >=u 2  -->  %0 >u 1403    $bl = SETCCr 3, implicit $eflags404    ; %0 <s 2  -->  %0 <=s 1405    $bl = SETCCr 12, implicit $eflags406    ; %0 <u 2  -->  %0 <=u 1407    $bl = SETCCr 2, implicit $eflags408...409---410name: opt_redundant_flags_adjusted_imm_1411body: |412  bb.0:413    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_1414    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi415    ; CHECK-NEXT: CMP64ri32 [[COPY]], 42, implicit-def $eflags416    ; CHECK-NEXT: $cl = SETCCr 5, implicit $eflags417    ; CHECK-NEXT: $bl = SETCCr 13, implicit $eflags418    ; CHECK-NEXT: $bl = SETCCr 3, implicit $eflags419    ; CHECK-NEXT: $bl = SETCCr 12, implicit $eflags420    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags421    %0:gr64 = COPY $rsi422    ; CMP+SETCC   %0 != 42423    CMP64ri32 %0, 42, implicit-def $eflags424    $cl = SETCCr 5, implicit $eflags425    ; CMP+SETCC   %0 >= 2; CMP can be removed.426    CMP64ri32 %0, 41, implicit-def $eflags427    ; %0 >s 41  -->  %0 >=s 42428    $bl = SETCCr 15, implicit $eflags429    ; %0 >u 41  -->  %0 >=u 42430    $bl = SETCCr 7, implicit $eflags431    ; %0 <=s 41  -->  %0 <s 42432    $bl = SETCCr 14, implicit $eflags433    ; %0 <=u 41  -->  %0 <u 42434    $bl = SETCCr 6, implicit $eflags435...436---437name: opt_redundant_flags_adjusted_imm_test_cmp438body: |439  bb.0:440    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_test_cmp441    ; CHECK: [[COPY:%[0-9]+]]:gr8 = COPY $bl442    ; CHECK-NEXT: TEST8rr [[COPY]], [[COPY]], implicit-def $eflags443    ; CHECK-NEXT: $cl = SETCCr 14, implicit $eflags444    ; CHECK-NEXT: $cl = SETCCr 7, implicit $eflags445    ; CHECK-NEXT: $cl = SETCCr 12, implicit $eflags446    %0:gr8 = COPY $bl447    TEST8rr %0, %0, implicit-def $eflags448    ; SET %0 <=s 0449    $cl = SETCCr 14, implicit $eflags450    ; CMP should be removed (%0 >=u 1)451    CMP8ri %0, 1, implicit-def $eflags452    $cl = SETCCr 3, implicit $eflags453 454    ; CMP should be removed (%0 <=s -1)455    CMP8ri %0, -1, implicit-def $eflags456    $cl = SETCCr 14, implicit $eflags457...458---459name: opt_redundant_flags_adjusted_imm_cmp_test460body: |461  bb.0:462    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_cmp_test463    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi464    ; CHECK-NEXT: CMP64ri32 [[COPY]], 1, implicit-def $eflags465    ; CHECK-NEXT: $cl = SETCCr 13, implicit $eflags466    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $edi467    ; CHECK-NEXT: CMP64ri32 [[COPY1]], -1, implicit-def $eflags468    ; CHECK-NEXT: $cl = SETCCr 14, implicit $eflags469    %0:gr64 = COPY $rsi470    CMP64ri32 %0, 1, implicit-def $eflags471    ; TEST should be removed472    TEST64rr %0, %0, implicit-def $eflags473    $cl = SETCCr 15, implicit $eflags474 475    %1:gr64 = COPY $edi476    CMP64ri32 %1, -1, implicit-def $eflags477    ; TEST should be removed478    TEST64rr %1, %1, implicit-def $eflags479    $cl = SETCCr 12, implicit $eflags480...481---482name: opt_redundant_flags_adjusted_imm_noopt_0483body: |484  bb.0:485    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_noopt_0486    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi487    ; CHECK-NEXT: CMP64ri32 [[COPY]], 42, implicit-def $eflags488    ; CHECK-NEXT: $cl = SETCCr 4, implicit $eflags489    ; CHECK-NEXT: CMP64ri32 [[COPY]], 41, implicit-def $eflags490    ; CHECK-NEXT: $bl = SETCCr 4, implicit $eflags491    %0:gr64 = COPY $rsi492    ; CMP+SETCC   %0 <s 1493    CMP64ri32 %0, 42, implicit-def $eflags494    $cl = SETCCr 4, implicit $eflags495    ; CMP should not be removed.496    CMP64ri32 %0, 41, implicit-def $eflags497    ; %0 == 41498    $bl = SETCCr 4, implicit $eflags499...500---501name: opt_redundant_flags_adjusted_imm_noopt_1502body: |503  bb.0:504    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_noopt_1505    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi506    ; CHECK-NEXT: CMP32ri [[COPY]], 2147483647, implicit-def $eflags507    ; CHECK-NEXT: CMP32ri [[COPY]], -2147483648, implicit-def $eflags508    ; CHECK-NEXT: $bl = SETCCr 12, implicit $eflags509    ; CHECK-NEXT: CMP32ri [[COPY]], 4294967295, implicit-def $eflags510    ; CHECK-NEXT: CMP32ri [[COPY]], -2147483648, implicit-def $eflags511    ; CHECK-NEXT: $bl = SETCCr 12, implicit $eflags512    ; CHECK-NEXT: CMP32ri [[COPY]], 2147483647, implicit-def $eflags513    ; CHECK-NEXT: CMP32ri [[COPY]], -2147483648, implicit-def $eflags514    ; CHECK-NEXT: $bl = SETCCr 13, implicit $eflags515    ; CHECK-NEXT: CMP32ri [[COPY]], 4294967295, implicit-def $eflags516    ; CHECK-NEXT: CMP32ri [[COPY]], 0, implicit-def $eflags517    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags518    ; CHECK-NEXT: CMP32ri [[COPY]], 4294967295, implicit-def $eflags519    ; CHECK-NEXT: CMP32ri [[COPY]], 0, implicit-def $eflags520    ; CHECK-NEXT: $bl = SETCCr 3, implicit $eflags521    %0:gr32 = COPY $esi522    ; CMP+SETCC   %0 == INT32_MAX523    CMP32ri %0, 2147483647, implicit-def $eflags524    ; CMP should not be removed.525    CMP32ri %0, -2147483648, implicit-def $eflags526    ; %0 <s INT32_MIN527    $bl = SETCCr 12, implicit $eflags528 529    CMP32ri %0, 4294967295, implicit-def $eflags530    ; CMP should not be removed.531    CMP32ri %0, -2147483648, implicit-def $eflags532    $bl = SETCCr 12, implicit $eflags533 534    CMP32ri %0, 2147483647, implicit-def $eflags535    ; CMP should not be removed.536    CMP32ri %0, -2147483648, implicit-def $eflags537    $bl = SETCCr 13, implicit $eflags538 539    CMP32ri %0, 4294967295, implicit-def $eflags540    ; should not be removed541    CMP32ri %0, 0, implicit-def $eflags542    $bl = SETCCr 2, implicit $eflags543 544    CMP32ri %0, 4294967295, implicit-def $eflags545    ; should not be removed546    CMP32ri %0, 0, implicit-def $eflags547    $bl = SETCCr 3, implicit $eflags548...549---550name: opt_redundant_flags_adjusted_imm_noopt_2551body: |552  bb.0:553    ; CHECK-LABEL: name: opt_redundant_flags_adjusted_imm_noopt_2554    ; CHECK: [[COPY:%[0-9]+]]:gr16 = COPY $cx555    ; CHECK-NEXT: CMP16ri [[COPY]], -32768, implicit-def $eflags556    ; CHECK-NEXT: CMP16ri [[COPY]], 32767, implicit-def $eflags557    ; CHECK-NEXT: $bl = SETCCr 15, implicit $eflags558    ; CHECK-NEXT: CMP16ri [[COPY]], 65535, implicit-def $eflags559    ; CHECK-NEXT: CMP16ri [[COPY]], 32767, implicit-def $eflags560    ; CHECK-NEXT: $bl = SETCCr 15, implicit $eflags561    ; CHECK-NEXT: CMP16ri [[COPY]], -32768, implicit-def $eflags562    ; CHECK-NEXT: CMP16ri [[COPY]], 32767, implicit-def $eflags563    ; CHECK-NEXT: $bl = SETCCr 14, implicit $eflags564    ; CHECK-NEXT: CMP16ri [[COPY]], 0, implicit-def $eflags565    ; CHECK-NEXT: CMP16ri [[COPY]], 65535, implicit-def $eflags566    ; CHECK-NEXT: $bl = SETCCr 4, implicit $eflags567    ; CHECK-NEXT: CMP16ri [[COPY]], 0, implicit-def $eflags568    ; CHECK-NEXT: CMP16ri [[COPY]], 65535, implicit-def $eflags569    ; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags570    %0:gr16 = COPY $cx571    ; CMP+SETCC   %0 == INT16_MIN572    CMP16ri %0, -32768, implicit-def $eflags573    ; CMP should not be removed.574    CMP16ri %0, 32767, implicit-def $eflags575    ; %0 >s INT16_MAX576    $bl = SETCCr 15, implicit $eflags577 578    CMP16ri %0, 65535, implicit-def $eflags579    ; CMP should not be removed.580    CMP16ri %0, 32767, implicit-def $eflags581    $bl = SETCCr 15, implicit $eflags582 583    CMP16ri %0, -32768, implicit-def $eflags584    ; CMP should not be removed.585    CMP16ri %0, 32767, implicit-def $eflags586    $bl = SETCCr 14, implicit $eflags587 588    CMP16ri %0, 0, implicit-def $eflags589    ; should not be removed590    CMP16ri %0, 65535, implicit-def $eflags591    $bl = SETCCr 4, implicit $eflags592 593    CMP16ri %0, 0, implicit-def $eflags594    ; should not be removed595    CMP16ri %0, 65535, implicit-def $eflags596    $bl = SETCCr 6, implicit $eflags597...598---599name: opt_adjusted_imm_multiple_blocks600body: |601  ; CHECK-LABEL: name: opt_adjusted_imm_multiple_blocks602  ; CHECK: bb.0:603  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.3(0x40000000)604  ; CHECK-NEXT: {{  $}}605  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $eax606  ; CHECK-NEXT:   CMP32ri [[COPY]], 20, implicit-def $eflags607  ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit $eflags608  ; CHECK-NEXT:   JMP_1 %bb.3609  ; CHECK-NEXT: {{  $}}610  ; CHECK-NEXT: bb.1:611  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)612  ; CHECK-NEXT:   liveins: $eflags613  ; CHECK-NEXT: {{  $}}614  ; CHECK-NEXT:   JCC_1 %bb.2, 15, implicit $eflags615  ; CHECK-NEXT:   JMP_1 %bb.3616  ; CHECK-NEXT: {{  $}}617  ; CHECK-NEXT: bb.2:618  ; CHECK-NEXT:   successors: %bb.3(0x80000000)619  ; CHECK-NEXT: {{  $}}620  ; CHECK-NEXT:   JMP_1 %bb.3621  ; CHECK-NEXT: {{  $}}622  ; CHECK-NEXT: bb.3:623  ; CHECK-NEXT:   RET 0624  bb.0:625    %0:gr32 = COPY $eax626    CMP32ri %0, 20, implicit-def $eflags627    JCC_1 %bb.1, 4, implicit $eflags628    JMP_1 %bb.3629 630  bb.1:631    ; CMP can be removed when adjusting the JCC.632    CMP32ri %0, 21, implicit-def $eflags633    JCC_1 %bb.2, 13, implicit $eflags634    JMP_1 %bb.3635 636  bb.2:637    JMP_1 %bb.3638 639  bb.3:640    RET 0641...642---643name: opt_adjusted_imm_multiple_blocks_noopt644body: |645  ; CHECK-LABEL: name: opt_adjusted_imm_multiple_blocks_noopt646  ; CHECK: bb.0:647  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.3(0x40000000)648  ; CHECK-NEXT: {{  $}}649  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr32 = COPY $eax650  ; CHECK-NEXT:   CMP32ri [[COPY]], 20, implicit-def $eflags651  ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit $eflags652  ; CHECK-NEXT:   JMP_1 %bb.3653  ; CHECK-NEXT: {{  $}}654  ; CHECK-NEXT: bb.1:655  ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.3(0x40000000)656  ; CHECK-NEXT: {{  $}}657  ; CHECK-NEXT:   CMP32ri [[COPY]], 21, implicit-def $eflags658  ; CHECK-NEXT:   JCC_1 %bb.2, 13, implicit $eflags659  ; CHECK-NEXT:   JMP_1 %bb.3660  ; CHECK-NEXT: {{  $}}661  ; CHECK-NEXT: bb.2:662  ; CHECK-NEXT:   successors: %bb.3(0x80000000)663  ; CHECK-NEXT:   liveins: $eflags664  ; CHECK-NEXT: {{  $}}665  ; CHECK-NEXT:   $al = SETCCr 4, implicit $eflags666  ; CHECK-NEXT: {{  $}}667  ; CHECK-NEXT: bb.3:668  ; CHECK-NEXT:   RET 0669  bb.0:670    %0:gr32 = COPY $eax671    CMP32ri %0, 20, implicit-def $eflags672    JCC_1 %bb.1, 4, implicit $eflags673    JMP_1 %bb.3674 675  bb.1:676    ; The following CMP should not be optimized because $eflags is live-out677    CMP32ri %0, 21, implicit-def $eflags678    JCC_1 %bb.2, 13, implicit $eflags679    JMP_1 %bb.3680 681  bb.2:682    liveins: $eflags683    $al = SETCCr 4, implicit $eflags684 685  bb.3:686    RET 0687...688---689name: opt_shift_cmp_zero690body: |691  bb.0:692    ; CHECK-LABEL: name: opt_shift_cmp_zero693    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi694    ; CHECK-NEXT: [[SHL64ri:%[0-9]+]]:gr64 = SHL64ri [[COPY]], 7, implicit-def $eflags695    ; CHECK-NEXT: $al = SETCCr 4, implicit $eflags696    %0:gr64 = COPY $rsi697    %1:gr64 = SHL64ri %0, 7, implicit-def dead $eflags698    ; TEST should be removed.699    TEST64rr %1, %1, implicit-def $eflags700    $al = SETCCr 4, implicit $eflags701...702---703name: noopt_shift_cmp_zero704body: |705  bb.0:706    ; CHECK-LABEL: name: noopt_shift_cmp_zero707    ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi708    ; CHECK-NEXT: [[SHL64ri:%[0-9]+]]:gr64 = SHL64ri [[COPY]], 9, implicit-def dead $eflags709    ; CHECK-NEXT: TEST64rr [[SHL64ri]], [[SHL64ri]], implicit-def $eflags710    ; CHECK-NEXT: $al = SETCCr 14, implicit $eflags711    %0:gr64 = COPY $rsi712    %1:gr64 = SHL64ri %0, 9, implicit-def dead $eflags713    ; TEST cannot be removed if a user relies on the OF flag.714    TEST64rr %1, %1, implicit-def $eflags715    $al = SETCCr 14, implicit $eflags716...717---718name: noopt_shift_cmp_zero_multiblock719body: |720  ; CHECK-LABEL: name: noopt_shift_cmp_zero_multiblock721  ; CHECK: bb.0:722  ; CHECK-NEXT:   successors: %bb.1(0x80000000)723  ; CHECK-NEXT: {{  $}}724  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY $rsi725  ; CHECK-NEXT:   [[SHL64ri:%[0-9]+]]:gr64 = SHL64ri [[COPY]], 9, implicit-def dead $eflags726  ; CHECK-NEXT:   TEST64rr [[SHL64ri]], [[SHL64ri]], implicit-def $eflags727  ; CHECK-NEXT:   JMP_1 %bb.1728  ; CHECK-NEXT: {{  $}}729  ; CHECK-NEXT: bb.1:730  ; CHECK-NEXT:   liveins: $eflags731  ; CHECK-NEXT: {{  $}}732  ; CHECK-NEXT:   $al = SETCCr 14, implicit $eflags733  bb.0:734    %0:gr64 = COPY $rsi735    %1:gr64 = SHL64ri %0, 9, implicit-def dead $eflags736    ; TEST cannot be removed if a user relies on the OF flag.737    TEST64rr %1, %1, implicit-def $eflags738    JMP_1 %bb.1739 740  bb.1:741    liveins: $eflags742    $al = SETCCr 14, implicit $eflags743...744