llvm/llvm/test/CodeGen/X86/apx/optimize-compare.mir

# 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
...