1 // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm -o - %s | FileCheck %s 2 3 void test0(int *List, int Length) { 4 // CHECK-LABEL: @{{.*}}test0{{.*}}( 5 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP0:.*]] 6 7 #pragma clang loop vectorize(enable) 8 for (int i = 0; i < Length; i++) 9 List[i] = i * 2; 10 } 11 12 void test1(int *List, int Length) { 13 // CHECK-LABEL: @{{.*}}test1{{.*}}( 14 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP1:.*]] 15 16 #pragma clang loop vectorize(enable) vectorize_predicate(enable) 17 for (int i = 0; i < Length; i++) 18 List[i] = i * 2; 19 } 20 21 void test2(int *List, int Length) { 22 // CHECK-LABEL: @{{.*}}test2{{.*}}( 23 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP2:.*]] 24 25 #pragma clang loop vectorize(enable) vectorize_predicate(disable) 26 for (int i = 0; i < Length; i++) 27 List[i] = i * 2; 28 } 29 30 // vectorize_predicate(enable) implies vectorize(enable) 31 void test3(int *List, int Length) { 32 // CHECK-LABEL: @{{.*}}test3{{.*}}( 33 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP3:.*]] 34 35 #pragma clang loop vectorize_predicate(enable) 36 for (int i = 0; i < Length; i++) 37 List[i] = i * 2; 38 } 39 40 // Check that disabling vectorization means a vectorization width of 1, and 41 // also that vectorization_predicate isn't enabled. 42 void test4(int *List, int Length) { 43 // CHECK-LABEL: @{{.*}}test4{{.*}}( 44 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP4:.*]] 45 46 #pragma clang loop vectorize(disable) 47 for (int i = 0; i < Length; i++) 48 List[i] = i * 2; 49 } 50 51 // Check that vectorize and vectorize_predicate are disabled. 52 void test5(int *List, int Length) { 53 // CHECK-LABEL: @{{.*}}test5{{.*}}( 54 // CHECK: br label {{.*}}, !llvm.loop ![[LOOP5:.*]] 55 56 #pragma clang loop vectorize(disable) vectorize_predicate(enable) 57 for (int i = 0; i < Length; i++) 58 List[i] = i * 2; 59 } 60 61 62 // CHECK: ![[LOOP0]] = distinct !{![[LOOP0]], !3} 63 // CHECK-NEXT: !3 = !{!"llvm.loop.vectorize.enable", i1 true} 64 65 // CHECK-NEXT: ![[LOOP1]] = distinct !{![[LOOP1]], !5, !3} 66 // CHECK-NEXT: !5 = !{!"llvm.loop.vectorize.predicate.enable", i1 true} 67 68 // CHECK-NEXT: ![[LOOP2]] = distinct !{![[LOOP2]], !7, !3} 69 // CHECK-NEXT: !7 = !{!"llvm.loop.vectorize.predicate.enable", i1 false} 70 71 // CHECK-NEXT: ![[LOOP3]] = distinct !{![[LOOP3]], !5, !3} 72 73 // CHECK-NEXT: ![[LOOP4]] = distinct !{![[LOOP4]], !10} 74 // CHECK-NEXT: !10 = !{!"llvm.loop.vectorize.width", i32 1} 75 76 // CHECK-NEXT: ![[LOOP5]] = distinct !{![[LOOP5]], !10} 77