• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
2;
3;    void f(int *A, int N, int p) {
4;      for (int i = 0; i < N; i++)
5;        A[i + 30] = 0;
6;    }
7;
8; The wrap function has no inbounds GEP but the nowrap function has. Therefore,
9; we will add the assumption that i+1 won't overflow only to the former.
10;
11; Note: 2147483618 + 30 == 2 ^ 31
12
13; CHECK:      Function: wrap
14;
15; CHECK:      Context:
16; CHECK-NEXT: [N] -> {  : -2147483648 <= N <= 2147483647 }
17;
18; CHECK:      Invalid Context:
19; CHECK-NEXT: [N] -> {  : N >= 2147483619 }
20
21target datalayout = "e-m:e-i32:64-f80:128-n8:16:32:64-S128"
22
23define void @wrap(i32* %A, i32 %N, i32 %p) {
24bb:
25  br label %bb2
26
27bb2:                                              ; preds = %bb7, %bb
28  %indvars.iv = phi i32 [ %indvars.iv.next, %bb7 ], [ 0, %bb ]
29  %tmp3 = icmp slt i32 %indvars.iv, %N
30  br i1 %tmp3, label %bb4, label %bb8
31
32bb4:                                              ; preds = %bb2
33  %tmp5 = add i32 %indvars.iv, 30
34  %tmp6 = getelementptr i32, i32* %A, i32 %tmp5
35  store i32 0, i32* %tmp6, align 4
36  br label %bb7
37
38bb7:                                              ; preds = %bb4
39  %indvars.iv.next = add nuw nsw i32 %indvars.iv, 1
40  br label %bb2
41
42bb8:                                              ; preds = %bb2
43  ret void
44}
45