Auto-upgrade the magic ".llvm.eh.catch.all.value" global to

"llvm.eh.catch.all.value". Only the name needs to be changed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113600 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2010-09-10 18:51:56 +00:00
parent 979927ab26
commit de49f360ec
5 changed files with 28 additions and 0 deletions

View File

@ -16,6 +16,7 @@
namespace llvm {
class Module;
class GlobalVariable;
class Function;
class CallInst;
@ -35,6 +36,10 @@ namespace llvm {
/// so that it can update all calls to the old function.
void UpgradeCallsToIntrinsic(Function* F);
/// This checks for global variables which should be upgraded. It returns true
/// if it requires upgrading.
bool UpgradeGlobalVariable(GlobalVariable *GV);
/// This function checks debug info intrinsics. If an intrinsic is invalid
/// then this function simply removes the intrinsic.
void CheckDebugInfoIntrinsics(Module *M);

View File

@ -1288,6 +1288,12 @@ bool BitcodeReader::ParseModule() {
UpgradedIntrinsics.push_back(std::make_pair(FI, NewFn));
}
// Look for global variables which need to be renamed.
for (Module::global_iterator
GI = TheModule->global_begin(), GE = TheModule->global_end();
GI != GE; ++GI)
UpgradeGlobalVariable(GI);
// Force deallocation of memory for these vectors to favor the client that
// want lazy deserialization.
std::vector<std::pair<GlobalVariable*, unsigned> >().swap(GlobalInits);

View File

@ -365,6 +365,20 @@ bool llvm::UpgradeIntrinsicFunction(Function *F, Function *&NewFn) {
return Upgraded;
}
bool llvm::UpgradeGlobalVariable(GlobalVariable *GV) {
const std::string &Name = GV->getName();
// We are only upgrading one symbol here. If we upgrade more, we will want to
// perform some sort of short-circuiting like in the
// "UpgradeIntrinsicFunction1" function.
if (Name == ".llvm.eh.catch.all.value") {
GV->setName("llvm.eh.catch.all.value");
return true;
}
return false;
}
/// ExtendNEONArgs - For NEON "long" and "wide" operations, where the results
/// have vector elements twice as big as one or both source operands, do the
/// sign- or zero-extension that used to be handled by intrinsics. The

View File

@ -0,0 +1,3 @@
; This isn't really an assembly file. It just runs test on bitcode to ensure
; it is auto-upgraded.
; RUN: llvm-dis < %s.bc | not grep {i32 @\\.llvm\\.eh}

Binary file not shown.