Skip to content

Commit 56a1c61

Browse files
committed
[PhaseOrdering][AArch64] add test for mul-with-overflow; NFC
Reduced from issue llvm#56403
1 parent 205701f commit 56a1c61

File tree

1 file changed

+83
-0
lines changed
  • llvm/test/Transforms/PhaseOrdering/AArch64

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -passes="default<O3>" -S < %s | FileCheck %s
3+
4+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5+
target triple = "aarch64-unknown-linux-unknown"
6+
7+
define i128 @__muloti4(i128 %0, i128 %1, i32* nonnull align 4 %2) {
8+
; CHECK-LABEL: @__muloti4(
9+
; CHECK-NEXT: Entry:
10+
; CHECK-NEXT: [[DOTFR:%.*]] = freeze i128 [[TMP1:%.*]]
11+
; CHECK-NEXT: store i32 0, i32* [[TMP2:%.*]], align 4
12+
; CHECK-NEXT: [[MUL:%.*]] = tail call { i128, i1 } @llvm.smul.with.overflow.i128(i128 [[TMP0:%.*]], i128 [[DOTFR]])
13+
; CHECK-NEXT: [[TMP3:%.*]] = icmp slt i128 [[TMP0]], 0
14+
; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i128 [[DOTFR]], -170141183460469231731687303715884105728
15+
; CHECK-NEXT: [[TMP5:%.*]] = and i1 [[TMP3]], [[TMP4]]
16+
; CHECK-NEXT: br i1 [[TMP5]], label [[THEN7:%.*]], label [[ELSE2:%.*]]
17+
; CHECK: Else2:
18+
; CHECK-NEXT: [[MUL_OV:%.*]] = extractvalue { i128, i1 } [[MUL]], 1
19+
; CHECK-NEXT: br i1 [[MUL_OV]], label [[THEN7]], label [[BLOCK9:%.*]]
20+
; CHECK: Then7:
21+
; CHECK-NEXT: store i32 1, i32* [[TMP2]], align 4
22+
; CHECK-NEXT: br label [[BLOCK9]]
23+
; CHECK: Block9:
24+
; CHECK-NEXT: [[MUL_VAL:%.*]] = extractvalue { i128, i1 } [[MUL]], 0
25+
; CHECK-NEXT: ret i128 [[MUL_VAL]]
26+
;
27+
Entry:
28+
%3 = alloca i128, align 16
29+
%4 = alloca i128, align 16
30+
store i32 0, i32* %2, align 4
31+
%5 = mul i128 %0, %1
32+
store i128 %5, i128* %3, align 16
33+
%6 = icmp slt i128 %0, 0
34+
br i1 %6, label %Then, label %Else
35+
36+
Then:
37+
%7 = icmp eq i128 %1, -170141183460469231731687303715884105728
38+
br label %Block
39+
40+
Else:
41+
br label %Block
42+
43+
Block:
44+
%8 = phi i1 [ %7, %Then ], [ false, %Else ]
45+
br i1 %8, label %Then1, label %Else2
46+
47+
Then1:
48+
br label %Block6
49+
50+
Else2:
51+
%9 = icmp ne i128 %0, 0
52+
br i1 %9, label %Then3, label %Else4
53+
54+
Then3:
55+
%10 = load i128, i128* %3, align 16
56+
%11 = sdiv i128 %10, %0
57+
%12 = icmp ne i128 %11, %1
58+
br label %Block5
59+
60+
Else4:
61+
br label %Block5
62+
63+
Block5:
64+
%13 = phi i1 [ %12, %Then3 ], [ false, %Else4 ]
65+
br label %Block6
66+
67+
Block6:
68+
%14 = phi i1 [ true, %Then1 ], [ %13, %Block5 ]
69+
br i1 %14, label %Then7, label %Else8
70+
71+
Then7:
72+
store i32 1, i32* %2, align 4
73+
br label %Block9
74+
75+
Else8:
76+
br label %Block9
77+
78+
Block9: ; preds = %Else8, %Then7
79+
%15 = load i128, i128* %3, align 16
80+
store i128 %15, i128* %4, align 16
81+
%16 = load i128, i128* %4, align 16
82+
ret i128 %16
83+
}

0 commit comments

Comments
 (0)