xref: /llvm-project/llvm/test/tools/llvm-reduce/reduce-opcodes.ll (revision 38fffa630ee80163dc65e759392ad29798905679)
1f45ef230SMatt Arsenault; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=opcodes --test FileCheck --test-arg %s --test-arg --input-file %s -o %t
2f45ef230SMatt Arsenault; RUN: FileCheck -check-prefixes=CHECK,RESULT %s < %t
3573a5de7SMatt Arsenault
4f45ef230SMatt Arsenault; CHECK-LABEL: @fdiv_fast(
53e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul fast float %a, %b, !dbg !7, !fpmath !13
63e6f7ab8SMatt Arsenault; RESULT-NEXT: ret float %op
7573a5de7SMatt Arsenaultdefine float @fdiv_fast(float %a, float %b) {
8573a5de7SMatt Arsenault  %op = fdiv fast float %a, %b, !dbg !7, !fpmath !13
9573a5de7SMatt Arsenault  ret float %op
10573a5de7SMatt Arsenault}
11573a5de7SMatt Arsenault
12f45ef230SMatt Arsenault; CHECK-LABEL: @frem_nnan(
133e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul nnan float %a, %b, !dbg !7, !fpmath !13
143e6f7ab8SMatt Arsenault; RESULT-NEXT: ret float %op
15573a5de7SMatt Arsenaultdefine float @frem_nnan(float %a, float %b) {
16573a5de7SMatt Arsenault  %op = frem nnan float %a, %b, !dbg !7, !fpmath !13
17573a5de7SMatt Arsenault  ret float %op
18573a5de7SMatt Arsenault}
19573a5de7SMatt Arsenault
20f45ef230SMatt Arsenault; CHECK-LABEL: @udiv(
213e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !7
223e6f7ab8SMatt Arsenault; RESULT-NEXT: ret i32 %op
23573a5de7SMatt Arsenaultdefine i32 @udiv(i32 %a, i32 %b) {
24573a5de7SMatt Arsenault  %op = udiv i32 %a, %b, !dbg !7
25573a5de7SMatt Arsenault  ret i32 %op
26573a5de7SMatt Arsenault}
27573a5de7SMatt Arsenault
28f45ef230SMatt Arsenault; CHECK-LABEL: @udiv_vec(
293e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul <2 x i32> %a, %b, !dbg !7
303e6f7ab8SMatt Arsenault; RESULT-NEXT: ret <2 x i32> %op
31573a5de7SMatt Arsenaultdefine <2 x i32> @udiv_vec(<2 x i32> %a, <2 x i32> %b) {
32573a5de7SMatt Arsenault  %op = udiv <2 x i32> %a, %b, !dbg !7
33573a5de7SMatt Arsenault  ret <2 x i32> %op
34573a5de7SMatt Arsenault}
35573a5de7SMatt Arsenault
36f45ef230SMatt Arsenault; CHECK-LABEL: @sdiv(
373e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul i32 %a, %b{{$}}
383e6f7ab8SMatt Arsenault; RESULT-NEXT: ret i32 %op
39573a5de7SMatt Arsenaultdefine i32 @sdiv(i32 %a, i32 %b) {
40573a5de7SMatt Arsenault  %op = sdiv i32 %a, %b
41573a5de7SMatt Arsenault  ret i32 %op
42573a5de7SMatt Arsenault}
43573a5de7SMatt Arsenault
44f45ef230SMatt Arsenault; CHECK-LABEL: @sdiv_exact(
453e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !7
463e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
47573a5de7SMatt Arsenaultdefine i32 @sdiv_exact(i32 %a, i32 %b) {
48573a5de7SMatt Arsenault  %op = sdiv exact i32 %a, %b, !dbg !7
49573a5de7SMatt Arsenault  ret i32 %op
50573a5de7SMatt Arsenault}
51573a5de7SMatt Arsenault
52f45ef230SMatt Arsenault; CHECK-LABEL: @urem(
533e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !7
543e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
55573a5de7SMatt Arsenaultdefine i32 @urem(i32 %a, i32 %b) {
56573a5de7SMatt Arsenault  %op = urem i32 %a, %b, !dbg !7
57573a5de7SMatt Arsenault  ret i32 %op
58573a5de7SMatt Arsenault}
59573a5de7SMatt Arsenault
60f45ef230SMatt Arsenault; CHECK-LABEL: @srem(
613e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !7
623e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
63573a5de7SMatt Arsenaultdefine i32 @srem(i32 %a, i32 %b) {
64573a5de7SMatt Arsenault  %op = srem i32 %a, %b, !dbg !7
65573a5de7SMatt Arsenault  ret i32 %op
66573a5de7SMatt Arsenault}
67573a5de7SMatt Arsenault
68573a5de7SMatt Arsenault; Make sure there's no crash if the IRBuilder decided to constant fold something
69f45ef230SMatt Arsenault; CHECK-LABEL: @add_constant_fold(
703e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = add i32 0, 0, !dbg !7
713e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
72573a5de7SMatt Arsenaultdefine i32 @add_constant_fold() {
73573a5de7SMatt Arsenault  %op = add i32 0, 0, !dbg !7
74573a5de7SMatt Arsenault  ret i32 %op
75573a5de7SMatt Arsenault}
76573a5de7SMatt Arsenault
77f45ef230SMatt Arsenault; CHECK-LABEL: @add(
783e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = or i32 %a, %b, !dbg !7
793e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
80573a5de7SMatt Arsenaultdefine i32 @add(i32 %a, i32 %b) {
81573a5de7SMatt Arsenault  %op = add i32 %a, %b, !dbg !7
82573a5de7SMatt Arsenault  ret i32 %op
83573a5de7SMatt Arsenault}
84573a5de7SMatt Arsenault
85f45ef230SMatt Arsenault; CHECK-LABEL: @add_nuw(
863e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = or i32 %a, %b, !dbg !7
873e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
88573a5de7SMatt Arsenaultdefine i32 @add_nuw(i32 %a, i32 %b) {
89573a5de7SMatt Arsenault  %op = add nuw i32 %a, %b, !dbg !7
90573a5de7SMatt Arsenault  ret i32 %op
91573a5de7SMatt Arsenault}
92573a5de7SMatt Arsenault
93f45ef230SMatt Arsenault; CHECK-LABEL: @add_nsw(
943e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = or i32 %a, %b, !dbg !7
953e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
96573a5de7SMatt Arsenaultdefine i32 @add_nsw(i32 %a, i32 %b) {
97573a5de7SMatt Arsenault  %op = add nsw i32 %a, %b, !dbg !7
98573a5de7SMatt Arsenault  ret i32 %op
99573a5de7SMatt Arsenault}
100573a5de7SMatt Arsenault
101f45ef230SMatt Arsenault; CHECK-LABEL: @sub_nuw_nsw(
1023e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = or i32 %a, %b, !dbg !7
1033e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
104573a5de7SMatt Arsenaultdefine i32 @sub_nuw_nsw(i32 %a, i32 %b) {
105573a5de7SMatt Arsenault  %op = sub nuw nsw i32 %a, %b, !dbg !7
106573a5de7SMatt Arsenault  ret i32 %op
107573a5de7SMatt Arsenault}
108573a5de7SMatt Arsenault
109f45ef230SMatt Arsenault; CHECK-LABEL: @workitem_id_y(
1103e6f7ab8SMatt Arsenault; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workitem.id.x(), !dbg !7
1113e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
112573a5de7SMatt Arsenaultdefine i32 @workitem_id_y() {
113573a5de7SMatt Arsenault  %id = call i32 @llvm.amdgcn.workitem.id.y(), !dbg !7
114573a5de7SMatt Arsenault  ret i32 %id
115573a5de7SMatt Arsenault}
116573a5de7SMatt Arsenault
117f45ef230SMatt Arsenault; CHECK-LABEL: @workitem_id_z(
1183e6f7ab8SMatt Arsenault; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workitem.id.x(), !dbg !7
1193e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
120573a5de7SMatt Arsenaultdefine i32 @workitem_id_z() {
121573a5de7SMatt Arsenault  %id = call i32 @llvm.amdgcn.workitem.id.z(), !dbg !7
122573a5de7SMatt Arsenault  ret i32 %id
123573a5de7SMatt Arsenault}
124573a5de7SMatt Arsenault
125f45ef230SMatt Arsenault; CHECK-LABEL: @workgroup_id_y(
1263e6f7ab8SMatt Arsenault; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workgroup.id.x(), !dbg !7
1273e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
128573a5de7SMatt Arsenaultdefine i32 @workgroup_id_y() {
129573a5de7SMatt Arsenault  %id = call i32 @llvm.amdgcn.workgroup.id.y(), !dbg !7
130573a5de7SMatt Arsenault  ret i32 %id
131573a5de7SMatt Arsenault}
132573a5de7SMatt Arsenault
133f45ef230SMatt Arsenault; CHECK-LABEL: @workgroup_id_z(
1343e6f7ab8SMatt Arsenault; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workgroup.id.x(), !dbg !7
1353e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
136573a5de7SMatt Arsenaultdefine i32 @workgroup_id_z() {
137573a5de7SMatt Arsenault  %id = call i32 @llvm.amdgcn.workgroup.id.z(), !dbg !7
138573a5de7SMatt Arsenault  ret i32 %id
139573a5de7SMatt Arsenault}
140573a5de7SMatt Arsenault
141573a5de7SMatt Arsenault; CHECK-LABEL: @minnum_nsz(
1423e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7
1433e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
144573a5de7SMatt Arsenaultdefine float @minnum_nsz(float %a, float %b) {
145573a5de7SMatt Arsenault  %op = call nsz float @llvm.minnum.f32(float %a, float %b), !dbg !7
146573a5de7SMatt Arsenault  ret float %op
147573a5de7SMatt Arsenault}
148573a5de7SMatt Arsenault
149573a5de7SMatt Arsenault; CHECK-LABEL: @maxnum_nsz(
1503e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7
1513e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
152573a5de7SMatt Arsenaultdefine float @maxnum_nsz(float %a, float %b) {
153573a5de7SMatt Arsenault  %op = call nsz float @llvm.maxnum.f32(float %a, float %b), !dbg !7
154573a5de7SMatt Arsenault  ret float %op
155573a5de7SMatt Arsenault}
156573a5de7SMatt Arsenault
157f45ef230SMatt Arsenault; CHECK-LABEL: @minimum_nsz(
1583e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7
1593e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
160573a5de7SMatt Arsenaultdefine float @minimum_nsz(float %a, float %b) {
161573a5de7SMatt Arsenault  %op = call nsz float @llvm.minimum.f32(float %a, float %b), !dbg !7
162573a5de7SMatt Arsenault  ret float %op
163573a5de7SMatt Arsenault}
164573a5de7SMatt Arsenault
165f45ef230SMatt Arsenault; CHECK-LABEL: @maximum_nsz(
1663e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7
1673e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
168573a5de7SMatt Arsenaultdefine float @maximum_nsz(float %a, float %b) {
169573a5de7SMatt Arsenault  %op = call nsz float @llvm.maximum.f32(float %a, float %b), !dbg !7
170573a5de7SMatt Arsenault  ret float %op
171573a5de7SMatt Arsenault}
172573a5de7SMatt Arsenault
173573a5de7SMatt Arsenault; CHECK-LABEL: @sqrt_ninf(
1743e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul ninf float %a, 2.000000e+00, !dbg !7
1753e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
176573a5de7SMatt Arsenaultdefine float @sqrt_ninf(float %a, float %b) {
177573a5de7SMatt Arsenault  %op = call ninf float @llvm.sqrt.f32(float %a), !dbg !7
178573a5de7SMatt Arsenault  ret float %op
179573a5de7SMatt Arsenault}
180573a5de7SMatt Arsenault
181573a5de7SMatt Arsenault; CHECK-LABEL: @sqrt_vec(
182*38fffa63SPaul Walker; RESULT-NEXT: %op = fmul <2 x float> %a, splat (float 2.000000e+00), !dbg !7
1833e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
184573a5de7SMatt Arsenaultdefine <2 x float> @sqrt_vec(<2 x float> %a, <2 x float> %b) {
185573a5de7SMatt Arsenault  %op = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %a), !dbg !7
186573a5de7SMatt Arsenault  ret <2 x float> %op
187573a5de7SMatt Arsenault}
188573a5de7SMatt Arsenault
189573a5de7SMatt Arsenault; CHECK-LABEL: @div_fixup(
1903e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = call float @llvm.fma.f32(float %a, float %b, float %c)
1913e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
192573a5de7SMatt Arsenaultdefine float @div_fixup(float %a, float %b, float %c) {
193573a5de7SMatt Arsenault  %op = call float @llvm.amdgcn.div.fixup.f32(float %a, float %b, float %c)
194573a5de7SMatt Arsenault  ret float %op
195573a5de7SMatt Arsenault}
196573a5de7SMatt Arsenault
197573a5de7SMatt Arsenault; CHECK-LABEL: @fma_legacy(
1983e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = call float @llvm.fma.f32(float %a, float %b, float %c)
1993e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
200573a5de7SMatt Arsenaultdefine float @fma_legacy(float %a, float %b, float %c) {
201573a5de7SMatt Arsenault  %op = call float @llvm.amdgcn.fma.legacy(float %a, float %b, float %c)
202573a5de7SMatt Arsenault  ret float %op
203573a5de7SMatt Arsenault}
204573a5de7SMatt Arsenault
205573a5de7SMatt Arsenault; CHECK-LABEL: @fmul_legacy(
2063e6f7ab8SMatt Arsenault; RESULT-NEXT: %op = fmul float %a, %b
2073e6f7ab8SMatt Arsenault; RESULT-NEXT: ret
208573a5de7SMatt Arsenaultdefine float @fmul_legacy(float %a, float %b) {
209573a5de7SMatt Arsenault  %op = call float @llvm.amdgcn.fmul.legacy(float %a, float %b)
210573a5de7SMatt Arsenault  ret float %op
211573a5de7SMatt Arsenault}
212573a5de7SMatt Arsenault
213573a5de7SMatt Arsenaultdeclare i32 @llvm.amdgcn.workitem.id.y()
214573a5de7SMatt Arsenaultdeclare i32 @llvm.amdgcn.workitem.id.z()
215573a5de7SMatt Arsenaultdeclare i32 @llvm.amdgcn.workgroup.id.y()
216573a5de7SMatt Arsenaultdeclare i32 @llvm.amdgcn.workgroup.id.z()
217573a5de7SMatt Arsenaultdeclare float @llvm.amdgcn.div.fixup.f32(float, float, float)
218573a5de7SMatt Arsenaultdeclare float @llvm.amdgcn.fma.legacy(float, float, float)
219573a5de7SMatt Arsenaultdeclare float @llvm.amdgcn.fmul.legacy(float, float)
220573a5de7SMatt Arsenault
221573a5de7SMatt Arsenaultdeclare float @llvm.sqrt.f32(float)
222573a5de7SMatt Arsenaultdeclare <2 x float> @llvm.sqrt.v2f32(<2 x float>)
223573a5de7SMatt Arsenaultdeclare float @llvm.maxnum.f32(float, float)
224573a5de7SMatt Arsenaultdeclare float @llvm.minnum.f32(float, float)
225573a5de7SMatt Arsenaultdeclare float @llvm.maximum.f32(float, float)
226573a5de7SMatt Arsenaultdeclare float @llvm.minimum.f32(float, float)
227573a5de7SMatt Arsenault
228573a5de7SMatt Arsenault!llvm.dbg.cu = !{!0}
229573a5de7SMatt Arsenault!opencl.ocl.version = !{!3, !3}
230573a5de7SMatt Arsenault!llvm.module.flags = !{!4, !5}
231573a5de7SMatt Arsenault!llvm.ident = !{!6}
232573a5de7SMatt Arsenault
233573a5de7SMatt Arsenault!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
234573a5de7SMatt Arsenault!1 = !DIFile(filename: "arst.c", directory: "/some/random/directory")
235573a5de7SMatt Arsenault!2 = !{}
236573a5de7SMatt Arsenault!3 = !{i32 2, i32 0}
237573a5de7SMatt Arsenault!4 = !{i32 2, !"Dwarf Version", i32 2}
238573a5de7SMatt Arsenault!5 = !{i32 2, !"Debug Info Version", i32 3}
239573a5de7SMatt Arsenault!6 = !{!""}
240573a5de7SMatt Arsenault!7 = !DILocation(line: 2, column: 6, scope: !8)
241573a5de7SMatt Arsenault!8 = distinct !DISubprogram(name: "arst", scope: !1, file: !1, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
242573a5de7SMatt Arsenault!9 = !DISubroutineType(types: !10)
243573a5de7SMatt Arsenault!10 = !{null, !11}
244573a5de7SMatt Arsenault!11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 64)
245573a5de7SMatt Arsenault!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
246573a5de7SMatt Arsenault!13 = !{float 2.500000e+00}
247