diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2013-07-13 01:16:47 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2013-07-13 01:16:47 +0000 |
commit | 75681bb302e524460edb7c8c5c6e98792b5027a2 (patch) | |
tree | 1ce2531e7f274d9103d2cbd502a74b0453d70ee3 /lib/Transforms | |
parent | 12c74dc2c2ee306f60fb39a9b2a43000e23addcc (diff) | |
download | external_llvm-75681bb302e524460edb7c8c5c6e98792b5027a2.zip external_llvm-75681bb302e524460edb7c8c5c6e98792b5027a2.tar.gz external_llvm-75681bb302e524460edb7c8c5c6e98792b5027a2.tar.bz2 |
Add a microoptimization for urem.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186235 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/InstCombine/InstCombineMulDivRem.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp index e94f719..eac24c6 100644 --- a/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp +++ b/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp @@ -1125,6 +1125,13 @@ Instruction *InstCombiner::visitURem(BinaryOperator &I) { return BinaryOperator::CreateAnd(Op0, Add); } + // 1 urem X -> zext(X != 1) + if (match(Op0, m_One())) { + Value *Cmp = Builder->CreateICmpNE(Op1, Op0); + Value *Ext = Builder->CreateZExt(Cmp, I.getType()); + return ReplaceInstUsesWith(I, Ext); + } + return 0; } |