From: Dan Gohman Date: Thu, 25 Sep 2008 23:34:02 +0000 (+0000) Subject: Fix a bug in which address displacements were being added to the X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=789ce77c6a90747aab392e01f30601d55a95fe3a;p=oota-llvm.git Fix a bug in which address displacements were being added to the load from the stub, instead of the result of the load from the stub. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56626 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index 0554121e62a..b7ff7494c05 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -427,10 +427,18 @@ bool X86FastISel::X86SelectAddress(Value *V, X86AddressMode &AM, bool isCall) { Opc = X86::MOV64rm; RC = X86::GR64RegisterClass; } + + X86AddressMode StubAM; + StubAM.Base.Reg = AM.Base.Reg; + StubAM.GV = AM.GV; unsigned ResultReg = createResultReg(RC); - addFullAddress(BuildMI(MBB, TII.get(Opc), ResultReg), AM); + addFullAddress(BuildMI(MBB, TII.get(Opc), ResultReg), StubAM); + + // Now construct the final address. Note that the Disp, Scale, + // and Index values may already be set here. AM.Base.Reg = ResultReg; AM.GV = 0; + // Prevent loading GV stub multiple times in same MBB. LocalValueMap[V] = AM.Base.Reg; }