diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 85af0b45560a..305dc953928f 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -90,18 +90,25 @@ GetSymbolFromOperand(const MachineOperand &MO) const { break; } + if (!Suffix.empty()) + Name += MAI.getPrivateGlobalPrefix(); + + unsigned PrefixLen = Name.size(); + if (MO.isGlobal()) { const GlobalValue *GV = MO.getGlobal(); - bool isImplicitlyPrivate = !Suffix.empty(); - getMang()->getNameWithPrefix(Name, GV, isImplicitlyPrivate); + getMang()->getNameWithPrefix(Name, GV, false); } else if (MO.isSymbol()) { getMang()->getNameWithPrefix(Name, MO.getSymbolName()); } else if (MO.isMBB()) { Name += MO.getMBB()->getSymbol()->getName(); } + unsigned OrigLen = Name.size() - PrefixLen; Name += Suffix; - MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str()); + MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name); + + StringRef OrigName = StringRef(Name).substr(PrefixLen, OrigLen); // If the target flags on the operand changes the name of the symbol, do that // before we return the symbol. @@ -144,10 +151,9 @@ GetSymbolFromOperand(const MachineOperand &MO) const { StubValueTy(AsmPrinter.getSymbol(MO.getGlobal()), !MO.getGlobal()->hasInternalLinkage()); } else { - Name.erase(Name.end()-5, Name.end()); StubSym = MachineModuleInfoImpl:: - StubValueTy(Ctx.GetOrCreateSymbol(Name.str()), false); + StubValueTy(Ctx.GetOrCreateSymbol(OrigName), false); } break; } diff --git a/llvm/test/CodeGen/X86/memset-2.ll b/llvm/test/CodeGen/X86/memset-2.ll index d0a3c7a74bce..a87ef2e15a5a 100644 --- a/llvm/test/CodeGen/X86/memset-2.ll +++ b/llvm/test/CodeGen/X86/memset-2.ll @@ -5,7 +5,7 @@ declare void @llvm.memset.i32(i8*, i8, i32, i32) nounwind define fastcc void @t1() nounwind { entry: ; CHECK-LABEL: t1: -; CHECK: calll _memset +; CHECK: calll L_memset$stub call void @llvm.memset.p0i8.i32(i8* null, i8 0, i32 188, i32 1, i1 false) unreachable } @@ -13,7 +13,7 @@ entry: define fastcc void @t2(i8 signext %c) nounwind { entry: ; CHECK-LABEL: t2: -; CHECK: calll _memset +; CHECK: calll L_memset$stub call void @llvm.memset.p0i8.i32(i8* undef, i8 %c, i32 76, i32 1, i1 false) unreachable } diff --git a/llvm/test/CodeGen/X86/sibcall-5.ll b/llvm/test/CodeGen/X86/sibcall-5.ll index 9424b61e36a1..c04af234b131 100644 --- a/llvm/test/CodeGen/X86/sibcall-5.ll +++ b/llvm/test/CodeGen/X86/sibcall-5.ll @@ -8,7 +8,7 @@ define double @foo(double %a) nounwind readonly ssp { entry: ; X32-LABEL: foo: -; X32: jmp _sin$stub +; X32: jmp L_sin$stub ; X64-LABEL: foo: ; X64: jmp _sin @@ -18,7 +18,7 @@ entry: define float @bar(float %a) nounwind readonly ssp { ; X32-LABEL: bar: -; X32: jmp _sinf$stub +; X32: jmp L_sinf$stub ; X64-LABEL: bar: ; X64: jmp _sinf @@ -27,9 +27,9 @@ entry: ret float %0 } -; X32-LABEL: _sin$stub: +; X32-LABEL: L_sin$stub: ; X32-NEXT: .indirect_symbol _sin -; X32-LABEL: _sinf$stub: +; X32-LABEL: L_sinf$stub: ; X32-NEXT: .indirect_symbol _sinf declare float @sinf(float) nounwind readonly