Skip to content

Commit f7ef6d6

Browse files
committed
[ConstantFolding] Split up saturating add/sub tests; NFC
Split each test into a separate function. llvm-svn: 349801
1 parent 4839710 commit f7ef6d6

File tree

1 file changed

+158
-97
lines changed

1 file changed

+158
-97
lines changed
Lines changed: 158 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -constprop -S | FileCheck %s
33

4-
declare void @dummy(i8)
5-
declare void @dummy_vec(<2 x i8>)
6-
74
declare i8 @llvm.uadd.sat.i8(i8, i8)
85
declare i8 @llvm.sadd.sat.i8(i8, i8)
96
declare <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8>, <2 x i8>)
@@ -14,98 +11,162 @@ declare i8 @llvm.ssub.sat.i8(i8, i8)
1411
declare <2 x i8> @llvm.usub.sat.v2i8(<2 x i8>, <2 x i8>)
1512
declare <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8>, <2 x i8>)
1613

17-
define void @test_add_scalar() {
18-
; CHECK-LABEL: @test_add_scalar(
19-
; CHECK-NEXT: call void @dummy(i8 30)
20-
; CHECK-NEXT: call void @dummy(i8 -1)
21-
; CHECK-NEXT: call void @dummy(i8 -10)
22-
; CHECK-NEXT: call void @dummy(i8 127)
23-
; CHECK-NEXT: call void @dummy(i8 -128)
24-
; CHECK-NEXT: ret void
25-
;
26-
%x1 = call i8 @llvm.uadd.sat.i8(i8 10, i8 20)
27-
call void @dummy(i8 %x1)
28-
%x2 = call i8 @llvm.uadd.sat.i8(i8 250, i8 100)
29-
call void @dummy(i8 %x2)
30-
31-
%y1 = call i8 @llvm.sadd.sat.i8(i8 10, i8 -20)
32-
call void @dummy(i8 %y1)
33-
%y2 = call i8 @llvm.sadd.sat.i8(i8 120, i8 10)
34-
call void @dummy(i8 %y2)
35-
%y3 = call i8 @llvm.sadd.sat.i8(i8 -120, i8 -10)
36-
call void @dummy(i8 %y3)
37-
38-
ret void
39-
}
40-
41-
define void @test_add_vector(<2 x i8> %a) {
42-
; CHECK-LABEL: @test_add_vector(
43-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 20, i8 30>)
44-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 -1, i8 -1>)
45-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 -10, i8 -30>)
46-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 127, i8 127>)
47-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 -128, i8 -128>)
48-
; CHECK-NEXT: ret void
49-
;
50-
%x1 = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> <i8 10, i8 15>, <2 x i8> <i8 10, i8 15>)
51-
call void @dummy_vec(<2 x i8> %x1)
52-
%x2 = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> <i8 100, i8 200>, <2 x i8> <i8 250, i8 100>)
53-
call void @dummy_vec(<2 x i8> %x2)
54-
55-
%y1 = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 10, i8 -15>, <2 x i8> <i8 -20, i8 -15>)
56-
call void @dummy_vec(<2 x i8> %y1)
57-
%y2 = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 100, i8 10>, <2 x i8> <i8 30, i8 120>)
58-
call void @dummy_vec(<2 x i8> %y2)
59-
%y3 = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 -100, i8 -10>, <2 x i8> <i8 -30, i8 -120>)
60-
call void @dummy_vec(<2 x i8> %y3)
61-
62-
ret void
63-
}
64-
65-
define void @test_usub_ssub_scalar() {
66-
; CHECK-LABEL: @test_usub_ssub_scalar(
67-
; CHECK-NEXT: call void @dummy(i8 10)
68-
; CHECK-NEXT: call void @dummy(i8 0)
69-
; CHECK-NEXT: call void @dummy(i8 -30)
70-
; CHECK-NEXT: call void @dummy(i8 127)
71-
; CHECK-NEXT: call void @dummy(i8 -128)
72-
; CHECK-NEXT: ret void
73-
;
74-
%x1 = call i8 @llvm.usub.sat.i8(i8 20, i8 10)
75-
call void @dummy(i8 %x1)
76-
%x2 = call i8 @llvm.usub.sat.i8(i8 200, i8 250)
77-
call void @dummy(i8 %x2)
78-
79-
%y1 = call i8 @llvm.ssub.sat.i8(i8 -10, i8 20)
80-
call void @dummy(i8 %y1)
81-
%y2 = call i8 @llvm.ssub.sat.i8(i8 120, i8 -10)
82-
call void @dummy(i8 %y2)
83-
%y3 = call i8 @llvm.ssub.sat.i8(i8 -120, i8 10)
84-
call void @dummy(i8 %y3)
85-
86-
ret void
87-
}
88-
89-
define void @test_sub_vector(<2 x i8> %a) {
90-
; CHECK-LABEL: @test_sub_vector(
91-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 10, i8 5>)
92-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> zeroinitializer)
93-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 30, i8 0>)
94-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 127, i8 127>)
95-
; CHECK-NEXT: call void @dummy_vec(<2 x i8> <i8 -128, i8 -128>)
96-
; CHECK-NEXT: ret void
97-
;
98-
%x1 = call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> <i8 20, i8 15>, <2 x i8> <i8 10, i8 10>)
99-
call void @dummy_vec(<2 x i8> %x1)
100-
%x2 = call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> <i8 100, i8 200>, <2 x i8> <i8 150, i8 250>)
101-
call void @dummy_vec(<2 x i8> %x2)
102-
103-
%y1 = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 10, i8 -15>, <2 x i8> <i8 -20, i8 -15>)
104-
call void @dummy_vec(<2 x i8> %y1)
105-
%y2 = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 100, i8 10>, <2 x i8> <i8 -30, i8 -120>)
106-
call void @dummy_vec(<2 x i8> %y2)
107-
%y3 = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 -100, i8 -10>, <2 x i8> <i8 30, i8 120>)
108-
call void @dummy_vec(<2 x i8> %y3)
109-
110-
ret void
14+
define i8 @test_uadd_scalar_no_sat() {
15+
; CHECK-LABEL: @test_uadd_scalar_no_sat(
16+
; CHECK-NEXT: ret i8 30
17+
;
18+
%x = call i8 @llvm.uadd.sat.i8(i8 10, i8 20)
19+
ret i8 %x
20+
}
21+
22+
define i8 @test_uadd_scalar_sat() {
23+
; CHECK-LABEL: @test_uadd_scalar_sat(
24+
; CHECK-NEXT: ret i8 -1
25+
;
26+
%x = call i8 @llvm.uadd.sat.i8(i8 250, i8 100)
27+
ret i8 %x
28+
}
29+
30+
define i8 @test_sadd_scalar_no_sat() {
31+
; CHECK-LABEL: @test_sadd_scalar_no_sat(
32+
; CHECK-NEXT: ret i8 -10
33+
;
34+
%x = call i8 @llvm.sadd.sat.i8(i8 10, i8 -20)
35+
ret i8 %x
36+
}
37+
38+
define i8 @test_sadd_scalar_sat_pos() {
39+
; CHECK-LABEL: @test_sadd_scalar_sat_pos(
40+
; CHECK-NEXT: ret i8 127
41+
;
42+
%x = call i8 @llvm.sadd.sat.i8(i8 120, i8 10)
43+
ret i8 %x
44+
}
45+
46+
define i8 @test_sadd_scalar_sat_neg() {
47+
; CHECK-LABEL: @test_sadd_scalar_sat_neg(
48+
; CHECK-NEXT: ret i8 -128
49+
;
50+
%x = call i8 @llvm.sadd.sat.i8(i8 -120, i8 -10)
51+
ret i8 %x
52+
}
53+
54+
define <2 x i8> @test_uadd_vector_no_sat(<2 x i8> %a) {
55+
; CHECK-LABEL: @test_uadd_vector_no_sat(
56+
; CHECK-NEXT: ret <2 x i8> <i8 20, i8 30>
57+
;
58+
%x = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> <i8 10, i8 15>, <2 x i8> <i8 10, i8 15>)
59+
ret <2 x i8> %x
60+
}
61+
62+
define <2 x i8> @test_uadd_vector_sat(<2 x i8> %a) {
63+
; CHECK-LABEL: @test_uadd_vector_sat(
64+
; CHECK-NEXT: ret <2 x i8> <i8 -1, i8 -1>
65+
;
66+
%x = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> <i8 100, i8 200>, <2 x i8> <i8 250, i8 100>)
67+
ret <2 x i8> %x
68+
}
69+
70+
define <2 x i8> @test_sadd_vector_no_sat(<2 x i8> %a) {
71+
; CHECK-LABEL: @test_sadd_vector_no_sat(
72+
; CHECK-NEXT: ret <2 x i8> <i8 -10, i8 -30>
73+
;
74+
%x = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 10, i8 -15>, <2 x i8> <i8 -20, i8 -15>)
75+
ret <2 x i8> %x
76+
}
77+
78+
define <2 x i8> @test_sadd_vector_sat_pos(<2 x i8> %a) {
79+
; CHECK-LABEL: @test_sadd_vector_sat_pos(
80+
; CHECK-NEXT: ret <2 x i8> <i8 127, i8 127>
81+
;
82+
%x = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 100, i8 10>, <2 x i8> <i8 30, i8 120>)
83+
ret <2 x i8> %x
84+
}
85+
86+
define <2 x i8> @test_sadd_vector_sat_neg(<2 x i8> %a) {
87+
; CHECK-LABEL: @test_sadd_vector_sat_neg(
88+
; CHECK-NEXT: ret <2 x i8> <i8 -128, i8 -128>
89+
;
90+
%x = call <2 x i8> @llvm.sadd.sat.v2i8(<2 x i8> <i8 -100, i8 -10>, <2 x i8> <i8 -30, i8 -120>)
91+
ret <2 x i8> %x
92+
}
93+
94+
define i8 @test_usub_scalar_no_sat() {
95+
; CHECK-LABEL: @test_usub_scalar_no_sat(
96+
; CHECK-NEXT: ret i8 10
97+
;
98+
%x = call i8 @llvm.usub.sat.i8(i8 20, i8 10)
99+
ret i8 %x
100+
}
101+
102+
define i8 @test_usub_scalar_sat() {
103+
; CHECK-LABEL: @test_usub_scalar_sat(
104+
; CHECK-NEXT: ret i8 0
105+
;
106+
%x = call i8 @llvm.usub.sat.i8(i8 200, i8 250)
107+
ret i8 %x
108+
}
109+
110+
define i8 @test_ssub_scalar_no_sat() {
111+
; CHECK-LABEL: @test_ssub_scalar_no_sat(
112+
; CHECK-NEXT: ret i8 -30
113+
;
114+
%x = call i8 @llvm.ssub.sat.i8(i8 -10, i8 20)
115+
ret i8 %x
116+
}
117+
118+
define i8 @test_ssub_scalar_sat_pos() {
119+
; CHECK-LABEL: @test_ssub_scalar_sat_pos(
120+
; CHECK-NEXT: ret i8 127
121+
;
122+
%x = call i8 @llvm.ssub.sat.i8(i8 120, i8 -10)
123+
ret i8 %x
124+
}
125+
126+
define i8 @test_ssub_scalar_sat_neg() {
127+
; CHECK-LABEL: @test_ssub_scalar_sat_neg(
128+
; CHECK-NEXT: ret i8 -128
129+
;
130+
%x = call i8 @llvm.ssub.sat.i8(i8 -120, i8 10)
131+
ret i8 %x
132+
}
133+
134+
define <2 x i8> @test_usub_vector_no_sat(<2 x i8> %a) {
135+
; CHECK-LABEL: @test_usub_vector_no_sat(
136+
; CHECK-NEXT: ret <2 x i8> <i8 10, i8 5>
137+
;
138+
%x = call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> <i8 20, i8 15>, <2 x i8> <i8 10, i8 10>)
139+
ret <2 x i8> %x
140+
}
141+
142+
define <2 x i8> @test_usub_vector_sat(<2 x i8> %a) {
143+
; CHECK-LABEL: @test_usub_vector_sat(
144+
; CHECK-NEXT: ret <2 x i8> zeroinitializer
145+
;
146+
%x = call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> <i8 100, i8 200>, <2 x i8> <i8 150, i8 250>)
147+
ret <2 x i8> %x
148+
}
149+
150+
define <2 x i8> @test_ssub_vector_no_sat(<2 x i8> %a) {
151+
; CHECK-LABEL: @test_ssub_vector_no_sat(
152+
; CHECK-NEXT: ret <2 x i8> <i8 30, i8 0>
153+
;
154+
%x = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 10, i8 -15>, <2 x i8> <i8 -20, i8 -15>)
155+
ret <2 x i8> %x
156+
}
157+
158+
define <2 x i8> @test_ssub_vector_sat_pos(<2 x i8> %a) {
159+
; CHECK-LABEL: @test_ssub_vector_sat_pos(
160+
; CHECK-NEXT: ret <2 x i8> <i8 127, i8 127>
161+
;
162+
%x = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 100, i8 10>, <2 x i8> <i8 -30, i8 -120>)
163+
ret <2 x i8> %x
164+
}
165+
166+
define <2 x i8> @test_ssub_vector_sat_neg(<2 x i8> %a) {
167+
; CHECK-LABEL: @test_ssub_vector_sat_neg(
168+
; CHECK-NEXT: ret <2 x i8> <i8 -128, i8 -128>
169+
;
170+
%x = call <2 x i8> @llvm.ssub.sat.v2i8(<2 x i8> <i8 -100, i8 -10>, <2 x i8> <i8 30, i8 120>)
171+
ret <2 x i8> %x
111172
}

0 commit comments

Comments
 (0)