Skip to content

Commit 9eb6def

Browse files
committed
[GISel][CombinerHelper] Combine op(trunc(x), trunc(y)) -> trunc(op(x, y))
1 parent 1aca1d8 commit 9eb6def

File tree

10 files changed

+257
-306
lines changed

10 files changed

+257
-306
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -3147,8 +3147,10 @@ bool CombinerHelper::matchHoistLogicOpWithSameOpcodeHands(
31473147
return false;
31483148
case TargetOpcode::G_ANYEXT:
31493149
case TargetOpcode::G_SEXT:
3150-
case TargetOpcode::G_ZEXT: {
3150+
case TargetOpcode::G_ZEXT:
3151+
case TargetOpcode::G_TRUNC: {
31513152
// Match: logic (ext X), (ext Y) --> ext (logic X, Y)
3153+
// Match: logic (trunc X), (trunc Y) -> trunc (logic X, Y)
31523154
break;
31533155
}
31543156
case TargetOpcode::G_AND:

llvm/test/CodeGen/AArch64/GlobalISel/combine-op-trunc.mir

+29-53
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,8 @@ body: |
1414
; CHECK-NEXT: {{ $}}
1515
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
1616
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
17-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
18-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
19-
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[TRUNC1]]
20-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[AND]](s16)
21-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
17+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[COPY1]]
18+
; CHECK-NEXT: $w0 = COPY [[AND]](s32)
2219
%0:_(s32) = COPY $w0
2320
%1:_(s32) = COPY $w1
2421
%2:_(s16) = G_TRUNC %0
@@ -37,10 +34,9 @@ body: |
3734
; CHECK-NEXT: {{ $}}
3835
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
3936
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
40-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY]](<4 x s32>)
41-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY1]](<4 x s32>)
42-
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s16>) = G_AND [[TRUNC]], [[TRUNC1]]
43-
; CHECK-NEXT: $x0 = COPY [[AND]](<4 x s16>)
37+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[COPY]], [[COPY1]]
38+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[AND]](<4 x s32>)
39+
; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)
4440
%0:_(<4 x s32>) = COPY $q0
4541
%1:_(<4 x s32>) = COPY $q1
4642
%2:_(<4 x s16>) = G_TRUNC %0
@@ -60,11 +56,8 @@ body: |
6056
; CHECK-NEXT: {{ $}}
6157
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
6258
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
63-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
64-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
65-
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC]], [[TRUNC1]]
66-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
67-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
59+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[COPY1]]
60+
; CHECK-NEXT: $w0 = COPY [[OR]](s32)
6861
%0:_(s32) = COPY $w0
6962
%1:_(s32) = COPY $w1
7063
%2:_(s16) = G_TRUNC %0
@@ -83,10 +76,9 @@ body: |
8376
; CHECK-NEXT: {{ $}}
8477
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
8578
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
86-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY]](<4 x s32>)
87-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY1]](<4 x s32>)
88-
; CHECK-NEXT: [[OR:%[0-9]+]]:_(<4 x s16>) = G_OR [[TRUNC]], [[TRUNC1]]
89-
; CHECK-NEXT: $x0 = COPY [[OR]](<4 x s16>)
79+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(<4 x s32>) = G_OR [[COPY]], [[COPY1]]
80+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[OR]](<4 x s32>)
81+
; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)
9082
%0:_(<4 x s32>) = COPY $q0
9183
%1:_(<4 x s32>) = COPY $q1
9284
%2:_(<4 x s16>) = G_TRUNC %0
@@ -106,11 +98,8 @@ body: |
10698
; CHECK-NEXT: {{ $}}
10799
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
108100
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
109-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
110-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
111-
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s16) = G_XOR [[TRUNC]], [[TRUNC1]]
112-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[XOR]](s16)
113-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
101+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[COPY1]]
102+
; CHECK-NEXT: $w0 = COPY [[XOR]](s32)
114103
%0:_(s32) = COPY $w0
115104
%1:_(s32) = COPY $w1
116105
%2:_(s16) = G_TRUNC %0
@@ -129,10 +118,9 @@ body: |
129118
; CHECK-NEXT: {{ $}}
130119
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
131120
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
132-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY]](<4 x s32>)
133-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[COPY1]](<4 x s32>)
134-
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s16>) = G_XOR [[TRUNC]], [[TRUNC1]]
135-
; CHECK-NEXT: $x0 = COPY [[XOR]](<4 x s16>)
121+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR [[COPY]], [[COPY1]]
122+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[XOR]](<4 x s32>)
123+
; CHECK-NEXT: $x0 = COPY [[TRUNC]](<4 x s16>)
136124
%0:_(<4 x s32>) = COPY $q0
137125
%1:_(<4 x s32>) = COPY $q1
138126
%2:_(<4 x s16>) = G_TRUNC %0
@@ -238,12 +226,9 @@ body: |
238226
; CHECK-NEXT: {{ $}}
239227
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
240228
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
241-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
242-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
243-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC]]
244-
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[FREEZE]], [[TRUNC1]]
245-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[AND]](s16)
246-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
229+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
230+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[FREEZE]], [[COPY1]]
231+
; CHECK-NEXT: $w0 = COPY [[AND]](s32)
247232
%0:_(s32) = COPY $w0
248233
%1:_(s32) = COPY $w1
249234
%2:_(s16) = G_TRUNC %0
@@ -265,13 +250,10 @@ body: |
265250
; CHECK-NEXT: {{ $}}
266251
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
267252
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
268-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
269-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
270-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC]]
271-
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC1]]
272-
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s16) = G_AND [[FREEZE]], [[FREEZE1]]
273-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[AND]](s16)
274-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
253+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
254+
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s32) = G_FREEZE [[COPY1]]
255+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[FREEZE]], [[FREEZE1]]
256+
; CHECK-NEXT: $w0 = COPY [[AND]](s32)
275257
%0:_(s32) = COPY $w0
276258
%1:_(s32) = COPY $w1
277259
%2:_(s16) = G_TRUNC %0
@@ -295,12 +277,9 @@ body: |
295277
; CHECK-NEXT: {{ $}}
296278
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
297279
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
298-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
299-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
300-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC]]
301-
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s16) = G_OR [[FREEZE]], [[TRUNC1]]
302-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16)
303-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
280+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
281+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[FREEZE]], [[COPY1]]
282+
; CHECK-NEXT: $w0 = COPY [[OR]](s32)
304283
%0:_(s32) = COPY $w0
305284
%1:_(s32) = COPY $w1
306285
%2:_(s16) = G_TRUNC %0
@@ -320,13 +299,10 @@ body: |
320299
; CHECK-NEXT: {{ $}}
321300
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
322301
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
323-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
324-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
325-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC]]
326-
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s16) = G_FREEZE [[TRUNC1]]
327-
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s16) = G_XOR [[FREEZE]], [[FREEZE1]]
328-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[XOR]](s16)
329-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
302+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s32) = G_FREEZE [[COPY]]
303+
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s32) = G_FREEZE [[COPY1]]
304+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FREEZE]], [[FREEZE1]]
305+
; CHECK-NEXT: $w0 = COPY [[XOR]](s32)
330306
%0:_(s32) = COPY $w0
331307
%1:_(s32) = COPY $w1
332308
%2:_(s16) = G_TRUNC %0

llvm/test/CodeGen/AArch64/GlobalISel/combine-select.mir

+12-18
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2-
# RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown- --aarch64postlegalizercombiner-only-enable-rule="select_to_logical" %s -o - | FileCheck %s
2+
# RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s
33
# RUN: llc -debugify-and-strip-all-safe -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s
44
# REQUIRES: asserts
5+
56
---
67
# select (c, x, x) -> x
78
name: test_combine_select_same_res
@@ -116,10 +117,9 @@ body: |
116117
; CHECK-NEXT: {{ $}}
117118
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
118119
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2
119-
; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)
120120
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]
121-
; CHECK-NEXT: %f:_(s1) = G_TRUNC [[FREEZE]](s64)
122-
; CHECK-NEXT: %sel:_(s1) = G_OR %c, %f
121+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[FREEZE]]
122+
; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[OR]](s64)
123123
; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)
124124
; CHECK-NEXT: $w0 = COPY %ext(s32)
125125
%0:_(s64) = COPY $x0
@@ -143,10 +143,9 @@ body: |
143143
; CHECK-NEXT: {{ $}}
144144
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
145145
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x2
146-
; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)
147146
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]
148-
; CHECK-NEXT: %f:_(s1) = G_TRUNC [[FREEZE]](s64)
149-
; CHECK-NEXT: %sel:_(s1) = G_OR %c, %f
147+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[FREEZE]]
148+
; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[OR]](s64)
150149
; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)
151150
; CHECK-NEXT: $w0 = COPY %ext(s32)
152151
%0:_(s64) = COPY $x0
@@ -171,12 +170,9 @@ body: |
171170
; CHECK-NEXT: {{ $}}
172171
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
173172
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d2
174-
; CHECK-NEXT: %c:_(<2 x s1>) = G_TRUNC [[COPY]](<2 x s32>)
175173
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<2 x s32>) = G_FREEZE [[COPY1]]
176-
; CHECK-NEXT: %f:_(<2 x s1>) = G_TRUNC [[FREEZE]](<2 x s32>)
177-
; CHECK-NEXT: %sel:_(<2 x s1>) = G_OR %c, %f
178-
; CHECK-NEXT: %ext:_(<2 x s32>) = G_ANYEXT %sel(<2 x s1>)
179-
; CHECK-NEXT: $d0 = COPY %ext(<2 x s32>)
174+
; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[COPY]], [[FREEZE]]
175+
; CHECK-NEXT: $d0 = COPY [[OR]](<2 x s32>)
180176
%0:_(<2 x s32>) = COPY $d0
181177
%1:_(<2 x s32>) = COPY $d1
182178
%2:_(<2 x s32>) = COPY $d2
@@ -200,10 +196,9 @@ body: |
200196
; CHECK-NEXT: {{ $}}
201197
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
202198
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
203-
; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)
204199
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]
205-
; CHECK-NEXT: %t:_(s1) = G_TRUNC [[FREEZE]](s64)
206-
; CHECK-NEXT: %sel:_(s1) = G_AND %c, %t
200+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[FREEZE]]
201+
; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[AND]](s64)
207202
; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)
208203
; CHECK-NEXT: $w0 = COPY %ext(s32)
209204
%0:_(s64) = COPY $x0
@@ -228,10 +223,9 @@ body: |
228223
; CHECK-NEXT: {{ $}}
229224
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
230225
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
231-
; CHECK-NEXT: %c:_(s1) = G_TRUNC [[COPY]](s64)
232226
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s64) = G_FREEZE [[COPY1]]
233-
; CHECK-NEXT: %t:_(s1) = G_TRUNC [[FREEZE]](s64)
234-
; CHECK-NEXT: %sel:_(s1) = G_AND %c, %t
227+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[FREEZE]]
228+
; CHECK-NEXT: %sel:_(s1) = G_TRUNC [[AND]](s64)
235229
; CHECK-NEXT: %ext:_(s32) = G_ANYEXT %sel(s1)
236230
; CHECK-NEXT: $w0 = COPY %ext(s32)
237231
%0:_(s64) = COPY $x0

llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-narrow-binop-feeding-add.mir

+6-8
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,9 @@ body: |
8484
; CHECK: liveins: $x0, $x1
8585
; CHECK: %binop_lhs:_(s64) = COPY $x0
8686
; CHECK: %binop_rhs:_(s64) = COPY $x1
87-
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %binop_lhs(s64)
88-
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC %binop_rhs(s64)
89-
; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[TRUNC1]]
90-
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[AND]](s32)
87+
; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND %binop_lhs, %binop_rhs
88+
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[AND]](s64)
89+
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s32)
9190
; CHECK: $x0 = COPY [[ZEXT]](s64)
9291
; CHECK: RET_ReallyLR implicit $x0
9392
%binop_lhs:_(s64) = COPY $x0
@@ -131,10 +130,9 @@ body: |
131130
; CHECK: liveins: $x0, $x1
132131
; CHECK: %binop_lhs:_(s64) = COPY $x0
133132
; CHECK: %binop_rhs:_(s64) = COPY $x1
134-
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %binop_lhs(s64)
135-
; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC %binop_rhs(s64)
136-
; CHECK: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[TRUNC]], [[TRUNC1]]
137-
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[XOR]](s32)
133+
; CHECK: [[XOR:%[0-9]+]]:_(s64) = G_XOR %binop_lhs, %binop_rhs
134+
; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[XOR]](s64)
135+
; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s32)
138136
; CHECK: $x0 = COPY [[ZEXT]](s64)
139137
; CHECK: RET_ReallyLR implicit $x0
140138
%binop_lhs:_(s64) = COPY $x0

llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-hoist-same-hands.mir

+3-4
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,9 @@ body: |
268268
; CHECK: liveins: $w0, $w1
269269
; CHECK: %x_wide:_(s32) = COPY $w0
270270
; CHECK: %y_wide:_(s32) = COPY $w1
271-
; CHECK: %x:_(s1) = G_TRUNC %x_wide(s32)
272-
; CHECK: %y:_(s1) = G_TRUNC %y_wide(s32)
273-
; CHECK: [[OR:%[0-9]+]]:_(s1) = G_OR %x, %y
274-
; CHECK: %logic_op:_(s64) = G_SEXT [[OR]](s1)
271+
; CHECK: %8:_(s32) = G_OR %x_wide, %y_wide
272+
; CHECK: %7:_(s1) = G_TRUNC %8(s32)
273+
; CHECK: %logic_op:_(s64) = G_SEXT %7(s1)
275274
; CHECK: $x0 = COPY %logic_op(s64)
276275
; CHECK: RET_ReallyLR implicit $x0
277276
%x_wide:_(s32) = COPY $w0

0 commit comments

Comments
 (0)