summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-11-17 18:02:16 +0000
committerChris Lattner <sabre@nondot.org>2005-11-17 18:02:16 +0000
commit0fe88e3f329b4f06f96fb75a6df37c5820087439 (patch)
treedbfa169b1c8c67f1d6535292373d00b1fd893b35 /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
parent4b11fa284d268b29ae59a1766e6a09442b4be205 (diff)
downloadbcm5719-llvm-0fe88e3f329b4f06f96fb75a6df37c5820087439.tar.gz
bcm5719-llvm-0fe88e3f329b4f06f96fb75a6df37c5820087439.zip
Teach the selector to fold lo(g) into load instruction immediate fields
llvm-svn: 24396
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 7c5c808878b..5baec745c94 100644
--- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -413,6 +413,14 @@ bool PPCDAGToDAGISel::SelectAddr(SDOperand Addr, SDOperand &Op1,
Op2 = Select(Addr.getOperand(0));
}
return false;
+ } else if (Addr.getOperand(1).getOpcode() == PPCISD::Lo) {
+ // Match LOAD (ADD (X, Lo(G))).
+ assert(!cast<ConstantSDNode>(Addr.getOperand(1).getOperand(1))->getValue()
+ && "Cannot handle constant offsets yet!");
+ Op1 = Addr.getOperand(1).getOperand(0); // The global address.
+ assert(Op1.getOpcode() == ISD::TargetGlobalAddress);
+ Op2 = Select(Addr.getOperand(0));
+ return false; // [&g+r]
} else {
Op1 = Select(Addr.getOperand(0));
Op2 = Select(Addr.getOperand(1));
OpenPOWER on IntegriCloud