Revert "[SCEV][IndVarSimplify] insert point should not be block front."

This reverts commit f1efb8bb4b.

Reverted because it doesn't correctly update the pass return status, see

http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-debian/builds/9441/steps/test-check-all/logs/FAIL%3A%20LLVM%3A%3Awiden-i32-i8ptr.ll
This commit is contained in:
serge-sans-paille 2020-07-14 14:23:14 +02:00
parent 6f51ceea1f
commit 1cd1c1d62e
3 changed files with 10 additions and 36 deletions

View File

@ -1435,12 +1435,8 @@ PHINode *WidenIV::createWideIV(SCEVExpander &Rewriter) {
// either find an existing phi or materialize a new one. Either way, we
// expect a well-formed cyclic phi-with-increments. i.e. any operand not part
// of the phi-SCC dominates the loop entry.
Instruction *InsertPt = &*L->getHeader()->getFirstInsertionPt();
WidePhi = dyn_cast<PHINode>(Rewriter.expandCodeFor(AddRec, WideType, InsertPt));
// If the wide phi is not a phi node, for example a cast node, like bitcast,
// inttoptr, ptrtoint, just skip for now.
if (!WidePhi)
return nullptr;
Instruction *InsertPt = &L->getHeader()->front();
WidePhi = cast<PHINode>(Rewriter.expandCodeFor(AddRec, WideType, InsertPt));
// Remembering the WideIV increment generated by SCEVExpander allows
// widenIVUse to reuse it when widening the narrow IV's increment. We don't

View File

@ -1292,8 +1292,7 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized,
if (useSubtract)
Step = SE.getNegativeSCEV(Step);
// Expand the step somewhere that dominates the loop header.
Value *StepV = expandCodeFor(Step, IntTy,
&*L->getHeader()->getFirstInsertionPt());
Value *StepV = expandCodeFor(Step, IntTy, &L->getHeader()->front());
// The no-wrap behavior proved by IsIncrement(NUW|NSW) is only applicable if
// we actually do emit an addition. It does not apply if we emit a
@ -1439,8 +1438,7 @@ Value *SCEVExpander::expandAddRecExprLiterally(const SCEVAddRecExpr *S) {
{
// Expand the step somewhere that dominates the loop header.
SCEVInsertPointGuard Guard(Builder, this);
StepV = expandCodeFor(Step, IntTy,
&*L->getHeader()->getFirstInsertionPt());
StepV = expandCodeFor(Step, IntTy, &L->getHeader()->front());
}
Result = expandIVInc(PN, StepV, L, ExpandTy, IntTy, useSubtract);
}
@ -1872,6 +1870,11 @@ Value *SCEVExpander::expand(const SCEV *S) {
}
}
// IndVarSimplify sometimes sets the insertion point at the block start, even
// when there are PHIs at that point. We must correct for this.
if (isa<PHINode>(*InsertPt))
InsertPt = &*InsertPt->getParent()->getFirstInsertionPt();
// Check to see if we already expanded this here.
auto I = InsertedExpressions.find(std::make_pair(S, InsertPt));
if (I != InsertedExpressions.end())
@ -1942,8 +1945,7 @@ SCEVExpander::getOrInsertCanonicalInductionVariable(const Loop *L,
// Emit code for it.
SCEVInsertPointGuard Guard(Builder, this);
PHINode *V =
cast<PHINode>(expandCodeFor(H, nullptr,
&*L->getHeader()->getFirstInsertionPt()));
cast<PHINode>(expandCodeFor(H, nullptr, &L->getHeader()->front()));
return V;
}

View File

@ -1,24 +0,0 @@
; RUN: opt < %s -indvars -S | FileCheck %s
target datalayout = "e-m:e-i64:64-n32:64"
define dso_local void @Widen_i32_i8ptr() local_unnamed_addr {
; CHECK-LABEL: @Widen_i32_i8ptr(
; CHECK: phi i8*
; CHECK: phi i32
entry:
%ptrids = alloca [15 x i8*], align 8
%arraydecay2032 = getelementptr inbounds [15 x i8*], [15 x i8*]* %ptrids, i64 0, i64 0
store i8** %arraydecay2032, i8*** inttoptr (i64 8 to i8***), align 8
br label %for.cond2106
for.cond2106: ; preds = %for.cond2106, %entry
%gid.0 = phi i8* [ null, %entry ], [ %incdec.ptr, %for.cond2106 ]
%i.0 = phi i32 [ 0, %entry ], [ %inc2117, %for.cond2106 ]
%incdec.ptr = getelementptr inbounds i8, i8* %gid.0, i64 1
%idxprom2114 = zext i32 %i.0 to i64
%arrayidx2115 = getelementptr inbounds [15 x i8*], [15 x i8*]* %ptrids, i64 0, i64 %idxprom2114
store i8* %gid.0, i8** %arrayidx2115, align 8
%inc2117 = add nuw nsw i32 %i.0, 1
br label %for.cond2106
}