forked from OSchip/llvm-project
implement Transforms/LoopStrengthReduce/dont-hoist-simple-loop-constants.ll.
We used to emit this code for it: _test: li r2, 1 ;; Value tying up a register for the whole loop li r5, 0 LBB_test_1: ; no_exit.2 or r6, r5, r5 li r5, 0 stw r5, 0(r3) addi r5, r6, 1 addi r3, r3, 4 add r7, r2, r5 ;; should be addi r7, r5, 1 cmpwi cr0, r7, 701 blt cr0, LBB_test_1 ; no_exit.2 LBB_test_2: ; loopexit.2.loopexit addi r2, r6, 2 stw r2, 0(r4) blr now we emit this: _test: li r2, 0 LBB_test_1: ; no_exit.2 or r5, r2, r2 li r2, 0 stw r2, 0(r3) addi r3, r3, 4 addi r2, r5, 1 addi r6, r5, 2 ;; whoa, fold those adds! cmpwi cr0, r6, 701 blt cr0, LBB_test_1 ; no_exit.2 LBB_test_2: ; loopexit.2.loopexit addi r2, r5, 2 stw r2, 0(r4) blr more improvement coming. llvm-svn: 23306
This commit is contained in:
parent
0c7728e4d6
commit
530fe6ab30
|
@ -826,7 +826,7 @@ void LoopStrengthReduce::StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
|
|||
// this by forcing a noop cast to be inserted into the preheader in this
|
||||
// case.
|
||||
if (Constant *C = dyn_cast<Constant>(BaseV))
|
||||
if (!C->isNullValue()) {
|
||||
if (!C->isNullValue() && !isTargetConstant(Base)) {
|
||||
// We want this constant emitted into the preheader!
|
||||
BaseV = new CastInst(BaseV, BaseV->getType(), "preheaderinsert",
|
||||
PreInsertPt);
|
||||
|
|
Loading…
Reference in New Issue