summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-09-11 20:10:03 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-09-11 20:10:03 +0000
commitbe95fd535774a6f2bf0f6bbb3030562e58f97948 (patch)
tree38148be47d01877a4cc62255ae222b83af4d1043 /llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
parent88f098678273c98b8444521eece42aff79732ee5 (diff)
downloadbcm5719-llvm-be95fd535774a6f2bf0f6bbb3030562e58f97948.tar.gz
bcm5719-llvm-be95fd535774a6f2bf0f6bbb3030562e58f97948.zip
[PATCH, PowerPC] Accept 'U' and 'X' constraints in inline asm
Inline asm may specify 'U' and 'X' constraints to print a 'u' for an update-form memory reference, or an 'x' for an indexed-form memory reference. However, these are really only useful in GCC internal code generation. In inline asm the operand of the memory constraint is typically just a register containing the address, so 'U' and 'X' make no sense. This patch quietly accepts 'U' and 'X' in inline asm patterns, but otherwise does nothing. If we ever unexpectedly see a non-register, we'll assert and sort it out afterwards. I've added a new test for these constraints; the test case should be used for other asm-constraints changes down the road. llvm-svn: 217622
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 26ba8aa45e4..c038db7420b 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -275,6 +275,16 @@ bool PPCAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
printOperand(MI, OpNo, O);
return false;
}
+ case 'U': // Print 'u' for update form.
+ case 'X': // Print 'x' for indexed form.
+ {
+ // Memory constraints should always produce an MO_Register,
+ // so we never get an update or indexed form. (In GCC, these
+ // are useful in internal code gen; not so much in inline asm.)
+ // So tolerate these but don't output anything.
+ assert(MI->getOperand(OpNo).isReg());
+ return false;
+ }
}
}
OpenPOWER on IntegriCloud