| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -o - %s -mtriple=x86_64-- -run-pass peephole-opt -mattr=+ndd | FileCheck %s |
| |
| --- |
| name: opt_redundant_flags_0 |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: opt_redundant_flags_0 |
| ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi |
| ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags |
| ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]] |
| ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags |
| %0:gr32 = COPY $esi |
| %1:gr32 = COPY $edi |
| %2:gr32 = SUB32rr_ND %0, %1, implicit-def dead $eflags |
| $eax = COPY %2 |
| ; CMP should be removed. |
| CMP32rr %0, %1, implicit-def $eflags |
| $bl = SETCCr 2, implicit $eflags |
| ... |
| --- |
| name: opt_redundant_flags_1 |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: opt_redundant_flags_1 |
| ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi |
| ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags |
| ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]] |
| ; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags |
| %0:gr32 = COPY $esi |
| %1:gr32 = COPY $edi |
| %2:gr32 = SUB32rr_ND %0, %1, implicit-def dead $eflags |
| $eax = COPY %2 |
| ; CMP should be removed. |
| CMP32rr %1, %0, implicit-def $eflags |
| $bl = SETCCr 3, implicit $eflags |
| ... |
| --- |
| name: opt_redundant_flags_2 |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: opt_redundant_flags_2 |
| ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi |
| ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags |
| ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags |
| ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]] |
| ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags |
| %0:gr32 = COPY $esi |
| %1:gr32 = COPY $edi |
| %2:gr32 = SUB32rr_ND %0, %1, implicit-def $eflags |
| ; an extra eflags reader shouldn't stop optimization. |
| $cl = SETCCr 2, implicit $eflags |
| $eax = COPY %2 |
| CMP32rr %0, %1, implicit-def $eflags |
| $bl = SETCCr 2, implicit $eflags |
| ... |
| --- |
| name: opt_zerocmp_user_0 |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: opt_zerocmp_user_0 |
| ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi |
| ; CHECK-NEXT: [[NEG32r_ND:%[0-9]+]]:gr32 = NEG32r_ND [[COPY]], implicit-def $eflags |
| ; CHECK-NEXT: $al = SETCCr 3, implicit $eflags |
| %0:gr32 = COPY $esi |
| %1:gr32 = NEG32r_ND %0, implicit-def dead $eflags |
| ; TEST should be removed. |
| TEST32rr %0, %0, implicit-def $eflags |
| $al = SETCCr 4, implicit $eflags |
| ... |