mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-04-17 23:20:20 +00:00
patch to update the line number information in pass -mem2reg.
Currently this pass will delete the variable declaration info, and keep the line number info. But the kept line number info is not updated, and some is redundant or not correct, this patch just updates those info. llvm-svn: 65123
This commit is contained in:
parent
8d12de1c25
commit
580c176f47
@ -16,6 +16,7 @@
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
#include "llvm/Transforms/Utils/PromoteMemToReg.h"
|
||||
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
|
||||
#include "llvm/IntrinsicInst.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Function.h"
|
||||
@ -53,6 +54,30 @@ namespace {
|
||||
char PromotePass::ID = 0;
|
||||
static RegisterPass<PromotePass> X("mem2reg", "Promote Memory to Register");
|
||||
|
||||
/// Remove the invalid or redundant debug information.
|
||||
static void CleanDbgInfo(Function& F) {
|
||||
std::vector<Instruction*> DeadDbgs;
|
||||
for (Function::iterator BBI = F.begin(), BBE = F.end(); BBI != BBE; ++BBI) {
|
||||
if (BBI->size() <= 1)
|
||||
continue;
|
||||
for (BasicBlock::iterator I = BBI->begin(), E = BBI->getTerminator();
|
||||
I != E; ++I) {
|
||||
BasicBlock::iterator NextI = I;
|
||||
++NextI;
|
||||
if (isa<DbgStopPointInst>(I) && isa<DbgStopPointInst>(NextI))
|
||||
DeadDbgs.push_back(I);
|
||||
else if (isa<DbgStopPointInst>(I) && isa<BranchInst>(NextI))
|
||||
DeadDbgs.push_back(I);
|
||||
}
|
||||
}
|
||||
|
||||
while (!DeadDbgs.empty()) {
|
||||
Instruction *Inst = DeadDbgs.back();
|
||||
DeadDbgs.pop_back();
|
||||
Inst->eraseFromParent();
|
||||
}
|
||||
}
|
||||
|
||||
bool PromotePass::runOnFunction(Function &F) {
|
||||
std::vector<AllocaInst*> Allocas;
|
||||
|
||||
@ -76,6 +101,7 @@ bool PromotePass::runOnFunction(Function &F) {
|
||||
if (Allocas.empty()) break;
|
||||
|
||||
PromoteMemToReg(Allocas, DT, DF);
|
||||
CleanDbgInfo(F);
|
||||
NumPromoted += Allocas.size();
|
||||
Changed = true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user