summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/pragma-loop-predicate.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2019-09-18 13:41:51 +0000
committerHans Wennborg <hans@hanshq.net>2019-09-18 13:41:51 +0000
commit858a1ae37d260ae454751bbf5d74742138f10676 (patch)
treef1458798e4300dc2c4220e6dd663ef2cd7b5bc4e /clang/test/CodeGenCXX/pragma-loop-predicate.cpp
parent89ad7f7a1ba245fccf1f64f95a146ada6f6aaac6 (diff)
downloadbcm5719-llvm-858a1ae37d260ae454751bbf5d74742138f10676.tar.gz
bcm5719-llvm-858a1ae37d260ae454751bbf5d74742138f10676.zip
Revert r372082 "[Clang] Pragma vectorize_width() implies vectorize(enable)"
This broke the Chromium build. Consider the following code: float ScaleSumSamples_C(const float* src, float* dst, float scale, int width) { float fsum = 0.f; int i; #if defined(__clang__) #pragma clang loop vectorize_width(4) #endif for (i = 0; i < width; ++i) { float v = *src++; fsum += v * v; *dst++ = v * scale; } return fsum; } Compiling at -Oz, Clang now warns: $ clang++ -target x86_64 -Oz -c /tmp/a.cc /tmp/a.cc:1:7: warning: loop not vectorized: the optimizer was unable to perform the requested transformation; the transformation might be disabled or specified as part of an unsupported transformation ordering [-Wpass-failed=transform-warning] this suggests it's not actually enabling vectorization hard enough. At -Os it asserts instead: $ build.release/bin/clang++ -target x86_64 -Os -c /tmp/a.cc clang-10: /work/llvm.monorepo/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:2734: void llvm::InnerLoopVectorizer::emitMemRuntimeChecks(llvm::Loop*, llvm::BasicBlock*): Assertion ` !BB->getParent()->hasOptSize() && "Cannot emit memory checks when optimizing for size"' failed. Of course neither of these are what the developer expected from the pragma. > Specifying the vectorization width was supposed to implicitly enable > vectorization, except that it wasn't really doing this. It was only > setting the vectorize.width metadata, but not vectorize.enable. > > This should fix PR27643. > > Differential Revision: https://reviews.llvm.org/D66290 llvm-svn: 372225
Diffstat (limited to 'clang/test/CodeGenCXX/pragma-loop-predicate.cpp')
-rw-r--r--clang/test/CodeGenCXX/pragma-loop-predicate.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/test/CodeGenCXX/pragma-loop-predicate.cpp b/clang/test/CodeGenCXX/pragma-loop-predicate.cpp
index 33e4cf5df4f..ec2161d1772 100644
--- a/clang/test/CodeGenCXX/pragma-loop-predicate.cpp
+++ b/clang/test/CodeGenCXX/pragma-loop-predicate.cpp
@@ -58,6 +58,7 @@ void test5(int *List, int Length) {
List[i] = i * 2;
}
+
// CHECK: ![[LOOP0]] = distinct !{![[LOOP0]], !3}
// CHECK-NEXT: !3 = !{!"llvm.loop.vectorize.enable", i1 true}
@@ -69,7 +70,7 @@ void test5(int *List, int Length) {
// CHECK-NEXT: ![[LOOP3]] = distinct !{![[LOOP3]], !5, !3}
-// CHECK-NEXT: ![[LOOP4]] = distinct !{![[LOOP4]], !3, !10}
+// CHECK-NEXT: ![[LOOP4]] = distinct !{![[LOOP4]], !10}
// CHECK-NEXT: !10 = !{!"llvm.loop.vectorize.width", i32 1}
-// CHECK-NEXT: ![[LOOP5]] = distinct !{![[LOOP5]], !3, !10}
+// CHECK-NEXT: ![[LOOP5]] = distinct !{![[LOOP5]], !10}
OpenPOWER on IntegriCloud