xref: /llvm-project/llvm/test/CodeGen/PowerPC/opt-cmp-rec-postra.mir (revision 46d5d264fc66a017bbd0182b2b5fcc0f3f23d3be)
1# RUN: llc -mtriple=powerpc64le-linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s
2
3---
4name: test1
5# The cmp instr is optimized with the record form.
6tracksRegLiveness: true
7body:             |
8  bb.0.entry:
9    successors: %bb.1(0x30000000), %bb.2(0x50000000)
10    liveins: $x3, $x4
11    renamable $x3 = OR8 killed renamable $x3, killed renamable $x4
12    renamable $cr0 = CMPDI renamable $x3, 0, implicit killed $x3
13    ; CHECK-LABEL: name: test1
14    ; CHECK: renamable $x3 = OR8_rec killed renamable $x3, killed renamable $x4, implicit-def $cr0
15    ; CHECK-NOT: CMPDI
16    BCC 68, killed renamable $cr0, %bb.2
17
18  bb.1:
19    $x3 = LI8 102
20    BLR8 implicit $lr8, implicit $rm, implicit $x3
21
22  bb.2:
23    $x3 = LI8 116
24    BLR8 implicit $lr8, implicit $rm, implicit $x3
25...
26
27---
28name: test2
29# The imm of the comparison instr isn't 0.
30tracksRegLiveness: true
31body:             |
32  bb.0.entry:
33    successors: %bb.1(0x30000000), %bb.2(0x50000000)
34    liveins: $x3, $x4
35    renamable $x3 = OR8 killed renamable $x3, killed renamable $x4
36    renamable $cr0 = CMPDI renamable $x3, 2, implicit killed $x3
37    ; CHECK-LABEL: name: test2
38    ; CHECK: CMPDI
39    BCC 68, killed renamable $cr0, %bb.2
40
41  bb.1:
42    $x3 = LI8 102
43    BLR8 implicit $lr8, implicit $rm, implicit $x3
44
45  bb.2:
46    $x3 = LI8 116
47    BLR8 implicit $lr8, implicit $rm, implicit $x3
48...
49
50---
51name: test3
52# The comparison instr has a implicit def.
53tracksRegLiveness: true
54body:             |
55  bb.0.entry:
56    successors: %bb.1(0x30000000), %bb.2(0x50000000)
57    liveins: $x3, $x4
58    renamable $x3 = OR8 killed renamable $x3, killed renamable $x4
59    renamable $cr0 = CMPDI renamable $x3, 0, implicit-def $x3
60    ; CHECK-LABEL: name: test3
61    ; CHECK: CMPDI
62    BCC 68, killed renamable $cr0, %bb.2
63
64  bb.1:
65    $x3 = LI8 102
66    BLR8 implicit $lr8, implicit $rm, implicit $x3
67
68  bb.2:
69    $x3 = LI8 116
70    BLR8 implicit $lr8, implicit $rm, implicit $x3
71...
72
73---
74name: test4
75# There is another use for cr0 between OR8 instr and CMPWI instr.
76tracksRegLiveness: true
77body:             |
78  bb.0.entry:
79    successors: %bb.1(0x30000000), %bb.2(0x50000000)
80    liveins: $x3, $x4, $cr0
81    renamable $x3 = OR8 killed renamable $x3, killed renamable $x4
82    renamable $cr1 = MCRF killed $cr0, implicit $x3
83    renamable $cr0 = CMPDI renamable $x3, 0, implicit killed $x3, implicit $cr1
84    ; CHECK-LABEL: name: test4
85    ; CHECK: CMPDI
86    BCC 68, killed renamable $cr0, %bb.2
87
88  bb.1:
89    $x3 = LI8 102
90    BLR8 implicit $lr8, implicit $rm, implicit $x3
91
92  bb.2:
93    $x3 = LI8 116
94    BLR8 implicit $lr8, implicit $rm, implicit $x3
95...
96
97---
98name: test5
99# There is another def for cr0 between OR8 instr and CMPWI instr.
100tracksRegLiveness: true
101body:             |
102  bb.0.entry:
103    successors: %bb.1(0x30000000), %bb.2(0x50000000)
104    liveins: $x3, $x4
105    renamable $x3 = OR8 killed renamable $x3, renamable $x4
106    renamable $cr1 = CMPD renamable $x3, renamable $x4, implicit-def $cr0
107    renamable $cr0 = CMPDI renamable $x3, 0, implicit killed $x3, implicit $cr1
108    ; CHECK-LABEL: name: test5
109    ; CHECK: CMPDI
110    BCC 68, killed renamable $cr0, %bb.2
111
112  bb.1:
113    $x3 = LI8 102
114    BLR8 implicit $lr8, implicit $rm, implicit $x3
115
116  bb.2:
117    $x3 = LI8 116
118    BLR8 implicit $lr8, implicit $rm, implicit $x3
119...
120
121---
122name: test6
123# The SrcReg isn't CR0.
124tracksRegLiveness: true
125body:             |
126  bb.0.entry:
127    successors: %bb.1(0x30000000), %bb.2(0x50000000)
128    liveins: $x3, $x4
129    renamable $x3 = OR8 killed renamable $x3, killed renamable $x4
130    renamable $cr1 = CMPDI renamable $x3, 0, implicit killed $x3
131    ; CHECK-LABEL: name: test6
132    ; CHECK: CMPDI
133    BCC 68, killed renamable $cr1, %bb.2
134
135  bb.1:
136    $x3 = LI8 102
137    BLR8 implicit $lr8, implicit $rm, implicit $x3
138
139  bb.2:
140    $x3 = LI8 116
141    BLR8 implicit $lr8, implicit $rm, implicit $x3
142...
143