blob: 6ce760daba115d868f7441f18f6f0e083f88c207 [file] [log] [blame]
Bevin Hansson44ebc2c2020-08-20 10:24:03 +02001// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
Bevin Hanssone4ca64f2020-04-08 16:28:31 +02002// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -ffixed-point -S -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,SIGNED
3// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -ffixed-point -fpadding-on-unsigned-fixed-point -S -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,UNSIGNED
Bevin Hansson39baaab2020-01-08 11:12:55 +01004
5_Accum a;
6_Fract f;
7long _Fract lf;
8unsigned _Accum ua;
9short unsigned _Accum usa;
10unsigned _Fract uf;
11
12_Sat _Accum sa;
13_Sat _Fract sf;
14_Sat long _Fract slf;
15_Sat unsigned _Accum sua;
16_Sat short unsigned _Accum susa;
17_Sat unsigned _Fract suf;
18
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020019int i;
20
21// CHECK-LABEL: @inc_a(
22// CHECK-NEXT: entry:
23// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
Bevin Hansson39baaab2020-01-08 11:12:55 +010024// CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], -32768
25// CHECK-NEXT: store i32 [[TMP1]], i32* @a, align 4
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020026// CHECK-NEXT: ret void
27//
28void inc_a() {
Bevin Hansson39baaab2020-01-08 11:12:55 +010029 a++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020030}
Bevin Hansson39baaab2020-01-08 11:12:55 +010031
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020032// CHECK-LABEL: @inc_f(
33// CHECK-NEXT: entry:
34// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @f, align 2
35// CHECK-NEXT: [[TMP1:%.*]] = sub i16 [[TMP0]], -32768
36// CHECK-NEXT: store i16 [[TMP1]], i16* @f, align 2
37// CHECK-NEXT: ret void
38//
39void inc_f() {
Bevin Hansson39baaab2020-01-08 11:12:55 +010040 f++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020041}
Bevin Hansson39baaab2020-01-08 11:12:55 +010042
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020043// CHECK-LABEL: @inc_lf(
44// CHECK-NEXT: entry:
45// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @lf, align 4
46// CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], -2147483648
47// CHECK-NEXT: store i32 [[TMP1]], i32* @lf, align 4
48// CHECK-NEXT: ret void
49//
50void inc_lf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +010051 lf++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020052}
Bevin Hansson39baaab2020-01-08 11:12:55 +010053
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020054// SIGNED-LABEL: @inc_ua(
55// SIGNED-NEXT: entry:
56// SIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @ua, align 4
57// SIGNED-NEXT: [[TMP1:%.*]] = add i32 [[TMP0]], 65536
58// SIGNED-NEXT: store i32 [[TMP1]], i32* @ua, align 4
59// SIGNED-NEXT: ret void
60//
61// UNSIGNED-LABEL: @inc_ua(
62// UNSIGNED-NEXT: entry:
63// UNSIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @ua, align 4
64// UNSIGNED-NEXT: [[TMP1:%.*]] = add i32 [[TMP0]], 32768
65// UNSIGNED-NEXT: store i32 [[TMP1]], i32* @ua, align 4
66// UNSIGNED-NEXT: ret void
67//
68void inc_ua() {
Bevin Hansson39baaab2020-01-08 11:12:55 +010069 ua++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020070}
Bevin Hansson39baaab2020-01-08 11:12:55 +010071
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020072// SIGNED-LABEL: @inc_usa(
73// SIGNED-NEXT: entry:
74// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @usa, align 2
75// SIGNED-NEXT: [[TMP1:%.*]] = add i16 [[TMP0]], 256
76// SIGNED-NEXT: store i16 [[TMP1]], i16* @usa, align 2
77// SIGNED-NEXT: ret void
78//
79// UNSIGNED-LABEL: @inc_usa(
80// UNSIGNED-NEXT: entry:
81// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @usa, align 2
82// UNSIGNED-NEXT: [[TMP1:%.*]] = add i16 [[TMP0]], 128
83// UNSIGNED-NEXT: store i16 [[TMP1]], i16* @usa, align 2
84// UNSIGNED-NEXT: ret void
85//
86void inc_usa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +010087 usa++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020088}
Bevin Hansson39baaab2020-01-08 11:12:55 +010089
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020090// SIGNED-LABEL: @inc_uf(
91// SIGNED-NEXT: entry:
92// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
Juneyoung Lee395607a2020-11-29 04:26:44 +090093// SIGNED-NEXT: [[TMP1:%.*]] = add i16 [[TMP0]], poison
Bevin Hansson44ebc2c2020-08-20 10:24:03 +020094// SIGNED-NEXT: store i16 [[TMP1]], i16* @uf, align 2
95// SIGNED-NEXT: ret void
96//
97// UNSIGNED-LABEL: @inc_uf(
98// UNSIGNED-NEXT: entry:
99// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
100// UNSIGNED-NEXT: [[TMP1:%.*]] = add i16 [[TMP0]], -32768
101// UNSIGNED-NEXT: store i16 [[TMP1]], i16* @uf, align 2
102// UNSIGNED-NEXT: ret void
103//
104void inc_uf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100105 uf++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200106}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100107
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200108// CHECK-LABEL: @inc_sa(
109// CHECK-NEXT: entry:
110// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @sa, align 4
111// CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[TMP0]], i32 -32768)
112// CHECK-NEXT: store i32 [[TMP1]], i32* @sa, align 4
113// CHECK-NEXT: ret void
114//
115void inc_sa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100116 sa++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200117}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100118
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200119// CHECK-LABEL: @inc_sf(
120// CHECK-NEXT: entry:
121// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @sf, align 2
122// CHECK-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 [[TMP0]], i16 -32768)
123// CHECK-NEXT: store i16 [[TMP1]], i16* @sf, align 2
124// CHECK-NEXT: ret void
125//
126void inc_sf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100127 sf++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200128}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100129
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200130// CHECK-LABEL: @inc_slf(
131// CHECK-NEXT: entry:
132// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @slf, align 4
133// CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[TMP0]], i32 -2147483648)
134// CHECK-NEXT: store i32 [[TMP1]], i32* @slf, align 4
135// CHECK-NEXT: ret void
136//
137void inc_slf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100138 slf++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200139}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100140
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200141// SIGNED-LABEL: @inc_sua(
142// SIGNED-NEXT: entry:
143// SIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @sua, align 4
144// SIGNED-NEXT: [[TMP1:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[TMP0]], i32 65536)
145// SIGNED-NEXT: store i32 [[TMP1]], i32* @sua, align 4
146// SIGNED-NEXT: ret void
147//
148// UNSIGNED-LABEL: @inc_sua(
149// UNSIGNED-NEXT: entry:
150// UNSIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @sua, align 4
Bevin Hansson808ac542020-08-20 14:36:35 +0200151// UNSIGNED-NEXT: [[TMP1:%.*]] = call i32 @llvm.sadd.sat.i32(i32 [[TMP0]], i32 32768)
152// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i32 [[TMP1]] to i31
153// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i31 [[RESIZE]] to i32
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200154// UNSIGNED-NEXT: store i32 [[RESIZE1]], i32* @sua, align 4
155// UNSIGNED-NEXT: ret void
156//
157void inc_sua() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100158 sua++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200159}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100160
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200161// SIGNED-LABEL: @inc_susa(
162// SIGNED-NEXT: entry:
163// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
164// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.uadd.sat.i16(i16 [[TMP0]], i16 256)
165// SIGNED-NEXT: store i16 [[TMP1]], i16* @susa, align 2
166// SIGNED-NEXT: ret void
167//
168// UNSIGNED-LABEL: @inc_susa(
169// UNSIGNED-NEXT: entry:
170// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200171// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.sadd.sat.i16(i16 [[TMP0]], i16 128)
172// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[TMP1]] to i15
173// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200174// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @susa, align 2
175// UNSIGNED-NEXT: ret void
176//
177void inc_susa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100178 susa++;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200179}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100180
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200181// SIGNED-LABEL: @inc_suf(
182// SIGNED-NEXT: entry:
183// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
184// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.uadd.sat.i16(i16 [[TMP0]], i16 -1)
185// SIGNED-NEXT: store i16 [[TMP1]], i16* @suf, align 2
186// SIGNED-NEXT: ret void
187//
188// UNSIGNED-LABEL: @inc_suf(
189// UNSIGNED-NEXT: entry:
190// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200191// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.sadd.sat.i16(i16 [[TMP0]], i16 32767)
192// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[TMP1]] to i15
193// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200194// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @suf, align 2
195// UNSIGNED-NEXT: ret void
196//
197void inc_suf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100198 suf++;
199}
200
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200201
202// CHECK-LABEL: @dec_a(
203// CHECK-NEXT: entry:
204// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
Bevin Hansson39baaab2020-01-08 11:12:55 +0100205// CHECK-NEXT: [[TMP1:%.*]] = add i32 [[TMP0]], -32768
206// CHECK-NEXT: store i32 [[TMP1]], i32* @a, align 4
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200207// CHECK-NEXT: ret void
208//
209void dec_a() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100210 a--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200211}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100212
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200213// CHECK-LABEL: @dec_f(
214// CHECK-NEXT: entry:
215// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @f, align 2
216// CHECK-NEXT: [[TMP1:%.*]] = add i16 [[TMP0]], -32768
217// CHECK-NEXT: store i16 [[TMP1]], i16* @f, align 2
218// CHECK-NEXT: ret void
219//
220void dec_f() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100221 f--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200222}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100223
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200224// CHECK-LABEL: @dec_lf(
225// CHECK-NEXT: entry:
226// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @lf, align 4
227// CHECK-NEXT: [[TMP1:%.*]] = add i32 [[TMP0]], -2147483648
228// CHECK-NEXT: store i32 [[TMP1]], i32* @lf, align 4
229// CHECK-NEXT: ret void
230//
231void dec_lf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100232 lf--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200233}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100234
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200235// SIGNED-LABEL: @dec_ua(
236// SIGNED-NEXT: entry:
237// SIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @ua, align 4
238// SIGNED-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], 65536
239// SIGNED-NEXT: store i32 [[TMP1]], i32* @ua, align 4
240// SIGNED-NEXT: ret void
241//
242// UNSIGNED-LABEL: @dec_ua(
243// UNSIGNED-NEXT: entry:
244// UNSIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @ua, align 4
245// UNSIGNED-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], 32768
246// UNSIGNED-NEXT: store i32 [[TMP1]], i32* @ua, align 4
247// UNSIGNED-NEXT: ret void
248//
249void dec_ua() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100250 ua--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200251}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100252
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200253// SIGNED-LABEL: @dec_usa(
254// SIGNED-NEXT: entry:
255// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @usa, align 2
256// SIGNED-NEXT: [[TMP1:%.*]] = sub i16 [[TMP0]], 256
257// SIGNED-NEXT: store i16 [[TMP1]], i16* @usa, align 2
258// SIGNED-NEXT: ret void
259//
260// UNSIGNED-LABEL: @dec_usa(
261// UNSIGNED-NEXT: entry:
262// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @usa, align 2
263// UNSIGNED-NEXT: [[TMP1:%.*]] = sub i16 [[TMP0]], 128
264// UNSIGNED-NEXT: store i16 [[TMP1]], i16* @usa, align 2
265// UNSIGNED-NEXT: ret void
266//
267void dec_usa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100268 usa--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200269}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100270
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200271// SIGNED-LABEL: @dec_uf(
272// SIGNED-NEXT: entry:
273// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
Juneyoung Lee395607a2020-11-29 04:26:44 +0900274// SIGNED-NEXT: [[TMP1:%.*]] = sub i16 [[TMP0]], poison
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200275// SIGNED-NEXT: store i16 [[TMP1]], i16* @uf, align 2
276// SIGNED-NEXT: ret void
277//
278// UNSIGNED-LABEL: @dec_uf(
279// UNSIGNED-NEXT: entry:
280// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
281// UNSIGNED-NEXT: [[TMP1:%.*]] = sub i16 [[TMP0]], -32768
282// UNSIGNED-NEXT: store i16 [[TMP1]], i16* @uf, align 2
283// UNSIGNED-NEXT: ret void
284//
285void dec_uf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100286 uf--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200287}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100288
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200289// CHECK-LABEL: @dec_sa(
290// CHECK-NEXT: entry:
291// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @sa, align 4
292// CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.sadd.sat.i32(i32 [[TMP0]], i32 -32768)
293// CHECK-NEXT: store i32 [[TMP1]], i32* @sa, align 4
294// CHECK-NEXT: ret void
295//
296void dec_sa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100297 sa--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200298}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100299
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200300// CHECK-LABEL: @dec_sf(
301// CHECK-NEXT: entry:
302// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @sf, align 2
303// CHECK-NEXT: [[TMP1:%.*]] = call i16 @llvm.sadd.sat.i16(i16 [[TMP0]], i16 -32768)
304// CHECK-NEXT: store i16 [[TMP1]], i16* @sf, align 2
305// CHECK-NEXT: ret void
306//
307void dec_sf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100308 sf--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200309}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100310
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200311// CHECK-LABEL: @dec_slf(
312// CHECK-NEXT: entry:
313// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @slf, align 4
314// CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.sadd.sat.i32(i32 [[TMP0]], i32 -2147483648)
315// CHECK-NEXT: store i32 [[TMP1]], i32* @slf, align 4
316// CHECK-NEXT: ret void
317//
318void dec_slf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100319 slf--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200320}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100321
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200322// SIGNED-LABEL: @dec_sua(
323// SIGNED-NEXT: entry:
324// SIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @sua, align 4
325// SIGNED-NEXT: [[TMP1:%.*]] = call i32 @llvm.usub.sat.i32(i32 [[TMP0]], i32 65536)
326// SIGNED-NEXT: store i32 [[TMP1]], i32* @sua, align 4
327// SIGNED-NEXT: ret void
328//
329// UNSIGNED-LABEL: @dec_sua(
330// UNSIGNED-NEXT: entry:
331// UNSIGNED-NEXT: [[TMP0:%.*]] = load i32, i32* @sua, align 4
Bevin Hansson808ac542020-08-20 14:36:35 +0200332// UNSIGNED-NEXT: [[TMP1:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[TMP0]], i32 32768)
333// UNSIGNED-NEXT: [[TMP2:%.*]] = icmp slt i32 [[TMP1]], 0
334// UNSIGNED-NEXT: [[SATMIN:%.*]] = select i1 [[TMP2]], i32 0, i32 [[TMP1]]
335// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i32 [[SATMIN]] to i31
336// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i31 [[RESIZE]] to i32
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200337// UNSIGNED-NEXT: store i32 [[RESIZE1]], i32* @sua, align 4
338// UNSIGNED-NEXT: ret void
339//
340void dec_sua() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100341 sua--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200342}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100343
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200344// SIGNED-LABEL: @dec_susa(
345// SIGNED-NEXT: entry:
346// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
347// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.usub.sat.i16(i16 [[TMP0]], i16 256)
348// SIGNED-NEXT: store i16 [[TMP1]], i16* @susa, align 2
349// SIGNED-NEXT: ret void
350//
351// UNSIGNED-LABEL: @dec_susa(
352// UNSIGNED-NEXT: entry:
353// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200354// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 [[TMP0]], i16 128)
355// UNSIGNED-NEXT: [[TMP2:%.*]] = icmp slt i16 [[TMP1]], 0
356// UNSIGNED-NEXT: [[SATMIN:%.*]] = select i1 [[TMP2]], i16 0, i16 [[TMP1]]
357// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[SATMIN]] to i15
358// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200359// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @susa, align 2
360// UNSIGNED-NEXT: ret void
361//
362void dec_susa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100363 susa--;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200364}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100365
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200366// SIGNED-LABEL: @dec_suf(
367// SIGNED-NEXT: entry:
368// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
369// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.usub.sat.i16(i16 [[TMP0]], i16 -1)
370// SIGNED-NEXT: store i16 [[TMP1]], i16* @suf, align 2
371// SIGNED-NEXT: ret void
372//
373// UNSIGNED-LABEL: @dec_suf(
374// UNSIGNED-NEXT: entry:
375// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200376// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 [[TMP0]], i16 32767)
377// UNSIGNED-NEXT: [[TMP2:%.*]] = icmp slt i16 [[TMP1]], 0
378// UNSIGNED-NEXT: [[SATMIN:%.*]] = select i1 [[TMP2]], i16 0, i16 [[TMP1]]
379// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[SATMIN]] to i15
380// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200381// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @suf, align 2
382// UNSIGNED-NEXT: ret void
383//
384void dec_suf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100385 suf--;
386}
387
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200388
389// CHECK-LABEL: @neg_a(
390// CHECK-NEXT: entry:
391// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
Bevin Hansson39baaab2020-01-08 11:12:55 +0100392// CHECK-NEXT: [[TMP1:%.*]] = sub i32 0, [[TMP0]]
393// CHECK-NEXT: store i32 [[TMP1]], i32* @a, align 4
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200394// CHECK-NEXT: ret void
395//
396void neg_a() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100397 a = -a;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200398}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100399
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200400// CHECK-LABEL: @neg_f(
401// CHECK-NEXT: entry:
402// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @f, align 2
403// CHECK-NEXT: [[TMP1:%.*]] = sub i16 0, [[TMP0]]
404// CHECK-NEXT: store i16 [[TMP1]], i16* @f, align 2
405// CHECK-NEXT: ret void
406//
407void neg_f() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100408 f = -f;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200409}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100410
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200411// CHECK-LABEL: @neg_usa(
412// CHECK-NEXT: entry:
413// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @usa, align 2
414// CHECK-NEXT: [[TMP1:%.*]] = sub i16 0, [[TMP0]]
415// CHECK-NEXT: store i16 [[TMP1]], i16* @usa, align 2
416// CHECK-NEXT: ret void
417//
418void neg_usa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100419 usa = -usa;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200420}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100421
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200422// CHECK-LABEL: @neg_uf(
423// CHECK-NEXT: entry:
424// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
425// CHECK-NEXT: [[TMP1:%.*]] = sub i16 0, [[TMP0]]
426// CHECK-NEXT: store i16 [[TMP1]], i16* @uf, align 2
427// CHECK-NEXT: ret void
428//
429void neg_uf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100430 uf = -uf;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200431}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100432
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200433// CHECK-LABEL: @neg_sa(
434// CHECK-NEXT: entry:
435// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @sa, align 4
436// CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.ssub.sat.i32(i32 0, i32 [[TMP0]])
437// CHECK-NEXT: store i32 [[TMP1]], i32* @sa, align 4
438// CHECK-NEXT: ret void
439//
440void neg_sa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100441 sa = -sa;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200442}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100443
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200444// CHECK-LABEL: @neg_sf(
445// CHECK-NEXT: entry:
446// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @sf, align 2
447// CHECK-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 0, i16 [[TMP0]])
448// CHECK-NEXT: store i16 [[TMP1]], i16* @sf, align 2
449// CHECK-NEXT: ret void
450//
451void neg_sf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100452 sf = -sf;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200453}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100454
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200455// SIGNED-LABEL: @neg_susa(
456// SIGNED-NEXT: entry:
457// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
458// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.usub.sat.i16(i16 0, i16 [[TMP0]])
459// SIGNED-NEXT: store i16 [[TMP1]], i16* @susa, align 2
460// SIGNED-NEXT: ret void
461//
462// UNSIGNED-LABEL: @neg_susa(
463// UNSIGNED-NEXT: entry:
464// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200465// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 0, i16 [[TMP0]])
466// UNSIGNED-NEXT: [[TMP2:%.*]] = icmp slt i16 [[TMP1]], 0
467// UNSIGNED-NEXT: [[SATMIN:%.*]] = select i1 [[TMP2]], i16 0, i16 [[TMP1]]
468// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[SATMIN]] to i15
469// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200470// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @susa, align 2
471// UNSIGNED-NEXT: ret void
472//
473void neg_susa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100474 susa = -susa;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200475}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100476
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200477// SIGNED-LABEL: @neg_suf(
478// SIGNED-NEXT: entry:
479// SIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
480// SIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.usub.sat.i16(i16 0, i16 [[TMP0]])
481// SIGNED-NEXT: store i16 [[TMP1]], i16* @suf, align 2
482// SIGNED-NEXT: ret void
483//
484// UNSIGNED-LABEL: @neg_suf(
485// UNSIGNED-NEXT: entry:
486// UNSIGNED-NEXT: [[TMP0:%.*]] = load i16, i16* @suf, align 2
Bevin Hansson808ac542020-08-20 14:36:35 +0200487// UNSIGNED-NEXT: [[TMP1:%.*]] = call i16 @llvm.ssub.sat.i16(i16 0, i16 [[TMP0]])
488// UNSIGNED-NEXT: [[TMP2:%.*]] = icmp slt i16 [[TMP1]], 0
489// UNSIGNED-NEXT: [[SATMIN:%.*]] = select i1 [[TMP2]], i16 0, i16 [[TMP1]]
490// UNSIGNED-NEXT: [[RESIZE:%.*]] = trunc i16 [[SATMIN]] to i15
491// UNSIGNED-NEXT: [[RESIZE1:%.*]] = zext i15 [[RESIZE]] to i16
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200492// UNSIGNED-NEXT: store i16 [[RESIZE1]], i16* @suf, align 2
493// UNSIGNED-NEXT: ret void
494//
495void neg_suf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100496 suf = -suf;
497}
498
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200499
500// CHECK-LABEL: @plus_a(
501// CHECK-NEXT: entry:
502// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
Bevin Hansson39baaab2020-01-08 11:12:55 +0100503// CHECK-NEXT: store i32 [[TMP0]], i32* @a, align 4
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200504// CHECK-NEXT: ret void
505//
506void plus_a() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100507 a = +a;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200508}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100509
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200510// CHECK-LABEL: @plus_uf(
511// CHECK-NEXT: entry:
512// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
513// CHECK-NEXT: store i16 [[TMP0]], i16* @uf, align 2
514// CHECK-NEXT: ret void
515//
516void plus_uf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100517 uf = +uf;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200518}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100519
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200520// CHECK-LABEL: @plus_sa(
521// CHECK-NEXT: entry:
522// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @sa, align 4
523// CHECK-NEXT: store i32 [[TMP0]], i32* @sa, align 4
524// CHECK-NEXT: ret void
525//
526void plus_sa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100527 sa = +sa;
528}
529
Bevin Hansson39baaab2020-01-08 11:12:55 +0100530
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200531// CHECK-LABEL: @not_a(
532// CHECK-NEXT: entry:
533// CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* @a, align 4
Bevin Hansson39baaab2020-01-08 11:12:55 +0100534// CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
535// CHECK-NEXT: [[LNOT:%.*]] = xor i1 [[TOBOOL]], true
536// CHECK-NEXT: [[LNOT_EXT:%.*]] = zext i1 [[LNOT]] to i32
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200537// CHECK-NEXT: store i32 [[LNOT_EXT]], i32* @i, align 4
538// CHECK-NEXT: ret void
539//
540void not_a() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100541 i = !a;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200542}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100543
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200544// CHECK-LABEL: @not_uf(
545// CHECK-NEXT: entry:
546// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @uf, align 2
547// CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i16 [[TMP0]], 0
548// CHECK-NEXT: [[LNOT:%.*]] = xor i1 [[TOBOOL]], true
549// CHECK-NEXT: [[LNOT_EXT:%.*]] = zext i1 [[LNOT]] to i32
550// CHECK-NEXT: store i32 [[LNOT_EXT]], i32* @i, align 4
551// CHECK-NEXT: ret void
552//
553void not_uf() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100554 i = !uf;
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200555}
Bevin Hansson39baaab2020-01-08 11:12:55 +0100556
Bevin Hansson44ebc2c2020-08-20 10:24:03 +0200557// CHECK-LABEL: @not_susa(
558// CHECK-NEXT: entry:
559// CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* @susa, align 2
560// CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i16 [[TMP0]], 0
561// CHECK-NEXT: [[LNOT:%.*]] = xor i1 [[TOBOOL]], true
562// CHECK-NEXT: [[LNOT_EXT:%.*]] = zext i1 [[LNOT]] to i32
563// CHECK-NEXT: store i32 [[LNOT_EXT]], i32* @i, align 4
564// CHECK-NEXT: ret void
565//
566void not_susa() {
Bevin Hansson39baaab2020-01-08 11:12:55 +0100567 i = !susa;
568}