From: Dan Gohman Date: Fri, 18 Jun 2010 01:35:11 +0000 (+0000) Subject: Disable indvars on loops when LoopSimplify form is not available. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a52838285b6dce66821f0b272cb3479af8c3edb2;p=oota-llvm.git Disable indvars on loops when LoopSimplify form is not available. This fixes PR7333. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106267 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 36bea679554..84e393f7071 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -467,6 +467,17 @@ void IndVarSimplify::EliminateIVRemainders() { } bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) { + // If LoopSimplify form is not available, stay out of trouble. Some notes: + // - LSR currently only supports LoopSimplify-form loops. Indvars' + // canonicalization can be a pessimization without LSR to "clean up" + // afterwards. + // - We depend on having a preheader; in particular, + // Loop::getCanonicalInductionVariable only supports loops with preheaders, + // and we're in trouble if we can't find the induction variable even when + // we've manually inserted one. + if (!L->isLoopSimplifyForm()) + return false; + IU = &getAnalysis(); LI = &getAnalysis(); SE = &getAnalysis(); diff --git a/test/Transforms/IndVarSimplify/indirectbr.ll b/test/Transforms/IndVarSimplify/indirectbr.ll index b4ce153244a..a208ded22ed 100644 --- a/test/Transforms/IndVarSimplify/indirectbr.ll +++ b/test/Transforms/IndVarSimplify/indirectbr.ll @@ -1,6 +1,6 @@ ; RUN: opt < %s -indvars -S -disable-output -; PR5758 +; PR5758 define zeroext i1 @foo() nounwind { entry: indirectbr i8* undef, [label %"202", label %"133"] @@ -20,3 +20,20 @@ entry: "202": ; preds = %entry ret i1 false } + +; PR7333 +define void @__atomvec_module__put_vrml_bonds() nounwind { +bb7.preheader: ; preds = %entry + indirectbr i8* undef, [label %bb14, label %bb16] + +bb14: ; preds = %bb14, %bb7.preheader + br label %bb16 + +bb16: ; preds = %bb16, %bb14, %bb7.preheader + %S.31.0 = phi i64 [ %3, %bb16 ], [ 1, %bb7.preheader ], [ 1, %bb14 ] ; [#uses=2] + %0 = add nsw i64 %S.31.0, -1 ; [#uses=1] + %1 = getelementptr inbounds [3 x double]* undef, i64 0, i64 %0 ; [#uses=1] + %2 = load double* %1, align 8 ; [#uses=0] + %3 = add nsw i64 %S.31.0, 1 ; [#uses=1] + br label %bb16 +}