brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · fc5527c Raw
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