1# RUN: llc -march=hexagon -run-pass hexagon-bit-simplify -o - %s | FileCheck %s
2
3--- |
4  @g0 = global i32 0, align 4
5
6  define i32 @f0() { ret i32 0 }
7  define i32 @f1() { ret i32 0 }
8  define i32 @f2() { ret i32 0 }
9  define i32 @f3() { ret i32 0 }
10  define i32 @f4() { ret i32 0 }
11  define i32 @f5() { ret i32 0 }
12  define i32 @f6() { ret i32 0 }
13  define i32 @f7() { ret i32 0 }
14...
15
16# Case 0: is-zero with known zero register
17# CHECK-LABEL: name: f0
18# CHECK: %[[R00:[0-9]+]]:intregs = A2_tfrsi 1
19# CHECK: $r0 = COPY %[[R00]]
20# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
21
22name: f0
23tracksRegLiveness: true
24body: |
25  bb.0:
26    %0:intregs = A2_tfrsi 0
27    %2:intregs = A4_rcmpeqi killed %0, 0
28    $r0 = COPY %2
29    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
30...
31
32# Case 1: is-zero with known non-zero register
33# CHECK-LABEL: name: f1
34# CHECK: %[[R10:[0-9]+]]:intregs = A2_tfrsi 0
35# CHECK: $r0 = COPY %[[R10]]
36# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
37
38name: f1
39tracksRegLiveness: true
40body: |
41  bb.0:
42    %0:intregs = A2_tfrsi 128
43    %2:intregs = A4_rcmpeqi killed %0, 0
44    $r0 = COPY %2
45    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
46...
47
48# Case 2: is-not-zero with known zero register
49# CHECK-LABEL: name: f2
50# CHECK: %[[R20:[0-9]+]]:intregs = A2_tfrsi 0
51# CHECK: $r0 = COPY %[[R20]]
52# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
53
54name: f2
55tracksRegLiveness: true
56body: |
57  bb.0:
58    %0:intregs = A2_tfrsi 0
59    %2:intregs = A4_rcmpneqi killed %0, 0
60    $r0 = COPY %2
61    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
62...
63
64# Case 3: is-not-zero with known non-zero register
65# CHECK-LABEL: name: f3
66# CHECK: %[[R30:[0-9]+]]:intregs = A2_tfrsi 1
67# CHECK: $r0 = COPY %[[R30]]
68# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
69
70name: f3
71tracksRegLiveness: true
72body: |
73  bb.0:
74    %0:intregs = A2_tfrsi 1024
75    %2:intregs = A4_rcmpneqi killed %0, 0
76    $r0 = COPY %2
77    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
78...
79
80
81# Case 4: is-zero with mux(p, 1, 0)
82# CHECK-LABEL: name: f4
83# CHECK: %[[R40:[0-9]+]]:predregs = COPY $p0
84# CHECK: %[[R41:[0-9]+]]:intregs = C2_muxii %[[R40]], 0, 1
85# CHECK: $r0 = COPY %[[R41]]
86# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
87
88name: f4
89tracksRegLiveness: true
90body: |
91  bb.0:
92    liveins: $p0
93    %0:predregs = COPY $p0
94    %1:intregs = C2_muxii %0, 1, 0
95    %2:intregs = A4_rcmpeqi killed %1, 0
96    $r0 = COPY %2
97    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
98...
99
100# Case 5: is-zero with mux(p, 0, 1)
101# CHECK-LABEL: name: f5
102# CHECK: %[[R50:[0-9]+]]:predregs = COPY $p0
103# CHECK: %[[R51:[0-9]+]]:intregs = C2_muxii %[[R50]], 1, 0
104# CHECK: $r0 = COPY %[[R51]]
105# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
106
107name: f5
108tracksRegLiveness: true
109body: |
110  bb.0:
111    liveins: $p0
112    %0:predregs = COPY $p0
113    %1:intregs = C2_muxii %0, 0, 1
114    %2:intregs = A4_rcmpeqi killed %1, 0
115    $r0 = COPY %2
116    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
117...
118
119# Case 6: is-not-zero with mux(p, 1, 2)
120# CHECK-LABEL: name: f6
121# CHECK: %[[R60:[0-9]+]]:intregs = A2_tfrsi 1
122# CHECK: $r0 = COPY %[[R60]]
123# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
124
125name: f6
126tracksRegLiveness: true
127body: |
128  bb.0:
129    liveins: $p0
130    %0:predregs = COPY $p0
131    %1:intregs = C2_muxii %0, 1, 2
132    %2:intregs = A4_rcmpneqi killed %1, 0
133    $r0 = COPY %2
134    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
135...
136
137# Case 7: is-not-zero with mux(p, @g0, 2)
138# CHECK-LABEL: name: f7
139# CHECK: %[[R70:[0-9]+]]:intregs = A2_tfrsi 1
140# CHECK: $r0 = COPY %[[R70]]
141# CHECK: PS_jmpret $r31, implicit-def dead $pc, implicit $r0
142
143name: f7
144tracksRegLiveness: true
145body: |
146  bb.0:
147    liveins: $p0
148    %0:predregs = COPY $p0
149    %1:intregs = C2_muxii %0, @g0, 2
150    %2:intregs = A4_rcmpneqi killed %1, 0
151    $r0 = COPY %2
152    PS_jmpret $r31, implicit-def dead $pc, implicit $r0
153...
154
155