67 lines · plain
1; RUN: opt %loadNPMPolly -polly-stmt-granularity=bb '-passes=polly-custom<mse>' -polly-print-mse -disable-output < %s | FileCheck %s2; RUN: opt %loadNPMPolly -polly-stmt-granularity=bb '-passes=polly-custom<mse>' -polly-print-mse -pass-remarks-analysis=polly-mse -disable-output < %s 2>&1 | FileCheck %s --check-prefix=MSE3;4; Verify that the expansion of an array with load after store in a same statement is not done.5;6; Original source code :7;8; #define Ni 20009; #define Nj 300010;11; void mse(double A[Ni], double B[Nj], double C[Nj], double D[Nj]) {12; int i,j;13; for (i = 0; i < Ni; i++) {14; for (int j = 0; j<Nj; j++) {15; B[j] = j;16; C[j] = B[j];17; }18; }19; }20;21; Check that C is expanded22;23; CHECK: i64 MemRef_C_Stmt_for_body4_expanded[10000][10000]; // Element size 824; CHECK: new: { Stmt_for_body4[i0, i1] -> MemRef_C_Stmt_for_body4_expanded[i0, i1] };25;26; Check that B is not expanded27;28; CHECK-NOT: double MemRef_B_Stmt_for_body4_expanded[10000][10000]; // Element size 829; MSE: MemRef_B has read after write to the same element in same statement. The dependences found during analysis may be wrong because Polly is not able to handle such case for now.30;31target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"32target triple = "x86_64-unknown-linux-gnu"33 34define void @mse(ptr %A, ptr %B, ptr %C, ptr %D) {35entry:36 br label %entry.split37 38entry.split: ; preds = %entry39 br label %for.body40 41for.body: ; preds = %entry.split, %for.inc942 %i.02 = phi i32 [ 0, %entry.split ], [ %inc10, %for.inc9 ]43 br label %for.body444 45for.body4: ; preds = %for.body, %for.body446 %indvars.iv = phi i64 [ 0, %for.body ], [ %indvars.iv.next, %for.body4 ]47 %0 = trunc i64 %indvars.iv to i3248 %conv = sitofp i32 %0 to double49 %arrayidx = getelementptr inbounds double, ptr %B, i64 %indvars.iv50 store double %conv, ptr %arrayidx, align 851 %arrayidx6 = getelementptr inbounds double, ptr %B, i64 %indvars.iv52 %1 = load i64, ptr %arrayidx6, align 853 %arrayidx8 = getelementptr inbounds double, ptr %C, i64 %indvars.iv54 store i64 %1, ptr %arrayidx8, align 855 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 156 %exitcond = icmp ne i64 %indvars.iv.next, 1000057 br i1 %exitcond, label %for.body4, label %for.inc958 59for.inc9: ; preds = %for.body460 %inc10 = add nuw nsw i32 %i.02, 161 %exitcond3 = icmp ne i32 %inc10, 1000062 br i1 %exitcond3, label %for.body, label %for.end1163 64for.end11: ; preds = %for.inc965 ret void66}67