forked from OSchip/llvm-project
parent
6058a35624
commit
412d61af43
|
|
@ -3248,12 +3248,28 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
|
||||||
if (OpInfo.CallOperandVal) {
|
if (OpInfo.CallOperandVal) {
|
||||||
OpInfo.CallOperand = getValue(OpInfo.CallOperandVal);
|
OpInfo.CallOperand = getValue(OpInfo.CallOperandVal);
|
||||||
const Type *OpTy = OpInfo.CallOperandVal->getType();
|
const Type *OpTy = OpInfo.CallOperandVal->getType();
|
||||||
if (!OpInfo.isIndirect) {
|
// If this is an indirect operand, the operand is a pointer to the
|
||||||
// Must be an input.
|
// accessed type.
|
||||||
OpVT = TLI.getValueType(OpTy);
|
if (OpInfo.isIndirect)
|
||||||
} else {
|
OpTy = cast<PointerType>(OpTy)->getElementType();
|
||||||
OpVT = TLI.getValueType(cast<PointerType>(OpTy)->getElementType(),true);
|
|
||||||
|
// If OpTy is not a first-class value, it may be a struct/union that we
|
||||||
|
// can tile with integers.
|
||||||
|
if (!OpTy->isFirstClassType() && OpTy->isSized()) {
|
||||||
|
unsigned BitSize = TD->getTypeSizeInBits(OpTy);
|
||||||
|
switch (BitSize) {
|
||||||
|
default: break;
|
||||||
|
case 1:
|
||||||
|
case 8:
|
||||||
|
case 16:
|
||||||
|
case 32:
|
||||||
|
case 64:
|
||||||
|
OpTy = IntegerType::get(BitSize);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OpVT = TLI.getValueType(OpTy, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
OpInfo.ConstraintVT = OpVT;
|
OpInfo.ConstraintVT = OpVT;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue