mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[CallSite removal][TargetLowering] Use CallBase instead of CallSite in TargetLowering::ParseConstraints interface.
Differential Revision: https://reviews.llvm.org/D77929
This commit is contained in:
parent
fadd2db182
commit
13f904c14d
@ -4036,7 +4036,7 @@ public:
|
||||
/// string itself isn't empty, there was an error parsing.
|
||||
virtual AsmOperandInfoVector ParseConstraints(const DataLayout &DL,
|
||||
const TargetRegisterInfo *TRI,
|
||||
ImmutableCallSite CS) const;
|
||||
const CallBase &Call) const;
|
||||
|
||||
/// Examine constraint type and operand type and determine a weight value.
|
||||
/// The operand object must already have been set up with the operand type.
|
||||
|
@ -43,7 +43,6 @@
|
||||
#include "llvm/IR/Argument.h"
|
||||
#include "llvm/IR/Attributes.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/Constant.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
@ -4542,8 +4541,7 @@ static bool IsOperandAMemoryOperand(CallInst *CI, InlineAsm *IA, Value *OpVal,
|
||||
const TargetRegisterInfo &TRI) {
|
||||
const Function *F = CI->getFunction();
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints =
|
||||
TLI.ParseConstraints(F->getParent()->getDataLayout(), &TRI,
|
||||
ImmutableCallSite(CI));
|
||||
TLI.ParseConstraints(F->getParent()->getDataLayout(), &TRI, *CI);
|
||||
|
||||
for (unsigned i = 0, e = TargetConstraints.size(); i != e; ++i) {
|
||||
TargetLowering::AsmOperandInfo &OpInfo = TargetConstraints[i];
|
||||
@ -5192,7 +5190,7 @@ bool CodeGenPrepare::optimizeInlineAsmInst(CallInst *CS) {
|
||||
const TargetRegisterInfo *TRI =
|
||||
TM->getSubtargetImpl(*CS->getFunction())->getRegisterInfo();
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints =
|
||||
TLI->ParseConstraints(*DL, TRI, CS);
|
||||
TLI->ParseConstraints(*DL, TRI, *CS);
|
||||
unsigned ArgNo = 0;
|
||||
for (unsigned i = 0, e = TargetConstraints.size(); i != e; ++i) {
|
||||
TargetLowering::AsmOperandInfo &OpInfo = TargetConstraints[i];
|
||||
|
@ -182,13 +182,13 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
|
||||
}
|
||||
|
||||
// Look for inline asm that clobbers the SP register.
|
||||
if (isa<CallInst>(I) || isa<InvokeInst>(I)) {
|
||||
ImmutableCallSite CS(&I);
|
||||
if (isa<InlineAsm>(CS.getCalledValue())) {
|
||||
if (auto *Call = dyn_cast<CallBase>(&I)) {
|
||||
if (isa<InlineAsm>(Call->getCalledValue())) {
|
||||
unsigned SP = TLI->getStackPointerRegisterToSaveRestore();
|
||||
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
|
||||
std::vector<TargetLowering::AsmOperandInfo> Ops =
|
||||
TLI->ParseConstraints(Fn->getParent()->getDataLayout(), TRI, CS);
|
||||
TLI->ParseConstraints(Fn->getParent()->getDataLayout(), TRI,
|
||||
*Call);
|
||||
for (TargetLowering::AsmOperandInfo &Op : Ops) {
|
||||
if (Op.Type == InlineAsm::isClobber) {
|
||||
// Clobbers don't have SDValue operands, hence SDValue().
|
||||
|
@ -8012,8 +8012,7 @@ void SelectionDAGBuilder::visitInlineAsm(const CallBase &Call) {
|
||||
|
||||
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints = TLI.ParseConstraints(
|
||||
DAG.getDataLayout(), DAG.getSubtarget().getRegisterInfo(),
|
||||
ImmutableCallSite(&Call));
|
||||
DAG.getDataLayout(), DAG.getSubtarget().getRegisterInfo(), Call);
|
||||
|
||||
// First Pass: Calculate HasSideEffects and ExtraFlags (AlignStack,
|
||||
// AsmDialect, MayLoad, MayStore).
|
||||
|
@ -4318,10 +4318,10 @@ unsigned TargetLowering::AsmOperandInfo::getMatchedOperand() const {
|
||||
TargetLowering::AsmOperandInfoVector
|
||||
TargetLowering::ParseConstraints(const DataLayout &DL,
|
||||
const TargetRegisterInfo *TRI,
|
||||
ImmutableCallSite CS) const {
|
||||
const CallBase &Call) const {
|
||||
/// Information about all of the constraints.
|
||||
AsmOperandInfoVector ConstraintOperands;
|
||||
const InlineAsm *IA = cast<InlineAsm>(CS.getCalledValue());
|
||||
const InlineAsm *IA = cast<InlineAsm>(Call.getCalledValue());
|
||||
unsigned maCount = 0; // Largest number of multiple alternative constraints.
|
||||
|
||||
// Do a prepass over the constraints, canonicalizing them, and building up the
|
||||
@ -4344,25 +4344,24 @@ TargetLowering::ParseConstraints(const DataLayout &DL,
|
||||
case InlineAsm::isOutput:
|
||||
// Indirect outputs just consume an argument.
|
||||
if (OpInfo.isIndirect) {
|
||||
OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
|
||||
OpInfo.CallOperandVal = Call.getArgOperand(ArgNo++);
|
||||
break;
|
||||
}
|
||||
|
||||
// The return value of the call is this value. As such, there is no
|
||||
// corresponding argument.
|
||||
assert(!CS.getType()->isVoidTy() &&
|
||||
"Bad inline asm!");
|
||||
if (StructType *STy = dyn_cast<StructType>(CS.getType())) {
|
||||
assert(!Call.getType()->isVoidTy() && "Bad inline asm!");
|
||||
if (StructType *STy = dyn_cast<StructType>(Call.getType())) {
|
||||
OpInfo.ConstraintVT =
|
||||
getSimpleValueType(DL, STy->getElementType(ResNo));
|
||||
} else {
|
||||
assert(ResNo == 0 && "Asm only has one result!");
|
||||
OpInfo.ConstraintVT = getSimpleValueType(DL, CS.getType());
|
||||
OpInfo.ConstraintVT = getSimpleValueType(DL, Call.getType());
|
||||
}
|
||||
++ResNo;
|
||||
break;
|
||||
case InlineAsm::isInput:
|
||||
OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++));
|
||||
OpInfo.CallOperandVal = Call.getArgOperand(ArgNo++);
|
||||
break;
|
||||
case InlineAsm::isClobber:
|
||||
// Nothing to do.
|
||||
|
@ -714,9 +714,8 @@ bool GCNTTIImpl::isInlineAsmSourceOfDivergence(
|
||||
|
||||
const DataLayout &DL = CI->getModule()->getDataLayout();
|
||||
const SIRegisterInfo *TRI = ST->getRegisterInfo();
|
||||
ImmutableCallSite CS(CI);
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints
|
||||
= TLI->ParseConstraints(DL, ST->getRegisterInfo(), CS);
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints =
|
||||
TLI->ParseConstraints(DL, ST->getRegisterInfo(), *CI);
|
||||
|
||||
const int TargetOutputIdx = Indices.empty() ? -1 : Indices[0];
|
||||
|
||||
|
@ -11049,9 +11049,8 @@ bool SITargetLowering::requiresUniformRegister(MachineFunction &MF,
|
||||
// consider, so this assumes if any value is SGPR, the overall register
|
||||
// also needs to be SGPR.
|
||||
const SIRegisterInfo *SIRI = Subtarget->getRegisterInfo();
|
||||
ImmutableCallSite CS(CI);
|
||||
TargetLowering::AsmOperandInfoVector TargetConstraints = ParseConstraints(
|
||||
MF.getDataLayout(), Subtarget->getRegisterInfo(), CS);
|
||||
MF.getDataLayout(), Subtarget->getRegisterInfo(), *CI);
|
||||
for (auto &TC : TargetConstraints) {
|
||||
if (TC.Type == InlineAsm::isOutput) {
|
||||
ComputeConstraintToUse(TC, SDValue());
|
||||
|
Loading…
Reference in New Issue
Block a user