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