[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / clang / test / OpenMP / assumes_codegen.cpp
blob4206e5a9caab7504cd483ef2b0832f8953d17c39
1 // RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -triple x86_64-unknown-unknown -o - | FileCheck %s
2 // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s --check-prefix=AST
3 // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -verify -o %t %s
4 // RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify=pch %s -emit-llvm -o - | FileCheck %s
5 // RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s
6 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -triple x86_64-unknown-unknown -o - | FileCheck %s
7 // RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -verify -o %t %s
8 // RUN: %clang_cc1 -fopenmp -fopenmp-enable-irbuilder -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify=pch %s -emit-llvm -o - | FileCheck %s
10 // pch-no-diagnostics
12 #ifndef HEADER
13 #define HEADER
15 void foo() {
18 #pragma omp assumes no_openmp_routines warning ext_another_warning(1) ext_after_invalid_clauses // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}} expected-warning {{'ext_another_warning' clause should not be followed by arguments; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
20 #pragma omp assumes no_openmp
22 #pragma omp begin assumes ext_range_bar_only
24 #pragma omp begin assumes ext_range_bar_only_2
26 class BAR {
27 public:
28 BAR() {}
30 void bar1() {
33 static void bar2() {
37 void bar() { BAR b; }
39 #pragma omp end assumes
40 #pragma omp end assumes
42 #pragma omp begin assumes ext_not_seen
43 #pragma omp end assumes
45 #pragma omp begin assumes ext_1234
46 void baz();
48 template<typename T>
49 class BAZ {
50 public:
51 BAZ() {}
53 void baz1() {
56 static void baz2() {
60 void baz() { BAZ<float> b; }
61 #pragma omp end assumes
63 #pragma omp begin assumes ext_lambda_assumption
64 int lambda_outer() {
65 auto lambda_inner = []() { return 42; };
66 return lambda_inner();
68 #pragma omp end assumes
70 // AST{LITERAL}: void foo() [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] {
71 // AST-NEXT{LITERAL}: }
72 // AST-NEXT{LITERAL}: class BAR {
73 // AST-NEXT{LITERAL}: public:
74 // AST-NEXT{LITERAL}: [[omp::assume("ompx_range_bar_only")]] [[omp::assume("ompx_range_bar_only_2")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] BAR() {
75 // AST-NEXT{LITERAL}: }
76 // AST-NEXT{LITERAL}: [[omp::assume("ompx_range_bar_only")]] [[omp::assume("ompx_range_bar_only_2")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void bar1() {
77 // AST-NEXT{LITERAL}: }
78 // AST-NEXT{LITERAL}: [[omp::assume("ompx_range_bar_only")]] [[omp::assume("ompx_range_bar_only_2")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] static void bar2() {
79 // AST-NEXT{LITERAL}: }
80 // AST-NEXT{LITERAL}: };
81 // AST-NEXT{LITERAL}: [[omp::assume("ompx_range_bar_only")]] [[omp::assume("ompx_range_bar_only_2")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void bar() {
82 // AST-NEXT{LITERAL}: BAR b;
83 // AST-NEXT{LITERAL}: }
84 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void baz();
85 // AST-NEXT{LITERAL}: template <typename T> class BAZ {
86 // AST-NEXT{LITERAL}: public:
87 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] BAZ<T>() {
88 // AST-NEXT{LITERAL}: }
89 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void baz1() {
90 // AST-NEXT{LITERAL}: }
91 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] static void baz2() {
92 // AST-NEXT{LITERAL}: }
93 // AST-NEXT{LITERAL}: };
94 // AST-NEXT{LITERAL}: template<> class BAZ<float> {
95 // AST-NEXT{LITERAL}: public:
96 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] BAZ() {
97 // AST-NEXT{LITERAL}: }
98 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void baz1();
99 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] static void baz2();
100 // AST-NEXT{LITERAL}: };
101 // AST-NEXT{LITERAL}: [[omp::assume("ompx_1234")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] void baz() {
102 // AST-NEXT{LITERAL}: BAZ<float> b;
103 // AST-NEXT{LITERAL}: }
104 // AST-NEXT{LITERAL}: [[omp::assume("ompx_lambda_assumption")]] [[omp::assume("omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses")]] [[omp::assume("omp_no_openmp")]] int lambda_outer() {
105 // AST-NEXT{LITERAL}: auto lambda_inner = []() {
106 // AST-NEXT{LITERAL}: return 42;
107 // AST-NEXT{LITERAL}: };
108 // AST-NEXT{LITERAL}: return lambda_inner();
109 // AST-NEXT{LITERAL}: }
111 #endif
113 // CHECK: define{{.*}} void @_Z3foov()
114 // CHECK-SAME: [[attr0:#[0-9]]]
115 // CHECK: define{{.*}} void @_Z3barv()
116 // CHECK-SAME: [[attr1:#[0-9]]]
117 // CHECK: call{{.*}} @_ZN3BARC1Ev(ptr{{.*}} %b)
118 // CHECK-SAME: [[attr8:#[0-9]]]
119 // CHECK: define{{.*}} void @_ZN3BARC1Ev(ptr{{.*}} %this)
120 // CHECK-SAME: [[attr1:#[0-9]]]
121 // CHECK: call{{.*}} @_ZN3BARC2Ev(ptr{{.*}} %this1)
122 // CHECK-SAME: [[attr8]]
123 // CHECK: define{{.*}} void @_ZN3BARC2Ev(ptr{{.*}} %this)
124 // CHECK-SAME: [[attr2:#[0-9]]]
125 // CHECK: define{{.*}} void @_Z3bazv()
126 // CHECK-SAME: [[attr3:#[0-9]]]
127 // CHECK: call{{.*}} @_ZN3BAZIfEC1Ev(ptr{{.*}} %b)
128 // CHECK-SAME: [[attr9:#[0-9]]]
129 // CHECK: define{{.*}} void @_ZN3BAZIfEC1Ev(ptr{{.*}} %this)
130 // CHECK-SAME: [[attr4:#[0-9]]]
131 // CHECK: call{{.*}} @_ZN3BAZIfEC2Ev(ptr{{.*}} %this1)
132 // CHECK-SAME: [[attr9]]
133 // CHECK: define{{.*}} void @_ZN3BAZIfEC2Ev(ptr{{.*}} %this)
134 // CHECK-SAME: [[attr5:#[0-9]]]
135 // CHECK: define{{.*}} i32 @_Z12lambda_outerv()
136 // CHECK-SAME: [[attr6:#[0-9]]]
137 // CHECK: call{{.*}} @"_ZZ12lambda_outervENK3$_0clEv"
138 // CHECK-SAME: [[attr10:#[0-9]]]
139 // CHECK: define{{.*}} i32 @"_ZZ12lambda_outervENK3$_0clEv"(ptr{{.*}} %this)
140 // CHECK-SAME: [[attr7:#[0-9]]]
142 // CHECK: attributes [[attr0]]
143 // CHECK-SAME: "llvm.assume"="omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
144 // CHECK: attributes [[attr1]]
145 // CHECK-SAME: "llvm.assume"="ompx_range_bar_only,ompx_range_bar_only_2,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
146 // CHECK: attributes [[attr2]]
147 // CHECK-SAME: "llvm.assume"="ompx_range_bar_only,ompx_range_bar_only_2,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
148 // CHECK: attributes [[attr3]]
149 // CHECK-SAME: "llvm.assume"="ompx_1234,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp,ompx_1234,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
150 // CHECK: attributes [[attr4]]
151 // CHECK-SAME: "llvm.assume"="ompx_1234,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
152 // CHECK: attributes [[attr5]]
153 // CHECK-SAME: "llvm.assume"="ompx_1234,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
154 // CHECK: attributes [[attr6]]
155 // CHECK-SAME: "llvm.assume"="ompx_lambda_assumption,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
156 // CHECK: attributes [[attr7]]
157 // CHECK-SAME: "llvm.assume"="ompx_lambda_assumption,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
158 // CHECK: attributes [[attr8]]
159 // CHECK-SAME: "llvm.assume"="ompx_range_bar_only,ompx_range_bar_only_2,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
160 // CHECK: attributes [[attr9]]
161 // CHECK-SAME: "llvm.assume"="ompx_1234,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"
162 // CHECK: attributes [[attr10]]
163 // CHECK-SAME: "llvm.assume"="ompx_lambda_assumption,omp_no_openmp_routines,ompx_another_warning,ompx_after_invalid_clauses,omp_no_openmp"