Skip to content

Commit 903aeb1

Browse files
RKSimonaokblast
authored andcommitted
[SystemZ] Avoid trunc(add(X,X)) patterns (llvm#164378)
Replace with trunc(add(X,Y)) to avoid premature folding in upcoming patch llvm#164227
1 parent 94c85b3 commit 903aeb1

File tree

2 files changed

+50
-40
lines changed

2 files changed

+50
-40
lines changed

llvm/test/CodeGen/SystemZ/int-conv-14.ll

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,15 @@ define i128 @f4(ptr %ptr) {
5555
}
5656

5757
; Truncation to i64.
58-
define i64 @f5(i128 %a) {
58+
define i64 @f5(i128 %a, i128 %b) {
5959
; CHECK-LABEL: f5:
6060
; CHECK: # %bb.0:
61-
; CHECK-NEXT: vl %v0, 0(%r2), 3
62-
; CHECK-NEXT: vaq %v0, %v0, %v0
61+
; CHECK-NEXT: vl %v0, 0(%r3), 3
62+
; CHECK-NEXT: vl %v1, 0(%r2), 3
63+
; CHECK-NEXT: vaq %v0, %v1, %v0
6364
; CHECK-NEXT: vlgvg %r2, %v0, 1
6465
; CHECK-NEXT: br %r14
65-
%op = add i128 %a, %a
66+
%op = add i128 %a, %b
6667
%res = trunc i128 %op to i64
6768
ret i64 %res
6869
}
@@ -134,15 +135,16 @@ define i128 @f10(ptr %ptr) {
134135
}
135136

136137
; Truncation to i32.
137-
define i32 @f11(i128 %a) {
138+
define i32 @f11(i128 %a, i128 %b) {
138139
; CHECK-LABEL: f11:
139140
; CHECK: # %bb.0:
140-
; CHECK-NEXT: vl %v0, 0(%r2), 3
141-
; CHECK-NEXT: vaq %v0, %v0, %v0
141+
; CHECK-NEXT: vl %v0, 0(%r3), 3
142+
; CHECK-NEXT: vl %v1, 0(%r2), 3
143+
; CHECK-NEXT: vaq %v0, %v1, %v0
142144
; CHECK-NEXT: vlgvf %r2, %v0, 3
143145
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
144146
; CHECK-NEXT: br %r14
145-
%op = add i128 %a, %a
147+
%op = add i128 %a, %b
146148
%res = trunc i128 %op to i32
147149
ret i32 %res
148150
}
@@ -215,15 +217,16 @@ define i128 @f16(ptr %ptr) {
215217
}
216218

217219
; Truncation to i16.
218-
define i16 @f17(i128 %a) {
220+
define i16 @f17(i128 %a, i128 %b) {
219221
; CHECK-LABEL: f17:
220222
; CHECK: # %bb.0:
221-
; CHECK-NEXT: vl %v0, 0(%r2), 3
222-
; CHECK-NEXT: vaq %v0, %v0, %v0
223+
; CHECK-NEXT: vl %v0, 0(%r3), 3
224+
; CHECK-NEXT: vl %v1, 0(%r2), 3
225+
; CHECK-NEXT: vaq %v0, %v1, %v0
223226
; CHECK-NEXT: vlgvf %r2, %v0, 3
224227
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
225228
; CHECK-NEXT: br %r14
226-
%op = add i128 %a, %a
229+
%op = add i128 %a, %b
227230
%res = trunc i128 %op to i16
228231
ret i16 %res
229232
}
@@ -296,15 +299,16 @@ define i128 @f22(ptr %ptr) {
296299
}
297300

298301
; Truncation to i8.
299-
define i8 @f23(i128 %a) {
302+
define i8 @f23(i128 %a, i128 %b) {
300303
; CHECK-LABEL: f23:
301304
; CHECK: # %bb.0:
302-
; CHECK-NEXT: vl %v0, 0(%r2), 3
303-
; CHECK-NEXT: vaq %v0, %v0, %v0
305+
; CHECK-NEXT: vl %v0, 0(%r3), 3
306+
; CHECK-NEXT: vl %v1, 0(%r2), 3
307+
; CHECK-NEXT: vaq %v0, %v1, %v0
304308
; CHECK-NEXT: vlgvf %r2, %v0, 3
305309
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
306310
; CHECK-NEXT: br %r14
307-
%op = add i128 %a, %a
311+
%op = add i128 %a, %b
308312
%res = trunc i128 %op to i8
309313
ret i8 %res
310314
}
@@ -385,15 +389,16 @@ define i128 @f28(ptr %ptr) {
385389
}
386390

387391
; Truncation to i1.
388-
define i1 @f29(i128 %a) {
392+
define i1 @f29(i128 %a, i128 %b) {
389393
; CHECK-LABEL: f29:
390394
; CHECK: # %bb.0:
391-
; CHECK-NEXT: vl %v0, 0(%r2), 3
392-
; CHECK-NEXT: vaq %v0, %v0, %v0
395+
; CHECK-NEXT: vl %v0, 0(%r3), 3
396+
; CHECK-NEXT: vl %v1, 0(%r2), 3
397+
; CHECK-NEXT: vaq %v0, %v1, %v0
393398
; CHECK-NEXT: vlgvf %r2, %v0, 3
394399
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
395400
; CHECK-NEXT: br %r14
396-
%op = add i128 %a, %a
401+
%op = add i128 %a, %b
397402
%res = trunc i128 %op to i1
398403
ret i1 %res
399404
}

llvm/test/CodeGen/SystemZ/int-conv-15.ll

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,15 @@ define i128 @f4(ptr %ptr) {
5555
}
5656

5757
; Truncation to i64.
58-
define i64 @f5(i128 %a) {
58+
define i64 @f5(i128 %a, i128 %b) {
5959
; CHECK-LABEL: f5:
6060
; CHECK: # %bb.0:
61-
; CHECK-NEXT: vl %v0, 0(%r2), 3
62-
; CHECK-NEXT: vaq %v0, %v0, %v0
61+
; CHECK-NEXT: vl %v0, 0(%r3), 3
62+
; CHECK-NEXT: vl %v1, 0(%r2), 3
63+
; CHECK-NEXT: vaq %v0, %v1, %v0
6364
; CHECK-NEXT: vlgvg %r2, %v0, 1
6465
; CHECK-NEXT: br %r14
65-
%op = add i128 %a, %a
66+
%op = add i128 %a, %b
6667
%res = trunc i128 %op to i64
6768
ret i64 %res
6869
}
@@ -134,15 +135,16 @@ define i128 @f10(ptr %ptr) {
134135
}
135136

136137
; Truncation to i32.
137-
define i32 @f11(i128 %a) {
138+
define i32 @f11(i128 %a, i128 %b) {
138139
; CHECK-LABEL: f11:
139140
; CHECK: # %bb.0:
140-
; CHECK-NEXT: vl %v0, 0(%r2), 3
141-
; CHECK-NEXT: vaq %v0, %v0, %v0
141+
; CHECK-NEXT: vl %v0, 0(%r3), 3
142+
; CHECK-NEXT: vl %v1, 0(%r2), 3
143+
; CHECK-NEXT: vaq %v0, %v1, %v0
142144
; CHECK-NEXT: vlgvf %r2, %v0, 3
143145
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
144146
; CHECK-NEXT: br %r14
145-
%op = add i128 %a, %a
147+
%op = add i128 %a, %b
146148
%res = trunc i128 %op to i32
147149
ret i32 %res
148150
}
@@ -215,15 +217,16 @@ define i128 @f16(ptr %ptr) {
215217
}
216218

217219
; Truncation to i16.
218-
define i16 @f17(i128 %a) {
220+
define i16 @f17(i128 %a, i128 %b) {
219221
; CHECK-LABEL: f17:
220222
; CHECK: # %bb.0:
221-
; CHECK-NEXT: vl %v0, 0(%r2), 3
222-
; CHECK-NEXT: vaq %v0, %v0, %v0
223+
; CHECK-NEXT: vl %v0, 0(%r3), 3
224+
; CHECK-NEXT: vl %v1, 0(%r2), 3
225+
; CHECK-NEXT: vaq %v0, %v1, %v0
223226
; CHECK-NEXT: vlgvf %r2, %v0, 3
224227
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
225228
; CHECK-NEXT: br %r14
226-
%op = add i128 %a, %a
229+
%op = add i128 %a, %b
227230
%res = trunc i128 %op to i16
228231
ret i16 %res
229232
}
@@ -296,15 +299,16 @@ define i128 @f22(ptr %ptr) {
296299
}
297300

298301
; Truncation to i8.
299-
define i8 @f23(i128 %a) {
302+
define i8 @f23(i128 %a, i128 %b) {
300303
; CHECK-LABEL: f23:
301304
; CHECK: # %bb.0:
302-
; CHECK-NEXT: vl %v0, 0(%r2), 3
303-
; CHECK-NEXT: vaq %v0, %v0, %v0
305+
; CHECK-NEXT: vl %v0, 0(%r3), 3
306+
; CHECK-NEXT: vl %v1, 0(%r2), 3
307+
; CHECK-NEXT: vaq %v0, %v1, %v0
304308
; CHECK-NEXT: vlgvf %r2, %v0, 3
305309
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
306310
; CHECK-NEXT: br %r14
307-
%op = add i128 %a, %a
311+
%op = add i128 %a, %b
308312
%res = trunc i128 %op to i8
309313
ret i8 %res
310314
}
@@ -383,15 +387,16 @@ define i128 @f28(ptr %ptr) {
383387
}
384388

385389
; Truncation to i1.
386-
define i1 @f29(i128 %a) {
390+
define i1 @f29(i128 %a, i128 %b) {
387391
; CHECK-LABEL: f29:
388392
; CHECK: # %bb.0:
389-
; CHECK-NEXT: vl %v0, 0(%r2), 3
390-
; CHECK-NEXT: vaq %v0, %v0, %v0
393+
; CHECK-NEXT: vl %v0, 0(%r3), 3
394+
; CHECK-NEXT: vl %v1, 0(%r2), 3
395+
; CHECK-NEXT: vaq %v0, %v1, %v0
391396
; CHECK-NEXT: vlgvf %r2, %v0, 3
392397
; CHECK-NEXT: # kill: def $r2l killed $r2l killed $r2d
393398
; CHECK-NEXT: br %r14
394-
%op = add i128 %a, %a
399+
%op = add i128 %a, %b
395400
%res = trunc i128 %op to i1
396401
ret i1 %res
397402
}

0 commit comments

Comments
 (0)