[llvm] [DirectX] add GEP i8 legalization (PR #142475)
Sarah Spall via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 2 13:26:55 PDT 2025
================
@@ -164,6 +166,36 @@ static void fixI8UseChain(Instruction &I,
if (AdjustedCast)
Cast->replaceAllUsesWith(AdjustedCast);
}
+ if (auto *GEP = dyn_cast<GetElementPtrInst>(&I)) {
+ if (!GEP->getType()->isPointerTy() ||
+ !GEP->getSourceElementType()->isIntegerTy(8))
+ return;
+
+ Value *BasePtr = GEP->getPointerOperand();
+ if (ReplacedValues.count(BasePtr))
+ BasePtr = ReplacedValues[BasePtr];
+
+ Type *ElementType = BasePtr->getType();
+ if (auto *AI = dyn_cast<AllocaInst>(BasePtr))
+ ElementType = AI->getAllocatedType();
+ if (auto *ArrTy = dyn_cast<ArrayType>(ElementType))
+ ElementType = ArrTy->getArrayElementType();
+
+ ConstantInt *Offset = dyn_cast<ConstantInt>(GEP->getOperand(1));
+ // Note: the only way to convert an i8 offset to an i32 offset without
+ // emitting code Would be to emit code. We sould expect this value to be a
+ // ConstantInt since Offsets are very regulalrly converted.
----------------
spall wrote:
regularly
https://github.com/llvm/llvm-project/pull/142475
More information about the llvm-commits
mailing list