247 lines · plain
1; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=opcodes --test FileCheck --test-arg %s --test-arg --input-file %s -o %t2; RUN: FileCheck -check-prefixes=CHECK,RESULT %s < %t3 4; CHECK-LABEL: @fdiv_fast(5; RESULT-NEXT: %op = fmul fast float %a, %b, !dbg !7, !fpmath !136; RESULT-NEXT: ret float %op7define float @fdiv_fast(float %a, float %b) {8 %op = fdiv fast float %a, %b, !dbg !7, !fpmath !139 ret float %op10}11 12; CHECK-LABEL: @frem_nnan(13; RESULT-NEXT: %op = fmul nnan float %a, %b, !dbg !7, !fpmath !1314; RESULT-NEXT: ret float %op15define float @frem_nnan(float %a, float %b) {16 %op = frem nnan float %a, %b, !dbg !7, !fpmath !1317 ret float %op18}19 20; CHECK-LABEL: @udiv(21; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !722; RESULT-NEXT: ret i32 %op23define i32 @udiv(i32 %a, i32 %b) {24 %op = udiv i32 %a, %b, !dbg !725 ret i32 %op26}27 28; CHECK-LABEL: @udiv_vec(29; RESULT-NEXT: %op = mul <2 x i32> %a, %b, !dbg !730; RESULT-NEXT: ret <2 x i32> %op31define <2 x i32> @udiv_vec(<2 x i32> %a, <2 x i32> %b) {32 %op = udiv <2 x i32> %a, %b, !dbg !733 ret <2 x i32> %op34}35 36; CHECK-LABEL: @sdiv(37; RESULT-NEXT: %op = mul i32 %a, %b{{$}}38; RESULT-NEXT: ret i32 %op39define i32 @sdiv(i32 %a, i32 %b) {40 %op = sdiv i32 %a, %b41 ret i32 %op42}43 44; CHECK-LABEL: @sdiv_exact(45; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !746; RESULT-NEXT: ret47define i32 @sdiv_exact(i32 %a, i32 %b) {48 %op = sdiv exact i32 %a, %b, !dbg !749 ret i32 %op50}51 52; CHECK-LABEL: @urem(53; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !754; RESULT-NEXT: ret55define i32 @urem(i32 %a, i32 %b) {56 %op = urem i32 %a, %b, !dbg !757 ret i32 %op58}59 60; CHECK-LABEL: @srem(61; RESULT-NEXT: %op = mul i32 %a, %b, !dbg !762; RESULT-NEXT: ret63define i32 @srem(i32 %a, i32 %b) {64 %op = srem i32 %a, %b, !dbg !765 ret i32 %op66}67 68; Make sure there's no crash if the IRBuilder decided to constant fold something69; CHECK-LABEL: @add_constant_fold(70; RESULT-NEXT: %op = add i32 0, 0, !dbg !771; RESULT-NEXT: ret72define i32 @add_constant_fold() {73 %op = add i32 0, 0, !dbg !774 ret i32 %op75}76 77; CHECK-LABEL: @add(78; RESULT-NEXT: %op = or i32 %a, %b, !dbg !779; RESULT-NEXT: ret80define i32 @add(i32 %a, i32 %b) {81 %op = add i32 %a, %b, !dbg !782 ret i32 %op83}84 85; CHECK-LABEL: @add_nuw(86; RESULT-NEXT: %op = or i32 %a, %b, !dbg !787; RESULT-NEXT: ret88define i32 @add_nuw(i32 %a, i32 %b) {89 %op = add nuw i32 %a, %b, !dbg !790 ret i32 %op91}92 93; CHECK-LABEL: @add_nsw(94; RESULT-NEXT: %op = or i32 %a, %b, !dbg !795; RESULT-NEXT: ret96define i32 @add_nsw(i32 %a, i32 %b) {97 %op = add nsw i32 %a, %b, !dbg !798 ret i32 %op99}100 101; CHECK-LABEL: @sub_nuw_nsw(102; RESULT-NEXT: %op = or i32 %a, %b, !dbg !7103; RESULT-NEXT: ret104define i32 @sub_nuw_nsw(i32 %a, i32 %b) {105 %op = sub nuw nsw i32 %a, %b, !dbg !7106 ret i32 %op107}108 109; CHECK-LABEL: @workitem_id_y(110; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workitem.id.x(), !dbg !7111; RESULT-NEXT: ret112define i32 @workitem_id_y() {113 %id = call i32 @llvm.amdgcn.workitem.id.y(), !dbg !7114 ret i32 %id115}116 117; CHECK-LABEL: @workitem_id_z(118; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workitem.id.x(), !dbg !7119; RESULT-NEXT: ret120define i32 @workitem_id_z() {121 %id = call i32 @llvm.amdgcn.workitem.id.z(), !dbg !7122 ret i32 %id123}124 125; CHECK-LABEL: @workgroup_id_y(126; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workgroup.id.x(), !dbg !7127; RESULT-NEXT: ret128define i32 @workgroup_id_y() {129 %id = call i32 @llvm.amdgcn.workgroup.id.y(), !dbg !7130 ret i32 %id131}132 133; CHECK-LABEL: @workgroup_id_z(134; RESULT-NEXT: %id = call i32 @llvm.amdgcn.workgroup.id.x(), !dbg !7135; RESULT-NEXT: ret136define i32 @workgroup_id_z() {137 %id = call i32 @llvm.amdgcn.workgroup.id.z(), !dbg !7138 ret i32 %id139}140 141; CHECK-LABEL: @minnum_nsz(142; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7143; RESULT-NEXT: ret144define float @minnum_nsz(float %a, float %b) {145 %op = call nsz float @llvm.minnum.f32(float %a, float %b), !dbg !7146 ret float %op147}148 149; CHECK-LABEL: @maxnum_nsz(150; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7151; RESULT-NEXT: ret152define float @maxnum_nsz(float %a, float %b) {153 %op = call nsz float @llvm.maxnum.f32(float %a, float %b), !dbg !7154 ret float %op155}156 157; CHECK-LABEL: @minimum_nsz(158; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7159; RESULT-NEXT: ret160define float @minimum_nsz(float %a, float %b) {161 %op = call nsz float @llvm.minimum.f32(float %a, float %b), !dbg !7162 ret float %op163}164 165; CHECK-LABEL: @maximum_nsz(166; RESULT-NEXT: %op = fmul nsz float %a, %b, !dbg !7167; RESULT-NEXT: ret168define float @maximum_nsz(float %a, float %b) {169 %op = call nsz float @llvm.maximum.f32(float %a, float %b), !dbg !7170 ret float %op171}172 173; CHECK-LABEL: @sqrt_ninf(174; RESULT-NEXT: %op = fmul ninf float %a, 2.000000e+00, !dbg !7175; RESULT-NEXT: ret176define float @sqrt_ninf(float %a, float %b) {177 %op = call ninf float @llvm.sqrt.f32(float %a), !dbg !7178 ret float %op179}180 181; CHECK-LABEL: @sqrt_vec(182; RESULT-NEXT: %op = fmul <2 x float> %a, splat (float 2.000000e+00), !dbg !7183; RESULT-NEXT: ret184define <2 x float> @sqrt_vec(<2 x float> %a, <2 x float> %b) {185 %op = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %a), !dbg !7186 ret <2 x float> %op187}188 189; CHECK-LABEL: @div_fixup(190; RESULT-NEXT: %op = call float @llvm.fma.f32(float %a, float %b, float %c)191; RESULT-NEXT: ret192define float @div_fixup(float %a, float %b, float %c) {193 %op = call float @llvm.amdgcn.div.fixup.f32(float %a, float %b, float %c)194 ret float %op195}196 197; CHECK-LABEL: @fma_legacy(198; RESULT-NEXT: %op = call float @llvm.fma.f32(float %a, float %b, float %c)199; RESULT-NEXT: ret200define float @fma_legacy(float %a, float %b, float %c) {201 %op = call float @llvm.amdgcn.fma.legacy(float %a, float %b, float %c)202 ret float %op203}204 205; CHECK-LABEL: @fmul_legacy(206; RESULT-NEXT: %op = fmul float %a, %b207; RESULT-NEXT: ret208define float @fmul_legacy(float %a, float %b) {209 %op = call float @llvm.amdgcn.fmul.legacy(float %a, float %b)210 ret float %op211}212 213declare i32 @llvm.amdgcn.workitem.id.y()214declare i32 @llvm.amdgcn.workitem.id.z()215declare i32 @llvm.amdgcn.workgroup.id.y()216declare i32 @llvm.amdgcn.workgroup.id.z()217declare float @llvm.amdgcn.div.fixup.f32(float, float, float)218declare float @llvm.amdgcn.fma.legacy(float, float, float)219declare float @llvm.amdgcn.fmul.legacy(float, float)220 221declare float @llvm.sqrt.f32(float)222declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)223declare float @llvm.maxnum.f32(float, float)224declare float @llvm.minnum.f32(float, float)225declare float @llvm.maximum.f32(float, float)226declare float @llvm.minimum.f32(float, float)227 228!llvm.dbg.cu = !{!0}229!opencl.ocl.version = !{!3, !3}230!llvm.module.flags = !{!4, !5}231!llvm.ident = !{!6}232 233!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)234!1 = !DIFile(filename: "arst.c", directory: "/some/random/directory")235!2 = !{}236!3 = !{i32 2, i32 0}237!4 = !{i32 2, !"Dwarf Version", i32 2}238!5 = !{i32 2, !"Debug Info Version", i32 3}239!6 = !{!""}240!7 = !DILocation(line: 2, column: 6, scope: !8)241!8 = distinct !DISubprogram(name: "arst", scope: !1, file: !1, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)242!9 = !DISubroutineType(types: !10)243!10 = !{null, !11}244!11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 64)245!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)246!13 = !{float 2.500000e+00}247