From: Craig Topper Date: Sun, 12 Apr 2020 23:47:06 +0000 (-0700) Subject: [CallSite removal][FastISel] Use CallBase instead of CallSite in fastLowerCall. X-Git-Tag: llvmorg-12-init~9261 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dbb272b0a3eadfe50ce3b0168150fbe66b57a591;p=platform%2Fupstream%2Fllvm.git [CallSite removal][FastISel] Use CallBase instead of CallSite in fastLowerCall. --- diff --git a/llvm/include/llvm/CodeGen/FastISel.h b/llvm/include/llvm/CodeGen/FastISel.h index 1ad414e..f561ada 100644 --- a/llvm/include/llvm/CodeGen/FastISel.h +++ b/llvm/include/llvm/CodeGen/FastISel.h @@ -86,7 +86,7 @@ public: const Value *Callee = nullptr; MCSymbol *Symbol = nullptr; ArgListTy Args; - ImmutableCallSite CS; + const CallBase *CB = nullptr; MachineInstr *Call = nullptr; Register ResultReg; unsigned NumResultRegs = 0; @@ -103,14 +103,14 @@ public: CallLoweringInfo &setCallee(Type *ResultTy, FunctionType *FuncTy, const Value *Target, ArgListTy &&ArgsList, - ImmutableCallSite Call) { + const CallBase &Call) { RetTy = ResultTy; Callee = Target; IsInReg = Call.hasRetAttr(Attribute::InReg); DoesNotReturn = Call.doesNotReturn(); IsVarArg = FuncTy->isVarArg(); - IsReturnValueUsed = !Call.getInstruction()->use_empty(); + IsReturnValueUsed = !Call.use_empty(); RetSExt = Call.hasRetAttr(Attribute::SExt); RetZExt = Call.hasRetAttr(Attribute::ZExt); @@ -118,14 +118,14 @@ public: Args = std::move(ArgsList); NumFixedArgs = FuncTy->getNumParams(); - CS = Call; + CB = &Call; return *this; } CallLoweringInfo &setCallee(Type *ResultTy, FunctionType *FuncTy, MCSymbol *Target, ArgListTy &&ArgsList, - ImmutableCallSite Call, + const CallBase &Call, unsigned FixedArgs = ~0U) { RetTy = ResultTy; Callee = Call.getCalledValue(); @@ -134,7 +134,7 @@ public: IsInReg = Call.hasRetAttr(Attribute::InReg); DoesNotReturn = Call.doesNotReturn(); IsVarArg = FuncTy->isVarArg(); - IsReturnValueUsed = !Call.getInstruction()->use_empty(); + IsReturnValueUsed = !Call.use_empty(); RetSExt = Call.hasRetAttr(Attribute::SExt); RetZExt = Call.hasRetAttr(Attribute::ZExt); @@ -142,7 +142,7 @@ public: Args = std::move(ArgsList); NumFixedArgs = (FixedArgs == ~0U) ? FuncTy->getNumParams() : FixedArgs; - CS = Call; + CB = &Call; return *this; } diff --git a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp index c11b8b7..69d6d22 100644 --- a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -1139,7 +1139,7 @@ bool FastISel::lowerCallTo(const CallInst *CI, MCSymbol *Symbol, TLI.markLibCallAttributes(MF, CI->getCallingConv(), Args); CallLoweringInfo CLI; - CLI.setCallee(RetTy, FTy, Symbol, std::move(Args), CI, NumArgs); + CLI.setCallee(RetTy, FTy, Symbol, std::move(Args), *CI, NumArgs); return lowerCallTo(CLI); } @@ -1245,12 +1245,12 @@ bool FastISel::lowerCallTo(CallLoweringInfo &CLI) { assert(CLI.Call && "No call instruction specified."); CLI.Call->setPhysRegsDeadExcept(CLI.InRegs, TRI); - if (CLI.NumResultRegs && CLI.CS) - updateValueMap(CLI.CS.getInstruction(), CLI.ResultReg, CLI.NumResultRegs); + if (CLI.NumResultRegs && CLI.CB) + updateValueMap(CLI.CB, CLI.ResultReg, CLI.NumResultRegs); // Set labels for heapallocsite call. - if (CLI.CS) - if (MDNode *MD = CLI.CS.getInstruction()->getMetadata("heapallocsite")) + if (CLI.CB) + if (MDNode *MD = CLI.CB->getMetadata("heapallocsite")) CLI.Call->setHeapAllocMarker(*MF, MD); return true; @@ -1290,7 +1290,7 @@ bool FastISel::lowerCall(const CallInst *CI) { IsTailCall = false; CallLoweringInfo CLI; - CLI.setCallee(RetTy, FuncTy, CI->getCalledValue(), std::move(Args), CI) + CLI.setCallee(RetTy, FuncTy, CI->getCalledValue(), std::move(Args), *CI) .setTailCall(IsTailCall); return lowerCallTo(CLI); diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp index 6a318ab..4c6c8f6 100644 --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -26,7 +26,6 @@ #include "llvm/CodeGen/MachineConstantPool.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/IR/CallSite.h" #include "llvm/IR/CallingConv.h" #include "llvm/IR/DebugInfo.h" #include "llvm/IR/DerivedTypes.h" @@ -3159,7 +3158,7 @@ bool X86FastISel::fastLowerArguments() { static unsigned computeBytesPoppedByCalleeForSRet(const X86Subtarget *Subtarget, CallingConv::ID CC, - ImmutableCallSite CS) { + const CallBase *CB) { if (Subtarget->is64Bit()) return 0; if (Subtarget->getTargetTriple().isOSMSVCRT()) @@ -3168,9 +3167,9 @@ static unsigned computeBytesPoppedByCalleeForSRet(const X86Subtarget *Subtarget, CC == CallingConv::HiPE || CC == CallingConv::Tail) return 0; - if (CS) - if (CS.arg_empty() || !CS.paramHasAttr(0, Attribute::StructRet) || - CS.paramHasAttr(0, Attribute::InReg) || Subtarget->isTargetMCU()) + if (CB) + if (CB->arg_empty() || !CB->paramHasAttr(0, Attribute::StructRet) || + CB->paramHasAttr(0, Attribute::InReg) || Subtarget->isTargetMCU()) return 0; return 4; @@ -3191,14 +3190,12 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { bool Is64Bit = Subtarget->is64Bit(); bool IsWin64 = Subtarget->isCallingConvWin64(CC); - const CallInst *CI = - CLI.CS ? dyn_cast(CLI.CS.getInstruction()) : nullptr; + const CallInst *CI = dyn_cast_or_null(CLI.CB); const Function *CalledFn = CI ? CI->getCalledFunction() : nullptr; // Call / invoke instructions with NoCfCheck attribute require special // handling. - const auto *II = - CLI.CS ? dyn_cast(CLI.CS.getInstruction()) : nullptr; + const auto *II = dyn_cast_or_null(CLI.CB); if ((CI && CI->doesNoCfCheck()) || (II && II->doesNoCfCheck())) return false; @@ -3244,7 +3241,7 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { return false; // Don't know about inalloca yet. - if (CLI.CS && CLI.CS.hasInAllocaArgument()) + if (CLI.CB && CLI.CB->hasInAllocaArgument()) return false; for (auto Flag : CLI.OutFlags) @@ -3274,9 +3271,8 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { MVT VT; auto *TI = dyn_cast(Val); unsigned ResultReg; - if (TI && TI->getType()->isIntegerTy(1) && CLI.CS && - (TI->getParent() == CLI.CS.getInstruction()->getParent()) && - TI->hasOneUse()) { + if (TI && TI->getType()->isIntegerTy(1) && CLI.CB && + (TI->getParent() == CLI.CB->getParent()) && TI->hasOneUse()) { Value *PrevVal = TI->getOperand(0); ResultReg = getRegForValue(PrevVal); @@ -3543,7 +3539,7 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { X86::isCalleePop(CC, Subtarget->is64Bit(), IsVarArg, TM.Options.GuaranteedTailCallOpt) ? NumBytes // Callee pops everything. - : computeBytesPoppedByCalleeForSRet(Subtarget, CC, CLI.CS); + : computeBytesPoppedByCalleeForSRet(Subtarget, CC, CLI.CB); unsigned AdjStackUp = TII.getCallFrameDestroyOpcode(); BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AdjStackUp)) .addImm(NumBytes).addImm(NumBytesForCalleeToPop);