[mlir][int-range] Limit xor int range inference to i1 (#116968)
[llvm-project.git] / llvm / test / Analysis / ScalarEvolution / scev-expander-existing-value-offset.ll
blob5bdfd19639210ce57f613d64dbf82ef04de73a32
1 ; RUN: opt < %s -passes=loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -S |FileCheck %s
2 ; SCEV expansion uses existing value or value + offset to reduce duplicate code expansion so foo should only generate one select inst after loop vectorization.
3 ; CHECK-LABEL: @foo(
4 ; CHECK: select
5 ; CHECK-NOT: select
7 @ySrcL = common global ptr null, align 8
8 @smL = common global i32 0, align 4
10 define void @foo(i32 %rwL, i32 %kL, i32 %xfL) {
11 entry:
12   %sub = add nsw i32 %rwL, -1
13   %shr = ashr i32 %xfL, 6
14   %cmp.i = icmp slt i32 %sub, %shr
15   %cond.i = select i1 %cmp.i, i32 %sub, i32 %shr
16   %cmp6 = icmp sgt i32 %cond.i, %kL
17   br i1 %cmp6, label %for.body.lr.ph, label %for.end
19 for.body.lr.ph:                                   ; preds = %entry
20   %tmp = load ptr, ptr @ySrcL, align 8
21   %tmp1 = sext i32 %kL to i64
22   %tmp2 = sext i32 %cond.i to i64
23   br label %for.body
25 for.body:                                         ; preds = %for.body, %for.body.lr.ph
26   %indvars.iv = phi i64 [ %tmp1, %for.body.lr.ph ], [ %indvars.iv.next, %for.body ]
27   %reduct.07 = phi i32 [ 0, %for.body.lr.ph ], [ %add, %for.body ]
28   %arrayidx = getelementptr inbounds i8, ptr %tmp, i64 %indvars.iv
29   %tmp3 = load i8, ptr %arrayidx, align 1
30   %conv = zext i8 %tmp3 to i32
31   %add = add nsw i32 %conv, %reduct.07
32   %indvars.iv.next = add nsw i64 %indvars.iv, 1
33   %cmp = icmp slt i64 %indvars.iv.next, %tmp2
34   br i1 %cmp, label %for.body, label %for.end.loopexit
36 for.end.loopexit:                                 ; preds = %for.body
37   %add.lcssa = phi i32 [ %add, %for.body ]
38   br label %for.end
40 for.end:                                          ; preds = %for.end.loopexit, %entry
41   %reduct.0.lcssa = phi i32 [ 0, %entry ], [ %add.lcssa, %for.end.loopexit ]
42   store i32 %reduct.0.lcssa, ptr @smL, align 4
43   ret void