From 1e9aa716e9058b035c12673d3873c18c6781820c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 16 Jan 2008 21:35:43 +0000 Subject: Handle attribute(used) global variables that are i8. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46090 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/StripSymbols.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'lib') diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 297c2763df..cd2396258c 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -101,20 +101,21 @@ bool StripSymbols::runOnModule(Module &M) { // If we're not just stripping debug info, strip all symbols from the // functions and the names from any internal globals. if (!OnlyDebugInfo) { - SmallPtrSet llvmUsedValues; - Value *LLVMUsed = M.getValueSymbolTable().lookup("llvm.used"); - if (LLVMUsed) { + SmallPtrSet llvmUsedValues; + if (GlobalVariable *LLVMUsed = M.getGlobalVariable("llvm.used")) { + llvmUsedValues.insert(LLVMUsed); // Collect values that are preserved as per explicit request. // llvm.used is used to list these values. - if (GlobalVariable *GV = dyn_cast(LLVMUsed)) { - if (ConstantArray *InitList = - dyn_cast(GV->getInitializer())) { - for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) { - if (ConstantExpr *CE = - dyn_cast(InitList->getOperand(i))) - if (CE->isCast()) - llvmUsedValues.insert(CE->getOperand(0)); - } + if (ConstantArray *Inits = + dyn_cast(LLVMUsed->getInitializer())) { + for (unsigned i = 0, e = Inits->getNumOperands(); i != e; ++i) { + if (GlobalValue *GV = dyn_cast(Inits->getOperand(i))) + llvmUsedValues.insert(GV); + else if (ConstantExpr *CE = + dyn_cast(Inits->getOperand(i))) + if (CE->getOpcode() == Instruction::BitCast) + if (GlobalValue *GV = dyn_cast(CE->getOperand(0))) + llvmUsedValues.insert(GV); } } } @@ -123,8 +124,6 @@ bool StripSymbols::runOnModule(Module &M) { I != E; ++I) { if (I->hasInternalLinkage() && llvmUsedValues.count(I) == 0) I->setName(""); // Internal symbols can't participate in linkage - else if (I->getName() == "llvm.used") { - } } for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { -- cgit v1.2.3