mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
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
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user