diff options
| author | Hal Finkel <hfinkel@anl.gov> | 2013-07-02 05:21:11 +0000 |
|---|---|---|
| committer | Hal Finkel <hfinkel@anl.gov> | 2013-07-02 05:21:11 +0000 |
| commit | b19dd2bcaf219a3b5f144815c40b3f1b11a3d35d (patch) | |
| tree | 2e095f7703ad140dd46f3b19452e9e0c4a95d268 /lib/CodeGen/SlotIndexes.cpp | |
| parent | e7dd3afef074596dd61211b5e0b05c4de5d5f85b (diff) | |
| download | external_llvm-b19dd2bcaf219a3b5f144815c40b3f1b11a3d35d.zip external_llvm-b19dd2bcaf219a3b5f144815c40b3f1b11a3d35d.tar.gz external_llvm-b19dd2bcaf219a3b5f144815c40b3f1b11a3d35d.tar.bz2 | |
Revert r185257 (InstCombine: Be more agressive optimizing 'udiv' instrs with 'select' denoms)
I'm reverting this commit because:
1. As discussed during review, it needs to be rewritten (to avoid creating and
then deleting instructions).
2. This is causing optimizer crashes. Specifically, I'm seeing things like
this:
While deleting: i1 %
Use still stuck around after Def is destroyed: <badref> = select i1 <badref>, i32 0, i32 1
opt: /src/llvm-trunk/lib/IR/Value.cpp:79: virtual llvm::Value::~Value(): Assertion `use_empty() && "Uses remain when a value is destroyed!"' failed.
I'd guess that these will go away once we're no longer creating/deleting
instructions here, but just in case, I'm adding a regression test.
Because the code is bring rewritten, I've just XFAIL'd the original regression test. Original commit message:
InstCombine: Be more agressive optimizing 'udiv' instrs with 'select' denoms
Real world code sometimes has the denominator of a 'udiv' be a
'select'. LLVM can handle such cases but only when the 'select'
operands are symmetric in structure (both select operands are a constant
power of two or a left shift, etc.). This falls apart if we are dealt a
'udiv' where the code is not symetric or if the select operands lead us
to more select instructions.
Instead, we should treat the LHS and each select operand as a distinct
divide operation and try to optimize them independently. If we can
to simplify each operation, then we can replace the 'udiv' with, say, a
'lshr' that has a new select with a bunch of new operands for the
select.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185415 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SlotIndexes.cpp')
0 files changed, 0 insertions, 0 deletions
