diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-11-17 18:02:16 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-11-17 18:02:16 +0000 |
| commit | 0fe88e3f329b4f06f96fb75a6df37c5820087439 (patch) | |
| tree | dbfa169b1c8c67f1d6535292373d00b1fd893b35 /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | |
| parent | 4b11fa284d268b29ae59a1766e6a09442b4be205 (diff) | |
| download | bcm5719-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.cpp | 8 |
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)); |

