OSDN Git Service

linkonce symbols have an extra indirection, just like weak ones do. This fixes
authorChris Lattner <sabre@nondot.org>
Fri, 6 Jan 2006 01:04:03 +0000 (01:04 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 6 Jan 2006 01:04:03 +0000 (01:04 +0000)
Prolangs-C++/family and Prolangs-C++/primes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25119 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelLowering.cpp

index 9547b9e..9fb1a21 100644 (file)
@@ -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