Am Mo., 21. Okt. 2019 um 16:01 Uhr schrieb Jordan Rupprecht via
cfe-commits <cfe-commits@lists.llvm.org>:
> There's also a curious failure caused by this patch (confirmed passing 
> @r374287, failing @r374288):

It's a warning, not a failure.


> $ cat /tmp/vectorize.cc
> void a() {
> #pragma clang loop vectorize(disable)
>   for (;;)
>     ;
> }
>
> $ clang++ -Werror -O3 -c /tmp/vectorize.cc
> /tmp/vectorize.cc:1:6: error: loop not interleaved: the optimizer was unable 
> to perform the requested transformation; the transformation might be disabled 
> or specified as part of an unsupported transformation ordering 
> [-Werror,-Wpass-failed=transform-warning]
> void a() {
>
> I don't understand this warning -- there is no requested transformation; in 
> fact, we've explicitly specified that vectorization *should* be disabled.

https://reviews.llvm.org/D66290

generates the following metadata for #pragma clang loop vectorize(disable):

!3 = distinct !{!3, !4, !5}
!4 = !{!"llvm.loop.vectorize.enable", i1 true}
!5 = !{!"llvm.loop.vectorize.width", i32 1}

which is interpreted as "enable LoopVectorize, but only the interleave
part" by LoopVectorize and WarnMissedTransformations.

The tests in D66290 missed that because the regex may matche multiple MDNodes:

// CHECK: ![[LOOP_5]] = distinct !{![[LOOP_5]],
![[UNROLL_DISABLE:.*]], ![[DISTRIBUTE_DISABLE:.*]], ![[WIDTH_1:.*]]}

The additional "llvm.loop.vectorize.enable" is generated by:

  if (Attrs.VectorizeWidth > 0) {
    // This implies vectorize.enable = true, but only add it when it is not
    // already enabled.
    if (Attrs.VectorizeEnable != LoopAttributes::Enable)

Attr.VectorizeWidth is set by the vectorize(disable) LoopHint:

    case LoopHintAttr::Disable:
      switch (Option) {
      case LoopHintAttr::Vectorize:
        // Disable vectorization by specifying a width of 1.
        setVectorizeWidth(1);



Michael
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to