Teach the selector to fold lo(g) into load instruction immediate fields
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24396 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 7c5c808..5baec74 100644
--- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -413,6 +413,14 @@
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));