[llvm] a3a2239 - [GlobalISel] Avoid pointer element type access during InlineAsm lowering
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 25 05:26:53 PST 2022
Author: Nikita Popov
Date: 2022-01-25T14:26:47+01:00
New Revision: a3a2239aaaf6860eaee591c70a016b7c5984edde
URL: https://github.com/llvm/llvm-project/commit/a3a2239aaaf6860eaee591c70a016b7c5984edde
DIFF: https://github.com/llvm/llvm-project/commit/a3a2239aaaf6860eaee591c70a016b7c5984edde.diff
LOG: [GlobalISel] Avoid pointer element type access during InlineAsm lowering
Same change as has been made for the SDAG lowering.
Added:
Modified:
llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
index e0503b1ed2050..dfcf1b80392af 100644
--- a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp
@@ -298,7 +298,7 @@ bool InlineAsmLowering::lowerInlineAsm(
// Compute the value type for each operand.
if (OpInfo.hasArg()) {
- OpInfo.CallOperandVal = const_cast<Value *>(Call.getArgOperand(ArgNo++));
+ OpInfo.CallOperandVal = const_cast<Value *>(Call.getArgOperand(ArgNo));
if (isa<BasicBlock>(OpInfo.CallOperandVal)) {
LLVM_DEBUG(dbgs() << "Basic block input operands not supported yet\n");
@@ -310,10 +310,8 @@ bool InlineAsmLowering::lowerInlineAsm(
// If this is an indirect operand, the operand is a pointer to the
// accessed type.
if (OpInfo.isIndirect) {
- PointerType *PtrTy = dyn_cast<PointerType>(OpTy);
- if (!PtrTy)
- report_fatal_error("Indirect operand for inline asm not a pointer!");
- OpTy = PtrTy->getPointerElementType();
+ OpTy = Call.getAttributes().getParamElementType(ArgNo);
+ assert(OpTy && "Indirect operand must have elementtype attribute");
}
// FIXME: Support aggregate input operands
@@ -325,7 +323,7 @@ bool InlineAsmLowering::lowerInlineAsm(
OpInfo.ConstraintVT =
TLI->getAsmOperandValueType(DL, OpTy, true).getSimpleVT();
-
+ ++ArgNo;
} else if (OpInfo.Type == InlineAsm::isOutput && !OpInfo.isIndirect) {
assert(!Call.getType()->isVoidTy() && "Bad inline asm!");
if (StructType *STy = dyn_cast<StructType>(Call.getType())) {
More information about the llvm-commits
mailing list