Skip to content

Commit 56c3d37

Browse files
committed
Allow forming overflow op for i128
1 parent 9603b72 commit 56c3d37

File tree

3 files changed

+11
-21
lines changed

3 files changed

+11
-21
lines changed

llvm/lib/Target/SystemZ/SystemZISelLowering.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ class SystemZTargetLowering : public TargetLowering {
523523
bool MathUsed) const override {
524524
// Form add and sub with overflow intrinsics regardless of any extra
525525
// users of the math result.
526-
return VT == MVT::i32 || VT == MVT::i64;
526+
return VT == MVT::i32 || VT == MVT::i64 || VT == MVT::i128;
527527
}
528528

529529
bool shouldConsiderGEPOffsetSplit() const override { return true; }

llvm/test/CodeGen/SystemZ/atomicrmw-ops-i128.ll

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -363,10 +363,11 @@ define i128 @atomicrmw_uinc_wrap(ptr %src, i128 %b) {
363363
define i128 @atomicrmw_udec_wrap(ptr %src, i128 %b) {
364364
; CHECK-LABEL: atomicrmw_udec_wrap:
365365
; CHECK: # %bb.0:
366+
; CHECK-NEXT: larl %r1, .LCPI12_0
366367
; CHECK-NEXT: vl %v0, 0(%r4), 3
367368
; CHECK-NEXT: vl %v3, 0(%r3), 4
368-
; CHECK-NEXT: vgbm %v1, 65535
369-
; CHECK-NEXT: vgbm %v2, 0
369+
; CHECK-NEXT: vl %v1, 0(%r1), 3
370+
; CHECK-NEXT: vgbm %v2, 65535
370371
; CHECK-NEXT: j .LBB12_2
371372
; CHECK-NEXT: .LBB12_1: # %atomicrmw.start
372373
; CHECK-NEXT: # in Loop: Header=BB12_2 Depth=1
@@ -379,6 +380,9 @@ define i128 @atomicrmw_udec_wrap(ptr %src, i128 %b) {
379380
; CHECK-NEXT: je .LBB12_8
380381
; CHECK-NEXT: .LBB12_2: # %atomicrmw.start
381382
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
383+
; CHECK-NEXT: vscbiq %v4, %v3, %v1
384+
; CHECK-NEXT: vlgvf %r0, %v4, 3
385+
; CHECK-NEXT: xilf %r0, 1
382386
; CHECK-NEXT: veclg %v0, %v3
383387
; CHECK-NEXT: jlh .LBB12_4
384388
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
@@ -390,12 +394,11 @@ define i128 @atomicrmw_udec_wrap(ptr %src, i128 %b) {
390394
; CHECK-NEXT: jl .LBB12_6
391395
; CHECK-NEXT: # %bb.5: # %atomicrmw.start
392396
; CHECK-NEXT: # in Loop: Header=BB12_2 Depth=1
393-
; CHECK-NEXT: vaq %v4, %v3, %v1
397+
; CHECK-NEXT: vaq %v4, %v3, %v2
394398
; CHECK-NEXT: .LBB12_6: # %atomicrmw.start
395399
; CHECK-NEXT: # in Loop: Header=BB12_2 Depth=1
396-
; CHECK-NEXT: vceqgs %v5, %v3, %v2
397400
; CHECK-NEXT: vlr %v5, %v0
398-
; CHECK-NEXT: je .LBB12_1
401+
; CHECK-NEXT: cijlh %r0, 0, .LBB12_1
399402
; CHECK-NEXT: # %bb.7: # %atomicrmw.start
400403
; CHECK-NEXT: # in Loop: Header=BB12_2 Depth=1
401404
; CHECK-NEXT: vlr %v5, %v4

llvm/test/CodeGen/SystemZ/int-cmp-65.ll

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,9 @@ define i128 @i128_addc_4(i128 %a, i128 %b) {
8888
define i128 @i128_addc_xor(i128 %a, i128 %b) {
8989
; CHECK-LABEL: i128_addc_xor:
9090
; CHECK: # %bb.0:
91-
; CHECK-NEXT: vl %v1, 0(%r4), 3
9291
; CHECK-NEXT: vl %v0, 0(%r3), 3
93-
; CHECK-NEXT: vno %v1, %v1, %v1
94-
; CHECK-NEXT: veclg %v1, %v0
95-
; CHECK-NEXT: jlh .LBB6_2
96-
; CHECK-NEXT: # %bb.1:
97-
; CHECK-NEXT: vchlgs %v0, %v0, %v1
98-
; CHECK-NEXT: .LBB6_2:
99-
; CHECK-NEXT: jnl .LBB6_4
100-
; CHECK-NEXT: # %bb.3:
101-
; CHECK-NEXT: larl %r1, .LCPI6_0
102-
; CHECK-NEXT: vl %v0, 0(%r1), 3
103-
; CHECK-NEXT: vst %v0, 0(%r2), 3
104-
; CHECK-NEXT: br %r14
105-
; CHECK-NEXT: .LBB6_4:
106-
; CHECK-NEXT: vgbm %v0, 0
92+
; CHECK-NEXT: vl %v1, 0(%r4), 3
93+
; CHECK-NEXT: vaccq %v0, %v1, %v0
10794
; CHECK-NEXT: vst %v0, 0(%r2), 3
10895
; CHECK-NEXT: br %r14
10996
%b.not = xor i128 %b, -1

0 commit comments

Comments
 (0)