Author: Gaƫtan Bossu Date: 2026-09-29T12:52:48+01:00 New Revision: 940e03584de8bfbcd86fc25de9a738d067d3a342
URL: https://github.com/llvm/llvm-project/commit/940e03584de8bfbcd86fc25de9a738d067d3a342 DIFF: https://github.com/llvm/llvm-project/commit/940e03584de8bfbcd86fc25de9a738d067d3a342.diff LOG: [clang] Also disable scalable vectorisation for vectorize(disable) (#227254) This ensures that #pragma clang loop vectorize(disable) also disables scalable vectorisation. Only setting the width to 1 could potentially enable LoopVectorizer to vectorize with VF = vscale x 1. Especially with the -scalable-vectorization=preferred option. Added: Modified: clang/lib/CodeGen/CGLoopInfo.cpp clang/test/CodeGenCXX/pragma-loop-predicate.cpp clang/test/CodeGenCXX/pragma-loop-safety.cpp clang/test/CodeGenCXX/pragma-loop.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGLoopInfo.cpp b/clang/lib/CodeGen/CGLoopInfo.cpp index c13c2f6c60089..14e13af69b011 100644 --- a/clang/lib/CodeGen/CGLoopInfo.cpp +++ b/clang/lib/CodeGen/CGLoopInfo.cpp @@ -651,9 +651,10 @@ void LoopInfoStack::push(BasicBlock *Header, clang::ASTContext &Ctx, case LoopHintAttr::Disable: switch (Option) { case LoopHintAttr::Vectorize: - // Disable vectorization by specifying a width of 1. + // Disable vectorization by specifying a width of 1 and disabling + // scalable vectorization explicitly. setVectorizeWidth(1); - setVectorizeScalable(LoopAttributes::Unspecified); + setVectorizeScalable(LoopAttributes::Disable); break; case LoopHintAttr::Interleave: // Disable interleaving by speciyfing a count of 1. diff --git a/clang/test/CodeGenCXX/pragma-loop-predicate.cpp b/clang/test/CodeGenCXX/pragma-loop-predicate.cpp index bfacddc207f26..fdb23329e6121 100644 --- a/clang/test/CodeGenCXX/pragma-loop-predicate.cpp +++ b/clang/test/CodeGenCXX/pragma-loop-predicate.cpp @@ -37,8 +37,8 @@ void test3(int *List, int Length) { List[i] = i * 2; } -// Check that disabling vectorization means a vectorization width of 1, and -// also that vectorization_predicate isn't enabled. +// Check that disabling vectorization sets a width of 1 and disables +// scalable vectorization without enabling vectorization_predicate. void test4(int *List, int Length) { // CHECK-LABEL: @{{.*}}test4{{.*}}( // CHECK: br label {{.*}}, !llvm.loop ![[LOOP4:.*]] @@ -113,13 +113,13 @@ void test9(int *List, int Length) { // CHECK-NEXT: ![[LOOP3]] = distinct !{![[LOOP3]], [[MP]], [[GEN6]], [[GEN3]]} -// CHECK-NEXT: ![[LOOP4]] = distinct !{![[LOOP4]], [[MP]], [[GEN10:![0-9]+]]} +// CHECK-NEXT: ![[LOOP4]] = distinct !{![[LOOP4]], [[MP]], [[GEN10:![0-9]+]], [[GEN11:![0-9]+]]} // CHECK-NEXT: [[GEN10]] = !{!"llvm.loop.vectorize.width", i32 1} +// CHECK-NEXT: [[GEN11]] = !{!"llvm.loop.vectorize.scalable.disable"} -// CHECK-NEXT: ![[LOOP5]] = distinct !{![[LOOP5]], [[MP]], [[GEN6]], [[GEN10]]} +// CHECK-NEXT: ![[LOOP5]] = distinct !{![[LOOP5]], [[MP]], [[GEN6]], [[GEN10]], [[GEN11]]} -// CHECK-NEXT: ![[LOOP6]] = distinct !{![[LOOP6]], [[MP]], [[GEN8]], [[GEN10]], [[GEN11:![0-9]+]]} -// CHECK-NEXT: [[GEN11]] = !{!"llvm.loop.vectorize.scalable.disable"} +// CHECK-NEXT: ![[LOOP6]] = distinct !{![[LOOP6]], [[MP]], [[GEN8]], [[GEN10]], [[GEN11]]} // CHECK-NEXT: ![[LOOP7]] = distinct !{![[LOOP7]], [[MP]], [[GEN8]], [[GEN12:![0-9]+]], [[GEN11]], [[GEN3]]} // CHECK-NEXT: [[GEN12]] = !{!"llvm.loop.vectorize.width", i32 4} diff --git a/clang/test/CodeGenCXX/pragma-loop-safety.cpp b/clang/test/CodeGenCXX/pragma-loop-safety.cpp index e2a7a124890a6..2114eb1643190 100644 --- a/clang/test/CodeGenCXX/pragma-loop-safety.cpp +++ b/clang/test/CodeGenCXX/pragma-loop-safety.cpp @@ -53,6 +53,7 @@ void interleave_test(int *List, int Length) { // CHECK: ![[INTERLEAVE_1]] = !{!"llvm.loop.interleave.count", i32 1} // CHECK: ![[INTENABLE_1]] = !{!"llvm.loop.vectorize.enable"} // CHECK: ![[ACCESS_GROUP_8]] = distinct !{} -// CHECK: ![[LOOP2_HINTS]] = distinct !{![[LOOP2_HINTS]], [[MP]], ![[PARALLEL_ACCESSES_11:[0-9]+]], ![[UNROLL_DISABLE]], ![[WIDTH_1:[0-9]+]], ![[INTENABLE_1]]} +// CHECK: ![[LOOP2_HINTS]] = distinct !{![[LOOP2_HINTS]], [[MP]], ![[PARALLEL_ACCESSES_11:[0-9]+]], ![[UNROLL_DISABLE]], ![[WIDTH_1:[0-9]+]], ![[FIXED_VEC:[0-9]+]], ![[INTENABLE_1]]} // CHECK: ![[PARALLEL_ACCESSES_11]] = !{!"llvm.loop.parallel_accesses", ![[ACCESS_GROUP_8]]} // CHECK: ![[WIDTH_1]] = !{!"llvm.loop.vectorize.width", i32 1} +// CHECK: ![[FIXED_VEC]] = !{!"llvm.loop.vectorize.scalable.disable"} diff --git a/clang/test/CodeGenCXX/pragma-loop.cpp b/clang/test/CodeGenCXX/pragma-loop.cpp index 75961aa86dcad..dbec1e3a1f5b1 100644 --- a/clang/test/CodeGenCXX/pragma-loop.cpp +++ b/clang/test/CodeGenCXX/pragma-loop.cpp @@ -278,7 +278,7 @@ void for_test_interleave_vectorize_disable_unroll(int *List, int Length) { // CHECK-DAG: ![[LOOP_4]] = distinct !{![[LOOP_4]], ![[WIDTH_2]], ![[FIXED_VEC]], ![[INTERLEAVE_2]], ![[VECTORIZE_ENABLE]]} -// CHECK-DAG: ![[LOOP_5]] = distinct !{![[LOOP_5]], ![[MP]], ![[UNROLL_DISABLE]], ![[DISTRIBUTE_DISABLE]], ![[WIDTH_1]]} +// CHECK-DAG: ![[LOOP_5]] = distinct !{![[LOOP_5]], ![[MP]], ![[UNROLL_DISABLE]], ![[DISTRIBUTE_DISABLE]], ![[WIDTH_1]], ![[FIXED_VEC]]} // CHECK-DAG: ![[LOOP_6]] = distinct !{![[LOOP_6]], ![[MP]], ![[WIDTH_2]], ![[FIXED_VEC]], ![[INTERLEAVE_2]], ![[VECTORIZE_ENABLE]], ![[FOLLOWUP_VECTOR_3]]} @@ -309,5 +309,5 @@ void for_test_interleave_vectorize_disable_unroll(int *List, int Length) { // CHECK-DAG: ![[LOOP_19]] = distinct !{![[LOOP_19]], ![[MP]], ![[UNROLL_DISABLE]], ![[DISTRIBUTE_DISABLE]], ![[WIDTH_1]], ![[SCALABLE_VEC]], ![[INTERLEAVE_4]], ![[VECTORIZE_ENABLE]]} // CHECK-DAG: ![[LOOP_20]] = distinct !{![[LOOP_20]], ![[MP]], ![[UNROLL_DISABLE]], ![[DISTRIBUTE_DISABLE]], ![[WIDTH_1]], ![[FIXED_VEC]], ![[INTERLEAVE_4]]} // CHECK-DAG: ![[LOOP_21]] = distinct !{![[LOOP_21]], ![[MP]], ![[UNROLL_DISABLE]], ![[DISTRIBUTE_DISABLE]], ![[WIDTH_1]], ![[FIXED_VEC]], ![[INTERLEAVE_4]]} -// CHECK-DAG: ![[LOOP_22]] = distinct !{![[LOOP_22]], ![[MP]], ![[WIDTH_1]], ![[ISVECTORIZED]], ![[UNROLL_8]]} -// CHECK-DAG: ![[LOOP_23]] = distinct !{![[LOOP_23]], ![[MP]], ![[WIDTH_1]], ![[INTERLEAVE_4]], ![[ISVECTORIZED]], ![[UNROLL_8]]} +// CHECK-DAG: ![[LOOP_22]] = distinct !{![[LOOP_22]], ![[MP]], ![[WIDTH_1]], ![[FIXED_VEC]], ![[ISVECTORIZED]], ![[UNROLL_8]]} +// CHECK-DAG: ![[LOOP_23]] = distinct !{![[LOOP_23]], ![[MP]], ![[WIDTH_1]], ![[FIXED_VEC]], ![[INTERLEAVE_4]], ![[ISVECTORIZED]], ![[UNROLL_8]]} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
