brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 9ee4a54 Raw
113 lines · plain
1; RUN: opt %loadNPMPolly -scalar-evolution-max-value-compare-depth=3 '-passes=polly-custom<scops>' -polly-print-scops -polly-invariant-load-hoisting=true -disable-output < %s 2>&1 | FileCheck %s2; RUN: opt %loadNPMPolly -scalar-evolution-max-value-compare-depth=3 '-passes=polly<no-default-opts>' -polly-invariant-load-hoisting=true -disable-output < %s3;4; Stress test for the code generation of invariant accesses.5;6;    void f(int *I0, int *I1, int *I2, int *V, long p0, long p1, long p2, long p3) {7;      *V = *I1;8;      for (int i = 0; i < 1000; i++) {9;        long n0 = p0 * *I1 + p1 * *I1;10;        V[i] = I0[n0];11;        long m0 = p0 * (I2[0]);12;        long m1 = p1 * (I2[1]);13;        long m2 = p2 * (I2[2]);14;        long m3 = p3 * (I2[3]);15;        int j = 0;16;        do {17;          if (j > 0) {18;            V[i] += I1[m0 + m2];19;            V[i] += I1[n0];20;          }21;        } while (j++ < m1 + m3 * n0);22;      }23;    }24;25; CHECK: p0: ((sext i32 %tmp6 to i64) * %p1)26; CHECK: p1: ((sext i32 %tmp3 to i64) * (sext i32 %tmp8 to i64) * (%p0 + %p1) * %p3)27; CHECK: p2: ((sext i32 %tmp3 to i64) * (%p0 + %p1))28; CHECK: p3: ((sext i32 %tmp5 to i64) * %p0)29; CHECK: p4: ((sext i32 %tmp7 to i64) * %p2)30;31target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"32 33define void @f(ptr %I0, ptr %I1, ptr %I2, ptr %V, i64 %p0, i64 %p1, i64 %p2, i64 %p3) {34entry:35  %tmp = load i32, ptr %I1, align 436  store i32 %tmp, ptr %V, align 437  br label %for.cond38 39for.cond:                                         ; preds = %for.inc, %entry40  %indvars.iv1 = phi i64 [ %indvars.iv.next2, %for.inc ], [ 0, %entry ]41  %exitcond = icmp ne i64 %indvars.iv1, 100042  br i1 %exitcond, label %for.body, label %for.end43 44for.body:                                         ; preds = %for.cond45  %tmp3 = load i32, ptr %I1, align 446  %conv = sext i32 %tmp3 to i6447  %mul = mul nsw i64 %conv, %p048  %conv1 = sext i32 %tmp3 to i6449  %mul2 = mul nsw i64 %conv1, %p150  %add = add nsw i64 %mul, %mul251  %arrayidx = getelementptr inbounds i32, ptr %I0, i64 %add52  %tmp4 = load i32, ptr %arrayidx, align 453  %arrayidx3 = getelementptr inbounds i32, ptr %V, i64 %indvars.iv154  store i32 %tmp4, ptr %arrayidx3, align 455  %tmp5 = load i32, ptr %I2, align 456  %conv5 = sext i32 %tmp5 to i6457  %mul6 = mul nsw i64 %conv5, %p058  %arrayidx7 = getelementptr inbounds i32, ptr %I2, i64 159  %tmp6 = load i32, ptr %arrayidx7, align 460  %conv8 = sext i32 %tmp6 to i6461  %mul9 = mul nsw i64 %conv8, %p162  %arrayidx10 = getelementptr inbounds i32, ptr %I2, i64 263  %tmp7 = load i32, ptr %arrayidx10, align 464  %conv11 = sext i32 %tmp7 to i6465  %mul12 = mul nsw i64 %conv11, %p266  %arrayidx13 = getelementptr inbounds i32, ptr %I2, i64 367  %tmp8 = load i32, ptr %arrayidx13, align 468  %conv14 = sext i32 %tmp8 to i6469  %mul15 = mul nsw i64 %conv14, %p370  br label %do.body71 72do.body:                                          ; preds = %do.cond, %for.body73  %indvars.iv = phi i64 [ %indvars.iv.next, %do.cond ], [ 0, %for.body ]74  %cmp16 = icmp sgt i64 %indvars.iv, 075  br i1 %cmp16, label %if.then, label %if.end76 77if.then:                                          ; preds = %do.body78  %add18 = add nsw i64 %mul6, %mul1279  %arrayidx19 = getelementptr inbounds i32, ptr %I1, i64 %add1880  %tmp9 = load i32, ptr %arrayidx19, align 481  %arrayidx21 = getelementptr inbounds i32, ptr %V, i64 %indvars.iv182  %tmp10 = load i32, ptr %arrayidx21, align 483  %add22 = add nsw i32 %tmp10, %tmp984  store i32 %add22, ptr %arrayidx21, align 485  %arrayidx23 = getelementptr inbounds i32, ptr %I1, i64 %add86  %tmp11 = load i32, ptr %arrayidx23, align 487  %arrayidx25 = getelementptr inbounds i32, ptr %V, i64 %indvars.iv188  %tmp12 = load i32, ptr %arrayidx25, align 489  %add26 = add nsw i32 %tmp12, %tmp1190  store i32 %add26, ptr %arrayidx25, align 491  br label %if.end92 93if.end:                                           ; preds = %if.then, %do.body94  br label %do.cond95 96do.cond:                                          ; preds = %if.end97  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 198  %mul28 = mul nsw i64 %mul15, %add99  %add29 = add nsw i64 %mul9, %mul28100  %cmp30 = icmp slt i64 %indvars.iv, %add29101  br i1 %cmp30, label %do.body, label %do.end102 103do.end:                                           ; preds = %do.cond104  br label %for.inc105 106for.inc:                                          ; preds = %do.end107  %indvars.iv.next2 = add nuw nsw i64 %indvars.iv1, 1108  br label %for.cond109 110for.end:                                          ; preds = %for.cond111  ret void112}113