[llvm] f8ba90d - [LV] Add test case that was supposed to go with D67948
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 10:44:46 PDT 2019
I moved the test into the X86 directory. Hopefully that fixes the issue.
~Craig
On Fri, Nov 1, 2019 at 10:15 AM Hiroshi Yamauchi via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> 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
>>
> _______________________________________________
> 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/2643a9fe/attachment.html>
More information about the llvm-commits
mailing list