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