brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 1b64ade Raw
113 lines · plain
1target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"2 3; RUN: opt -mtriple=thumbv7em %s -S -loop-reduce -lsr-complexity-limit=65536 -o - | FileCheck %s4; RUN: opt -mtriple=thumbv7em %s -S -loop-reduce -lsr-complexity-limit=2147483647 -o - | FileCheck %s5 6; CHECK-LABEL: for.body12.us.us:7; CHECK: [[LSR_IV6:%[^ ]+]] = phi ptr [ [[SCEVGEP7:%[^ ]+]], %for.body12.us.us ], [ [[SCEVGEP5:%[^ ]+]], %for.cond9.preheader.us.us ]8; CHECK: phi i329; CHECK: [[LSR_IV:%[^ ]+]] = phi ptr [ [[SCEVGEP1:%[^ ]+]], %for.body12.us.us ], [ [[SCEVGEP:%[^ ]+]], %for.cond9.preheader.us.us ]10; CHECK: phi i3211; CHECK: [[SCEVGEP1]] = getelementptr i8, ptr [[LSR_IV]], i32 812; CHECK: [[SCEVGEP7]] = getelementptr i8, ptr [[LSR_IV6]], i32 813 14define void @convolve(ptr nocapture readonly %input_image, ptr nocapture readonly %filter, i32 %filter_dim, i32 %out_width, i32 %out_height, ptr nocapture readonly %convolved) {15entry:16  %cmp92 = icmp eq i32 %out_height, 017  br i1 %cmp92, label %for.cond.cleanup, label %for.cond1.preheader.lr.ph18 19for.cond1.preheader.lr.ph:                        ; preds = %entry20  %xtraiter = and i32 %filter_dim, 321  %unroll_iter = sub i32 %filter_dim, %xtraiter22  br label %for.cond1.preheader23 24for.cond1.preheader:                              ; preds = %for.cond.cleanup3, %for.cond1.preheader.lr.ph25  %res_y.093 = phi i32 [ 0, %for.cond1.preheader.lr.ph ], [ %add28, %for.cond.cleanup3 ]26  %arrayidx22 = getelementptr inbounds ptr, ptr %convolved, i32 %res_y.09327  %tmp3 = load ptr, ptr %arrayidx22, align 428  br label %for.cond9.preheader.us.us.preheader29 30for.cond9.preheader.us.us.preheader:              ; preds = %for.cond5.for.cond.cleanup7_crit_edge.us, %for.cond5.preheader.lr.ph31  %res_x.060.us = phi i32 [ %add25.us, %for.cond5.for.cond.cleanup7_crit_edge.us ], [ 0, %for.cond1.preheader ]32  br label %for.cond9.preheader.us.us33 34for.cond9.preheader.us.us:                        ; preds = %for.cond9.for.cond.cleanup11_crit_edge.us.us, %for.cond9.preheader.us.us.preheader35  %filter_y.056.us.us = phi i32 [ %inc20.us.us, %for.cond9.for.cond.cleanup11_crit_edge.us.us.unr-lcssa ], [ 0, %for.cond9.preheader.us.us.preheader ]36  %result_element.055.us.us = phi i32 [ %add18.us.us.3, %for.cond9.for.cond.cleanup11_crit_edge.us.us.unr-lcssa ], [ 0, %for.cond9.preheader.us.us.preheader ]37  %add.us.us = add i32 %filter_y.056.us.us, %res_y.09338  %arrayidx.us.us = getelementptr inbounds ptr, ptr %filter, i32 %filter_y.056.us.us39  %tmp5 = load ptr, ptr %arrayidx.us.us, align 440  %arrayidx15.us.us = getelementptr inbounds ptr, ptr %input_image, i32 %add.us.us41  %tmp6 = load ptr, ptr %arrayidx15.us.us, align 442  br label %for.body12.us.us43 44for.body12.us.us:                                 ; preds = %for.body12.us.us, %for.cond9.preheader.us.us45  %filter_x.053.us.us = phi i32 [ %inc.us.us.3, %for.body12.us.us ], [ 0, %for.cond9.preheader.us.us ]46  %result_element.152.us.us = phi i32 [ %add18.us.us.3, %for.body12.us.us ], [ %result_element.055.us.us, %for.cond9.preheader.us.us ]47  %niter = phi i32 [ %niter.nsub.3, %for.body12.us.us ], [ %unroll_iter, %for.cond9.preheader.us.us ]48  %add13.us.us = add i32 %filter_x.053.us.us, %res_x.060.us49  %arrayidx14.us.us = getelementptr inbounds i16, ptr %tmp5, i32 %filter_x.053.us.us50  %tmp9 = load i16, ptr %arrayidx14.us.us, align 251  %conv.us.us = sext i16 %tmp9 to i3252  %arrayidx16.us.us = getelementptr inbounds i16, ptr %tmp6, i32 %add13.us.us53  %tmp10 = load i16, ptr %arrayidx16.us.us, align 254  %conv17.us.us = sext i16 %tmp10 to i3255  %mul.us.us = mul nsw i32 %conv17.us.us, %conv.us.us56  %add18.us.us = add nsw i32 %mul.us.us, %result_element.152.us.us57  %inc.us.us = or disjoint i32 %filter_x.053.us.us, 158  %add13.us.us.1 = add i32 %inc.us.us, %res_x.060.us59  %arrayidx14.us.us.1 = getelementptr inbounds i16, ptr %tmp5, i32 %inc.us.us60  %tmp11 = load i16, ptr %arrayidx14.us.us.1, align 261  %conv.us.us.1 = sext i16 %tmp11 to i3262  %arrayidx16.us.us.1 = getelementptr inbounds i16, ptr %tmp6, i32 %add13.us.us.163  %tmp12 = load i16, ptr %arrayidx16.us.us.1, align 264  %conv17.us.us.1 = sext i16 %tmp12 to i3265  %mul.us.us.1 = mul nsw i32 %conv17.us.us.1, %conv.us.us.166  %add18.us.us.1 = add nsw i32 %mul.us.us.1, %add18.us.us67  %inc.us.us.1 = or disjoint i32 %filter_x.053.us.us, 268  %add13.us.us.2 = add i32 %inc.us.us.1, %res_x.060.us69  %arrayidx14.us.us.2 = getelementptr inbounds i16, ptr %tmp5, i32 %inc.us.us.170  %tmp13 = load i16, ptr %arrayidx14.us.us.2, align 271  %conv.us.us.2 = sext i16 %tmp13 to i3272  %arrayidx16.us.us.2 = getelementptr inbounds i16, ptr %tmp6, i32 %add13.us.us.273  %tmp14 = load i16, ptr %arrayidx16.us.us.2, align 274  %conv17.us.us.2 = sext i16 %tmp14 to i3275  %mul.us.us.2 = mul nsw i32 %conv17.us.us.2, %conv.us.us.276  %add18.us.us.2 = add nsw i32 %mul.us.us.2, %add18.us.us.177  %inc.us.us.2 = or disjoint i32 %filter_x.053.us.us, 378  %add13.us.us.3 = add i32 %inc.us.us.2, %res_x.060.us79  %arrayidx14.us.us.3 = getelementptr inbounds i16, ptr %tmp5, i32 %inc.us.us.280  %tmp15 = load i16, ptr %arrayidx14.us.us.3, align 281  %conv.us.us.3 = sext i16 %tmp15 to i3282  %arrayidx16.us.us.3 = getelementptr inbounds i16, ptr %tmp6, i32 %add13.us.us.383  %tmp16 = load i16, ptr %arrayidx16.us.us.3, align 284  %conv17.us.us.3 = sext i16 %tmp16 to i3285  %mul.us.us.3 = mul nsw i32 %conv17.us.us.3, %conv.us.us.386  %add18.us.us.3 = add nsw i32 %mul.us.us.3, %add18.us.us.287  %inc.us.us.3 = add i32 %filter_x.053.us.us, 488  %niter.nsub.3 = add i32 %niter, -489  %niter.ncmp.3 = icmp eq i32 %niter.nsub.3, 090  br i1 %niter.ncmp.3, label %for.cond9.for.cond.cleanup11_crit_edge.us.us.unr-lcssa, label %for.body12.us.us91 92for.cond9.for.cond.cleanup11_crit_edge.us.us.unr-lcssa: ; preds = %for.body12.us.us, %for.cond9.preheader.us.us93  %inc20.us.us = add nuw i32 %filter_y.056.us.us, 194  %exitcond98 = icmp eq i32 %inc20.us.us, %filter_dim95  br i1 %exitcond98, label %for.cond5.for.cond.cleanup7_crit_edge.us, label %for.cond9.preheader.us.us96 97for.cond5.for.cond.cleanup7_crit_edge.us:         ; preds = %for.cond9.for.cond.cleanup11_crit_edge.us.us98  %arrayidx23.us = getelementptr inbounds i32, ptr %tmp3, i32 %res_x.060.us99  store i32 %add18.us.us.3, ptr %arrayidx23.us, align 4100  %add25.us = add nuw i32 %res_x.060.us, 1101  %exitcond99 = icmp eq i32 %add25.us, %out_width102  br i1 %exitcond99, label %for.cond.cleanup3, label %for.cond9.preheader.us.us.preheader103 104for.cond.cleanup3:                                ; preds = %for.cond5.for.cond.cleanup7_crit_edge.us, %for.cond5.preheader.preheader, %for.cond1.preheader105  %add28 = add nuw i32 %res_y.093, 1106  %exitcond100 = icmp eq i32 %add28, %out_height107  br i1 %exitcond100, label %for.cond.cleanup, label %for.cond1.preheader108 109for.cond.cleanup:                                 ; preds = %for.cond.cleanup3, %entry110  ret void111}112 113