xref: /llvm-project/polly/test/CodeGen/inner_scev_sdiv_in_lb_invariant.ll (revision e1f056f692d869708c1898d9d65a69ac5584a0ed)
1; RUN: opt %loadNPMPolly -S -passes=polly-codegen \
2; RUN:     < %s | FileCheck %s
3;
4; Check that this will not crash our code generation.
5;
6; CHECK: polly.start:
7;
8;    void f(int *A, int N) {
9;      for (int i = 0; i < N / 4; i++)
10;        A[i] += A[i - 1];
11;    }
12;
13target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
14
15define void @f(ptr %A, i32 %N) {
16bb:
17  %tmp = sdiv i32 %N, 4
18  %tmp2 = sext i32 %tmp to i64
19  br label %bb1
20
21bb1:                                              ; preds = %bb11, %bb
22  %indvars.iv = phi i64 [ %indvars.iv.next, %bb11 ], [ 0, %bb ]
23  %tmp3 = icmp slt i64 %indvars.iv, %tmp2
24  br i1 %tmp3, label %bb4, label %bb12
25
26bb4:                                              ; preds = %bb1
27  %tmp5 = add nsw i64 %indvars.iv, -1
28  %tmp6 = getelementptr inbounds i32, ptr %A, i64 %tmp5
29  %tmp7 = load i32, ptr %tmp6, align 4
30  %tmp8 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv
31  %tmp9 = load i32, ptr %tmp8, align 4
32  %tmp10 = add nsw i32 %tmp9, %tmp7
33  store i32 %tmp10, ptr %tmp8, align 4
34  br label %bb11
35
36bb11:                                             ; preds = %bb4
37  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
38  br label %bb1
39
40bb12:                                             ; preds = %bb1
41  ret void
42}
43