In order to speed up compile time and to avoid random timeouts we now separately track assumptions and restrictions. In this context assumptions describe parameter valuations we need and restrictions describe parameter valuations we do not allow. During AST generation we create a runtime check for both, whereas the one for the restrictions is negated before a conjunction is build. Except the In-Bounds assumptions we currently only track restrictions. Differential Revision: http://reviews.llvm.org/D17247 llvm-svn: 262328
45 lines
1.3 KiB
LLVM
45 lines
1.3 KiB
LLVM
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
|
|
;
|
|
; void f(int *A, int N, int p) {
|
|
; for (int i = 0; i < N; i++)
|
|
; A[i + 30] = 0;
|
|
; }
|
|
;
|
|
; The wrap function has no inbounds GEP but the nowrap function has. Therefore,
|
|
; we will add the assumption that i+1 won't overflow only to the former.
|
|
;
|
|
; Note: 2147483618 + 30 == 2 ^ 31
|
|
|
|
; CHECK: Function: wrap
|
|
;
|
|
; CHECK: Context:
|
|
; CHECK-NEXT: [N] -> { : -2147483648 <= N <= 2147483647 }
|
|
;
|
|
; CHECK: Invalid Context:
|
|
; CHECK-NEXT: [N] -> { : N >= 2147483619 }
|
|
|
|
target datalayout = "e-m:e-i32:64-f80:128-n8:16:32:64-S128"
|
|
|
|
define void @wrap(i32* %A, i32 %N, i32 %p) {
|
|
bb:
|
|
br label %bb2
|
|
|
|
bb2: ; preds = %bb7, %bb
|
|
%indvars.iv = phi i32 [ %indvars.iv.next, %bb7 ], [ 0, %bb ]
|
|
%tmp3 = icmp slt i32 %indvars.iv, %N
|
|
br i1 %tmp3, label %bb4, label %bb8
|
|
|
|
bb4: ; preds = %bb2
|
|
%tmp5 = add i32 %indvars.iv, 30
|
|
%tmp6 = getelementptr i32, i32* %A, i32 %tmp5
|
|
store i32 0, i32* %tmp6, align 4
|
|
br label %bb7
|
|
|
|
bb7: ; preds = %bb4
|
|
%indvars.iv.next = add nuw nsw i32 %indvars.iv, 1
|
|
br label %bb2
|
|
|
|
bb8: ; preds = %bb2
|
|
ret void
|
|
}
|