diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-01-06 01:04:03 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-01-06 01:04:03 +0000 |
| commit | b87030358d664daaa929542412c58074fdc2c8fb (patch) | |
| tree | ed30186e324551524b8c5062185efbfa6d0a0175 /llvm/lib/Target/PowerPC/PPCISelLowering.cpp | |
| parent | 172fce70509317fde25f7382240e67289f56fe76 (diff) | |
| download | bcm5719-llvm-b87030358d664daaa929542412c58074fdc2c8fb.tar.gz bcm5719-llvm-b87030358d664daaa929542412c58074fdc2c8fb.zip | |
linkonce symbols have an extra indirection, just like weak ones do. This fixes
Prolangs-C++/family and Prolangs-C++/primes.
llvm-svn: 25119
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 9547b9e9d4f..9fb1a21125f 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -379,6 +379,7 @@ SDOperand PPCTargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { // Only lower GlobalAddress on Darwin. if (!getTargetMachine().getSubtarget<PPCSubtarget>().isDarwin()) break; + SDOperand Hi = DAG.getNode(PPCISD::Hi, MVT::i32, GA, Zero); if (PICEnabled) { // With PIC, the first instruction is actually "GR+hi(&G)". @@ -389,7 +390,7 @@ SDOperand PPCTargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) { SDOperand Lo = DAG.getNode(PPCISD::Lo, MVT::i32, GA, Zero); Lo = DAG.getNode(ISD::ADD, MVT::i32, Hi, Lo); - if (!GV->hasWeakLinkage() && !GV->isExternal()) + if (!GV->hasWeakLinkage() && !GV->hasLinkOnceLinkage() && !GV->isExternal()) return Lo; // If the global is weak or external, we have to go through the lazy |

