[llvm] [DirectX] Make DXILOpLowering split vector coordinates, offsets, and gradient operands (PR #223091)
Joshua Batista via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 11 15:48:23 PDT 2026
================
@@ -639,22 +640,56 @@ class OpLowerer {
});
}
+ /// Recover the scalar components of `Vec` from the `insertelement` chain that
+ /// built it. Since we run after the scalarizer, such a chain is usually just
+ /// a temporary gathered to pass the vector to a call.
+ static void collectInsertedElements(Value *Vec,
+ MutableArrayRef<Value *> Elements) {
+ unsigned NumElts = cast<FixedVectorType>(Vec->getType())->getNumElements();
+ assert(NumElts <= Elements.size() && "Not enough room for the components");
+
+ SmallVector<InsertElementInst *, 4> Chain;
+ for (auto *IEI = dyn_cast<InsertElementInst>(Vec); IEI;
+ IEI = dyn_cast<InsertElementInst>(IEI->getOperand(0))) {
+ if (!isa<ConstantInt>(IEI->getOperand(2)))
+ break; // This break should never happen below SM6.9.
+ Chain.push_back(IEI);
+ }
+
+ // Replay element insertion from the innermost first, so that a repeated
+ // index ends up holding the live value.
+ while (!Chain.empty()) {
+ InsertElementInst *IEI = Chain.pop_back_val();
+ uint64_t IndexVal = cast<ConstantInt>(IEI->getOperand(2))->getZExtValue();
----------------
bob80905 wrote:
double checking: is there an implicit cast between ConstantInt and uint64_t, or should we call some helper to get the value?
https://github.com/llvm/llvm-project/pull/223091
More information about the llvm-commits
mailing list