[clang] [llvm] [HLSL][DXIL][SPIRV] Create llvm dot intrinsic and use for HLSL (PR #102872)
Farzon Lotfi via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 16 10:57:55 PDT 2024
================
@@ -284,41 +303,55 @@ static bool expandClampIntrinsic(CallInst *Orig, Intrinsic::ID ClampIntrinsic) {
Builder.SetInsertPoint(Orig);
auto *MaxCall = Builder.CreateIntrinsic(
Ty, getMaxForClamp(Ty, ClampIntrinsic), {X, Min}, nullptr, "dx.max");
- auto *MinCall =
- Builder.CreateIntrinsic(Ty, getMinForClamp(Ty, ClampIntrinsic),
- {MaxCall, Max}, nullptr, "dx.min");
-
- Orig->replaceAllUsesWith(MinCall);
- Orig->eraseFromParent();
- return true;
+ return Builder.CreateIntrinsic(Ty, getMinForClamp(Ty, ClampIntrinsic),
+ {MaxCall, Max}, nullptr, "dx.min");
}
static bool expandIntrinsic(Function &F, CallInst *Orig) {
+ Value *Result = nullptr;
switch (F.getIntrinsicID()) {
case Intrinsic::abs:
- return expandAbs(Orig);
+ Result = expandAbs(Orig);
+ break;
case Intrinsic::exp:
- return expandExpIntrinsic(Orig);
+ Result = expandExpIntrinsic(Orig);
+ break;
case Intrinsic::log:
- return expandLogIntrinsic(Orig);
+ Result = expandLogIntrinsic(Orig);
+ break;
case Intrinsic::log10:
- return expandLog10Intrinsic(Orig);
+ Result = expandLog10Intrinsic(Orig);
+ break;
case Intrinsic::pow:
- return expandPowIntrinsic(Orig);
+ Result = expandPowIntrinsic(Orig);
+ break;
case Intrinsic::dx_any:
- return expandAnyIntrinsic(Orig);
+ Result = expandAnyIntrinsic(Orig);
+ break;
case Intrinsic::dx_uclamp:
case Intrinsic::dx_clamp:
- return expandClampIntrinsic(Orig, F.getIntrinsicID());
+ Result = expandClampIntrinsic(Orig, F.getIntrinsicID());
+ break;
case Intrinsic::dx_lerp:
- return expandLerpIntrinsic(Orig);
+ Result = expandLerpIntrinsic(Orig);
+ break;
case Intrinsic::dx_length:
- return expandLengthIntrinsic(Orig);
- case Intrinsic::dx_sdot:
- case Intrinsic::dx_udot:
- return expandIntegerDot(Orig, F.getIntrinsicID());
+ Result = expandLengthIntrinsic(Orig);
+ break;
+ case Intrinsic::fdot:
+ Result = expandFloatDotIntrinsic(Orig);
+ break;
+ case Intrinsic::sdot:
+ case Intrinsic::udot:
+ Result = expandIntegerDotIntrinsic(Orig, F.getIntrinsicID());
+ break;
}
- return false;
+
+ if (Result) {
+ Orig->replaceAllUsesWith(Result);
+ Orig->eraseFromParent();
+ }
----------------
farzonl wrote:
add a return true to the if block. just keep it simple and leave the `return false;`
https://github.com/llvm/llvm-project/pull/102872
More information about the cfe-commits
mailing list