llvm/lib
Arnold Schwaighofer 08a0e8f8db LoopVectorizer: integer division is not a reduction operation
Don't classify idiv/udiv as a reduction operation. Integer division is lossy.
For example : (1 / 2) * 4 != 4/2.

Example:

int a[] = { 2, 5, 2, 2}
int x = 80;

for()
  x /= a[i];

Scalar:
  x /= 2 // = 40
  x /= 5 // = 8
  x /= 2 // = 4
  x /= 2 // = 2

Vectorized:

 <80, 1> / <2,5> //= <40,0>
 <40, 0> / <2,2> //= <20,0>

 20*0 = 0

radar://13640654

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179381 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-12 15:15:19 +00:00
..
Analysis Aliasing rules for struct-path aware TBAA. 2013-04-11 23:24:18 +00:00
Archive
AsmParser
Bitcode
CodeGen Revert broken pieces of r179373. 2013-04-12 12:13:51 +00:00
DebugInfo Rename the C function to create a SLPVectorizerPass to something sane and expose it in the header file. 2013-04-11 11:36:36 +00:00
ExecutionEngine
IR Fix a disconcerting bug in Value::isUsedInBasicBlock, which gave wrong answers for blocks larger than 3 instrs. 2013-04-12 08:33:11 +00:00
IRReader
Linker
MC [ms-inline asm] Remove brackets from around a symbol reference in the target 2013-04-11 21:49:30 +00:00
Object Add 179294 back, but don't use bit fields so that it works on big endian hosts. 2013-04-12 00:17:33 +00:00
Option
Support Add a function to check if an argument list is too long. 2013-04-11 14:06:34 +00:00
TableGen
Target Add PPC instruction record forms and associated query functions 2013-04-12 02:18:09 +00:00
Transforms LoopVectorizer: integer division is not a reduction operation 2013-04-12 15:15:19 +00:00
CMakeLists.txt
LLVMBuild.txt
Makefile