mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-21 03:28:31 +00:00
Lower C_Memory operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26346 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2b7401e28e
commit
87bc3bd121
@ -1549,7 +1549,9 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
|
||||
// Use the produced MatchedRegs object to
|
||||
MatchedRegs.getCopyToRegs(InOperandVal, DAG, Chain, Flag);
|
||||
MatchedRegs.AddInlineAsmOperands(1 /*REGUSE*/, DAG, AsmNodeOperands);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
TargetLowering::ConstraintType CTy = TargetLowering::C_RegisterClass;
|
||||
if (ConstraintCode.size() == 1) // not a physreg name.
|
||||
CTy = TLI.getConstraintType(ConstraintCode[0]);
|
||||
@ -1559,7 +1561,26 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
|
||||
assert(0 && "MATCH FAIL!");
|
||||
|
||||
// Add information to the INLINEASM node to know about this input.
|
||||
unsigned ResOpType = 3 /*imm*/ | (1 << 3);
|
||||
unsigned ResOpType = 3 /*IMM*/ | (1 << 3);
|
||||
AsmNodeOperands.push_back(DAG.getConstant(ResOpType, MVT::i32));
|
||||
AsmNodeOperands.push_back(InOperandVal);
|
||||
break;
|
||||
} else if (CTy == TargetLowering::C_Memory) {
|
||||
// Memory input.
|
||||
|
||||
// Check that the operand isn't a float.
|
||||
if (!MVT::isInteger(InOperandVal.getValueType()))
|
||||
assert(0 && "MATCH FAIL!");
|
||||
|
||||
// Extend/truncate to the right pointer type if needed.
|
||||
MVT::ValueType PtrType = TLI.getPointerTy();
|
||||
if (InOperandVal.getValueType() < PtrType)
|
||||
InOperandVal = DAG.getNode(ISD::ZERO_EXTEND, PtrType, InOperandVal);
|
||||
else if (InOperandVal.getValueType() > PtrType)
|
||||
InOperandVal = DAG.getNode(ISD::TRUNCATE, PtrType, InOperandVal);
|
||||
|
||||
// Add information to the INLINEASM node to know about this input.
|
||||
unsigned ResOpType = 4/*MEM*/ | (1 << 3);
|
||||
AsmNodeOperands.push_back(DAG.getConstant(ResOpType, MVT::i32));
|
||||
AsmNodeOperands.push_back(InOperandVal);
|
||||
break;
|
||||
@ -1579,8 +1600,6 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
|
||||
InRegs.AddInlineAsmOperands(1/*REGUSE*/, DAG, AsmNodeOperands);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case InlineAsm::isClobber: {
|
||||
RegsForValue ClobberedRegs =
|
||||
GetRegistersForValue(ConstraintCode, MVT::Other, false, false,
|
||||
|
Loading…
Reference in New Issue
Block a user