summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2005-12-17 09:13:43 +0000
committerEvan Cheng <evan.cheng@apple.com>2005-12-17 09:13:43 +0000
commit1d7124839237b92c9989145291be7b9e405b0ac0 (patch)
tree0d97b054f31a7d4c3b77ea98210d56a7abc309ab /llvm/lib
parent866cef563b70f309839b15bcbe2cb2b7653d2fbc (diff)
downloadbcm5719-llvm-1d7124839237b92c9989145291be7b9e405b0ac0.tar.gz
bcm5719-llvm-1d7124839237b92c9989145291be7b9e405b0ac0.zip
Darwin API issue: indirect load of external and weak symbols.
llvm-svn: 24775
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelDAGToDAG.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index db87384c931..4fad8dff77c 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/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;
OpenPOWER on IntegriCloud