llvm-6502/test/Transforms
Quentin Colombet 637582eaf7 When code size is the priority (Oz, MinSize attribute), help llvm
turning a code like this:

if (foo)
   free(foo)

into that:
free(foo)

Move a call to free from basic block FB into FB's predecessor, P,
when the path from P to FB is taken only if the argument of free is
not equal to NULL.

Some restrictions apply on P and FB to be sure that this code motion
is profitable. Namely:
1. FB must have only one predecessor P.
2. FB must contain only the call to free plus an unconditional
   branch to S.
3. P's successors are FB and S.

Because of 1., we will not increase the code size when moving the call
to free from FB to P.
Because of 2., FB will be empty after the move.
Because of 2. and 3., P's branch instruction becomes useless, so as FB
(simplifycfg will do the job).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171762 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07 18:37:41 +00:00
..
ADCE
ArgumentPromotion
BBVectorize Switch BBVectorize to directly depend on having a TTI analysis. 2013-01-07 10:22:36 +00:00
BlockPlacement
BranchFolding
CodeExtractor
CodeGenPrepare
ConstantMerge
ConstProp
CorrelatedValuePropagation
DeadArgElim Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
DeadStoreElimination Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
EarlyCSE There was a switch fall-through in the parser for textual LLVM that caused 2013-01-07 13:32:38 +00:00
FunctionAttrs
GlobalDCE
GlobalOpt Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
GVN Memory Dependence Analysis: fix a miscompile that uses DT to approxmiate the 2013-01-04 19:19:47 +00:00
IndVarSimplify
Inline Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 14:04:36 +00:00
InstCombine When code size is the priority (Oz, MinSize attribute), help llvm 2013-01-07 18:37:41 +00:00
InstSimplify
Internalize
IPConstantProp
JumpThreading Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
LCSSA
LICM tabs-to-spaces 2013-01-04 23:11:35 +00:00
LoopDeletion Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
LoopIdiom Fix a mistaken commit that included some debugging code. 2013-01-07 13:41:55 +00:00
LoopRotate
LoopSimplify
LoopStrengthReduce Switch the SCEV expander and LoopStrengthReduce to use 2013-01-07 14:41:08 +00:00
LoopUnroll
LoopUnswitch
LoopVectorize Fix a typo. Remove the duplicated test. 2013-01-05 01:17:46 +00:00
LowerAtomic
LowerExpectIntrinsic
LowerInvoke
LowerSwitch
Mem2Reg
MemCpyOpt
MergeFunc
MetaRenamer Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
ObjCARC
PhaseOrdering
PruneEH
Reassociate
ScalarRepl Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
SCCP Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
SimplifyCFG Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
SimplifyLibCalls
Sink
SROA
StripSymbols Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 13:57:25 +00:00
TailCallElim Tests: rewrite 'opt ... %s' to 'opt ... < %s' so that opt does not emit a ModuleID 2013-01-01 14:04:36 +00:00
TailDup