diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-18 22:20:55 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-21 18:26:05 +0100 |
commit | a8db806d52ce02ddca179b811da164023316d4b9 (patch) | |
tree | 6a7f772f4cc560d705c0b69536f1a72be8bcebf6 /llvm/lib/CodeGen/CodeGenPrepare.cpp | |
parent | 8c70a2597f53457efc8eb2798c1d1056bb105ec3 (diff) | |
download | llvm-a8db806d52ce02ddca179b811da164023316d4b9.zip llvm-a8db806d52ce02ddca179b811da164023316d4b9.tar.gz llvm-a8db806d52ce02ddca179b811da164023316d4b9.tar.bz2 |
[SimplifyLibCalls][IRBuilder] Accept any IRBuilder in SimplifyLibCalls
This changes the SimplifyLibCalls utility to accept an IRBuilderBase,
which allows us to pass through the IRBuilder used by InstCombine.
This will ensure that new instructions get added to the worklist.
The annotated test-case drops from 4 to 2 InstCombine iterations thanks
to this.
To achieve this, I'm adding an IRBuilderBase::OperandBundlesGuard,
which is basically the same as the existing InsertPointGuard and
FastMathFlagsGuard, but for operand bundles. Also add a
setDefaultOperandBundles() method so these can be set outside the
constructor.
Differential Revision: https://reviews.llvm.org/D74792
Diffstat (limited to 'llvm/lib/CodeGen/CodeGenPrepare.cpp')
-rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index cf5f4c7..e613cb7 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -2044,7 +2044,8 @@ bool CodeGenPrepare::optimizeCallInst(CallInst *CI, bool &ModifiedDT) { // to fortified library functions (e.g. __memcpy_chk) that have the default // "don't know" as the objectsize. Anything else should be left alone. FortifiedLibCallSimplifier Simplifier(TLInfo, true); - if (Value *V = Simplifier.optimizeCall(CI)) { + IRBuilder<> Builder(CI); + if (Value *V = Simplifier.optimizeCall(CI, Builder)) { CI->replaceAllUsesWith(V); CI->eraseFromParent(); return true; |