[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / pr36311.ll
blobba48924f9de25c65c318c54445183d5eb4af4460
1 ; RUN: opt -loop-vectorize -force-vector-width=2 -S < %s
3 ; Cleaned up version of fe_tools.all_dimensions.ll from PR36311.
4 ; Forcing VF=2 to trigger vector code gen
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.
11 $test = comdat any
13 declare i32 @__gxx_personality_v0(...)
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
20 for.body51:                                       ; preds = %for.body51, %entry
21   br i1 undef, label %for.body51, label %for.body89.lr.ph
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
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
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
47 nrvo.skipdtor.loopexit:                           ; preds = %for.cond80.loopexit
48   ret void