Eric Christopher | cee313d | 2019-04-17 04:52:47 +0000 | [diff] [blame^] | 1 | ; RUN: opt -loop-vectorize -force-vector-width=2 -S < %s |
| 2 | ; |
| 3 | ; Cleaned up version of fe_tools.all_dimensions.ll from PR36311. |
| 4 | ; Forcing VF=2 to trigger vector code gen |
| 5 | ; |
| 6 | ; This is a test case that let's vectorizer's code gen to modify CFG and get |
| 7 | ; DomTree out of date, such that an assert from SCEV would trigger if |
| 8 | ; reanalysis of SCEV happens subsequently. Once vector code gen starts, |
| 9 | ; vectorizer should not invoke recomputation of Analysis. |
| 10 | |
| 11 | $test = comdat any |
| 12 | |
| 13 | declare i32 @__gxx_personality_v0(...) |
| 14 | |
| 15 | ; Function Attrs: uwtable |
| 16 | define dso_local void @test() local_unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { |
| 17 | entry: |
| 18 | br label %for.body51 |
| 19 | |
| 20 | for.body51: ; preds = %for.body51, %entry |
| 21 | br i1 undef, label %for.body51, label %for.body89.lr.ph |
| 22 | |
| 23 | for.cond80.loopexit: ; preds = %for.body89 |
| 24 | %inc94.lcssa = phi i32 [ %inc94, %for.body89 ] |
| 25 | br i1 undef, label %for.body89.lr.ph, label %nrvo.skipdtor.loopexit |
| 26 | |
| 27 | for.body89.lr.ph: ; preds = %for.cond80.loopexit, %for.body51 |
| 28 | %i79.0179 = phi i32 [ %add90, %for.cond80.loopexit ], [ 0, %for.body51 ] |
| 29 | %next_index.4178 = phi i32 [ %inc94.lcssa, %for.cond80.loopexit ], [ undef, %for.body51 ] |
| 30 | %add90 = add nuw i32 %i79.0179, 1 |
| 31 | %mul91 = mul i32 %add90, undef |
| 32 | br label %for.body89 |
| 33 | |
| 34 | for.body89: ; preds = %for.body89, %for.body89.lr.ph |
| 35 | %j.0175 = phi i32 [ 0, %for.body89.lr.ph ], [ %add92, %for.body89 ] |
| 36 | %next_index.5174 = phi i32 [ %next_index.4178, %for.body89.lr.ph ], [ %inc94, %for.body89 ] |
| 37 | %add92 = add nuw i32 %j.0175, 1 |
| 38 | %add93 = add i32 %add92, %mul91 |
| 39 | %inc94 = add i32 %next_index.5174, 1 |
| 40 | %conv95 = zext i32 %next_index.5174 to i64 |
| 41 | %arrayidx.i160 = getelementptr inbounds i32, i32* undef, i64 %conv95 |
| 42 | store i32 %add93, i32* %arrayidx.i160, align 4 |
| 43 | ;, !tbaa !1 |
| 44 | %cmp87 = icmp ult i32 %add92, undef |
| 45 | br i1 %cmp87, label %for.body89, label %for.cond80.loopexit |
| 46 | |
| 47 | nrvo.skipdtor.loopexit: ; preds = %for.cond80.loopexit |
| 48 | ret void |
| 49 | } |