summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-12-05 05:19:12 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-12-05 05:19:12 +0000
commit01d19d0299495e1dbe95ac2bed79e5c0af66391c (patch)
tree54185626f7853b0214eebb6cd0342bef871f58d1 /llvm
parent89cc49fe5d7c33d5e45d7fd1616bf88dfd69ae5f (diff)
downloadbcm5719-llvm-01d19d0299495e1dbe95ac2bed79e5c0af66391c.tar.gz
bcm5719-llvm-01d19d0299495e1dbe95ac2bed79e5c0af66391c.zip
Hide the stub created for MO_ExternalSymbol too.
given declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) declare void @foo() define void @bar() { call void @foo() call void @llvm.memset.p0i8.i32(i8* null, i8 0, i32 188, i32 1, i1 false) ret void } We used to produce L_foo$stub: .indirect_symbol _foo .ascii "\364\364\364\364\364" _memset$stub: .indirect_symbol _memset .ascii "\364\364\364\364\364" We not produce a private stub for memset too. Stubs are not needed with recent linkers, but we still produce them for darwin8. Thanks to David Fang for confirming that gcc used to do this too. llvm-svn: 196468
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86MCInstLower.cpp16
-rw-r--r--llvm/test/CodeGen/X86/memset-2.ll4
-rw-r--r--llvm/test/CodeGen/X86/sibcall-5.ll8
3 files changed, 17 insertions, 11 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp
index 85af0b45560..305dc953928 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 d0a3c7a74bc..a87ef2e15a5 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 9424b61e36a..c04af234b13 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
OpenPOWER on IntegriCloud