[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