58 lines · plain
1; RUN: opt %loadNPMPolly -aa-pipeline=tbaa '-passes=polly-custom<scops>' -polly-print-scops -polly-invariant-load-hoisting=true -polly-ignore-aliasing -disable-output < %s 2>&1 | FileCheck %s2;3; Note: The order of the invariant accesses is important because A is the4; base pointer of tmp3 and we will generate code in the same order as5; the invariant accesses are listed here.6;7; CHECK: Invariant Accesses: {8; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]9; CHECK: MemRef_A[42]10; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0]11; CHECK: MemRef_tmp3[32]12; CHECK: }13;14; CHECK: Arrays {15; CHECK: ptr MemRef_A[*];16; CHECK: ptr MemRef_tmp3[*]; [BasePtrOrigin: MemRef_A]17; CHECK: i32 MemRef_tmp5[*]; [BasePtrOrigin: MemRef_tmp3]18; CHECK: }19;20; CHECK: Arrays (Bounds as pw_affs) {21; CHECK: ptr MemRef_A[*];22; CHECK: ptr MemRef_tmp3[*]; [BasePtrOrigin: MemRef_A]23; CHECK: i32 MemRef_tmp5[*]; [BasePtrOrigin: MemRef_tmp3]24; CHECK: }25;26; void f(int ***A) {27; for (int i = 0; i < 1024; i++)28; A[42][32][i] = 0;29; }30;31target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"32 33define void @f(ptr %A) {34bb:35 br label %bb136 37bb1: ; preds = %bb7, %bb38 %indvars.iv = phi i64 [ %indvars.iv.next, %bb7 ], [ 0, %bb ]39 %exitcond = icmp ne i64 %indvars.iv, 102440 br i1 %exitcond, label %bb2, label %bb841 42bb2: ; preds = %bb143 %tmp = getelementptr inbounds ptr, ptr %A, i64 4244 %tmp3 = load ptr, ptr %tmp, align 845 %tmp4 = getelementptr inbounds ptr, ptr %tmp3, i64 3246 %tmp5 = load ptr, ptr %tmp4, align 847 %tmp6 = getelementptr inbounds i32, ptr %tmp5, i64 %indvars.iv48 store i32 0, ptr %tmp6, align 449 br label %bb750 51bb7: ; preds = %bb252 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 153 br label %bb154 55bb8: ; preds = %bb156 ret void57}58