diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1459,6 +1459,10 @@ case Intrinsic::convert_from_fp16: case Intrinsic::convert_to_fp16: case Intrinsic::bitreverse: + case Intrinsic::amdgcn_cubeid: + case Intrinsic::amdgcn_cubema: + case Intrinsic::amdgcn_cubesc: + case Intrinsic::amdgcn_cubetc: case Intrinsic::amdgcn_fmul_legacy: case Intrinsic::x86_sse_cvtss2si: case Intrinsic::x86_sse_cvtss2si64: @@ -2303,6 +2307,53 @@ return nullptr; } +static float ConstantFoldAMDGCNCubeIntrinsic(Intrinsic::ID IntrinsicID, float S0, float S1, float S2) { + float ID, MA, SC, TC; + if (fabs(S2) >= fabs(S0) && fabs(S2) >= fabs(S1)) { + if (S2 < 0) { + ID = 5.0; + SC = -S0; + } else { + ID = 4.0; + SC = S0; + } + MA = 2.0 * S2; + TC = -S1; + } else if (fabs(S1) >= fabs(S0)) { + if (S1 < 0) { + ID = 3.0; + TC = -S2; + } else { + ID = 2.0; + TC = S2; + } + MA = 2.0 * S1; + SC = S0; + } else { + if (S0 < 0) { + ID = 1.0; + SC = S2; + } else { + ID = 0.0; + SC = -S2; + } + MA = 2.0 * S0; + TC = -S1; + } + switch (IntrinsicID) { + default: + llvm_unreachable("unhandled amdgcn cube intrinsic"); + case Intrinsic::amdgcn_cubeid: + return ID; + case Intrinsic::amdgcn_cubema: + return MA; + case Intrinsic::amdgcn_cubesc: + return SC; + case Intrinsic::amdgcn_cubetc: + return TC; + } +} + static Constant *ConstantFoldScalarCall3(StringRef Name, Intrinsic::ID IntrinsicID, Type *Ty, @@ -2314,15 +2365,27 @@ if (const auto *Op1 = dyn_cast(Operands[0])) { if (const auto *Op2 = dyn_cast(Operands[1])) { if (const auto *Op3 = dyn_cast(Operands[2])) { + APFloat V1 = Op1->getValueAPF(); + APFloat V2 = Op2->getValueAPF(); + APFloat V3 = Op3->getValueAPF(); switch (IntrinsicID) { default: break; case Intrinsic::fma: case Intrinsic::fmuladd: { - APFloat V = Op1->getValueAPF(); - V.fusedMultiplyAdd(Op2->getValueAPF(), Op3->getValueAPF(), - APFloat::rmNearestTiesToEven); + APFloat V(V1); + V.fusedMultiplyAdd(V2, V3, APFloat::rmNearestTiesToEven); return ConstantFP::get(Ty->getContext(), V); } + case Intrinsic::amdgcn_cubeid: + case Intrinsic::amdgcn_cubema: + case Intrinsic::amdgcn_cubesc: + case Intrinsic::amdgcn_cubetc: { + float V = ConstantFoldAMDGCNCubeIntrinsic(IntrinsicID, + V1.convertToFloat(), + V2.convertToFloat(), + V3.convertToFloat()); + return ConstantFP::get(Ty, V); + } } } } diff --git a/llvm/test/Analysis/ConstantFolding/AMDGPU/cubeid.ll b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubeid.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubeid.ll @@ -0,0 +1,155 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -instsimplify -S | FileCheck %s + +declare float @llvm.amdgcn.cubeid(float, float, float) + +define void @test(float* %p) { +; CHECK-LABEL: @test( +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P:%.*]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 0.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 2.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 5.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+00, float* [[P]] +; CHECK-NEXT: ret void +; + %p3p4p5 = call float @llvm.amdgcn.cubeid(float +3.0, float +4.0, float +5.0) + store volatile float %p3p4p5, float* %p + %p3p5p4 = call float @llvm.amdgcn.cubeid(float +3.0, float +5.0, float +4.0) + store volatile float %p3p5p4, float* %p + %p4p3p5 = call float @llvm.amdgcn.cubeid(float +4.0, float +3.0, float +5.0) + store volatile float %p4p3p5, float* %p + %p4p5p3 = call float @llvm.amdgcn.cubeid(float +4.0, float +5.0, float +3.0) + store volatile float %p4p5p3, float* %p + %p5p3p4 = call float @llvm.amdgcn.cubeid(float +5.0, float +3.0, float +4.0) + store volatile float %p5p3p4, float* %p + %p5p4p3 = call float @llvm.amdgcn.cubeid(float +5.0, float +4.0, float +3.0) + store volatile float %p5p4p3, float* %p + %p3p4n5 = call float @llvm.amdgcn.cubeid(float +3.0, float +4.0, float -5.0) + store volatile float %p3p4n5, float* %p + %p3p5n4 = call float @llvm.amdgcn.cubeid(float +3.0, float +5.0, float -4.0) + store volatile float %p3p5n4, float* %p + %p4p3n5 = call float @llvm.amdgcn.cubeid(float +4.0, float +3.0, float -5.0) + store volatile float %p4p3n5, float* %p + %p4p5n3 = call float @llvm.amdgcn.cubeid(float +4.0, float +5.0, float -3.0) + store volatile float %p4p5n3, float* %p + %p5p3n4 = call float @llvm.amdgcn.cubeid(float +5.0, float +3.0, float -4.0) + store volatile float %p5p3n4, float* %p + %p5p4n3 = call float @llvm.amdgcn.cubeid(float +5.0, float +4.0, float -3.0) + store volatile float %p5p4n3, float* %p + %p3n4p5 = call float @llvm.amdgcn.cubeid(float +3.0, float -4.0, float +5.0) + store volatile float %p3n4p5, float* %p + %p3n5p4 = call float @llvm.amdgcn.cubeid(float +3.0, float -5.0, float +4.0) + store volatile float %p3n5p4, float* %p + %p4n3p5 = call float @llvm.amdgcn.cubeid(float +4.0, float -3.0, float +5.0) + store volatile float %p4n3p5, float* %p + %p4n5p3 = call float @llvm.amdgcn.cubeid(float +4.0, float -5.0, float +3.0) + store volatile float %p4n5p3, float* %p + %p5n3p4 = call float @llvm.amdgcn.cubeid(float +5.0, float -3.0, float +4.0) + store volatile float %p5n3p4, float* %p + %p5n4p3 = call float @llvm.amdgcn.cubeid(float +5.0, float -4.0, float +3.0) + store volatile float %p5n4p3, float* %p + %p3n4n5 = call float @llvm.amdgcn.cubeid(float +3.0, float -4.0, float -5.0) + store volatile float %p3n4n5, float* %p + %p3n5n4 = call float @llvm.amdgcn.cubeid(float +3.0, float -5.0, float -4.0) + store volatile float %p3n5n4, float* %p + %p4n3n5 = call float @llvm.amdgcn.cubeid(float +4.0, float -3.0, float -5.0) + store volatile float %p4n3n5, float* %p + %p4n5n3 = call float @llvm.amdgcn.cubeid(float +4.0, float -5.0, float -3.0) + store volatile float %p4n5n3, float* %p + %p5n3n4 = call float @llvm.amdgcn.cubeid(float +5.0, float -3.0, float -4.0) + store volatile float %p5n3n4, float* %p + %p5n4n3 = call float @llvm.amdgcn.cubeid(float +5.0, float -4.0, float -3.0) + store volatile float %p5n4n3, float* %p + %n3p4p5 = call float @llvm.amdgcn.cubeid(float -3.0, float +4.0, float +5.0) + store volatile float %n3p4p5, float* %p + %n3p5p4 = call float @llvm.amdgcn.cubeid(float -3.0, float +5.0, float +4.0) + store volatile float %n3p5p4, float* %p + %n4p3p5 = call float @llvm.amdgcn.cubeid(float -4.0, float +3.0, float +5.0) + store volatile float %n4p3p5, float* %p + %n4p5p3 = call float @llvm.amdgcn.cubeid(float -4.0, float +5.0, float +3.0) + store volatile float %n4p5p3, float* %p + %n5p3p4 = call float @llvm.amdgcn.cubeid(float -5.0, float +3.0, float +4.0) + store volatile float %n5p3p4, float* %p + %n5p4p3 = call float @llvm.amdgcn.cubeid(float -5.0, float +4.0, float +3.0) + store volatile float %n5p4p3, float* %p + %n3p4n5 = call float @llvm.amdgcn.cubeid(float -3.0, float +4.0, float -5.0) + store volatile float %n3p4n5, float* %p + %n3p5n4 = call float @llvm.amdgcn.cubeid(float -3.0, float +5.0, float -4.0) + store volatile float %n3p5n4, float* %p + %n4p3n5 = call float @llvm.amdgcn.cubeid(float -4.0, float +3.0, float -5.0) + store volatile float %n4p3n5, float* %p + %n4p5n3 = call float @llvm.amdgcn.cubeid(float -4.0, float +5.0, float -3.0) + store volatile float %n4p5n3, float* %p + %n5p3n4 = call float @llvm.amdgcn.cubeid(float -5.0, float +3.0, float -4.0) + store volatile float %n5p3n4, float* %p + %n5p4n3 = call float @llvm.amdgcn.cubeid(float -5.0, float +4.0, float -3.0) + store volatile float %n5p4n3, float* %p + %n3n4p5 = call float @llvm.amdgcn.cubeid(float -3.0, float -4.0, float +5.0) + store volatile float %n3n4p5, float* %p + %n3n5p4 = call float @llvm.amdgcn.cubeid(float -3.0, float -5.0, float +4.0) + store volatile float %n3n5p4, float* %p + %n4n3p5 = call float @llvm.amdgcn.cubeid(float -4.0, float -3.0, float +5.0) + store volatile float %n4n3p5, float* %p + %n4n5p3 = call float @llvm.amdgcn.cubeid(float -4.0, float -5.0, float +3.0) + store volatile float %n4n5p3, float* %p + %n5n3p4 = call float @llvm.amdgcn.cubeid(float -5.0, float -3.0, float +4.0) + store volatile float %n5n3p4, float* %p + %n5n4p3 = call float @llvm.amdgcn.cubeid(float -5.0, float -4.0, float +3.0) + store volatile float %n5n4p3, float* %p + %n3n4n5 = call float @llvm.amdgcn.cubeid(float -3.0, float -4.0, float -5.0) + store volatile float %n3n4n5, float* %p + %n3n5n4 = call float @llvm.amdgcn.cubeid(float -3.0, float -5.0, float -4.0) + store volatile float %n3n5n4, float* %p + %n4n3n5 = call float @llvm.amdgcn.cubeid(float -4.0, float -3.0, float -5.0) + store volatile float %n4n3n5, float* %p + %n4n5n3 = call float @llvm.amdgcn.cubeid(float -4.0, float -5.0, float -3.0) + store volatile float %n4n5n3, float* %p + %n5n3n4 = call float @llvm.amdgcn.cubeid(float -5.0, float -3.0, float -4.0) + store volatile float %n5n3n4, float* %p + %n5n4n3 = call float @llvm.amdgcn.cubeid(float -5.0, float -4.0, float -3.0) + store volatile float %n5n4n3, float* %p + ret void +} diff --git a/llvm/test/Analysis/ConstantFolding/AMDGPU/cubema.ll b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubema.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubema.ll @@ -0,0 +1,155 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -instsimplify -S | FileCheck %s + +declare float @llvm.amdgcn.cubema(float, float, float) + +define void @test(float* %p) { +; CHECK-LABEL: @test( +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P:%.*]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float 1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: store volatile float -1.000000e+01, float* [[P]] +; CHECK-NEXT: ret void +; + %p3p4p5 = call float @llvm.amdgcn.cubema(float +3.0, float +4.0, float +5.0) + store volatile float %p3p4p5, float* %p + %p3p5p4 = call float @llvm.amdgcn.cubema(float +3.0, float +5.0, float +4.0) + store volatile float %p3p5p4, float* %p + %p4p3p5 = call float @llvm.amdgcn.cubema(float +4.0, float +3.0, float +5.0) + store volatile float %p4p3p5, float* %p + %p4p5p3 = call float @llvm.amdgcn.cubema(float +4.0, float +5.0, float +3.0) + store volatile float %p4p5p3, float* %p + %p5p3p4 = call float @llvm.amdgcn.cubema(float +5.0, float +3.0, float +4.0) + store volatile float %p5p3p4, float* %p + %p5p4p3 = call float @llvm.amdgcn.cubema(float +5.0, float +4.0, float +3.0) + store volatile float %p5p4p3, float* %p + %p3p4n5 = call float @llvm.amdgcn.cubema(float +3.0, float +4.0, float -5.0) + store volatile float %p3p4n5, float* %p + %p3p5n4 = call float @llvm.amdgcn.cubema(float +3.0, float +5.0, float -4.0) + store volatile float %p3p5n4, float* %p + %p4p3n5 = call float @llvm.amdgcn.cubema(float +4.0, float +3.0, float -5.0) + store volatile float %p4p3n5, float* %p + %p4p5n3 = call float @llvm.amdgcn.cubema(float +4.0, float +5.0, float -3.0) + store volatile float %p4p5n3, float* %p + %p5p3n4 = call float @llvm.amdgcn.cubema(float +5.0, float +3.0, float -4.0) + store volatile float %p5p3n4, float* %p + %p5p4n3 = call float @llvm.amdgcn.cubema(float +5.0, float +4.0, float -3.0) + store volatile float %p5p4n3, float* %p + %p3n4p5 = call float @llvm.amdgcn.cubema(float +3.0, float -4.0, float +5.0) + store volatile float %p3n4p5, float* %p + %p3n5p4 = call float @llvm.amdgcn.cubema(float +3.0, float -5.0, float +4.0) + store volatile float %p3n5p4, float* %p + %p4n3p5 = call float @llvm.amdgcn.cubema(float +4.0, float -3.0, float +5.0) + store volatile float %p4n3p5, float* %p + %p4n5p3 = call float @llvm.amdgcn.cubema(float +4.0, float -5.0, float +3.0) + store volatile float %p4n5p3, float* %p + %p5n3p4 = call float @llvm.amdgcn.cubema(float +5.0, float -3.0, float +4.0) + store volatile float %p5n3p4, float* %p + %p5n4p3 = call float @llvm.amdgcn.cubema(float +5.0, float -4.0, float +3.0) + store volatile float %p5n4p3, float* %p + %p3n4n5 = call float @llvm.amdgcn.cubema(float +3.0, float -4.0, float -5.0) + store volatile float %p3n4n5, float* %p + %p3n5n4 = call float @llvm.amdgcn.cubema(float +3.0, float -5.0, float -4.0) + store volatile float %p3n5n4, float* %p + %p4n3n5 = call float @llvm.amdgcn.cubema(float +4.0, float -3.0, float -5.0) + store volatile float %p4n3n5, float* %p + %p4n5n3 = call float @llvm.amdgcn.cubema(float +4.0, float -5.0, float -3.0) + store volatile float %p4n5n3, float* %p + %p5n3n4 = call float @llvm.amdgcn.cubema(float +5.0, float -3.0, float -4.0) + store volatile float %p5n3n4, float* %p + %p5n4n3 = call float @llvm.amdgcn.cubema(float +5.0, float -4.0, float -3.0) + store volatile float %p5n4n3, float* %p + %n3p4p5 = call float @llvm.amdgcn.cubema(float -3.0, float +4.0, float +5.0) + store volatile float %n3p4p5, float* %p + %n3p5p4 = call float @llvm.amdgcn.cubema(float -3.0, float +5.0, float +4.0) + store volatile float %n3p5p4, float* %p + %n4p3p5 = call float @llvm.amdgcn.cubema(float -4.0, float +3.0, float +5.0) + store volatile float %n4p3p5, float* %p + %n4p5p3 = call float @llvm.amdgcn.cubema(float -4.0, float +5.0, float +3.0) + store volatile float %n4p5p3, float* %p + %n5p3p4 = call float @llvm.amdgcn.cubema(float -5.0, float +3.0, float +4.0) + store volatile float %n5p3p4, float* %p + %n5p4p3 = call float @llvm.amdgcn.cubema(float -5.0, float +4.0, float +3.0) + store volatile float %n5p4p3, float* %p + %n3p4n5 = call float @llvm.amdgcn.cubema(float -3.0, float +4.0, float -5.0) + store volatile float %n3p4n5, float* %p + %n3p5n4 = call float @llvm.amdgcn.cubema(float -3.0, float +5.0, float -4.0) + store volatile float %n3p5n4, float* %p + %n4p3n5 = call float @llvm.amdgcn.cubema(float -4.0, float +3.0, float -5.0) + store volatile float %n4p3n5, float* %p + %n4p5n3 = call float @llvm.amdgcn.cubema(float -4.0, float +5.0, float -3.0) + store volatile float %n4p5n3, float* %p + %n5p3n4 = call float @llvm.amdgcn.cubema(float -5.0, float +3.0, float -4.0) + store volatile float %n5p3n4, float* %p + %n5p4n3 = call float @llvm.amdgcn.cubema(float -5.0, float +4.0, float -3.0) + store volatile float %n5p4n3, float* %p + %n3n4p5 = call float @llvm.amdgcn.cubema(float -3.0, float -4.0, float +5.0) + store volatile float %n3n4p5, float* %p + %n3n5p4 = call float @llvm.amdgcn.cubema(float -3.0, float -5.0, float +4.0) + store volatile float %n3n5p4, float* %p + %n4n3p5 = call float @llvm.amdgcn.cubema(float -4.0, float -3.0, float +5.0) + store volatile float %n4n3p5, float* %p + %n4n5p3 = call float @llvm.amdgcn.cubema(float -4.0, float -5.0, float +3.0) + store volatile float %n4n5p3, float* %p + %n5n3p4 = call float @llvm.amdgcn.cubema(float -5.0, float -3.0, float +4.0) + store volatile float %n5n3p4, float* %p + %n5n4p3 = call float @llvm.amdgcn.cubema(float -5.0, float -4.0, float +3.0) + store volatile float %n5n4p3, float* %p + %n3n4n5 = call float @llvm.amdgcn.cubema(float -3.0, float -4.0, float -5.0) + store volatile float %n3n4n5, float* %p + %n3n5n4 = call float @llvm.amdgcn.cubema(float -3.0, float -5.0, float -4.0) + store volatile float %n3n5n4, float* %p + %n4n3n5 = call float @llvm.amdgcn.cubema(float -4.0, float -3.0, float -5.0) + store volatile float %n4n3n5, float* %p + %n4n5n3 = call float @llvm.amdgcn.cubema(float -4.0, float -5.0, float -3.0) + store volatile float %n4n5n3, float* %p + %n5n3n4 = call float @llvm.amdgcn.cubema(float -5.0, float -3.0, float -4.0) + store volatile float %n5n3n4, float* %p + %n5n4n3 = call float @llvm.amdgcn.cubema(float -5.0, float -4.0, float -3.0) + store volatile float %n5n4n3, float* %p + ret void +} diff --git a/llvm/test/Analysis/ConstantFolding/AMDGPU/cubesc.ll b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubesc.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubesc.ll @@ -0,0 +1,155 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -instsimplify -S | FileCheck %s + +declare float @llvm.amdgcn.cubesc(float, float, float) + +define void @test(float* %p) { +; CHECK-LABEL: @test( +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P:%.*]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: ret void +; + %p3p4p5 = call float @llvm.amdgcn.cubesc(float +3.0, float +4.0, float +5.0) + store volatile float %p3p4p5, float* %p + %p3p5p4 = call float @llvm.amdgcn.cubesc(float +3.0, float +5.0, float +4.0) + store volatile float %p3p5p4, float* %p + %p4p3p5 = call float @llvm.amdgcn.cubesc(float +4.0, float +3.0, float +5.0) + store volatile float %p4p3p5, float* %p + %p4p5p3 = call float @llvm.amdgcn.cubesc(float +4.0, float +5.0, float +3.0) + store volatile float %p4p5p3, float* %p + %p5p3p4 = call float @llvm.amdgcn.cubesc(float +5.0, float +3.0, float +4.0) + store volatile float %p5p3p4, float* %p + %p5p4p3 = call float @llvm.amdgcn.cubesc(float +5.0, float +4.0, float +3.0) + store volatile float %p5p4p3, float* %p + %p3p4n5 = call float @llvm.amdgcn.cubesc(float +3.0, float +4.0, float -5.0) + store volatile float %p3p4n5, float* %p + %p3p5n4 = call float @llvm.amdgcn.cubesc(float +3.0, float +5.0, float -4.0) + store volatile float %p3p5n4, float* %p + %p4p3n5 = call float @llvm.amdgcn.cubesc(float +4.0, float +3.0, float -5.0) + store volatile float %p4p3n5, float* %p + %p4p5n3 = call float @llvm.amdgcn.cubesc(float +4.0, float +5.0, float -3.0) + store volatile float %p4p5n3, float* %p + %p5p3n4 = call float @llvm.amdgcn.cubesc(float +5.0, float +3.0, float -4.0) + store volatile float %p5p3n4, float* %p + %p5p4n3 = call float @llvm.amdgcn.cubesc(float +5.0, float +4.0, float -3.0) + store volatile float %p5p4n3, float* %p + %p3n4p5 = call float @llvm.amdgcn.cubesc(float +3.0, float -4.0, float +5.0) + store volatile float %p3n4p5, float* %p + %p3n5p4 = call float @llvm.amdgcn.cubesc(float +3.0, float -5.0, float +4.0) + store volatile float %p3n5p4, float* %p + %p4n3p5 = call float @llvm.amdgcn.cubesc(float +4.0, float -3.0, float +5.0) + store volatile float %p4n3p5, float* %p + %p4n5p3 = call float @llvm.amdgcn.cubesc(float +4.0, float -5.0, float +3.0) + store volatile float %p4n5p3, float* %p + %p5n3p4 = call float @llvm.amdgcn.cubesc(float +5.0, float -3.0, float +4.0) + store volatile float %p5n3p4, float* %p + %p5n4p3 = call float @llvm.amdgcn.cubesc(float +5.0, float -4.0, float +3.0) + store volatile float %p5n4p3, float* %p + %p3n4n5 = call float @llvm.amdgcn.cubesc(float +3.0, float -4.0, float -5.0) + store volatile float %p3n4n5, float* %p + %p3n5n4 = call float @llvm.amdgcn.cubesc(float +3.0, float -5.0, float -4.0) + store volatile float %p3n5n4, float* %p + %p4n3n5 = call float @llvm.amdgcn.cubesc(float +4.0, float -3.0, float -5.0) + store volatile float %p4n3n5, float* %p + %p4n5n3 = call float @llvm.amdgcn.cubesc(float +4.0, float -5.0, float -3.0) + store volatile float %p4n5n3, float* %p + %p5n3n4 = call float @llvm.amdgcn.cubesc(float +5.0, float -3.0, float -4.0) + store volatile float %p5n3n4, float* %p + %p5n4n3 = call float @llvm.amdgcn.cubesc(float +5.0, float -4.0, float -3.0) + store volatile float %p5n4n3, float* %p + %n3p4p5 = call float @llvm.amdgcn.cubesc(float -3.0, float +4.0, float +5.0) + store volatile float %n3p4p5, float* %p + %n3p5p4 = call float @llvm.amdgcn.cubesc(float -3.0, float +5.0, float +4.0) + store volatile float %n3p5p4, float* %p + %n4p3p5 = call float @llvm.amdgcn.cubesc(float -4.0, float +3.0, float +5.0) + store volatile float %n4p3p5, float* %p + %n4p5p3 = call float @llvm.amdgcn.cubesc(float -4.0, float +5.0, float +3.0) + store volatile float %n4p5p3, float* %p + %n5p3p4 = call float @llvm.amdgcn.cubesc(float -5.0, float +3.0, float +4.0) + store volatile float %n5p3p4, float* %p + %n5p4p3 = call float @llvm.amdgcn.cubesc(float -5.0, float +4.0, float +3.0) + store volatile float %n5p4p3, float* %p + %n3p4n5 = call float @llvm.amdgcn.cubesc(float -3.0, float +4.0, float -5.0) + store volatile float %n3p4n5, float* %p + %n3p5n4 = call float @llvm.amdgcn.cubesc(float -3.0, float +5.0, float -4.0) + store volatile float %n3p5n4, float* %p + %n4p3n5 = call float @llvm.amdgcn.cubesc(float -4.0, float +3.0, float -5.0) + store volatile float %n4p3n5, float* %p + %n4p5n3 = call float @llvm.amdgcn.cubesc(float -4.0, float +5.0, float -3.0) + store volatile float %n4p5n3, float* %p + %n5p3n4 = call float @llvm.amdgcn.cubesc(float -5.0, float +3.0, float -4.0) + store volatile float %n5p3n4, float* %p + %n5p4n3 = call float @llvm.amdgcn.cubesc(float -5.0, float +4.0, float -3.0) + store volatile float %n5p4n3, float* %p + %n3n4p5 = call float @llvm.amdgcn.cubesc(float -3.0, float -4.0, float +5.0) + store volatile float %n3n4p5, float* %p + %n3n5p4 = call float @llvm.amdgcn.cubesc(float -3.0, float -5.0, float +4.0) + store volatile float %n3n5p4, float* %p + %n4n3p5 = call float @llvm.amdgcn.cubesc(float -4.0, float -3.0, float +5.0) + store volatile float %n4n3p5, float* %p + %n4n5p3 = call float @llvm.amdgcn.cubesc(float -4.0, float -5.0, float +3.0) + store volatile float %n4n5p3, float* %p + %n5n3p4 = call float @llvm.amdgcn.cubesc(float -5.0, float -3.0, float +4.0) + store volatile float %n5n3p4, float* %p + %n5n4p3 = call float @llvm.amdgcn.cubesc(float -5.0, float -4.0, float +3.0) + store volatile float %n5n4p3, float* %p + %n3n4n5 = call float @llvm.amdgcn.cubesc(float -3.0, float -4.0, float -5.0) + store volatile float %n3n4n5, float* %p + %n3n5n4 = call float @llvm.amdgcn.cubesc(float -3.0, float -5.0, float -4.0) + store volatile float %n3n5n4, float* %p + %n4n3n5 = call float @llvm.amdgcn.cubesc(float -4.0, float -3.0, float -5.0) + store volatile float %n4n3n5, float* %p + %n4n5n3 = call float @llvm.amdgcn.cubesc(float -4.0, float -5.0, float -3.0) + store volatile float %n4n5n3, float* %p + %n5n3n4 = call float @llvm.amdgcn.cubesc(float -5.0, float -3.0, float -4.0) + store volatile float %n5n3n4, float* %p + %n5n4n3 = call float @llvm.amdgcn.cubesc(float -5.0, float -4.0, float -3.0) + store volatile float %n5n4n3, float* %p + ret void +} diff --git a/llvm/test/Analysis/ConstantFolding/AMDGPU/cubetc.ll b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubetc.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Analysis/ConstantFolding/AMDGPU/cubetc.ll @@ -0,0 +1,155 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -instsimplify -S | FileCheck %s + +declare float @llvm.amdgcn.cubetc(float, float, float) + +define void @test(float* %p) { +; CHECK-LABEL: @test( +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P:%.*]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float -3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 3.000000e+00, float* [[P]] +; CHECK-NEXT: store volatile float 4.000000e+00, float* [[P]] +; CHECK-NEXT: ret void +; + %p3p4p5 = call float @llvm.amdgcn.cubetc(float +3.0, float +4.0, float +5.0) + store volatile float %p3p4p5, float* %p + %p3p5p4 = call float @llvm.amdgcn.cubetc(float +3.0, float +5.0, float +4.0) + store volatile float %p3p5p4, float* %p + %p4p3p5 = call float @llvm.amdgcn.cubetc(float +4.0, float +3.0, float +5.0) + store volatile float %p4p3p5, float* %p + %p4p5p3 = call float @llvm.amdgcn.cubetc(float +4.0, float +5.0, float +3.0) + store volatile float %p4p5p3, float* %p + %p5p3p4 = call float @llvm.amdgcn.cubetc(float +5.0, float +3.0, float +4.0) + store volatile float %p5p3p4, float* %p + %p5p4p3 = call float @llvm.amdgcn.cubetc(float +5.0, float +4.0, float +3.0) + store volatile float %p5p4p3, float* %p + %p3p4n5 = call float @llvm.amdgcn.cubetc(float +3.0, float +4.0, float -5.0) + store volatile float %p3p4n5, float* %p + %p3p5n4 = call float @llvm.amdgcn.cubetc(float +3.0, float +5.0, float -4.0) + store volatile float %p3p5n4, float* %p + %p4p3n5 = call float @llvm.amdgcn.cubetc(float +4.0, float +3.0, float -5.0) + store volatile float %p4p3n5, float* %p + %p4p5n3 = call float @llvm.amdgcn.cubetc(float +4.0, float +5.0, float -3.0) + store volatile float %p4p5n3, float* %p + %p5p3n4 = call float @llvm.amdgcn.cubetc(float +5.0, float +3.0, float -4.0) + store volatile float %p5p3n4, float* %p + %p5p4n3 = call float @llvm.amdgcn.cubetc(float +5.0, float +4.0, float -3.0) + store volatile float %p5p4n3, float* %p + %p3n4p5 = call float @llvm.amdgcn.cubetc(float +3.0, float -4.0, float +5.0) + store volatile float %p3n4p5, float* %p + %p3n5p4 = call float @llvm.amdgcn.cubetc(float +3.0, float -5.0, float +4.0) + store volatile float %p3n5p4, float* %p + %p4n3p5 = call float @llvm.amdgcn.cubetc(float +4.0, float -3.0, float +5.0) + store volatile float %p4n3p5, float* %p + %p4n5p3 = call float @llvm.amdgcn.cubetc(float +4.0, float -5.0, float +3.0) + store volatile float %p4n5p3, float* %p + %p5n3p4 = call float @llvm.amdgcn.cubetc(float +5.0, float -3.0, float +4.0) + store volatile float %p5n3p4, float* %p + %p5n4p3 = call float @llvm.amdgcn.cubetc(float +5.0, float -4.0, float +3.0) + store volatile float %p5n4p3, float* %p + %p3n4n5 = call float @llvm.amdgcn.cubetc(float +3.0, float -4.0, float -5.0) + store volatile float %p3n4n5, float* %p + %p3n5n4 = call float @llvm.amdgcn.cubetc(float +3.0, float -5.0, float -4.0) + store volatile float %p3n5n4, float* %p + %p4n3n5 = call float @llvm.amdgcn.cubetc(float +4.0, float -3.0, float -5.0) + store volatile float %p4n3n5, float* %p + %p4n5n3 = call float @llvm.amdgcn.cubetc(float +4.0, float -5.0, float -3.0) + store volatile float %p4n5n3, float* %p + %p5n3n4 = call float @llvm.amdgcn.cubetc(float +5.0, float -3.0, float -4.0) + store volatile float %p5n3n4, float* %p + %p5n4n3 = call float @llvm.amdgcn.cubetc(float +5.0, float -4.0, float -3.0) + store volatile float %p5n4n3, float* %p + %n3p4p5 = call float @llvm.amdgcn.cubetc(float -3.0, float +4.0, float +5.0) + store volatile float %n3p4p5, float* %p + %n3p5p4 = call float @llvm.amdgcn.cubetc(float -3.0, float +5.0, float +4.0) + store volatile float %n3p5p4, float* %p + %n4p3p5 = call float @llvm.amdgcn.cubetc(float -4.0, float +3.0, float +5.0) + store volatile float %n4p3p5, float* %p + %n4p5p3 = call float @llvm.amdgcn.cubetc(float -4.0, float +5.0, float +3.0) + store volatile float %n4p5p3, float* %p + %n5p3p4 = call float @llvm.amdgcn.cubetc(float -5.0, float +3.0, float +4.0) + store volatile float %n5p3p4, float* %p + %n5p4p3 = call float @llvm.amdgcn.cubetc(float -5.0, float +4.0, float +3.0) + store volatile float %n5p4p3, float* %p + %n3p4n5 = call float @llvm.amdgcn.cubetc(float -3.0, float +4.0, float -5.0) + store volatile float %n3p4n5, float* %p + %n3p5n4 = call float @llvm.amdgcn.cubetc(float -3.0, float +5.0, float -4.0) + store volatile float %n3p5n4, float* %p + %n4p3n5 = call float @llvm.amdgcn.cubetc(float -4.0, float +3.0, float -5.0) + store volatile float %n4p3n5, float* %p + %n4p5n3 = call float @llvm.amdgcn.cubetc(float -4.0, float +5.0, float -3.0) + store volatile float %n4p5n3, float* %p + %n5p3n4 = call float @llvm.amdgcn.cubetc(float -5.0, float +3.0, float -4.0) + store volatile float %n5p3n4, float* %p + %n5p4n3 = call float @llvm.amdgcn.cubetc(float -5.0, float +4.0, float -3.0) + store volatile float %n5p4n3, float* %p + %n3n4p5 = call float @llvm.amdgcn.cubetc(float -3.0, float -4.0, float +5.0) + store volatile float %n3n4p5, float* %p + %n3n5p4 = call float @llvm.amdgcn.cubetc(float -3.0, float -5.0, float +4.0) + store volatile float %n3n5p4, float* %p + %n4n3p5 = call float @llvm.amdgcn.cubetc(float -4.0, float -3.0, float +5.0) + store volatile float %n4n3p5, float* %p + %n4n5p3 = call float @llvm.amdgcn.cubetc(float -4.0, float -5.0, float +3.0) + store volatile float %n4n5p3, float* %p + %n5n3p4 = call float @llvm.amdgcn.cubetc(float -5.0, float -3.0, float +4.0) + store volatile float %n5n3p4, float* %p + %n5n4p3 = call float @llvm.amdgcn.cubetc(float -5.0, float -4.0, float +3.0) + store volatile float %n5n4p3, float* %p + %n3n4n5 = call float @llvm.amdgcn.cubetc(float -3.0, float -4.0, float -5.0) + store volatile float %n3n4n5, float* %p + %n3n5n4 = call float @llvm.amdgcn.cubetc(float -3.0, float -5.0, float -4.0) + store volatile float %n3n5n4, float* %p + %n4n3n5 = call float @llvm.amdgcn.cubetc(float -4.0, float -3.0, float -5.0) + store volatile float %n4n3n5, float* %p + %n4n5n3 = call float @llvm.amdgcn.cubetc(float -4.0, float -5.0, float -3.0) + store volatile float %n4n5n3, float* %p + %n5n3n4 = call float @llvm.amdgcn.cubetc(float -5.0, float -3.0, float -4.0) + store volatile float %n5n3n4, float* %p + %n5n4n3 = call float @llvm.amdgcn.cubetc(float -5.0, float -4.0, float -3.0) + store volatile float %n5n4n3, float* %p + ret void +}