111 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<detect;scops>' -polly-print-detect -polly-print-scops -polly-invariant-load-hoisting=true -disable-output < %s 2>&1 | FileCheck %s2 3; CHECK-NOT: Function: foo_undereferanceable4 5; CHECK: Function: foo_dereferanceable6 7; CHECK: Invariant Accesses: {8; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]9; CHECK-NEXT: [sizeA] -> { Stmt_for_body_j__TO__for_latch_j[i0, i1] -> MemRef_sizeA_ptr[0] };10; CHECK-NEXT: Execution Context: [sizeA] -> { : }11; CHECK-NEXT: }12 13; CHECK: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]14; CHECK-NEXT: [sizeA] -> { Stmt_for_body_j__TO__for_latch_j[i0, i1] -> MemRef_A[i1, i0] };15 16; CHECK-NOT: Function: foo_undereferanceable17 18define void @foo_dereferanceable(ptr %A, ptr %B, ptr dereferenceable(8) align 8 %sizeA_ptr,19 i32 %lb.i, i32 %lb.j, i32 %ub.i, i32 %ub.j) {20entry:21 br label %for.i22 23for.i:24 %indvar.i = phi i32 [0, %entry], [%indvar.next.i, %for.latch.i]25 %indvar.next.i = add i32 %indvar.i, 126 %cmp.i = icmp sle i32 %indvar.i, 102427 br i1 %cmp.i, label %for.body.i, label %exit28 29for.body.i:30 br label %for.j31 32for.j:33 %indvar.j = phi i32 [0, %for.body.i], [%indvar.next.j, %for.latch.j]34 %indvar.next.j = add i32 %indvar.j, 135 %cmp.j = icmp sle i32 %indvar.j, 102436 br i1 %cmp.j, label %for.body.j, label %for.latch.i37 38for.body.j:39 %prod = mul i32 %indvar.j, %indvar.j40 %cmp = icmp sle i32 %prod, 102441 br i1 %cmp, label %stmt, label %for.latch.j42 43stmt:44 %sext.i = sext i32 %indvar.i to i6445 %sext.j = sext i32 %indvar.j to i6446 47 %sizeA = load i64, ptr %sizeA_ptr48 %prodA = mul i64 %sext.j, %sizeA49 %offsetA = add i64 %sext.i, %prodA50 %ptrA = getelementptr double, ptr %A, i64 %offsetA51 store double 42.0, ptr %ptrA52 53 br label %for.latch.j54 55for.latch.j:56 br label %for.j57 58for.latch.i:59 br label %for.i60 61exit:62 ret void63}64 65define void @foo_undereferanceable(ptr %A, ptr %B, ptr %sizeA_ptr) {66entry:67 br label %for.i68 69for.i:70 %indvar.i = phi i32 [0, %entry], [%indvar.next.i, %for.latch.i]71 %indvar.next.i = add i32 %indvar.i, 172 %cmp.i = icmp sle i32 %indvar.i, 102473 br i1 %cmp.i, label %for.body.i, label %exit74 75for.body.i:76 br label %for.j77 78for.j:79 %indvar.j = phi i32 [0, %for.body.i], [%indvar.next.j, %for.latch.j]80 %indvar.next.j = add i32 %indvar.j, 181 %cmp.j = icmp sle i32 %indvar.j, 102482 br i1 %cmp.j, label %for.body.j, label %for.latch.i83 84for.body.j:85 %prod = mul i32 %indvar.j, %indvar.j86 %cmp = icmp sle i32 %prod, 102487 br i1 %cmp, label %stmt, label %for.latch.j88 89stmt:90 %sext.i = sext i32 %indvar.i to i6491 %sext.j = sext i32 %indvar.j to i6492 93 %sizeA = load i64, ptr %sizeA_ptr94 %prodA = mul i64 %sext.j, %sizeA95 %offsetA = add i64 %sext.i, %prodA96 %ptrA = getelementptr double, ptr %A, i64 %offsetA97 store double 42.0, ptr %ptrA98 99 br label %for.latch.j100 101for.latch.j:102 br label %for.j103 104for.latch.i:105 br label %for.i106 107exit:108 ret void109}110 111