diff options
Diffstat (limited to 'lib/Transforms/Utils/SimplifyLibCalls.cpp')
| -rw-r--r-- | lib/Transforms/Utils/SimplifyLibCalls.cpp | 19 | 
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/Transforms/Utils/SimplifyLibCalls.cpp b/lib/Transforms/Utils/SimplifyLibCalls.cpp index 74d4e22fa4..e3e9266e52 100644 --- a/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -34,6 +34,7 @@ protected:    Function *Caller;    const DataLayout *TD;    const TargetLibraryInfo *TLI; +  const LibCallSimplifier *LCS;    LLVMContext* Context;  public:    LibCallOptimization() { } @@ -48,10 +49,12 @@ public:      =0;    Value *optimizeCall(CallInst *CI, const DataLayout *TD, -                      const TargetLibraryInfo *TLI, IRBuilder<> &B) { +                      const TargetLibraryInfo *TLI, +                      const LibCallSimplifier *LCS, IRBuilder<> &B) {      Caller = CI->getParent()->getParent();      this->TD = TD;      this->TLI = TLI; +    this->LCS = LCS;      if (CI->getCalledFunction())        Context = &CI->getCalledFunction()->getContext(); @@ -840,6 +843,7 @@ namespace llvm {  class LibCallSimplifierImpl {    const DataLayout *TD;    const TargetLibraryInfo *TLI; +  const LibCallSimplifier *LCS;    StringMap<LibCallOptimization*> Optimizations;    // Fortified library call optimizations. @@ -869,9 +873,11 @@ class LibCallSimplifierImpl {    void initOptimizations();    void addOpt(LibFunc::Func F, LibCallOptimization* Opt);  public: -  LibCallSimplifierImpl(const DataLayout *TD, const TargetLibraryInfo *TLI) { +  LibCallSimplifierImpl(const DataLayout *TD, const TargetLibraryInfo *TLI, +                        const LibCallSimplifier *LCS) {      this->TD = TD;      this->TLI = TLI; +    this->LCS = LCS;    }    Value *optimizeCall(CallInst *CI); @@ -918,7 +924,7 @@ Value *LibCallSimplifierImpl::optimizeCall(CallInst *CI) {    LibCallOptimization *LCO = Optimizations.lookup(Callee->getName());    if (LCO) {      IRBuilder<> Builder(CI); -    return LCO->optimizeCall(CI, TD, TLI, Builder); +    return LCO->optimizeCall(CI, TD, TLI, LCS, Builder);    }    return 0;  } @@ -930,7 +936,7 @@ void LibCallSimplifierImpl::addOpt(LibFunc::Func F, LibCallOptimization* Opt) {  LibCallSimplifier::LibCallSimplifier(const DataLayout *TD,                                       const TargetLibraryInfo *TLI) { -  Impl = new LibCallSimplifierImpl(TD, TLI); +  Impl = new LibCallSimplifierImpl(TD, TLI, this);  }  LibCallSimplifier::~LibCallSimplifier() { @@ -941,4 +947,9 @@ Value *LibCallSimplifier::optimizeCall(CallInst *CI) {    return Impl->optimizeCall(CI);  } +void LibCallSimplifier::replaceAllUsesWith(Instruction *I, Value *With) const { +  I->replaceAllUsesWith(With); +  I->eraseFromParent(); +} +  }  | 
