diff options
author | Evan Cheng <evan.cheng@apple.com> | 2005-12-17 09:13:43 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2005-12-17 09:13:43 +0000 |
commit | bdce7b4090b59f650933896b9db36638c5a58dd4 (patch) | |
tree | dfa9bfb473d59b48bc82b044267e7cce6178b598 | |
parent | 7b0902dcf8352ef93e35cc9cf264dbe4d2a198de (diff) |
Darwin API issue: indirect load of external and weak symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24775 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86ISelDAGToDAG.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index db87384c93..4fad8dff77 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -106,7 +106,7 @@ namespace { SDOperand &Disp) { Base = (AM.BaseType == X86ISelAddressMode::FrameIndexBase) ? CurDAG->getTargetFrameIndex(AM.Base.FrameIndex, MVT::i32) : AM.Base.Reg; - Scale = getI8Imm (AM.Scale); + Scale = getI8Imm(AM.Scale); Index = AM.IndexReg; Disp = AM.GV ? CurDAG->getTargetGlobalAddress(AM.GV, MVT::i32, AM.Disp) : getI32Imm(AM.Disp); @@ -179,11 +179,16 @@ bool X86DAGToDAGISel::MatchAddress(SDOperand N, X86ISelAddressMode &AM) { // not the GV offset field. if (Subtarget->getIndirectExternAndWeakGlobals() && (GV->hasWeakLinkage() || GV->isExternal())) { - break; + AM.Base.Reg = + CurDAG->getTargetNode(X86::MOV32rm, MVT::i32, MVT::Other, + CurDAG->getRegister(0, MVT::i32), + getI8Imm(1), CurDAG->getRegister(0, MVT::i32), + CurDAG->getTargetGlobalAddress(GV, MVT::i32), + CurDAG->getEntryNode()); } else { AM.GV = GV; - return false; } + return false; } break; |