81 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s2;3; void f(long *A, long N, long p) {4; for (long i = 0; i < N; i++)5; A[i + 1] = 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:12; 1152921504606846975 * sizeof(long) <= 2 ^ 63 - 113; and14; 1152921504606846976 * sizeof(long) > 2 ^ 63 - 115; with16; sizeof(long) == 817;18; CHECK: Function: wrap19; CHECK: Invalid Context:20; CHECK-NEXT: [N] -> { : N >= 1152921504606846976 }21;22; CHECK: Function: nowrap23; CHECK: Invalid Context:24; CHECK-NEXT: [N] -> { : false }25;26target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"27 28define void @wrap(ptr %A, i64 %N, i64 %p) {29bb:30 %tmp31 = icmp slt i64 0, %N31 br i1 %tmp31, label %bb4.lr.ph, label %bb832 33bb4.lr.ph: ; preds = %bb34 br label %bb435 36bb4: ; preds = %bb4.lr.ph, %bb737 %indvars.iv2 = phi i64 [ 0, %bb4.lr.ph ], [ %indvars.iv.next, %bb7 ]38 %tmp5 = add nuw nsw i64 %indvars.iv2, 139 %tmp6 = getelementptr i64, ptr %A, i64 %tmp540 store i64 0, ptr %tmp6, align 441 br label %bb742 43bb7: ; preds = %bb444 %indvars.iv.next = add nuw nsw i64 %indvars.iv2, 145 %tmp3 = icmp slt i64 %indvars.iv.next, %N46 br i1 %tmp3, label %bb4, label %bb2.bb8_crit_edge47 48bb2.bb8_crit_edge: ; preds = %bb749 br label %bb850 51bb8: ; preds = %bb2.bb8_crit_edge, %bb52 ret void53}54 55define void @nowrap(ptr %A, i64 %N, i64 %p) {56bb:57 %tmp31 = icmp slt i64 0, %N58 br i1 %tmp31, label %bb4.lr.ph, label %bb859 60bb4.lr.ph: ; preds = %bb61 br label %bb462 63bb4: ; preds = %bb4.lr.ph, %bb764 %indvars.iv2 = phi i64 [ 0, %bb4.lr.ph ], [ %indvars.iv.next, %bb7 ]65 %tmp5 = add nuw nsw i64 %indvars.iv2, 166 %tmp6 = getelementptr inbounds i64, ptr %A, i64 %tmp567 store i64 0, ptr %tmp6, align 468 br label %bb769 70bb7: ; preds = %bb471 %indvars.iv.next = add nuw nsw i64 %indvars.iv2, 172 %tmp3 = icmp slt i64 %indvars.iv.next, %N73 br i1 %tmp3, label %bb4, label %bb2.bb8_crit_edge74 75bb2.bb8_crit_edge: ; preds = %bb776 br label %bb877 78bb8: ; preds = %bb2.bb8_crit_edge, %bb79 ret void80}81