Skip to content

Commit 1adba3e

Browse files
committed
Regenerate min/max test for readability
1 parent 6b044c0 commit 1adba3e

File tree

1 file changed

+139
-120
lines changed

1 file changed

+139
-120
lines changed
Lines changed: 139 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,145 @@
11
; RUN: opt < %s --O3 -S | FileCheck %s
2+
; See issue #55013 and PR #70845 for more details.
3+
; This test comes from the following C program, compiled with :
4+
; > clang -O0 -S -emit-llvm -fno-discard-value-names
5+
;
6+
;; short vecreduce_smin_v2i16(int n, short* v)
7+
;; {
8+
;; short p = 0;
9+
;; for (int i = 0; i < n; ++i)
10+
;; p = p > v[i] ? v[i] : p;
11+
;; return p;
12+
;; }
13+
;
14+
;; short vecreduce_smax_v2i16(int n, short* v)
15+
;; {
16+
;; short p = 0;
17+
;; for (int i = 0; i < n; ++i)
18+
;; p = p < v[i] ? v[i] : p;
19+
;; return p;
20+
;; }
221

3-
define signext i16 @vecreduce_smax_v2i16(i32 noundef %0, ptr noundef %1) #0 {
4-
;; CHECK: @llvm.smax
5-
%3 = alloca i32, align 4
6-
%4 = alloca ptr, align 8
7-
%5 = alloca i16, align 2
8-
%6 = alloca i32, align 4
9-
store i32 %0, ptr %3, align 4
10-
store ptr %1, ptr %4, align 8
11-
store i16 0, ptr %5, align 2
12-
store i32 0, ptr %6, align 4
13-
br label %7
14-
15-
7: ; preds = %34, %2
16-
%8 = load i32, ptr %6, align 4
17-
%9 = load i32, ptr %3, align 4
18-
%10 = icmp slt i32 %8, %9
19-
br i1 %10, label %11, label %37
20-
21-
11: ; preds = %7
22-
%12 = load i16, ptr %5, align 2
23-
%13 = sext i16 %12 to i32
24-
%14 = load ptr, ptr %4, align 8
25-
%15 = load i32, ptr %6, align 4
26-
%16 = sext i32 %15 to i64
27-
%17 = getelementptr inbounds i16, ptr %14, i64 %16
28-
%18 = load i16, ptr %17, align 2
29-
%19 = sext i16 %18 to i32
30-
%20 = icmp slt i32 %13, %19
31-
br i1 %20, label %21, label %28
32-
33-
21: ; preds = %11
34-
%22 = load ptr, ptr %4, align 8
35-
%23 = load i32, ptr %6, align 4
36-
%24 = sext i32 %23 to i64
37-
%25 = getelementptr inbounds i16, ptr %22, i64 %24
38-
%26 = load i16, ptr %25, align 2
39-
%27 = sext i16 %26 to i32
40-
br label %31
41-
42-
28: ; preds = %11
43-
%29 = load i16, ptr %5, align 2
44-
%30 = sext i16 %29 to i32
45-
br label %31
46-
47-
31: ; preds = %28, %21
48-
%32 = phi i32 [ %27, %21 ], [ %30, %28 ]
49-
%33 = trunc i32 %32 to i16
50-
store i16 %33, ptr %5, align 2
51-
br label %34
52-
53-
34: ; preds = %31
54-
%35 = load i32, ptr %6, align 4
55-
%36 = add nsw i32 %35, 1
56-
store i32 %36, ptr %6, align 4
57-
br label %7
58-
59-
37: ; preds = %7
60-
%38 = load i16, ptr %5, align 2
61-
ret i16 %38
62-
}
63-
64-
define signext i16 @vecreduce_smin_v2i16(i32 noundef %0, ptr noundef %1) #0 {
65-
; CHECK: @llvm.smin
66-
%3 = alloca i32, align 4
67-
%4 = alloca ptr, align 8
68-
%5 = alloca i16, align 2
69-
%6 = alloca i32, align 4
70-
store i32 %0, ptr %3, align 4
71-
store ptr %1, ptr %4, align 8
72-
store i16 0, ptr %5, align 2
73-
store i32 0, ptr %6, align 4
74-
br label %7
75-
76-
7: ; preds = %34, %2
77-
%8 = load i32, ptr %6, align 4
78-
%9 = load i32, ptr %3, align 4
79-
%10 = icmp slt i32 %8, %9
80-
br i1 %10, label %11, label %37
81-
82-
11: ; preds = %7
83-
%12 = load i16, ptr %5, align 2
84-
%13 = sext i16 %12 to i32
85-
%14 = load ptr, ptr %4, align 8
86-
%15 = load i32, ptr %6, align 4
87-
%16 = sext i32 %15 to i64
88-
%17 = getelementptr inbounds i16, ptr %14, i64 %16
89-
%18 = load i16, ptr %17, align 2
90-
%19 = sext i16 %18 to i32
91-
%20 = icmp sgt i32 %13, %19
92-
br i1 %20, label %21, label %28
93-
94-
21: ; preds = %11
95-
%22 = load ptr, ptr %4, align 8
96-
%23 = load i32, ptr %6, align 4
97-
%24 = sext i32 %23 to i64
98-
%25 = getelementptr inbounds i16, ptr %22, i64 %24
99-
%26 = load i16, ptr %25, align 2
100-
%27 = sext i16 %26 to i32
101-
br label %31
102-
103-
28: ; preds = %11
104-
%29 = load i16, ptr %5, align 2
105-
%30 = sext i16 %29 to i32
106-
br label %31
107-
108-
31: ; preds = %28, %21
109-
%32 = phi i32 [ %27, %21 ], [ %30, %28 ]
110-
%33 = trunc i32 %32 to i16
111-
store i16 %33, ptr %5, align 2
112-
br label %34
113-
114-
34: ; preds = %31
115-
%35 = load i32, ptr %6, align 4
116-
%36 = add nsw i32 %35, 1
117-
store i32 %36, ptr %6, align 4
118-
br label %7
119-
120-
37: ; preds = %7
121-
%38 = load i16, ptr %5, align 2
122-
ret i16 %38
22+
define signext i16 @vecreduce_smin_v2i16(i32 noundef %n, ptr noundef %v) {
23+
;; CHECK: @llvm.smin
24+
entry:
25+
%n.addr = alloca i32, align 4
26+
%v.addr = alloca ptr, align 8
27+
%p = alloca i16, align 2
28+
%i = alloca i32, align 4
29+
store i32 %n, ptr %n.addr, align 4
30+
store ptr %v, ptr %v.addr, align 8
31+
store i16 0, ptr %p, align 2
32+
store i32 0, ptr %i, align 4
33+
br label %for.cond
34+
35+
for.cond: ; preds = %for.inc, %entry
36+
%0 = load i32, ptr %i, align 4
37+
%1 = load i32, ptr %n.addr, align 4
38+
%cmp = icmp slt i32 %0, %1
39+
br i1 %cmp, label %for.body, label %for.end
40+
41+
for.body: ; preds = %for.cond
42+
%2 = load i16, ptr %p, align 2
43+
%conv = sext i16 %2 to i32
44+
%3 = load ptr, ptr %v.addr, align 8
45+
%4 = load i32, ptr %i, align 4
46+
%idxprom = sext i32 %4 to i64
47+
%arrayidx = getelementptr inbounds i16, ptr %3, i64 %idxprom
48+
%5 = load i16, ptr %arrayidx, align 2
49+
%conv1 = sext i16 %5 to i32
50+
%cmp2 = icmp sgt i32 %conv, %conv1
51+
br i1 %cmp2, label %cond.true, label %cond.false
52+
53+
cond.true: ; preds = %for.body
54+
%6 = load ptr, ptr %v.addr, align 8
55+
%7 = load i32, ptr %i, align 4
56+
%idxprom4 = sext i32 %7 to i64
57+
%arrayidx5 = getelementptr inbounds i16, ptr %6, i64 %idxprom4
58+
%8 = load i16, ptr %arrayidx5, align 2
59+
%conv6 = sext i16 %8 to i32
60+
br label %cond.end
61+
62+
cond.false: ; preds = %for.body
63+
%9 = load i16, ptr %p, align 2
64+
%conv7 = sext i16 %9 to i32
65+
br label %cond.end
66+
67+
cond.end: ; preds = %cond.false, %cond.true
68+
%cond = phi i32 [ %conv6, %cond.true ], [ %conv7, %cond.false ]
69+
%conv8 = trunc i32 %cond to i16
70+
store i16 %conv8, ptr %p, align 2
71+
br label %for.inc
72+
73+
for.inc: ; preds = %cond.end
74+
%10 = load i32, ptr %i, align 4
75+
%inc = add nsw i32 %10, 1
76+
store i32 %inc, ptr %i, align 4
77+
br label %for.cond
78+
79+
for.end: ; preds = %for.cond
80+
%11 = load i16, ptr %p, align 2
81+
ret i16 %11
12382
}
12483

84+
; Function Attrs: noinline nounwind optnone ssp uwtable(sync)
85+
define signext i16 @vecreduce_smax_v2i16(i32 noundef %n, ptr noundef %v) {
86+
;; CHECK: @llvm.smax
87+
entry:
88+
%n.addr = alloca i32, align 4
89+
%v.addr = alloca ptr, align 8
90+
%p = alloca i16, align 2
91+
%i = alloca i32, align 4
92+
store i32 %n, ptr %n.addr, align 4
93+
store ptr %v, ptr %v.addr, align 8
94+
store i16 0, ptr %p, align 2
95+
store i32 0, ptr %i, align 4
96+
br label %for.cond
97+
98+
for.cond: ; preds = %for.inc, %entry
99+
%0 = load i32, ptr %i, align 4
100+
%1 = load i32, ptr %n.addr, align 4
101+
%cmp = icmp slt i32 %0, %1
102+
br i1 %cmp, label %for.body, label %for.end
103+
104+
for.body: ; preds = %for.cond
105+
%2 = load i16, ptr %p, align 2
106+
%conv = sext i16 %2 to i32
107+
%3 = load ptr, ptr %v.addr, align 8
108+
%4 = load i32, ptr %i, align 4
109+
%idxprom = sext i32 %4 to i64
110+
%arrayidx = getelementptr inbounds i16, ptr %3, i64 %idxprom
111+
%5 = load i16, ptr %arrayidx, align 2
112+
%conv1 = sext i16 %5 to i32
113+
%cmp2 = icmp slt i32 %conv, %conv1
114+
br i1 %cmp2, label %cond.true, label %cond.false
115+
116+
cond.true: ; preds = %for.body
117+
%6 = load ptr, ptr %v.addr, align 8
118+
%7 = load i32, ptr %i, align 4
119+
%idxprom4 = sext i32 %7 to i64
120+
%arrayidx5 = getelementptr inbounds i16, ptr %6, i64 %idxprom4
121+
%8 = load i16, ptr %arrayidx5, align 2
122+
%conv6 = sext i16 %8 to i32
123+
br label %cond.end
124+
125+
cond.false: ; preds = %for.body
126+
%9 = load i16, ptr %p, align 2
127+
%conv7 = sext i16 %9 to i32
128+
br label %cond.end
129+
130+
cond.end: ; preds = %cond.false, %cond.true
131+
%cond = phi i32 [ %conv6, %cond.true ], [ %conv7, %cond.false ]
132+
%conv8 = trunc i32 %cond to i16
133+
store i16 %conv8, ptr %p, align 2
134+
br label %for.inc
125135

136+
for.inc: ; preds = %cond.end
137+
%10 = load i32, ptr %i, align 4
138+
%inc = add nsw i32 %10, 1
139+
store i32 %inc, ptr %i, align 4
140+
br label %for.cond
126141

142+
for.end: ; preds = %for.cond
143+
%11 = load i16, ptr %p, align 2
144+
ret i16 %11
145+
}

0 commit comments

Comments
 (0)