summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-09-12 14:26:36 +0000
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-09-12 14:26:36 +0000
commitb73b370809325a10ebffeba8a6e61a38e5c3c68a (patch)
tree647888a598b64ebeb44d509def3eb129cf65c864
parent651725e1915c67db680aeefb696c983226a8e531 (diff)
downloadbcm5719-llvm-b73b370809325a10ebffeba8a6e61a38e5c3c68a.tar.gz
bcm5719-llvm-b73b370809325a10ebffeba8a6e61a38e5c3c68a.zip
Address comments on r217622
llvm-svn: 217680
-rw-r--r--llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp10
-rw-r--r--llvm/test/CodeGen/PowerPC/asm-constraints.ll12
2 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index c038db7420b..5b68a9eaacf 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -278,10 +278,12 @@ bool PPCAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
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.
+ // FIXME: Currently for PowerPC memory operands are always loaded
+ // into a register, so we never get an update or indexed form.
+ // This is bad even for offset forms, since even if we know we
+ // have a value in -16(r1), we will generate a load into r<n>
+ // and then load from 0(r<n>). Until that issue is fixed,
+ // tolerate 'U' and 'X' but don't output anything.
assert(MI->getOperand(OpNo).isReg());
return false;
}
diff --git a/llvm/test/CodeGen/PowerPC/asm-constraints.ll b/llvm/test/CodeGen/PowerPC/asm-constraints.ll
index b8eb5efc869..998b61834f4 100644
--- a/llvm/test/CodeGen/PowerPC/asm-constraints.ll
+++ b/llvm/test/CodeGen/PowerPC/asm-constraints.ll
@@ -1,5 +1,17 @@
; RUN: llc < %s -mcpu=pwr8 | FileCheck %s
+; Generated from following C code:
+;
+; void foo (int result, char *addr) {
+; __asm__ __volatile__ (
+; "ld%U1%X1 %0,%1\n"
+; "cmpw %0,%0\n"
+; "bne- 1f\n"
+; "1: isync\n"
+; : "=r" (result)
+; : "m"(*addr) : "memory", "cr0");
+; }
+
target datalayout = "e-m:e-i64:64-n32:64"
target triple = "powerpc64le-unknown-linux-gnu"
OpenPOWER on IntegriCloud