1*ad38e24eSDavid Pagan // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ --version 5 2*ad38e24eSDavid Pagan // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s 3*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -x c++ -std=c++11 -emit-pch -o %t %s 4*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s 5*ad38e24eSDavid Pagan // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s 6*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -fnoopenmp-use-tls -triple x86_64-unknown-linux-gnu -x c++ -std=c++11 -emit-pch -o %t %s 7*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp -fopenmp-version=52 -fnoopenmp-use-tls -triple x86_64-unknown-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix CHECK-TLS %s 8*ad38e24eSDavid Pagan 9*ad38e24eSDavid Pagan // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck --check-prefix SIMD-ONLY0 %s 10*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -x c++ -std=c++11 -emit-pch -o %t %s 11*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 12*ad38e24eSDavid Pagan // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=52 -triple x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck --check-prefix SIMD-ONLY0 %s 13*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -fnoopenmp-use-tls -triple x86_64-unknown-linux-gnu -x c++ -std=c++11 -emit-pch -o %t %s 14*ad38e24eSDavid Pagan // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=52 -fnoopenmp-use-tls -triple x86_64-unknown-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 15*ad38e24eSDavid Pagan // expected-no-diagnostics 16*ad38e24eSDavid Pagan 17*ad38e24eSDavid Pagan #ifndef HEADER 18*ad38e24eSDavid Pagan #define HEADER 19*ad38e24eSDavid Pagan 20*ad38e24eSDavid Pagan enum omp_allocator_handle_t { 21*ad38e24eSDavid Pagan omp_null_allocator = 0, 22*ad38e24eSDavid Pagan omp_default_mem_alloc = 1, 23*ad38e24eSDavid Pagan omp_large_cap_mem_alloc = 2, 24*ad38e24eSDavid Pagan omp_const_mem_alloc = 3, 25*ad38e24eSDavid Pagan omp_high_bw_mem_alloc = 4, 26*ad38e24eSDavid Pagan omp_low_lat_mem_alloc = 5, 27*ad38e24eSDavid Pagan omp_cgroup_mem_alloc = 6, 28*ad38e24eSDavid Pagan omp_pteam_mem_alloc = 7, 29*ad38e24eSDavid Pagan omp_thread_mem_alloc = 8, 30*ad38e24eSDavid Pagan KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__ 31*ad38e24eSDavid Pagan }; 32*ad38e24eSDavid Pagan 33*ad38e24eSDavid Pagan template <class T> 34*ad38e24eSDavid Pagan struct ST { 35*ad38e24eSDavid Pagan static T m; 36*ad38e24eSDavid Pagan }; 37*ad38e24eSDavid Pagan 38*ad38e24eSDavid Pagan template <class T, omp_allocator_handle_t TY, unsigned al> T foo() { 39*ad38e24eSDavid Pagan T v; 40*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(allocator(TY):v) 41*ad38e24eSDavid Pagan v = ST<T>::m; 42*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(align(al), allocator(TY):v) 43*ad38e24eSDavid Pagan ++v; 44*ad38e24eSDavid Pagan return v; 45*ad38e24eSDavid Pagan } 46*ad38e24eSDavid Pagan 47*ad38e24eSDavid Pagan namespace ns { 48*ad38e24eSDavid Pagan int a; 49*ad38e24eSDavid Pagan } 50*ad38e24eSDavid Pagan 51*ad38e24eSDavid Pagan omp_allocator_handle_t foo(); 52*ad38e24eSDavid Pagan 53*ad38e24eSDavid Pagan int main() { 54*ad38e24eSDavid Pagan static int a; 55*ad38e24eSDavid Pagan static int temp; 56*ad38e24eSDavid Pagan int v; 57*ad38e24eSDavid Pagan #pragma omp scope private(ns::a) allocate(allocator(omp_pteam_mem_alloc):ns::a) 58*ad38e24eSDavid Pagan ns::a++; 59*ad38e24eSDavid Pagan #pragma omp scope private(a) allocate(align(8),allocator(omp_thread_mem_alloc):a) 60*ad38e24eSDavid Pagan a = 2; 61*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(align(1) : v) 62*ad38e24eSDavid Pagan ++v; 63*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(allocator(omp_default_mem_alloc) : v) 64*ad38e24eSDavid Pagan ++v; 65*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(allocator(omp_large_cap_mem_alloc), align(8) : v) 66*ad38e24eSDavid Pagan ++v; 67*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(align(4) : v) 68*ad38e24eSDavid Pagan ++v; 69*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(align(2), allocator(omp_default_mem_alloc) : v) 70*ad38e24eSDavid Pagan ++v; 71*ad38e24eSDavid Pagan #pragma omp scope private(v) allocate(align(8), allocator(foo()) : v) 72*ad38e24eSDavid Pagan ++v; 73*ad38e24eSDavid Pagan 74*ad38e24eSDavid Pagan double b = 3; 75*ad38e24eSDavid Pagan #pragma omp scope private(temp) allocate(temp) 76*ad38e24eSDavid Pagan temp += foo<int, omp_cgroup_mem_alloc, 8>(); 77*ad38e24eSDavid Pagan return temp+ns::a; 78*ad38e24eSDavid Pagan } 79*ad38e24eSDavid Pagan 80*ad38e24eSDavid Pagan extern template int ST<int>::m; 81*ad38e24eSDavid Pagan 82*ad38e24eSDavid Pagan const int b = 8; 83*ad38e24eSDavid Pagan 84*ad38e24eSDavid Pagan void bar(int a, float &z) { 85*ad38e24eSDavid Pagan #pragma omp scope private(a,z) allocate(align(b), allocator(omp_default_mem_alloc) : a,z) 86*ad38e24eSDavid Pagan a += b + z; 87*ad38e24eSDavid Pagan } 88*ad38e24eSDavid Pagan #endif 89*ad38e24eSDavid Pagan // CHECK-LABEL: define dso_local noundef i32 @main( 90*ad38e24eSDavid Pagan // CHECK-SAME: ) #[[ATTR0:[0-9]+]] { 91*ad38e24eSDavid Pagan // CHECK-NEXT: [[ENTRY:.*:]] 92*ad38e24eSDavid Pagan // CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 93*ad38e24eSDavid Pagan // CHECK-NEXT: [[V:%.*]] = alloca i32, align 4 94*ad38e24eSDavid Pagan // CHECK-NEXT: [[B:%.*]] = alloca double, align 8 95*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]]) 96*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 4 97*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTA__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 7 to ptr)) 98*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTA__VOID_ADDR]], align 4 99*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[TMP1]], 1 100*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC]], ptr [[DOTA__VOID_ADDR]], align 4 101*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR]], ptr inttoptr (i64 7 to ptr)) 102*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP0]]) 103*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTA__VOID_ADDR1:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 8 to ptr)) 104*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 2, ptr [[DOTA__VOID_ADDR1]], align 4 105*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR1]], ptr inttoptr (i64 8 to ptr)) 106*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 107*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr null) 108*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTV__VOID_ADDR]], align 4 109*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC2:%.*]] = add nsw i32 [[TMP2]], 1 110*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC2]], ptr [[DOTV__VOID_ADDR]], align 4 111*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR]], ptr null) 112*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 113*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR3:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 1 to ptr)) 114*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTV__VOID_ADDR3]], align 4 115*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC4:%.*]] = add nsw i32 [[TMP3]], 1 116*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC4]], ptr [[DOTV__VOID_ADDR3]], align 4 117*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR3]], ptr inttoptr (i64 1 to ptr)) 118*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 119*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR5:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 2 to ptr)) 120*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTV__VOID_ADDR5]], align 4 121*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC6:%.*]] = add nsw i32 [[TMP4]], 1 122*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC6]], ptr [[DOTV__VOID_ADDR5]], align 4 123*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR5]], ptr inttoptr (i64 2 to ptr)) 124*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 125*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR7:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr null) 126*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTV__VOID_ADDR7]], align 4 127*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC8:%.*]] = add nsw i32 [[TMP5]], 1 128*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC8]], ptr [[DOTV__VOID_ADDR7]], align 4 129*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR7]], ptr null) 130*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 131*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR9:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr inttoptr (i64 1 to ptr)) 132*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTV__VOID_ADDR9]], align 4 133*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC10:%.*]] = add nsw i32 [[TMP6]], 1 134*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC10]], ptr [[DOTV__VOID_ADDR9]], align 4 135*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR9]], ptr inttoptr (i64 1 to ptr)) 136*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 137*ad38e24eSDavid Pagan // CHECK-NEXT: [[CALL:%.*]] = call noundef i64 @_Z3foov() 138*ad38e24eSDavid Pagan // CHECK-NEXT: [[CONV:%.*]] = inttoptr i64 [[CALL]] to ptr 139*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR11:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr [[CONV]]) 140*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTV__VOID_ADDR11]], align 4 141*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC12:%.*]] = add nsw i32 [[TMP7]], 1 142*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC12]], ptr [[DOTV__VOID_ADDR11]], align 4 143*ad38e24eSDavid Pagan // CHECK-NEXT: [[CALL13:%.*]] = call noundef i64 @_Z3foov() 144*ad38e24eSDavid Pagan // CHECK-NEXT: [[CONV14:%.*]] = inttoptr i64 [[CALL13]] to ptr 145*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR11]], ptr [[CONV14]]) 146*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 147*ad38e24eSDavid Pagan // CHECK-NEXT: store double 3.000000e+00, ptr [[B]], align 8 148*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTTEMP__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr null) 149*ad38e24eSDavid Pagan // CHECK-NEXT: [[CALL15:%.*]] = call noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v() 150*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTTEMP__VOID_ADDR]], align 4 151*ad38e24eSDavid Pagan // CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[CALL15]] 152*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[ADD]], ptr [[DOTTEMP__VOID_ADDR]], align 4 153*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTTEMP__VOID_ADDR]], ptr null) 154*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 155*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr @_ZZ4mainE4temp, align 4 156*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP10:%.*]] = load i32, ptr @_ZN2ns1aE, align 4 157*ad38e24eSDavid Pagan // CHECK-NEXT: [[ADD16:%.*]] = add nsw i32 [[TMP9]], [[TMP10]] 158*ad38e24eSDavid Pagan // CHECK-NEXT: ret i32 [[ADD16]] 159*ad38e24eSDavid Pagan // 160*ad38e24eSDavid Pagan // 161*ad38e24eSDavid Pagan // CHECK-LABEL: define linkonce_odr noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v( 162*ad38e24eSDavid Pagan // CHECK-SAME: ) #[[ATTR4:[0-9]+]] comdat { 163*ad38e24eSDavid Pagan // CHECK-NEXT: [[ENTRY:.*:]] 164*ad38e24eSDavid Pagan // CHECK-NEXT: [[V:%.*]] = alloca i32, align 4 165*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) 166*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 6 to ptr)) 167*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr @_ZN2STIiE1mE, align 4 168*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[TMP1]], ptr [[DOTV__VOID_ADDR]], align 4 169*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR]], ptr inttoptr (i64 6 to ptr)) 170*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 171*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTV__VOID_ADDR1:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 6 to ptr)) 172*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTV__VOID_ADDR1]], align 4 173*ad38e24eSDavid Pagan // CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[TMP2]], 1 174*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[INC]], ptr [[DOTV__VOID_ADDR1]], align 4 175*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR1]], ptr inttoptr (i64 6 to ptr)) 176*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 177*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[V]], align 4 178*ad38e24eSDavid Pagan // CHECK-NEXT: ret i32 [[TMP3]] 179*ad38e24eSDavid Pagan // 180*ad38e24eSDavid Pagan // 181*ad38e24eSDavid Pagan // CHECK-LABEL: define dso_local void @_Z3bariRf( 182*ad38e24eSDavid Pagan // CHECK-SAME: i32 noundef [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Z:%.*]]) #[[ATTR4]] { 183*ad38e24eSDavid Pagan // CHECK-NEXT: [[ENTRY:.*:]] 184*ad38e24eSDavid Pagan // CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 185*ad38e24eSDavid Pagan // CHECK-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8 186*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP:%.*]] = alloca ptr, align 8 187*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) 188*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 189*ad38e24eSDavid Pagan // CHECK-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8 190*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTA__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 1 to ptr)) 191*ad38e24eSDavid Pagan // CHECK-NEXT: [[DOTZ__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 1 to ptr)) 192*ad38e24eSDavid Pagan // CHECK-NEXT: store ptr [[DOTZ__VOID_ADDR]], ptr [[TMP]], align 8 193*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP]], align 8 194*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP2:%.*]] = load float, ptr [[TMP1]], align 4 195*ad38e24eSDavid Pagan // CHECK-NEXT: [[ADD:%.*]] = fadd float 8.000000e+00, [[TMP2]] 196*ad38e24eSDavid Pagan // CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTA__VOID_ADDR]], align 4 197*ad38e24eSDavid Pagan // CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[TMP3]] to float 198*ad38e24eSDavid Pagan // CHECK-NEXT: [[ADD1:%.*]] = fadd float [[CONV]], [[ADD]] 199*ad38e24eSDavid Pagan // CHECK-NEXT: [[CONV2:%.*]] = fptosi float [[ADD1]] to i32 200*ad38e24eSDavid Pagan // CHECK-NEXT: store i32 [[CONV2]], ptr [[DOTA__VOID_ADDR]], align 4 201*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTZ__VOID_ADDR]], ptr inttoptr (i64 1 to ptr)) 202*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR]], ptr inttoptr (i64 1 to ptr)) 203*ad38e24eSDavid Pagan // CHECK-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 204*ad38e24eSDavid Pagan // CHECK-NEXT: ret void 205*ad38e24eSDavid Pagan // 206*ad38e24eSDavid Pagan // 207*ad38e24eSDavid Pagan // CHECK-TLS-LABEL: define dso_local noundef i32 @main( 208*ad38e24eSDavid Pagan // CHECK-TLS-SAME: ) #[[ATTR0:[0-9]+]] { 209*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ENTRY:.*:]] 210*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 211*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[V:%.*]] = alloca i32, align 4 212*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[B:%.*]] = alloca double, align 8 213*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]]) 214*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 0, ptr [[RETVAL]], align 4 215*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTA__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 7 to ptr)) 216*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTA__VOID_ADDR]], align 4 217*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC:%.*]] = add nsw i32 [[TMP1]], 1 218*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC]], ptr [[DOTA__VOID_ADDR]], align 4 219*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR]], ptr inttoptr (i64 7 to ptr)) 220*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP0]]) 221*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTA__VOID_ADDR1:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 8 to ptr)) 222*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 2, ptr [[DOTA__VOID_ADDR1]], align 4 223*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR1]], ptr inttoptr (i64 8 to ptr)) 224*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 225*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr null) 226*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTV__VOID_ADDR]], align 4 227*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC2:%.*]] = add nsw i32 [[TMP2]], 1 228*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC2]], ptr [[DOTV__VOID_ADDR]], align 4 229*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR]], ptr null) 230*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 231*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR3:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 1 to ptr)) 232*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTV__VOID_ADDR3]], align 4 233*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC4:%.*]] = add nsw i32 [[TMP3]], 1 234*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC4]], ptr [[DOTV__VOID_ADDR3]], align 4 235*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR3]], ptr inttoptr (i64 1 to ptr)) 236*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 237*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR5:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 2 to ptr)) 238*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTV__VOID_ADDR5]], align 4 239*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC6:%.*]] = add nsw i32 [[TMP4]], 1 240*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC6]], ptr [[DOTV__VOID_ADDR5]], align 4 241*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR5]], ptr inttoptr (i64 2 to ptr)) 242*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 243*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR7:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr null) 244*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTV__VOID_ADDR7]], align 4 245*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC8:%.*]] = add nsw i32 [[TMP5]], 1 246*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC8]], ptr [[DOTV__VOID_ADDR7]], align 4 247*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR7]], ptr null) 248*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 249*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR9:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 4, i64 4, ptr inttoptr (i64 1 to ptr)) 250*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTV__VOID_ADDR9]], align 4 251*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC10:%.*]] = add nsw i32 [[TMP6]], 1 252*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC10]], ptr [[DOTV__VOID_ADDR9]], align 4 253*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR9]], ptr inttoptr (i64 1 to ptr)) 254*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 255*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CALL:%.*]] = call noundef i64 @_Z3foov() 256*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CONV:%.*]] = inttoptr i64 [[CALL]] to ptr 257*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR11:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr [[CONV]]) 258*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTV__VOID_ADDR11]], align 4 259*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC12:%.*]] = add nsw i32 [[TMP7]], 1 260*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC12]], ptr [[DOTV__VOID_ADDR11]], align 4 261*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CALL13:%.*]] = call noundef i64 @_Z3foov() 262*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CONV14:%.*]] = inttoptr i64 [[CALL13]] to ptr 263*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR11]], ptr [[CONV14]]) 264*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 265*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store double 3.000000e+00, ptr [[B]], align 8 266*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTTEMP__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr null) 267*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CALL15:%.*]] = call noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v() 268*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTTEMP__VOID_ADDR]], align 4 269*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[CALL15]] 270*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[ADD]], ptr [[DOTTEMP__VOID_ADDR]], align 4 271*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTTEMP__VOID_ADDR]], ptr null) 272*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 273*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP9:%.*]] = load i32, ptr @_ZZ4mainE4temp, align 4 274*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP10:%.*]] = load i32, ptr @_ZN2ns1aE, align 4 275*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ADD16:%.*]] = add nsw i32 [[TMP9]], [[TMP10]] 276*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: ret i32 [[ADD16]] 277*ad38e24eSDavid Pagan // 278*ad38e24eSDavid Pagan // 279*ad38e24eSDavid Pagan // CHECK-TLS-LABEL: define linkonce_odr noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v( 280*ad38e24eSDavid Pagan // CHECK-TLS-SAME: ) #[[ATTR4:[0-9]+]] comdat { 281*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ENTRY:.*:]] 282*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[V:%.*]] = alloca i32, align 4 283*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) 284*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP0]], i64 4, ptr inttoptr (i64 6 to ptr)) 285*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP1:%.*]] = load i32, ptr @_ZN2STIiE1mE, align 4 286*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[TMP1]], ptr [[DOTV__VOID_ADDR]], align 4 287*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR]], ptr inttoptr (i64 6 to ptr)) 288*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 289*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTV__VOID_ADDR1:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 6 to ptr)) 290*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTV__VOID_ADDR1]], align 4 291*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[INC:%.*]] = add nsw i32 [[TMP2]], 1 292*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[INC]], ptr [[DOTV__VOID_ADDR1]], align 4 293*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTV__VOID_ADDR1]], ptr inttoptr (i64 6 to ptr)) 294*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 295*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP3:%.*]] = load i32, ptr [[V]], align 4 296*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: ret i32 [[TMP3]] 297*ad38e24eSDavid Pagan // 298*ad38e24eSDavid Pagan // 299*ad38e24eSDavid Pagan // CHECK-TLS-LABEL: define dso_local void @_Z3bariRf( 300*ad38e24eSDavid Pagan // CHECK-TLS-SAME: i32 noundef [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Z:%.*]]) #[[ATTR4]] { 301*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ENTRY:.*:]] 302*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 303*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8 304*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP:%.*]] = alloca ptr, align 8 305*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) 306*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 307*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8 308*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTA__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 1 to ptr)) 309*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[DOTZ__VOID_ADDR:%.*]] = call ptr @__kmpc_aligned_alloc(i32 [[TMP0]], i64 8, i64 4, ptr inttoptr (i64 1 to ptr)) 310*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store ptr [[DOTZ__VOID_ADDR]], ptr [[TMP]], align 8 311*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP]], align 8 312*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP2:%.*]] = load float, ptr [[TMP1]], align 4 313*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ADD:%.*]] = fadd float 8.000000e+00, [[TMP2]] 314*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTA__VOID_ADDR]], align 4 315*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CONV:%.*]] = sitofp i32 [[TMP3]] to float 316*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[ADD1:%.*]] = fadd float [[CONV]], [[ADD]] 317*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: [[CONV2:%.*]] = fptosi float [[ADD1]] to i32 318*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: store i32 [[CONV2]], ptr [[DOTA__VOID_ADDR]], align 4 319*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTZ__VOID_ADDR]], ptr inttoptr (i64 1 to ptr)) 320*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_free(i32 [[TMP0]], ptr [[DOTA__VOID_ADDR]], ptr inttoptr (i64 1 to ptr)) 321*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2]], i32 [[TMP0]]) 322*ad38e24eSDavid Pagan // CHECK-TLS-NEXT: ret void 323*ad38e24eSDavid Pagan // 324*ad38e24eSDavid Pagan // 325*ad38e24eSDavid Pagan // SIMD-ONLY0-LABEL: define dso_local noundef i32 @main( 326*ad38e24eSDavid Pagan // SIMD-ONLY0-SAME: ) #[[ATTR0:[0-9]+]] { 327*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ENTRY:.*:]] 328*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 329*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V:%.*]] = alloca i32, align 4 330*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[A:%.*]] = alloca i32, align 4 331*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[A1:%.*]] = alloca i32, align 4 332*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V2:%.*]] = alloca i32, align 4 333*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V4:%.*]] = alloca i32, align 4 334*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V6:%.*]] = alloca i32, align 4 335*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V8:%.*]] = alloca i32, align 4 336*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V10:%.*]] = alloca i32, align 4 337*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V12:%.*]] = alloca i32, align 4 338*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[B:%.*]] = alloca double, align 8 339*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TEMP:%.*]] = alloca i32, align 4 340*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 0, ptr [[RETVAL]], align 4 341*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4 342*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC:%.*]] = add nsw i32 [[TMP0]], 1 343*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC]], ptr [[A]], align 4 344*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 2, ptr [[A1]], align 4 345*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP1:%.*]] = load i32, ptr [[V2]], align 4 346*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC3:%.*]] = add nsw i32 [[TMP1]], 1 347*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC3]], ptr [[V2]], align 4 348*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP2:%.*]] = load i32, ptr [[V4]], align 4 349*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC5:%.*]] = add nsw i32 [[TMP2]], 1 350*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC5]], ptr [[V4]], align 4 351*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP3:%.*]] = load i32, ptr [[V6]], align 4 352*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC7:%.*]] = add nsw i32 [[TMP3]], 1 353*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC7]], ptr [[V6]], align 4 354*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP4:%.*]] = load i32, ptr [[V8]], align 4 355*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC9:%.*]] = add nsw i32 [[TMP4]], 1 356*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC9]], ptr [[V8]], align 4 357*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP5:%.*]] = load i32, ptr [[V10]], align 4 358*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC11:%.*]] = add nsw i32 [[TMP5]], 1 359*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC11]], ptr [[V10]], align 4 360*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP6:%.*]] = load i32, ptr [[V12]], align 4 361*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC13:%.*]] = add nsw i32 [[TMP6]], 1 362*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC13]], ptr [[V12]], align 4 363*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store double 3.000000e+00, ptr [[B]], align 8 364*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[CALL:%.*]] = call noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v() 365*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP7:%.*]] = load i32, ptr [[TEMP]], align 4 366*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], [[CALL]] 367*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[ADD]], ptr [[TEMP]], align 4 368*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP8:%.*]] = load i32, ptr @_ZZ4mainE4temp, align 4 369*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP9:%.*]] = load i32, ptr @_ZN2ns1aE, align 4 370*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ADD14:%.*]] = add nsw i32 [[TMP8]], [[TMP9]] 371*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: ret i32 [[ADD14]] 372*ad38e24eSDavid Pagan // 373*ad38e24eSDavid Pagan // 374*ad38e24eSDavid Pagan // SIMD-ONLY0-LABEL: define linkonce_odr noundef i32 @_Z3fooIiL22omp_allocator_handle_t6ELj8EET_v( 375*ad38e24eSDavid Pagan // SIMD-ONLY0-SAME: ) #[[ATTR1:[0-9]+]] comdat { 376*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ENTRY:.*:]] 377*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V:%.*]] = alloca i32, align 4 378*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V1:%.*]] = alloca i32, align 4 379*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[V2:%.*]] = alloca i32, align 4 380*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = load i32, ptr @_ZN2STIiE1mE, align 4 381*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[TMP0]], ptr [[V1]], align 4 382*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP1:%.*]] = load i32, ptr [[V2]], align 4 383*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[INC:%.*]] = add nsw i32 [[TMP1]], 1 384*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[INC]], ptr [[V2]], align 4 385*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP2:%.*]] = load i32, ptr [[V]], align 4 386*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: ret i32 [[TMP2]] 387*ad38e24eSDavid Pagan // 388*ad38e24eSDavid Pagan // 389*ad38e24eSDavid Pagan // SIMD-ONLY0-LABEL: define dso_local void @_Z3bariRf( 390*ad38e24eSDavid Pagan // SIMD-ONLY0-SAME: i32 noundef [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Z:%.*]]) #[[ATTR1]] { 391*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ENTRY:.*:]] 392*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 393*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8 394*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[A1:%.*]] = alloca i32, align 4 395*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[Z2:%.*]] = alloca float, align 4 396*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP:%.*]] = alloca ptr, align 8 397*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4 398*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8 399*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store ptr [[Z2]], ptr [[TMP]], align 8 400*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8 401*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP1:%.*]] = load float, ptr [[TMP0]], align 4 402*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ADD:%.*]] = fadd float 8.000000e+00, [[TMP1]] 403*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[TMP2:%.*]] = load i32, ptr [[A1]], align 4 404*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[CONV:%.*]] = sitofp i32 [[TMP2]] to float 405*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[ADD3:%.*]] = fadd float [[CONV]], [[ADD]] 406*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: [[CONV4:%.*]] = fptosi float [[ADD3]] to i32 407*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: store i32 [[CONV4]], ptr [[A1]], align 4 408*ad38e24eSDavid Pagan // SIMD-ONLY0-NEXT: ret void 409*ad38e24eSDavid Pagan // 410