[clang] [llvm] Add cross builtins and cross HLSL function to DirectX and SPIR-V backend (PR #109180)
Farzon Lotfi via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 20 13:03:06 PDT 2024
================
@@ -73,6 +74,42 @@ static Value *expandAbs(CallInst *Orig) {
"dx.max");
}
+static Value *expandCrossIntrinsic(CallInst *Orig) {
+
+ VectorType *VT = cast<VectorType>(Orig->getType());
+ if (cast<FixedVectorType>(VT)->getNumElements() != 3)
+ report_fatal_error(Twine("return vector must have exactly 3 elements"),
+ /* gen_crash_diag=*/false);
+
+ Value *op0 = Orig->getOperand(0);
+ Value *op1 = Orig->getOperand(1);
+ IRBuilder<> Builder(Orig);
+
+ Value *op0_x = Builder.CreateExtractElement(op0, (uint64_t)0);
----------------
farzonl wrote:
NIT: in general I don't think this matters but since cross product is crossing over elements
with `x1*y2 - x2*y1` I think its worth naming these elements like so `Builder.CreateExtractElement(op0, 0, "x0");`
This will effect the SSA names so it isn't just %1-%n
https://github.com/llvm/llvm-project/pull/109180
More information about the cfe-commits
mailing list