forked from OSchip/llvm-project
dfd14adeb0
Summary: Two utils methods have essentially the same functionality. This is an attempt to merge them into one. 1. lib/Transforms/Utils/Local.cpp : MergeBasicBlockIntoOnlyPred 2. lib/Transforms/Utils/BasicBlockUtils.cpp : MergeBlockIntoPredecessor Prior to the patch: 1. MergeBasicBlockIntoOnlyPred Updates either DomTree or DeferredDominance Moves all instructions from Pred to BB, deletes Pred Asserts BB has single predecessor If address was taken, replace the block address with constant 1 (?) 2. MergeBlockIntoPredecessor Updates DomTree, LoopInfo and MemoryDependenceResults Moves all instruction from BB to Pred, deletes BB Returns if doesn't have a single predecessor Returns if BB's address was taken After the patch: Method 2. MergeBlockIntoPredecessor is attempting to become the new default: Updates DomTree or DeferredDominance, and LoopInfo and MemoryDependenceResults Moves all instruction from BB to Pred, deletes BB Returns if doesn't have a single predecessor Returns if BB's address was taken Uses of MergeBasicBlockIntoOnlyPred that need to be replaced: 1. lib/Transforms/Scalar/LoopSimplifyCFG.cpp Updated in this patch. No challenges. 2. lib/CodeGen/CodeGenPrepare.cpp Updated in this patch. i. eliminateFallThrough is straightforward, but I added using a temporary array to avoid the iterator invalidation. ii. eliminateMostlyEmptyBlock(s) methods also now use a temporary array for blocks Some interesting aspects: - Since Pred is not deleted (BB is), the entry block does not need updating. - The entry block was being updated with the deleted block in eliminateMostlyEmptyBlock. Added assert to make obvious that BB=SinglePred. - isMergingEmptyBlockProfitable assumes BB is the one to be deleted. - eliminateMostlyEmptyBlock(BB) does not delete BB on one path, it deletes its unique predecessor instead. - adding some test owner as subscribers for the interesting tests modified: test/CodeGen/X86/avx-cmp.ll test/CodeGen/AMDGPU/nested-loop-conditions.ll test/CodeGen/AMDGPU/si-annotate-cf.ll test/CodeGen/X86/hoist-spill.ll test/CodeGen/X86/2006-11-17-IllegalMove.ll 3. lib/Transforms/Scalar/JumpThreading.cpp Not covered in this patch. It is the only use case using the DeferredDominance. I would defer to Brian Rzycki to make this replacement. Reviewers: chandlerc, spatel, davide, brzycki, bkramer, javed.absar Subscribers: qcolombet, sanjoy, nemanjai, nhaehnle, jlebar, tpr, kbarton, RKSimon, wmi, arsenm, llvm-commits Differential Revision: https://reviews.llvm.org/D48202 llvm-svn: 335183 |
||
---|---|---|
.. | ||
AArch64 | ||
AMDGPU | ||
ARM | ||
NVPTX | ||
X86 | ||
2005-08-15-AddRecIV.ll | ||
2005-08-17-OutOfLoopVariant.ll | ||
2005-09-12-UsesOutOutsideOfLoop.ll | ||
2007-04-23-UseIterator.ll | ||
2008-08-13-CmpStride.ll | ||
2008-09-09-Overflow.ll | ||
2009-01-13-nonconstant-stride-outside-loop.ll | ||
2009-04-28-no-reduce-mul.ll | ||
2011-07-19-CritEdgeBreakCrash.ll | ||
2011-10-03-CritEdgeMerge.ll | ||
2011-10-06-ReusePhi.ll | ||
2011-10-13-SCEVChain.ll | ||
2011-10-14-IntPtr.ll | ||
2011-12-19-PostincQuadratic.ll | ||
2012-01-02-nopreheader.ll | ||
2012-01-16-nopreheader.ll | ||
2012-03-15-nopreheader.ll | ||
2012-03-26-constexpr.ll | ||
2012-07-13-ExpandUDiv.ll | ||
2012-07-18-LimitReassociate.ll | ||
2013-01-05-IndBr.ll | ||
2013-01-14-ReuseCast.ll | ||
addrec-gep-address-space.ll | ||
addrec-gep.ll | ||
address-space-loop.ll | ||
count-to-zero.ll | ||
dead-phi.ll | ||
different-type-ivs.ll | ||
dominate-assert.ll | ||
dont-hoist-simple-loop-constants.ll | ||
dont_insert_redundant_ops.ll | ||
dont_reduce_bytes.ll | ||
dont_reverse.ll | ||
ephemeral.ll | ||
exit_compare_live_range.ll | ||
funclet.ll | ||
hoist-parent-preheader.ll | ||
illegal-addr-modes.ll | ||
invariant_value_first.ll | ||
invariant_value_first_arg.ll | ||
ivchain.ll | ||
lsr-comp-time.ll | ||
negative-scale.ll | ||
nested-reduce.ll | ||
nonintegral.ll | ||
nonlinear-postinc.ll | ||
ops_after_indvar.ll | ||
phi_node_update_multiple_preds.ll | ||
post-inc-icmpzero.ll | ||
post-inc-optsize.ll | ||
pr2537.ll | ||
pr2570.ll | ||
pr3086.ll | ||
pr3399.ll | ||
pr3571.ll | ||
pr12018.ll | ||
pr12048.ll | ||
pr12691.ll | ||
pr18165.ll | ||
pr25541.ll | ||
pr27056.ll | ||
pr31627.ll | ||
preserve-gep-loop-variant.ll | ||
related_indvars.ll | ||
remove_indvar.ll | ||
scaling_factor_cost_crash.ll | ||
scev-insertpt-bug.ll | ||
sext-ind-var.ll | ||
share_code_in_preheader.ll | ||
share_ivs.ll | ||
shl.ll | ||
uglygep-address-space.ll | ||
uglygep.ll | ||
use_postinc_value_outside_loop.ll | ||
var_stride_used_by_compare.ll | ||
variable_stride.ll |