diff options
author | Chris Lattner <sabre@nondot.org> | 2006-11-11 04:53:30 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-11-11 04:53:30 +0000 |
commit | 5b3bbc7cd7bff4275b94003d4bf1fa296c6a10d0 (patch) | |
tree | cba35ceb34d24e60a188da9085bd9d7b72fd694a /lib/Target/PowerPC/PPCISelDAGToDAG.cpp | |
parent | d181c0120c6c82a6b5370e4d3040b803093e169b (diff) | |
download | llvm-5b3bbc7cd7bff4275b94003d4bf1fa296c6a10d0.tar.gz llvm-5b3bbc7cd7bff4275b94003d4bf1fa296c6a10d0.tar.bz2 llvm-5b3bbc7cd7bff4275b94003d4bf1fa296c6a10d0.tar.xz |
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
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31673 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
-rw-r--r-- | lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index d3844f469e..e70eb97871 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -856,7 +856,8 @@ SDNode *PPCDAGToDAGISel::Select(SDOperand Op) { } 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); |