brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · bf54258 Raw
186 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"4target triple = "powerpc64le-unknown-linux-gnu"5 6; void matvecmul(const double *__restrict y, const double * __restrict x, const double * __restrict b,7;    const int * __restrict nb, const int * __restrict nx, const int * __restrict ny, const int * __restrict nz) {8;9;   for (int k=1;k<nz,++k) 10;      for (int j=1;j<ny,++j)11;        for (int i=1;i<nx,++i)12;          for (int l=1;l<nb,++l)13;            for (int m=1;m<nb,++m)14;                 y[k+1][j][i][l] = y[k+1][j][i][l] + b[k][j][i][m][l]*x[k][j][i][m]15; }16 17; CHECK: Loop 'k_loop' has cost = 1020000000000000018; CHECK-NEXT: Loop 'j_loop' has cost = 10200000000000019; CHECK-NEXT: Loop 'i_loop' has cost = 102000000000020; CHECK-NEXT: Loop 'm_loop' has cost = 1080000000021; CHECK-NEXT: Loop 'l_loop' has cost = 150000000022 23%_elem_type_of_double = type <{ double }>24 25; Function Attrs: norecurse nounwind26define void @mat_vec_mpy(ptr noalias %y, ptr noalias readonly %x,27    ptr noalias readonly %b, ptr noalias readonly %nb, ptr noalias readonly %nx, 28    ptr noalias readonly %ny, ptr noalias readonly %nz) {29mat_times_vec_entry:30  %_ind_val = load i32, ptr %nb, align 431  %_conv = sext i32 %_ind_val to i6432  %_grt_tmp.i = icmp sgt i64 %_conv, 033  %a_b.i = select i1 %_grt_tmp.i, i64 %_conv, i64 034  %_ind_val1 = load i32, ptr %nx, align 435  %_conv2 = sext i32 %_ind_val1 to i6436  %_grt_tmp.i266 = icmp sgt i64 %_conv2, 037  %a_b.i267 = select i1 %_grt_tmp.i266, i64 %_conv2, i64 038  %_ind_val3 = load i32, ptr %ny, align 439  %_conv4 = sext i32 %_ind_val3 to i6440  %_grt_tmp.i264 = icmp sgt i64 %_conv4, 041  %a_b.i265 = select i1 %_grt_tmp.i264, i64 %_conv4, i64 042  %_ind_val5 = load i32, ptr %nz, align 443  %_mult_tmp = shl nsw i64 %a_b.i, 344  %_mult_tmp7 = mul i64 %_mult_tmp, %a_b.i26745  %_mult_tmp8 = mul i64 %_mult_tmp7, %a_b.i26546  %_sub_tmp = sub nuw nsw i64 -8, %_mult_tmp47  %_sub_tmp21 = sub i64 %_sub_tmp, %_mult_tmp748  %_sub_tmp23 = sub i64 %_sub_tmp21, %_mult_tmp849  %_mult_tmp73 = mul i64 %_mult_tmp, %a_b.i50  %_mult_tmp74 = mul i64 %_mult_tmp73, %a_b.i26751  %_mult_tmp75 = mul i64 %_mult_tmp74, %a_b.i26552  %_sub_tmp93 = sub i64 %_sub_tmp, %_mult_tmp7353  %_sub_tmp95 = sub i64 %_sub_tmp93, %_mult_tmp7454  %_sub_tmp97 = sub i64 %_sub_tmp95, %_mult_tmp7555  %_grt_tmp853288 = icmp slt i32 %_ind_val5, 156  br i1 %_grt_tmp853288, label %_return_bb, label %k_loop.lr.ph57 58k_loop.lr.ph:                                     ; preds = %mat_times_vec_entry59  %_grt_tmp851279 = icmp slt i32 %_ind_val3, 160  %_grt_tmp847270 = icmp slt i32 %_ind_val, 161  %_aa_conv = bitcast ptr %y to ptr62  %_adda_ = getelementptr inbounds i8, ptr %_aa_conv, i64 %_sub_tmp2363  %_aa_conv434 = bitcast ptr %x to ptr64  %_adda_435 = getelementptr inbounds i8, ptr %_aa_conv434, i64 %_sub_tmp2365  %_aa_conv785 = bitcast ptr %b to ptr66  %_adda_786 = getelementptr inbounds i8, ptr %_aa_conv785, i64 %_sub_tmp9767  br i1 %_grt_tmp851279, label %k_loop.us.preheader, label %k_loop.lr.ph.split68 69k_loop.us.preheader:                              ; preds = %k_loop.lr.ph70  br label %_return_bb.loopexit71 72k_loop.lr.ph.split:                               ; preds = %k_loop.lr.ph73  %_grt_tmp849273 = icmp slt i32 %_ind_val1, 174  br i1 %_grt_tmp849273, label %k_loop.us291.preheader, label %k_loop.lr.ph.split.split75 76k_loop.us291.preheader:                           ; preds = %k_loop.lr.ph.split77  br label %_return_bb.loopexit30078 79k_loop.lr.ph.split.split:                         ; preds = %k_loop.lr.ph.split80  br i1 %_grt_tmp847270, label %k_loop.us294.preheader, label %k_loop.preheader81 82k_loop.preheader:                                 ; preds = %k_loop.lr.ph.split.split83  %0 = add i32 %_ind_val, 184  %1 = add i32 %_ind_val1, 185  %2 = add i32 %_ind_val3, 186  %3 = add i32 %_ind_val5, 187  br label %k_loop88 89k_loop.us294.preheader:                           ; preds = %k_loop.lr.ph.split.split90  br label %_return_bb.loopexit30191 92k_loop:                                           ; preds = %k_loop._label_18_crit_edge.split.split.split, %k_loop.preheader93  %indvars.iv316 = phi i64 [ 1, %k_loop.preheader ], [ %indvars.iv.next317, %k_loop._label_18_crit_edge.split.split.split ]94  %indvars.iv.next317 = add nuw nsw i64 %indvars.iv316, 195  %_ix_x_len = mul i64 %_mult_tmp8, %indvars.iv.next31796  %_ix_x_len410 = mul i64 %_mult_tmp75, %indvars.iv31697  %_ix_x_len822 = mul i64 %_mult_tmp8, %indvars.iv31698  br label %j_loop99 100j_loop:                                           ; preds = %j_loop._label_15_crit_edge.split.split, %k_loop101  %indvars.iv312 = phi i64 [ %indvars.iv.next313, %j_loop._label_15_crit_edge.split.split ], [ 1, %k_loop ]102  %_ix_x_len371 = mul i64 %_mult_tmp7, %indvars.iv312103  %_ix_x_len415 = mul i64 %_mult_tmp74, %indvars.iv312104  br label %i_loop105 106i_loop:                                           ; preds = %i_loop._label_12_crit_edge.split, %j_loop107  %indvars.iv307 = phi i64 [ %indvars.iv.next308, %i_loop._label_12_crit_edge.split ], [ 1, %j_loop ]108  %_ix_x_len375 = mul i64 %_mult_tmp, %indvars.iv307109  %_ix_x_len420 = mul i64 %_mult_tmp73, %indvars.iv307110  br label %l_loop111 112l_loop:                                           ; preds = %l_loop._label_9_crit_edge, %i_loop113  %indvars.iv303 = phi i64 [ %indvars.iv.next304, %l_loop._label_9_crit_edge ], [ 1, %i_loop ]114  %_ix_x_len378 = shl nuw nsw i64 %indvars.iv303, 3115  br label %m_loop116 117m_loop:                                           ; preds = %m_loop, %l_loop118  %indvars.iv = phi i64 [ %indvars.iv.next, %m_loop ], [ 1, %l_loop ]119  %_ix_x_len424 = mul i64 %_mult_tmp, %indvars.iv120  %_ix_x_len454 = shl nuw nsw i64 %indvars.iv, 3121  %_ixa_gep = getelementptr inbounds i8, ptr %_adda_, i64 %_ix_x_len122  %_ixa_gep791 = getelementptr inbounds i8, ptr %_adda_786, i64 %_ix_x_len410123  %_ixa_gep823 = getelementptr inbounds i8, ptr %_adda_435, i64 %_ix_x_len822124  %_ixa_gep372 = getelementptr inbounds i8, ptr %_ixa_gep, i64 %_ix_x_len371125  %_ixa_gep376 = getelementptr inbounds i8, ptr %_ixa_gep372, i64 %_ix_x_len375126  %_ixa_gep796 = getelementptr inbounds i8, ptr %_ixa_gep791, i64 %_ix_x_len415127  %_ixa_gep828 = getelementptr inbounds i8, ptr %_ixa_gep823, i64 %_ix_x_len371128  %_ixa_gep379 = getelementptr inbounds i8, ptr %_ixa_gep376, i64 %_ix_x_len378129  %_ixa_gep801 = getelementptr inbounds i8, ptr %_ixa_gep796, i64 %_ix_x_len420130  %_ixa_gep833 = getelementptr inbounds i8, ptr %_ixa_gep828, i64 %_ix_x_len375131  %_ixa_gep806 = getelementptr inbounds i8, ptr %_ixa_gep801, i64 %_ix_x_len378132  %_ixa_gep810 = getelementptr inbounds i8, ptr %_ixa_gep806, i64 %_ix_x_len424133  %_gepp = bitcast ptr %_ixa_gep379 to ptr134  %_gepp813 = bitcast ptr %_ixa_gep810 to ptr135  %_ind_val814 = load double, ptr %_gepp813, align 8136  %_ixa_gep837 = getelementptr inbounds i8, ptr %_ixa_gep833, i64 %_ix_x_len454137  %_gepp840 = bitcast ptr %_ixa_gep837 to ptr138  %_ind_val841 = load double, ptr %_gepp840, align 8139  %_mult_tmp842 = fmul double %_ind_val814, %_ind_val841140  store double %_mult_tmp842, ptr %_gepp, align 8141  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1142  %wide.trip.count = zext i32 %0 to i64143  %wide.trip.count305 = zext i32 %0 to i64144  %wide.trip.count309 = zext i32 %1 to i64145  %wide.trip.count314 = zext i32 %2 to i64146  %wide.trip.count319 = zext i32 %3 to i64147  %exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count148  br i1 %exitcond, label %m_loop, label %l_loop._label_9_crit_edge149 150l_loop._label_9_crit_edge:                        ; preds = %m_loop151  %indvars.iv.next304 = add nuw nsw i64 %indvars.iv303, 1152  %exitcond306 = icmp ne i64 %indvars.iv.next304, %wide.trip.count305153  br i1 %exitcond306, label %l_loop, label %i_loop._label_12_crit_edge.split154 155i_loop._label_12_crit_edge.split:                 ; preds = %l_loop._label_9_crit_edge156  %indvars.iv.next308 = add nuw nsw i64 %indvars.iv307, 1157  %exitcond310 = icmp ne i64 %indvars.iv.next308, %wide.trip.count309158  br i1 %exitcond310, label %i_loop, label %j_loop._label_15_crit_edge.split.split159 160j_loop._label_15_crit_edge.split.split:           ; preds = %i_loop._label_12_crit_edge.split161  %indvars.iv.next313 = add nuw nsw i64 %indvars.iv312, 1162  %exitcond315 = icmp ne i64 %indvars.iv.next313, %wide.trip.count314163  br i1 %exitcond315, label %j_loop, label %k_loop._label_18_crit_edge.split.split.split164 165k_loop._label_18_crit_edge.split.split.split:     ; preds = %j_loop._label_15_crit_edge.split.split166  %exitcond320 = icmp ne i64 %indvars.iv.next317, %wide.trip.count319167  br i1 %exitcond320, label %k_loop, label %_return_bb.loopexit302168 169_return_bb.loopexit:                              ; preds = %k_loop.us.preheader170  br label %_return_bb171 172_return_bb.loopexit300:                           ; preds = %k_loop.us291.preheader173  br label %_return_bb174 175_return_bb.loopexit301:                           ; preds = %k_loop.us294.preheader176  br label %_return_bb177 178_return_bb.loopexit302:                           ; preds = %k_loop._label_18_crit_edge.split.split.split179  br label %_return_bb180 181_return_bb:                                       ; preds = %_return_bb.loopexit302, %_return_bb.loopexit301, %_return_bb.loopexit300, %_return_bb.loopexit, %mat_times_vec_entry182  ret void183}184 185 186