From e4d1779990672f8c1c7a2b6b8c6efd73c95ce5ac Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 7 Jan 2022 10:37:26 +0100 Subject: [PATCH] [IR] Add ConstraintInfo::hasArg() helper (NFC) Checking whether a constraint corresponds to an argument is a recurring pattern. --- llvm/include/llvm/IR/InlineAsm.h | 5 +++++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 4 +--- llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp | 4 +--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 3 +-- llvm/lib/IR/Verifier.cpp | 4 +--- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/IR/InlineAsm.h b/llvm/include/llvm/IR/InlineAsm.h index 1a0767a..cf6b7af 100644 --- a/llvm/include/llvm/IR/InlineAsm.h +++ b/llvm/include/llvm/IR/InlineAsm.h @@ -171,6 +171,11 @@ public: /// selectAlternative - Point this constraint to the alternative constraint /// indicated by the index. void selectAlternative(unsigned index); + + /// Whether this constraint corresponds to an argument. + bool hasArg() const { + return Type == isInput || (Type == isOutput && isIndirect); + } }; /// ParseConstraints - Split up the constraint string into the specific diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 879ebfb..13f4928 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3927,9 +3927,7 @@ void BitcodeReader::propagateAttributeTypes(CallBase *CB, const InlineAsm *IA = cast(CB->getCalledOperand()); unsigned ArgNo = 0; for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) { - bool HasArg = CI.Type == InlineAsm::isInput || - (CI.Type == InlineAsm::isOutput && CI.isIndirect); - if (!HasArg) + if (!CI.hasArg()) continue; if (CI.isIndirect && !CB->getAttributes().getParamElementType(ArgNo)) { diff --git a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp index 4ae4274..56a7007 100644 --- a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp +++ b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp @@ -297,9 +297,7 @@ bool InlineAsmLowering::lowerInlineAsm( GISelAsmOperandInfo &OpInfo = ConstraintOperands.back(); // Compute the value type for each operand. - if (OpInfo.Type == InlineAsm::isInput || - (OpInfo.Type == InlineAsm::isOutput && OpInfo.isIndirect)) { - + if (OpInfo.hasArg()) { OpInfo.CallOperandVal = const_cast(Call.getArgOperand(ArgNo++)); if (isa(OpInfo.CallOperandVal)) { diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 63cd723..b1dc184 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -8565,8 +8565,7 @@ void SelectionDAGBuilder::visitInlineAsm(const CallBase &Call, SDISelAsmOperandInfo &OpInfo = ConstraintOperands.back(); // Compute the value type for each operand. - if (OpInfo.Type == InlineAsm::isInput || - (OpInfo.Type == InlineAsm::isOutput && OpInfo.isIndirect)) { + if (OpInfo.hasArg()) { OpInfo.CallOperandVal = Call.getArgOperand(ArgNo++); // Process the call argument. BasicBlocks are labels, currently appearing diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 3ffc6e3..c9b1bc9 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -2151,9 +2151,7 @@ void Verifier::verifyInlineAsmCall(const CallBase &Call) { unsigned ArgNo = 0; for (const InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) { // Only deal with constraints that correspond to call arguments. - bool HasArg = CI.Type == InlineAsm::isInput || - (CI.Type == InlineAsm::isOutput && CI.isIndirect); - if (!HasArg) + if (!CI.hasArg()) continue; if (CI.isIndirect) { -- 2.7.4