[llvm] f8ba90d - [LV] Add test case that was supposed to go with D67948

Hiroshi Yamauchi via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 1 10:15:15 PDT 2019


In case this is useful, I can reproduce this on my x86 machine as follows:

$ rm CMakeCache.txt
$ cmake -G Ninja ../llvm -DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_ASSERTIONS=True -DLLVM_LIT_ARGS=-v
-DLLVM_TARGETS_TO_BUILD=ARM
-DLLVM_DEFAULT_TARGET_TRIPLE=armv7-unknown-linux-gnu
-DLLVM_PARALLEL_LINK_JOBS=2
-DLLVM_ENABLE_PROJECTS="llvm;clang-tools-extra;clang"
$ ninja check-llvm

--
/git/llvm-project/llvm/test/Transforms/LoopVectorize/interleave_short_tc.ll:28:10:
error: CHECK: expected string not found in input
; CHECK: [[INDEX_NEXT]] = add i64 [[INDEX]], 4
         ^
<stdin>:37:2: note: scanning from here
 %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next,
%vector.body ]
 ^
<stdin>:37:2: note: with "INDEX_NEXT" equal to "%index\\.next"
 %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next,
%vector.body ]
 ^
<stdin>:37:2: note: with "INDEX" equal to "%index"
 %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next,
%vector.body ]
 ^
<stdin>:39:3: note: possible intended match here
 %0 = add i64 %index, 0
  ^

--

On Fri, Nov 1, 2019 at 2:54 AM Peter Smith via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Hello Craig,
>
> It looks like this test is failing on all of the Arm and AArch64
> buildbots and the Hexagon buildbot
>
> First failure:
> http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/11215
> http://lab.llvm.org:8011/builders/clang-hexagon-elf/builds/27318
>
> Can you take a look?
>
> I ran the test on a local Arm machine and it is the third out of the
> three tests.
> error: CHECK: expected string not found in input
> ; CHECK: [[INDEX_NEXT]] = add i64 [[INDEX]], 4
>          ^
> <stdin>:37:2: note: scanning from here
>  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [
> %vec.ind.next, %vector.body ]
>  ^
> <stdin>:37:2: note: with "INDEX_NEXT" equal to "%index\\.next"
>  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [
> %vec.ind.next, %vector.body ]
>  ^
> <stdin>:37:2: note: with "INDEX" equal to "%index"
>  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [
> %vec.ind.next, %vector.body ]
>  ^
> <stdin>:39:3: note: possible intended match here
>  %0 = add i64 %index, 0
>   ^
>
>
> The output on the machine is:
> ; ModuleID = '<stdin>'
> source_filename = "<stdin>"
> target datalayout =
> "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
> target triple = "x86_64-unknown-linux-gnu"
>
> @a = dso_local global [5 x i32] zeroinitializer, align 16
> @b = dso_local global [5 x i32] zeroinitializer, align 16
>
> define dso_local void @_Z3fooi(i32 %M) local_unnamed_addr {
> entry:
>   %cmp8 = icmp sgt i32 %M, 0
>   br i1 %cmp8, label %for.body.preheader, label %for.cond.cleanup
>
> for.body.preheader:                               ; preds = %entry
>   %wide.trip.count = zext i32 %M to i64
>   %min.iters.check = icmp ult i64 %wide.trip.count, 2
>   br i1 %min.iters.check, label %scalar.ph, label %vector.memcheck
>
> vector.memcheck:                                  ; preds =
> %for.body.preheader
>   %scevgep = getelementptr [5 x i32], [5 x i32]* @a, i64 0, i64
> %wide.trip.count
>   %scevgep1 = bitcast i32* %scevgep to i8*
>   %scevgep2 = getelementptr [5 x i32], [5 x i32]* @b, i64 0, i64
> %wide.trip.count
>   %scevgep23 = bitcast i32* %scevgep2 to i8*
>   %bound0 = icmp ult i8* bitcast ([5 x i32]* @a to i8*), %scevgep23
>   %bound1 = icmp ult i8* bitcast ([5 x i32]* @b to i8*), %scevgep1
>   %found.conflict = and i1 %bound0, %bound1
>   %memcheck.conflict = and i1 %found.conflict, true
>   br i1 %memcheck.conflict, label %scalar.ph, label %vector.ph
>
> vector.ph:                                        ; preds =
> %vector.memcheck
>   %n.mod.vf = urem i64 %wide.trip.count, 2
>   %n.vec = sub i64 %wide.trip.count, %n.mod.vf
>   br label %vector.body
>
> vector.body:                                      ; preds =
> %vector.body, %vector.ph
>   %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
>   %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [
> %vec.ind.next, %vector.body ]
>   %vec.ind4 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph ], [
> %vec.ind.next5, %vector.body ]
>   %0 = add i64 %index, 0
>   %1 = add i64 %index, 1
>   %2 = getelementptr inbounds [5 x i32], [5 x i32]* @b, i64 0, i64 %0
>   %3 = getelementptr inbounds i32, i32* %2, i32 0
>   %4 = bitcast i32* %3 to <2 x i32>*
>   %wide.load = load <2 x i32>, <2 x i32>* %4, align 4, !alias.scope !0
>   %5 = mul nsw <2 x i32> %wide.load, %vec.ind4
>   %6 = getelementptr inbounds [5 x i32], [5 x i32]* @a, i64 0, i64 %0
>   %7 = getelementptr inbounds i32, i32* %6, i32 0
>   %8 = bitcast i32* %7 to <2 x i32>*
>   %wide.load6 = load <2 x i32>, <2 x i32>* %8, align 4, !alias.scope
> !3, !noalias !0
>   %9 = add nsw <2 x i32> %wide.load6, %5
>   %10 = bitcast i32* %7 to <2 x i32>*
>   store <2 x i32> %9, <2 x i32>* %10, align 4, !alias.scope !3, !noalias !0
>   %index.next = add i64 %index, 2
>   %vec.ind.next = add <2 x i64> %vec.ind, <i64 2, i64 2>
>   %vec.ind.next5 = add <2 x i32> %vec.ind4, <i32 2, i32 2>
>   %11 = icmp eq i64 %index.next, %n.vec
>   br i1 %11, label %middle.block, label %vector.body, !llvm.loop !5
>
> middle.block:                                     ; preds = %vector.body
>   %cmp.n = icmp eq i64 %wide.trip.count, %n.vec
>   br i1 %cmp.n, label %for.cond.cleanup.loopexit, label %scalar.ph
>
> scalar.ph:                                        ; preds =
> %middle.block, %vector.memcheck, %for.body.preheader
>   %bc.resume.val = phi i64 [ %n.vec, %middle.block ], [ 0,
> %for.body.preheader ], [ 0, %vector.memcheck ]
>   br label %for.body
>
> for.cond.cleanup.loopexit:                        ; preds =
> %middle.block, %for.body
>   br label %for.cond.cleanup
>
> for.cond.cleanup:                                 ; preds =
> %for.cond.cleanup.loopexit, %entry
>   ret void
>
> for.body:                                         ; preds = %for.body,
> %scalar.ph
>   %indvars.iv = phi i64 [ %bc.resume.val, %scalar.ph ], [
> %indvars.iv.next, %for.body ]
>   %arrayidx = getelementptr inbounds [5 x i32], [5 x i32]* @b, i64 0,
> i64 %indvars.iv
>   %12 = load i32, i32* %arrayidx, align 4
>   %13 = trunc i64 %indvars.iv to i32
>   %mul = mul nsw i32 %12, %13
>   %arrayidx2 = getelementptr inbounds [5 x i32], [5 x i32]* @a, i64 0,
> i64 %indvars.iv
>   %14 = load i32, i32* %arrayidx2, align 4
>   %add = add nsw i32 %14, %mul
>   store i32 %add, i32* %arrayidx2, align 4
>   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
>   %exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count
>   br i1 %exitcond, label %for.cond.cleanup.loopexit, label %for.body,
> !prof !7, !llvm.loop !8
> }
>
> !0 = !{!1}
> !1 = distinct !{!1, !2}
> !2 = distinct !{!2, !"LVerDomain"}
> !3 = !{!4}
> !4 = distinct !{!4, !2}
> !5 = distinct !{!5, !6}
> !6 = !{!"llvm.loop.isvectorized", i32 1}
> !7 = !{!"branch_weights", i32 1, i32 5}
> !8 = distinct !{!8, !6}
>
> On Thu, 31 Oct 2019 at 22:15, Craig Topper via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> >
> > Author: Craig Topper
> > Date: 2019-10-31T15:11:26-07:00
> > New Revision: f8ba90d448c6703809340b3fdb90e733b6bc2d33
> >
> > URL:
> https://github.com/llvm/llvm-project/commit/f8ba90d448c6703809340b3fdb90e733b6bc2d33
> > DIFF:
> https://github.com/llvm/llvm-project/commit/f8ba90d448c6703809340b3fdb90e733b6bc2d33.diff
> >
> > LOG: [LV] Add test case that was supposed to go with D67948
> >
> > I forgot to git add it when I committed for Evgeniy.
> >
> > Added:
> >     llvm/test/Transforms/LoopVectorize/interleave_short_tc.ll
> >
> > Modified:
> >
> >
> > Removed:
> >
> >
> >
> >
> ################################################################################
> > diff  --git a/llvm/test/Transforms/LoopVectorize/interleave_short_tc.ll
> b/llvm/test/Transforms/LoopVectorize/interleave_short_tc.ll
> > new file mode 100644
> > index 000000000000..78e69cb2d647
> > --- /dev/null
> > +++ b/llvm/test/Transforms/LoopVectorize/interleave_short_tc.ll
> > @@ -0,0 +1,59 @@
> > +; Check that we won't interleave by more than "best known" estimated
> trip count.
> > +
> > +; The loop is expected to be vectorized by 4 and interleaving suppresed
> due to
> > +; short trip count which is controled by
> "tiny-trip-count-interleave-threshold".
> > +; RUN: opt  -passes=loop-vectorize -force-vector-width=4
> -vectorizer-min-trip-count=4 -S < %s |  FileCheck %s
> > +;
> > +; The loop is expected to be vectorized by 4 and computed interleaving
> factor is 1.
> > +; Thus the resulting step is 4.
> > +; RUN: opt  -passes=loop-vectorize -force-vector-width=4
> -vectorizer-min-trip-count=4 -tiny-trip-count-interleave-threshold=4 -S <
> %s |  FileCheck %s
> > +
> > +; The loop is expected to be vectorized by 2 and computed interleaving
> factor is 2.
> > +; Thus the resulting step is 4.
> > +; RUN: opt  -passes=loop-vectorize -force-vector-width=2
> -vectorizer-min-trip-count=4 -tiny-trip-count-interleave-threshold=4 -S <
> %s |  FileCheck %s
> > +
> > +; Check that we won't interleave by more than "best known" estimated
> trip count.
> > +
> > +target datalayout =
> "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
> > +target triple = "x86_64-unknown-linux-gnu"
> > +
> > + at a = dso_local global [5 x i32] zeroinitializer, align 16
> > + at b = dso_local global [5 x i32] zeroinitializer, align 16
> > +
> > +; Function Attrs: nofree norecurse nounwind uwtable
> > +define dso_local void @_Z3fooi(i32 %M) local_unnamed_addr {
> > +; CHECK-LABEL: @_Z3fooi(
> > +; CHECK:       [[VECTOR_BODY:vector\.body]]:
> > +; CHECK:    [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH:%.*]] ], [
> [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
> > +; CHECK:    [[INDEX_NEXT]] = add i64 [[INDEX]], 4
> > +;
> > +entry:
> > +  %cmp8 = icmp sgt i32 %M, 0
> > +  br i1 %cmp8, label %for.body.preheader, label %for.cond.cleanup
> > +
> > +for.body.preheader:                               ; preds = %entry
> > +  %wide.trip.count = zext i32 %M to i64
> > +  br label %for.body
> > +
> > +for.cond.cleanup.loopexit:                        ; preds = %for.body
> > +  br label %for.cond.cleanup
> > +
> > +for.cond.cleanup:                                 ; preds =
> %for.cond.cleanup.loopexit, %entry
> > +  ret void
> > +
> > +for.body:                                         ; preds = %for.body,
> %for.body.preheader
> > +  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next,
> %for.body ]
> > +  %arrayidx = getelementptr inbounds [5 x i32], [5 x i32]* @b, i64 0,
> i64 %indvars.iv
> > +  %0 = load i32, i32* %arrayidx, align 4
> > +  %1 = trunc i64 %indvars.iv to i32
> > +  %mul = mul nsw i32 %0, %1
> > +  %arrayidx2 = getelementptr inbounds [5 x i32], [5 x i32]* @a, i64 0,
> i64 %indvars.iv
> > +  %2 = load i32, i32* %arrayidx2, align 4
> > +  %add = add nsw i32 %2, %mul
> > +  store i32 %add, i32* %arrayidx2, align 4
> > +  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
> > +  %exitcond = icmp eq i64 %indvars.iv.next, %wide.trip.count
> > +  br i1 %exitcond, label %for.cond.cleanup.loopexit, label %for.body,
> !prof !1
> > +}
> > +
> > +!1 = !{!"branch_weights", i32 1, i32 5}
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191101/866005c0/attachment-0001.html>


More information about the llvm-commits mailing list