brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 2dbc77a Raw
131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -aa-pipeline=basic-aa -passes=loop-distribute -enable-loop-distribute -verify-loop-info -verify-dom-info -debug-only=loop-distribute --disable-output -S < %s 2>&1 | FileCheck %s3; REQUIRES: asserts4 5; Test if a loop already distributed will not reprocess because of metadata6; information marking it as processed.7 8; CHECK: LDist: Distributed loop guarded for reprocessing9; CHECK: LDist: Skipping;10 11define dso_local void @_Z13distribution3PiS_S_S_i(ptr noundef captures(none) %a, ptr noundef readonly captures(none) %b, ptr noundef captures(none) %c, ptr noundef writeonly captures(none) %d, i64 noundef signext %len) {12entry:13  %cmp = icmp sgt i64 %len, 014  br i1 %cmp, label %end, label %for.body.lver.check15 16for.body.lver.check:                              ; preds = %entry17  %0 = shl i64 %len, 218  %scevgep = getelementptr i8, ptr %a, i64 %019  %scevgep1 = getelementptr i8, ptr %c, i64 -420  %scevgep2 = getelementptr i8, ptr %c, i64 %021  %scevgep3 = getelementptr i8, ptr %d, i64 %022  %scevgep4 = getelementptr i8, ptr %b, i64 %023  %bound0 = icmp ult ptr %a, %scevgep224  %bound1 = icmp ult ptr %scevgep1, %scevgep25  %found.conflict = and i1 %bound0, %bound126  %bound05 = icmp ult ptr %a, %scevgep327  %bound16 = icmp ult ptr %d, %scevgep28  %found.conflict7 = and i1 %bound05, %bound1629  %conflict.rdx = or i1 %found.conflict, %found.conflict730  %bound08 = icmp ult ptr %a, %scevgep431  %bound19 = icmp ult ptr %b, %scevgep32  %found.conflict10 = and i1 %bound08, %bound1933  %conflict.rdx11 = or i1 %conflict.rdx, %found.conflict1034  %bound012 = icmp ult ptr %scevgep1, %scevgep335  %bound113 = icmp ult ptr %d, %scevgep236  %found.conflict14 = and i1 %bound012, %bound11337  %conflict.rdx15 = or i1 %conflict.rdx11, %found.conflict1438  %bound016 = icmp ult ptr %d, %scevgep439  %bound117 = icmp ult ptr %b, %scevgep340  %found.conflict18 = and i1 %bound016, %bound11741  %conflict.rdx19 = or i1 %conflict.rdx15, %found.conflict1842  br i1 %conflict.rdx19, label %for.body.ph.lver.orig, label %for.body.ph.ldist143 44for.body.ph.lver.orig:                            ; preds = %for.body.lver.check45  br label %for.body.lver.orig46 47for.body.lver.orig:                               ; preds = %for.body.lver.orig, %for.body.ph.lver.orig48  %indvars.iv.lver.orig = phi i64 [ 0, %for.body.ph.lver.orig ], [ %indvars.iv.next.lver.orig, %for.body.lver.orig ]49  %arrayidx.lver.orig = getelementptr inbounds i32, ptr %b, i64 %indvars.iv.lver.orig50  %i2.lver.orig = load i32, ptr %arrayidx.lver.orig, align 4, !tbaa !051  %add4.lver.orig = add nsw i32 %i2.lver.orig, 152  %arrayidx8.lver.orig = getelementptr inbounds i32, ptr %a, i64 %indvars.iv.lver.orig53  store i32 %add4.lver.orig, ptr %arrayidx8.lver.orig, align 4, !tbaa !054  %i3.lver.orig = getelementptr i32, ptr %c, i64 %indvars.iv.lver.orig55  %arrayidx17.lver.orig = getelementptr i8, ptr %i3.lver.orig, i64 -456  %i4.lver.orig = load i32, ptr %arrayidx17.lver.orig, align 4, !tbaa !057  %sub18.lver.orig = sub nsw i32 %add4.lver.orig, %i4.lver.orig58  store i32 %sub18.lver.orig, ptr %i3.lver.orig, align 4, !tbaa !059  %i5.lver.orig = load i32, ptr %arrayidx8.lver.orig, align 4, !tbaa !060  %add27.lver.orig = add nsw i32 %i5.lver.orig, 261  %arrayidx31.lver.orig = getelementptr inbounds i32, ptr %d, i64 %indvars.iv.lver.orig62  store i32 %add27.lver.orig, ptr %arrayidx31.lver.orig, align 4, !tbaa !063  %indvars.iv.next.lver.orig = add i64 %indvars.iv.lver.orig, 164  %cmp1.not.lver.orig = icmp eq i64 %indvars.iv.next.lver.orig, %len65  br i1 %cmp1.not.lver.orig, label %end.loopexit.loopexit, label %for.body.lver.orig, !llvm.loop !466 67for.body.ph.ldist1:                               ; preds = %for.body.lver.check68  br label %for.body.ldist169 70for.body.ldist1:                                  ; preds = %for.body.ldist1, %for.body.ph.ldist171  %indvars.iv.ldist1 = phi i64 [ 0, %for.body.ph.ldist1 ], [ %indvars.iv.next.ldist1, %for.body.ldist1 ]72  %arrayidx.ldist1 = getelementptr inbounds i32, ptr %b, i64 %indvars.iv.ldist173  %i2.ldist1 = load i32, ptr %arrayidx.ldist1, align 4, !tbaa !0, !alias.scope !774  %add4.ldist1 = add nsw i32 %i2.ldist1, 175  %arrayidx8.ldist1 = getelementptr inbounds i32, ptr %a, i64 %indvars.iv.ldist176  store i32 %add4.ldist1, ptr %arrayidx8.ldist1, align 4, !tbaa !0, !alias.scope !10, !noalias !1277  %i3.ldist1 = getelementptr i32, ptr %c, i64 %indvars.iv.ldist178  %arrayidx17.ldist1 = getelementptr i8, ptr %i3.ldist1, i64 -479  %i4.ldist1 = load i32, ptr %arrayidx17.ldist1, align 4, !tbaa !0, !alias.scope !15, !noalias !1680  %sub18.ldist1 = sub nsw i32 %add4.ldist1, %i4.ldist181  store i32 %sub18.ldist1, ptr %i3.ldist1, align 4, !tbaa !0, !alias.scope !15, !noalias !1682  %indvars.iv.next.ldist1 = add i64 %indvars.iv.ldist1, 183  %cmp1.not.ldist1 = icmp eq i64 %indvars.iv.next.ldist1, %len84  br i1 %cmp1.not.ldist1, label %for.body.ph, label %for.body.ldist1, !llvm.loop !1785 86for.body.ph:                                      ; preds = %for.body.ldist187  br label %for.body88 89for.body:                                         ; preds = %for.body, %for.body.ph90  %indvars.iv = phi i64 [ 0, %for.body.ph ], [ %indvars.iv.next, %for.body ]91  %arrayidx8 = getelementptr inbounds i32, ptr %a, i64 %indvars.iv92  %i5 = load i32, ptr %arrayidx8, align 4, !tbaa !0, !alias.scope !10, !noalias !1293  %add27 = add nsw i32 %i5, 294  %arrayidx31 = getelementptr inbounds i32, ptr %d, i64 %indvars.iv95  store i32 %add27, ptr %arrayidx31, align 4, !tbaa !0, !alias.scope !16, !noalias !796  %indvars.iv.next = add i64 %indvars.iv, 197  %cmp1.not = icmp eq i64 %indvars.iv.next, %len98  br i1 %cmp1.not, label %end.loopexit.loopexit20, label %for.body, !llvm.loop !1799 100end.loopexit.loopexit:                            ; preds = %for.body.lver.orig101  br label %end.loopexit102 103end.loopexit.loopexit20:                          ; preds = %for.body104  br label %end.loopexit105 106end.loopexit:                                     ; preds = %end.loopexit.loopexit20, %end.loopexit.loopexit107  br label %end108 109end:                                              ; preds = %end.loopexit, %entry110  ret void111}112 113!0 = !{!1, !1, i64 0}114!1 = !{!"int", !2, i64 0}115!2 = !{!"omnipotent char", !3, i64 0}116!3 = !{!"Simple C++ TBAA"}117!4 = distinct !{!4, !5, !6}118!5 = !{!"llvm.loop.mustprogress"}119!6 = !{!"llvm.loop.isdistributed", i32 1}120!7 = !{!8}121!8 = distinct !{!8, !9}122!9 = distinct !{!9, !"LVerDomain"}123!10 = !{!11}124!11 = distinct !{!11, !9}125!12 = !{!13, !14, !8}126!13 = distinct !{!13, !9}127!14 = distinct !{!14, !9}128!15 = !{!13}129!16 = !{!14}130!17 = distinct !{!17, !5}131