summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-04-28 06:08:13 +0000
committerChris Lattner <sabre@nondot.org>2007-04-28 06:08:13 +0000
commitf2f3cd5129a1eef6034ce09314b10f3a1e1abaf6 (patch)
treedf66ccb22f8d57d56ef16d702708c15274b44480 /lib
parent15c928640d3ff01fd064c562f708877f7af0847f (diff)
downloadllvm-f2f3cd5129a1eef6034ce09314b10f3a1e1abaf6.tar.gz
llvm-f2f3cd5129a1eef6034ce09314b10f3a1e1abaf6.tar.bz2
llvm-f2f3cd5129a1eef6034ce09314b10f3a1e1abaf6.tar.xz
Fix CodeGen/Generic/2007-04-27-LargeMemObject.ll and
CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36534 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 4e57a7b36a..829dae50d1 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -3210,16 +3210,22 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
switch (Constraints[i].Type) {
case InlineAsm::isOutput:
if (!Constraints[i].isIndirect) {
+ // The return value of the call is this value.
assert(I.getType() != Type::VoidTy && "Bad inline asm!");
OpVT = TLI.getValueType(I.getType());
} else {
const Type *OpTy = I.getOperand(OpNum)->getType();
- OpVT = TLI.getValueType(cast<PointerType>(OpTy)->getElementType());
+ OpVT = TLI.getValueType(cast<PointerType>(OpTy)->getElementType(),true);
OpNum++; // Consumes a call operand.
}
break;
case InlineAsm::isInput:
- OpVT = TLI.getValueType(I.getOperand(OpNum)->getType());
+ if (!Constraints[i].isIndirect) {
+ OpVT = TLI.getValueType(I.getOperand(OpNum)->getType());
+ } else {
+ const Type *OpTy = I.getOperand(OpNum)->getType();
+ OpVT = TLI.getValueType(cast<PointerType>(OpTy)->getElementType(),true);
+ }
OpNum++; // Consumes a call operand.
break;
case InlineAsm::isClobber:
@@ -3275,8 +3281,8 @@ void SelectionDAGLowering::visitInlineAsm(CallInst &I) {
if (ConstraintCode.size() == 1) // not a physreg name.
CTy = TLI.getConstraintType(ConstraintCode);
- if (CTy == TargetLowering::C_Memory) {
- // Memory output.
+ if (CTy != TargetLowering::C_RegisterClass) {
+ // Memory output, or 'other' output (e.g. 'X' constraint).
SDOperand InOperandVal = getValue(I.getOperand(OpNum));
// Check that the operand (the address to store to) isn't a float.