xref: /llvm-project/clang/test/Headers/amdgcn_openmp_device_math_constexpr.cpp (revision 237adfca4ef8d94b7d3d8817da615c5e5897c3da)
1735eccc0SMatt Arsenault // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --check-globals --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" --global-value-regex "\![0-9]+"
2735eccc0SMatt Arsenault 
3735eccc0SMatt Arsenault // RUN: %clang_cc1 -internal-isystem %S/Inputs/include -x c++ -fopenmp -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm-bc %s -o %t-host.bc
463ca93c7SSergio Afonso // RUN: %clang_cc1 -internal-isystem %S/../../lib/Headers/openmp_wrappers -include __clang_openmp_device_functions.h -internal-isystem %S/../../lib/Headers/openmp_wrappers -internal-isystem %S/Inputs/include -x c++ -fopenmp -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-host.bc -o - | FileCheck %s
5735eccc0SMatt Arsenault 
6735eccc0SMatt Arsenault #ifdef __cplusplus
7735eccc0SMatt Arsenault #include <cmath>
8735eccc0SMatt Arsenault #else
9735eccc0SMatt Arsenault #include <math.h>
10735eccc0SMatt Arsenault #endif
11735eccc0SMatt Arsenault 
12735eccc0SMatt Arsenault #pragma omp begin declare target
13735eccc0SMatt Arsenault 
14735eccc0SMatt Arsenault const float constexpr_fabsf_f32 = fabsf(-2.0f);
15735eccc0SMatt Arsenault const float constexpr_fabs_f32 = fabs(-2.0f);
16735eccc0SMatt Arsenault 
17735eccc0SMatt Arsenault const float constexpr_sinf_f32 = sinf(-2.0f);
18735eccc0SMatt Arsenault const float constexpr_sin_f32 = sin(-2.0f);
19735eccc0SMatt Arsenault 
20735eccc0SMatt Arsenault const float constexpr_cosf_f32 = cosf(-2.0f);
21735eccc0SMatt Arsenault const float constexpr_cos_f32 = cos(-2.0f);
22735eccc0SMatt Arsenault 
23735eccc0SMatt Arsenault const float constexpr_fmaf_f32 = fmaf(2.0f, 4.0f, 1.0f);
24735eccc0SMatt Arsenault const float constexpr_fma_f32 = fma(2.0f, 4.0f, 1.0f);
25735eccc0SMatt Arsenault 
26735eccc0SMatt Arsenault 
27735eccc0SMatt Arsenault const float constexpr_min_f32 = min(2.0f, -4.0f);
28735eccc0SMatt Arsenault const float constexpr_max_f32 = max(2.0f, -4.0f);
29735eccc0SMatt Arsenault 
30735eccc0SMatt Arsenault const float constexpr_fmin_f32 = fmin(2.0f, -4.0f);
31735eccc0SMatt Arsenault const float constexpr_fmax_f32 = fmax(2.0f, -4.0f);
32735eccc0SMatt Arsenault 
33735eccc0SMatt Arsenault const float constexpr_fminf_f32 = fminf(2.0f, -4.0f);
34735eccc0SMatt Arsenault const float constexpr_fmaxf_f32 = fmaxf(2.0f, -4.0f);
35735eccc0SMatt Arsenault 
36735eccc0SMatt Arsenault 
37735eccc0SMatt Arsenault #pragma omp end declare target
38*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init
39735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0:[0-9]+]] {
40735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
41735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
42735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
43735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
44735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
45735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
46735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
472da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP1:%.*]] = call noundef float @llvm.fabs.f32(float [[TMP0]])
48735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP1]], ptr addrspacecast (ptr addrspace(1) @_ZL19constexpr_fabsf_f32 to ptr), align 4
49735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
50735eccc0SMatt Arsenault //
51735eccc0SMatt Arsenault //
52*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.1
53735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
54735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
55735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I_I:%.*]] = alloca float, align 4, addrspace(5)
56735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
57735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
58735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
59735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
60735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
61735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
62735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
63735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I_I]] to ptr
64735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I_I]] to ptr
65735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP0]], ptr [[__X_ADDR_ASCAST_I_I]], align 4
66735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I_I]], align 4
672da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP2:%.*]] = call noundef float @llvm.fabs.f32(float [[TMP1]])
68735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_fabs_f32 to ptr), align 4
69735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
70735eccc0SMatt Arsenault //
71735eccc0SMatt Arsenault //
72*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.2
73735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
74735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
75735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
76735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
77735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
78735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
79735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
80735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
812da4960fSNoah Goldstein // CHECK-NEXT:    [[CALL_I:%.*]] = call noundef float @__ocml_sin_f32(float noundef [[TMP0]]) #[[ATTR3:[0-9]+]]
82735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL_I]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_sinf_f32 to ptr), align 4
83735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
84735eccc0SMatt Arsenault //
85735eccc0SMatt Arsenault //
86*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.3
87735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
88735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
89735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I_I:%.*]] = alloca float, align 4, addrspace(5)
90735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
91735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
92735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
93735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
94735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
95735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
96735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
97735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I_I]] to ptr
98735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I_I]] to ptr
99735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP0]], ptr [[__X_ADDR_ASCAST_I_I]], align 4
100735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I_I]], align 4
1012da4960fSNoah Goldstein // CHECK-NEXT:    [[CALL_I_I:%.*]] = call noundef float @__ocml_sin_f32(float noundef [[TMP1]]) #[[ATTR3]]
102735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL_I_I]], ptr addrspacecast (ptr addrspace(1) @_ZL17constexpr_sin_f32 to ptr), align 4
103735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
104735eccc0SMatt Arsenault //
105735eccc0SMatt Arsenault //
106*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.4
107735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
108735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
109735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
110735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
111735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
112735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
113735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
114735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
1152da4960fSNoah Goldstein // CHECK-NEXT:    [[CALL_I:%.*]] = call noundef float @__ocml_cos_f32(float noundef [[TMP0]]) #[[ATTR3]]
116735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL_I]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_cosf_f32 to ptr), align 4
117735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
118735eccc0SMatt Arsenault //
119735eccc0SMatt Arsenault //
120*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.5
121735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
122735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
123735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I_I:%.*]] = alloca float, align 4, addrspace(5)
124735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
125735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
126735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
127735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
128735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
129735eccc0SMatt Arsenault // CHECK-NEXT:    store float -2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
130735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
131735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I_I]] to ptr
132735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I_I]] to ptr
133735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP0]], ptr [[__X_ADDR_ASCAST_I_I]], align 4
134735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I_I]], align 4
1352da4960fSNoah Goldstein // CHECK-NEXT:    [[CALL_I_I:%.*]] = call noundef float @__ocml_cos_f32(float noundef [[TMP1]]) #[[ATTR3]]
136735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL_I_I]], ptr addrspacecast (ptr addrspace(1) @_ZL17constexpr_cos_f32 to ptr), align 4
137735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
138735eccc0SMatt Arsenault //
139735eccc0SMatt Arsenault //
140*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.6
141735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
142735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
143735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
144735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
145735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
146735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
147735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
148735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
149735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
150735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Z_ADDR_I]] to ptr
151735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
152735eccc0SMatt Arsenault // CHECK-NEXT:    store float 4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
153735eccc0SMatt Arsenault // CHECK-NEXT:    store float 1.000000e+00, ptr [[__Z_ADDR_ASCAST_I]], align 4
154735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
155735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
156735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr [[__Z_ADDR_ASCAST_I]], align 4
1572da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP3:%.*]] = call noundef float @llvm.fma.f32(float [[TMP0]], float [[TMP1]], float [[TMP2]])
158735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP3]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_fmaf_f32 to ptr), align 4
159735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
160735eccc0SMatt Arsenault //
161735eccc0SMatt Arsenault //
162*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.7
163735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
164735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
165735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I_I:%.*]] = alloca float, align 4, addrspace(5)
166735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
167735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
168735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_I_I:%.*]] = alloca float, align 4, addrspace(5)
169735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
170735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
171735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
172735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
173735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
174735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
175735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
176735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Z_ADDR_I]] to ptr
177735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
178735eccc0SMatt Arsenault // CHECK-NEXT:    store float 4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
179735eccc0SMatt Arsenault // CHECK-NEXT:    store float 1.000000e+00, ptr [[__Z_ADDR_ASCAST_I]], align 4
180735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
181735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
182735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr [[__Z_ADDR_ASCAST_I]], align 4
183735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I_I]] to ptr
184735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I_I]] to ptr
185735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I_I]] to ptr
186735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Z_ADDR_ASCAST_I_I:%.*]] = addrspacecast ptr addrspace(5) [[__Z_ADDR_I_I]] to ptr
187735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP0]], ptr [[__X_ADDR_ASCAST_I_I]], align 4
188735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP1]], ptr [[__Y_ADDR_ASCAST_I_I]], align 4
189735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr [[__Z_ADDR_ASCAST_I_I]], align 4
190735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I_I]], align 4
191735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP4:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I_I]], align 4
192735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP5:%.*]] = load float, ptr [[__Z_ADDR_ASCAST_I_I]], align 4
1932da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP6:%.*]] = call noundef float @llvm.fma.f32(float [[TMP3]], float [[TMP4]], float [[TMP5]])
194735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP6]], ptr addrspacecast (ptr addrspace(1) @_ZL17constexpr_fma_f32 to ptr), align 4
195735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
196735eccc0SMatt Arsenault //
197735eccc0SMatt Arsenault //
198*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.8
199735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
200735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
201735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
202735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
203735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
204735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
205735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
206735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
207735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
208735eccc0SMatt Arsenault // CHECK-NEXT:    store float -4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
209735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
210735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
2112da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP2:%.*]] = call noundef float @llvm.minnum.f32(float [[TMP0]], float [[TMP1]])
212735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr addrspacecast (ptr addrspace(1) @_ZL17constexpr_min_f32 to ptr), align 4
213735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
214735eccc0SMatt Arsenault //
215735eccc0SMatt Arsenault //
216*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.9
217735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
218735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
219735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
220735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
221735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
222735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
223735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
224735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
225735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
226735eccc0SMatt Arsenault // CHECK-NEXT:    store float -4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
227735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
228735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
2292da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP2:%.*]] = call noundef float @llvm.maxnum.f32(float [[TMP0]], float [[TMP1]])
230735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr addrspacecast (ptr addrspace(1) @_ZL17constexpr_max_f32 to ptr), align 4
231735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
232735eccc0SMatt Arsenault //
233735eccc0SMatt Arsenault //
234*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.10
235735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
236735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
237735eccc0SMatt Arsenault // CHECK-NEXT:    [[CALL:%.*]] = call noundef float @_Z4fminff(float noundef 2.000000e+00, float noundef -4.000000e+00) #[[ATTR4:[0-9]+]]
238735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_fmin_f32 to ptr), align 4
239735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
240735eccc0SMatt Arsenault //
241735eccc0SMatt Arsenault //
242*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.11
243735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
244735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
245735eccc0SMatt Arsenault // CHECK-NEXT:    [[CALL:%.*]] = call noundef float @_Z4fmaxff(float noundef 2.000000e+00, float noundef -4.000000e+00) #[[ATTR4]]
246735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[CALL]], ptr addrspacecast (ptr addrspace(1) @_ZL18constexpr_fmax_f32 to ptr), align 4
247735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
248735eccc0SMatt Arsenault //
249735eccc0SMatt Arsenault //
250*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.12
251735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
252735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
253735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
254735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
255735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
256735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
257735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
258735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
259735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
260735eccc0SMatt Arsenault // CHECK-NEXT:    store float -4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
261735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
262735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
2632da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP2:%.*]] = call noundef float @llvm.minnum.f32(float [[TMP0]], float [[TMP1]])
264735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr addrspacecast (ptr addrspace(1) @_ZL19constexpr_fminf_f32 to ptr), align 4
265735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
266735eccc0SMatt Arsenault //
267735eccc0SMatt Arsenault //
268*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@__cxx_global_var_init.13
269735eccc0SMatt Arsenault // CHECK-SAME: () #[[ATTR0]] {
270735eccc0SMatt Arsenault // CHECK-NEXT:  entry:
271735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_I:%.*]] = alloca float, align 4, addrspace(5)
272735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
273735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_I:%.*]] = alloca float, align 4, addrspace(5)
274735eccc0SMatt Arsenault // CHECK-NEXT:    [[RETVAL_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL_I]] to ptr
275735eccc0SMatt Arsenault // CHECK-NEXT:    [[__X_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__X_ADDR_I]] to ptr
276735eccc0SMatt Arsenault // CHECK-NEXT:    [[__Y_ADDR_ASCAST_I:%.*]] = addrspacecast ptr addrspace(5) [[__Y_ADDR_I]] to ptr
277735eccc0SMatt Arsenault // CHECK-NEXT:    store float 2.000000e+00, ptr [[__X_ADDR_ASCAST_I]], align 4
278735eccc0SMatt Arsenault // CHECK-NEXT:    store float -4.000000e+00, ptr [[__Y_ADDR_ASCAST_I]], align 4
279735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load float, ptr [[__X_ADDR_ASCAST_I]], align 4
280735eccc0SMatt Arsenault // CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[__Y_ADDR_ASCAST_I]], align 4
2812da4960fSNoah Goldstein // CHECK-NEXT:    [[TMP2:%.*]] = call noundef float @llvm.maxnum.f32(float [[TMP0]], float [[TMP1]])
282735eccc0SMatt Arsenault // CHECK-NEXT:    store float [[TMP2]], ptr addrspacecast (ptr addrspace(1) @_ZL19constexpr_fmaxf_f32 to ptr), align 4
283735eccc0SMatt Arsenault // CHECK-NEXT:    ret void
284735eccc0SMatt Arsenault //
285*237adfcaSJoseph Huber //
286*237adfcaSJoseph Huber // CHECK-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_amdgcn_openmp_device_math_constexpr.cpp
287*237adfcaSJoseph Huber // CHECK-SAME: () #[[ATTR0]] {
288*237adfcaSJoseph Huber // CHECK-NEXT:  entry:
289*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init()
290*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.1()
291*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.2()
292*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.3()
293*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.4()
294*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.5()
295*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.6()
296*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.7()
297*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.8()
298*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.9()
299*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.10()
300*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.11()
301*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.12()
302*237adfcaSJoseph Huber // CHECK-NEXT:    call void @__cxx_global_var_init.13()
303*237adfcaSJoseph Huber // CHECK-NEXT:    ret void
304*237adfcaSJoseph Huber //
305