brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · b6c2497 Raw
103 lines · plain
1; RUN: opt < %s  -passes='print<loop-cache-cost>' -disable-output 2>&1 | FileCheck %s2 3target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"4target triple = "powerpc64le-unknown-linux-gnu"5 6; CHECK: Loop 'for.j' has cost = 2010000007; CHECK-NEXT: Loop 'for.i' has cost = 1020000008; CHECK-NEXT: Loop 'for.k' has cost = 1200009 10;; Test to make sure when we have multiple conflicting access patterns, the 11;; chosen loop configuration favours the majority of those accesses. 12;; For example this nest should be ordered as j-i-k.13;;  for (int i = 0; i < n; i++)14;;    for (int j = 0; j < n; j++)15;;      for (int k = 0; k < n; k++) {16;;        A[i][j][k] = 1;17;;        B[j][i][k] = 2;18;;        C[j][i][k] = 3;19;;      }                            20 21define void @foo(i32 noundef signext %n, ptr noalias noundef %A, ptr noalias noundef %B, ptr noalias noundef %C) {22entry:23  %0 = zext i32 %n to i6424  %1 = zext i32 %n to i6425  %2 = zext i32 %n to i6426  %3 = zext i32 %n to i6427  %4 = zext i32 %n to i6428  %5 = zext i32 %n to i6429  %cmp5 = icmp sgt i32 %n, 030  br i1 %cmp5, label %for.i.preheader, label %for.end3031 32for.i.preheader:                               ; preds = %entry33  %wide.trip.count16 = zext i32 %n to i6434  br label %for.i35 36for.i:                                         ; preds = %for.i.preheader, %for.inc2837  %indvars.iv13 = phi i64 [ 0, %for.i.preheader ], [ %indvars.iv.next14, %for.inc28 ]38  %cmp23 = icmp sgt i32 %n, 039  br i1 %cmp23, label %for.j.preheader, label %for.inc2840 41for.j.preheader:                              ; preds = %for.i42  %wide.trip.count11 = zext i32 %n to i6443  br label %for.j44 45for.j:                                        ; preds = %for.j.preheader, %for.inc2546  %indvars.iv8 = phi i64 [ 0, %for.j.preheader ], [ %indvars.iv.next9, %for.inc25 ]47  %cmp61 = icmp sgt i32 %n, 048  br i1 %cmp61, label %for.k.preheader, label %for.inc2549 50for.k.preheader:                              ; preds = %for.j51  %wide.trip.count = zext i32 %n to i6452  br label %for.k53 54for.k:                                        ; preds = %for.k.preheader, %for.k55  %indvars.iv = phi i64 [ 0, %for.k.preheader ], [ %indvars.iv.next, %for.k ]56  %6 = mul nuw i64 %0, %157  %7 = mul nsw i64 %6, %indvars.iv1358  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %759  %8 = mul nuw nsw i64 %indvars.iv8, %160  %arrayidx10 = getelementptr inbounds i32, ptr %arrayidx, i64 %861  %arrayidx12 = getelementptr inbounds i32, ptr %arrayidx10, i64 %indvars.iv62  store i32 1, ptr %arrayidx12, align 463  %9 = mul nuw i64 %2, %364  %10 = mul nsw i64 %9, %indvars.iv865  %arrayidx14 = getelementptr inbounds i32, ptr %B, i64 %1066  %11 = mul nuw nsw i64 %indvars.iv13, %367  %arrayidx16 = getelementptr inbounds i32, ptr %arrayidx14, i64 %1168  %arrayidx18 = getelementptr inbounds i32, ptr %arrayidx16, i64 %indvars.iv69  store i32 2, ptr %arrayidx18, align 470  %12 = mul nuw i64 %4, %571  %13 = mul nsw i64 %12, %indvars.iv872  %arrayidx20 = getelementptr inbounds i32, ptr %C, i64 %1373  %14 = mul nuw nsw i64 %indvars.iv13, %574  %arrayidx22 = getelementptr inbounds i32, ptr %arrayidx20, i64 %1475  %arrayidx24 = getelementptr inbounds i32, ptr %arrayidx22, i64 %indvars.iv76  store i32 3, ptr %arrayidx24, align 477  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 178  %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count79  br i1 %exitcond, label %for.k, label %for.inc25.loopexit80 81for.inc25.loopexit:                               ; preds = %for.k82  br label %for.inc2583 84for.inc25:                                        ; preds = %for.inc25.loopexit, %for.j85  %indvars.iv.next9 = add nuw nsw i64 %indvars.iv8, 186  %exitcond12 = icmp ne i64 %indvars.iv.next9, %wide.trip.count1187  br i1 %exitcond12, label %for.j, label %for.inc28.loopexit88 89for.inc28.loopexit:                               ; preds = %for.inc2590  br label %for.inc2891 92for.inc28:                                        ; preds = %for.inc28.loopexit, %for.i93  %indvars.iv.next14 = add nuw nsw i64 %indvars.iv13, 194  %exitcond17 = icmp ne i64 %indvars.iv.next14, %wide.trip.count1695  br i1 %exitcond17, label %for.i, label %for.end30.loopexit96 97for.end30.loopexit:                               ; preds = %for.inc2898  br label %for.end3099 100for.end30:                                        ; preds = %for.end30.loopexit, %entry101  ret void102}103