xref: /llvm-project/llvm/test/CodeGen/X86/apx/optimize-compare.mir (revision 71d64ed80f8b7556be6954b2c4d663c7d89f476d)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -o - %s -mtriple=x86_64-- -run-pass peephole-opt -mattr=+ndd | FileCheck %s
3
4---
5name: opt_redundant_flags_0
6body: |
7  bb.0:
8    ; CHECK-LABEL: name: opt_redundant_flags_0
9    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi
10    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi
11    ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
12    ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]]
13    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags
14    %0:gr32 = COPY $esi
15    %1:gr32 = COPY $edi
16    %2:gr32 = SUB32rr_ND %0, %1, implicit-def dead $eflags
17    $eax = COPY %2
18    ; CMP should be removed.
19    CMP32rr %0, %1, implicit-def $eflags
20    $bl = SETCCr 2, implicit $eflags
21...
22---
23name: opt_redundant_flags_1
24body: |
25  bb.0:
26    ; CHECK-LABEL: name: opt_redundant_flags_1
27    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi
28    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi
29    ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
30    ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]]
31    ; CHECK-NEXT: $bl = SETCCr 6, implicit $eflags
32    %0:gr32 = COPY $esi
33    %1:gr32 = COPY $edi
34    %2:gr32 = SUB32rr_ND %0, %1, implicit-def dead $eflags
35    $eax = COPY %2
36    ; CMP should be removed.
37    CMP32rr %1, %0, implicit-def $eflags
38    $bl = SETCCr 3, implicit $eflags
39...
40---
41name: opt_redundant_flags_2
42body: |
43  bb.0:
44    ; CHECK-LABEL: name: opt_redundant_flags_2
45    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi
46    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi
47    ; CHECK-NEXT: [[SUB32rr_ND:%[0-9]+]]:gr32 = SUB32rr_ND [[COPY]], [[COPY1]], implicit-def $eflags
48    ; CHECK-NEXT: $cl = SETCCr 2, implicit $eflags
49    ; CHECK-NEXT: $eax = COPY [[SUB32rr_ND]]
50    ; CHECK-NEXT: $bl = SETCCr 2, implicit $eflags
51    %0:gr32 = COPY $esi
52    %1:gr32 = COPY $edi
53    %2:gr32 = SUB32rr_ND %0, %1, implicit-def $eflags
54    ; an extra eflags reader shouldn't stop optimization.
55    $cl = SETCCr 2, implicit $eflags
56    $eax = COPY %2
57    CMP32rr %0, %1, implicit-def $eflags
58    $bl = SETCCr 2, implicit $eflags
59...
60---
61name: opt_zerocmp_user_0
62body: |
63  bb.0:
64    ; CHECK-LABEL: name: opt_zerocmp_user_0
65    ; CHECK: [[COPY:%[0-9]+]]:gr32 = COPY $esi
66    ; CHECK-NEXT: [[NEG32r_ND:%[0-9]+]]:gr32 = NEG32r_ND [[COPY]], implicit-def $eflags
67    ; CHECK-NEXT: $al = SETCCr 3, implicit $eflags
68    %0:gr32 = COPY $esi
69    %1:gr32 = NEG32r_ND %0, implicit-def dead $eflags
70    ; TEST should be removed.
71    TEST32rr %0, %0, implicit-def $eflags
72    $al = SETCCr 4, implicit $eflags
73...
74