[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp

Chris Lattner sabre at nondot.org
Fri Nov 10 20:53:45 PST 2006



Changes in directory llvm/lib/Target/PowerPC:

PPCISelDAGToDAG.cpp updated: 1.217 -> 1.218
---
Log message:

allow the offset of a preinc'd load to be the low-part of a global.  This
produces this clever code:

_millisecs:
        lis r2, ha16(_Time.1182)
        lwzu r3, lo16(_Time.1182)(r2)
        lwz r2, 4(r2)
        addic r4, r2, 1
        addze r3, r3
        blr 

instead of this:

_millisecs:
        lis r2, ha16(_Time.1182)
        la r3, lo16(_Time.1182)(r2)
        lwz r2, lo16(_Time.1182)(r2)
        lwz r3, 4(r3)
        addic r4, r3, 1
        addze r3, r2
        blr 

for:

long %millisecs() {
        %tmp = load long* %Time.1182            ; <long> [#uses=1]
        %tmp1 = add long %tmp, 1                ; <long> [#uses=1]
        ret long %tmp1
}



---
Diffs of the changes:  (+2 -1)

 PPCISelDAGToDAG.cpp |    3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.217 llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.218
--- llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1.217	Fri Nov 10 17:58:44 2006
+++ llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp	Fri Nov 10 22:53:30 2006
@@ -856,7 +856,8 @@
     }
     
     SDOperand Offset = LD->getOffset();
-    if (isa<ConstantSDNode>(Offset)) {
+    if (isa<ConstantSDNode>(Offset) ||
+        Offset.getOpcode() == ISD::TargetGlobalAddress) {
       SDOperand Chain = LD->getChain();
       SDOperand Base = LD->getBasePtr();
       AddToISelQueue(Chain);






More information about the llvm-commits mailing list