llvm-6502/lib/Transforms/Utils
Arnold Schwaighofer f7af1987dd SimplifyCFG: If convert single conditional stores
This transformation will transform a conditional store with a preceeding
uncondtional store to the same location:

 a[i] =
 may-alias with a[i] load
 if (cond)
   a[i] = Y

into an unconditional store.

 a[i] = X
 may-alias with a[i] load
 tmp = cond ? Y : X;
 a[i] = tmp

We assume that on average the cost of a mispredicted branch is going to be
higher than the cost of a second store to the same location, and that the
secondary benefits of creating a bigger basic block for other optimizations to
work on outway the potential case were the branch would be correctly predicted
and the cost of the executing the second store would be noticably reflected in
performance.

hmmer's execution time improves by 30% on an imac12,2 on ref data sets. With
this change we are on par with gcc's performance (gcc also performs this
transformation). There was a 1.2 % performance improvement on a ARM swift chip.
Other tests in the test-suite+external seem to be mostly uninfluenced in my
experiments:
This optimization was triggered on 41 tests such that the executable was
different before/after the patch. Only 1 out of the 40 tests (dealII) was
reproducable below 100% (by about .4%). Given that hmmer benefits so much I
believe this to be a fair trade off.

I am going to watch performance numbers across the builtbots and will revert
this if anything unexpected comes up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179957 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-20 21:42:09 +00:00
..
BasicBlockUtils.cpp
BreakCriticalEdges.cpp
BuildLibCalls.cpp
BypassSlowDivision.cpp Bypass Slow Divides 2013-03-04 18:13:57 +00:00
CloneFunction.cpp Change CloneFunctionInto to always clone Argument attributes induvidually, 2013-04-10 10:37:38 +00:00
CloneModule.cpp
CMakeLists.txt
CmpInstAnalysis.cpp
CodeExtractor.cpp Remove #includes from the commonly used LoopInfo.h. 2013-02-09 01:04:28 +00:00
DemoteRegToStack.cpp
InlineFunction.cpp Add all clauses when merging the landing pads. Duplicates will be handled later on. 2013-03-22 20:31:05 +00:00
InstructionNamer.cpp
IntegerDivision.cpp Enhance integer division emulation support to handle types smaller than 32 bits, 2013-02-26 23:33:20 +00:00
LCSSA.cpp
LLVMBuild.txt
Local.cpp Fix llvm::removeUnreachableBlocks to handle unreachable loops. 2013-03-22 08:43:04 +00:00
LoopSimplify.cpp
LoopUnroll.cpp
LoopUnrollRuntime.cpp
LowerExpectIntrinsic.cpp
LowerInvoke.cpp
LowerSwitch.cpp
Makefile
Mem2Reg.cpp
MetaRenamer.cpp
ModuleUtils.cpp
PromoteMemoryToRegister.cpp
SimplifyCFG.cpp SimplifyCFG: If convert single conditional stores 2013-04-20 21:42:09 +00:00
SimplifyIndVar.cpp
SimplifyInstructions.cpp
SimplifyLibCalls.cpp Do not optimise fprintf() calls if its return value is used. 2013-04-17 02:01:10 +00:00
SSAUpdater.cpp
UnifyFunctionExitNodes.cpp
Utils.cpp
ValueMapper.cpp