llvm-6502/lib/Transforms/InstCombine
Shuxin Yang b1ccfb3a54 [Fast-math] Disable "(C1/X)*C2 => (C1*C2)/X" if C1/X has multiple uses.
If "C1/X" were having multiple uses, the only benefit of this
transformation is to potentially shorten critical path. But it is at the
cost of instroducing additional div.

  The additional div may or may not incur cost depending on how div is
implemented. If it is implemented using Newton–Raphson iteration, it dosen't
seem to incur any cost (FIXME). However, if the div blocks the entire
pipeline, that sounds to be pretty expensive. Let CodeGen to take care 
this transformation.

  This patch sees 6% on a benchmark.

rdar://15032743


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191037 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-19 21:13:46 +00:00
..
CMakeLists.txt
InstCombine.h
InstCombineAddSub.cpp
InstCombineAndOrXor.cpp
InstCombineCalls.cpp Cleanup handling of constant function casts. 2013-09-17 21:10:14 +00:00
InstCombineCasts.cpp
InstCombineCompares.cpp
InstCombineLoadStoreAlloca.cpp InstCombine: Don't allow turning vector-of-pointer loads into vector-of-integer. 2013-09-19 20:59:04 +00:00
InstCombineMulDivRem.cpp [Fast-math] Disable "(C1/X)*C2 => (C1*C2)/X" if C1/X has multiple uses. 2013-09-19 21:13:46 +00:00
InstCombinePHI.cpp Get rid of unused isPodLike definitions. 2013-09-11 00:36:54 +00:00
InstCombineSelect.cpp
InstCombineShifts.cpp
InstCombineSimplifyDemanded.cpp
InstCombineVectorOps.cpp
InstCombineWorklist.h
InstructionCombining.cpp
LLVMBuild.txt
Makefile