diff options
author | Chris Lattner <sabre@nondot.org> | 2007-12-08 07:04:58 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-12-08 07:04:58 +0000 |
commit | f47015bc7438d3105cf538f90b9d3214db9bb2d6 (patch) | |
tree | 0cd55ca0a8d115610d8695af9ea9053a9c548edf /llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | |
parent | f6a8156e4ff227993085ef36a7c5a21afc61749a (diff) | |
download | bcm5719-llvm-f47015bc7438d3105cf538f90b9d3214db9bb2d6.tar.gz bcm5719-llvm-f47015bc7438d3105cf538f90b9d3214db9bb2d6.zip |
Fix a significant code quality regression I introduced on PPC64 quite
a while ago. We now produce:
_foo:
mflr r0
std r0, 16(r1)
ld r2, 16(r1)
std r2, 0(r3)
ld r0, 16(r1)
mtlr r0
blr
instead of:
_foo:
mflr r0
std r0, 16(r1)
lis r0, 0
ori r0, r0, 16
ldx r2, r1, r0
std r2, 0(r3)
ld r0, 16(r1)
mtlr r0
blr
for:
void foo(void **X) {
*X = __builtin_return_address(0);
}
on ppc64.
llvm-svn: 44701
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp index c574f7004aa..150bda7e242 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -817,7 +817,7 @@ void PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, // clear can be encoded. This is extremely uncommon, because normally you // only "std" to a stack slot that is at least 4-byte aligned, but it can // happen in invalid code. - if (isInt16(Offset) && (!isIXAddr || (isIXAddr & 3) == 0)) { + if (isInt16(Offset) && (!isIXAddr || (Offset & 3) == 0)) { if (isIXAddr) Offset >>= 2; // The actual encoded value has the low two bits zero. MI.getOperand(OffsetOperandNo).ChangeToImmediate(Offset); |