Author: lattner
Date: Sat Dec  8 01:04:58 2007
New Revision: 44701

URL: http://llvm.org/viewvc/llvm-project?rev=44701&view=rev
Log:
Fix a significant code quality regression I introduced on PPC64 quite 
a while ago.  We now produce:

_foo:
        mflr r0
        std r0, 16(r1)
        ld r2, 16(r1)
        std r2, 0(r3)
        ld r0, 16(r1)
        mtlr r0
        blr 

instead of:

_foo:
        mflr r0
        std r0, 16(r1)
        lis r0, 0
        ori r0, r0, 16
        ldx r2, r1, r0
        std r2, 0(r3)
        ld r0, 16(r1)
        mtlr r0
        blr 

for:

void foo(void **X) {
  *X = __builtin_return_address(0);
}

on ppc64.


Modified:
    llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
    llvm/trunk/test/CodeGen/PowerPC/retaddr.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp?rev=44701&r1=44700&r2=44701&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Sat Dec  8 01:04:58 2007
@@ -817,7 +817,7 @@
   // clear can be encoded.  This is extremely uncommon, because normally you
   // only "std" to a stack slot that is at least 4-byte aligned, but it can
   // happen in invalid code.
-  if (isInt16(Offset) && (!isIXAddr || (isIXAddr & 3) == 0)) {
+  if (isInt16(Offset) && (!isIXAddr || (Offset & 3) == 0)) {
     if (isIXAddr)
       Offset >>= 2;    // The actual encoded value has the low two bits zero.
     MI.getOperand(OffsetOperandNo).ChangeToImmediate(Offset);

Modified: llvm/trunk/test/CodeGen/PowerPC/retaddr.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/retaddr.ll?rev=44701&r1=44700&r2=44701&view=diff

==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/retaddr.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/retaddr.ll Sat Dec  8 01:04:58 2007
@@ -1,5 +1,6 @@
 ; RUN: llvm-as < %s | llc -march=ppc32 | grep mflr
 ; RUN: llvm-as < %s | llc -march=ppc32 | grep lwz
+; RUN: llvm-as < %s | llc -march=ppc64 | grep {ld r., 16(r1)}
 
 target triple = "powerpc-apple-darwin8"
 


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to