1d04d9220SAlexey Bataev // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" --prefix-filecheck-ir-name _ --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*" 283ddfa0dSJoel E. Denny // expected-no-diagnostics 383ddfa0dSJoel E. Denny #ifndef HEADER 483ddfa0dSJoel E. Denny #define HEADER 583ddfa0dSJoel E. Denny 683ddfa0dSJoel E. Denny //-------------------------------------------------- 783ddfa0dSJoel E. Denny // With -DUSE. 883ddfa0dSJoel E. Denny //-------------------------------------------------- 983ddfa0dSJoel E. Denny 1083ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 1183ddfa0dSJoel E. Denny 12*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -verify -fopenmp -fopenmp-extensions \ 1383ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 1483ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 1583ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 16*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \ 1783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 1883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 19*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \ 2083ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 2183ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 2283ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 2383ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 2483ddfa0dSJoel E. Denny 2583ddfa0dSJoel E. Denny // i386-pc-linux-gnu 2683ddfa0dSJoel E. Denny 27*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -verify -fopenmp -fopenmp-extensions \ 2883ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 2983ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 3083ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 31*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \ 3283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 3383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 34*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \ 3583ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 3683ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 3783ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 3883ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 3983ddfa0dSJoel E. Denny 4083ddfa0dSJoel E. Denny //-------------------------------------------------- 4183ddfa0dSJoel E. Denny // Without -DUSE. 4283ddfa0dSJoel E. Denny //-------------------------------------------------- 4383ddfa0dSJoel E. Denny 4483ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 4583ddfa0dSJoel E. Denny 46*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -fopenmp-extensions \ 4783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 4883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 4983ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 50*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \ 5183ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 5283ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 53*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \ 5483ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 5583ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 5683ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 5783ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 5883ddfa0dSJoel E. Denny 5983ddfa0dSJoel E. Denny // i386-pc-linux-gnu 6083ddfa0dSJoel E. Denny 61*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -fopenmp-extensions \ 6283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 6383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 6483ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 65*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \ 6683ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 6783ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 68*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \ 6983ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 7083ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 7183ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 7283ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 7383ddfa0dSJoel E. Denny 7483ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below: 7583ddfa0dSJoel E. Denny // 7683ddfa0dSJoel E. Denny // TO = 0x1 7783ddfa0dSJoel E. Denny // FROM = 0x2 7883ddfa0dSJoel E. Denny // ALWAYS = 0x4 7983ddfa0dSJoel E. Denny // TARGET_PARAM = 0x20 8083ddfa0dSJoel E. Denny // CLOSE = 0x400 8183ddfa0dSJoel E. Denny // OMPX_HOLD = 0x2000 8283ddfa0dSJoel E. Denny // MEMBER_OF_1 = 0x1000000000000 8383ddfa0dSJoel E. Denny // MEMBER_OF_5 = 0x5000000000000 8483ddfa0dSJoel E. Denny 8583ddfa0dSJoel E. Denny //. 86d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4] 8783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2023]], i64 [[#0x2020]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]] 88d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 89d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 90d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 91d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9283ddfa0dSJoel E. Denny //. 93d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4] 9483ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2023]], i64 [[#0x2020]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]] 95d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 96d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 97d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 98d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9983ddfa0dSJoel E. Denny //. 100d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4] 10183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2003]], i64 [[#0x2000]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]] 102d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 103d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 104d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 105d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 10683ddfa0dSJoel E. Denny //. 107d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4] 10883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2003]], i64 [[#0x2000]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]] 109d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 110d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 111d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 112d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 11383ddfa0dSJoel E. Denny //. 11483ddfa0dSJoel E. Denny struct ST { 11583ddfa0dSJoel E. Denny int i; 11683ddfa0dSJoel E. Denny int j; 11783ddfa0dSJoel E. Denny void test_present_members(); 11883ddfa0dSJoel E. Denny }; 11983ddfa0dSJoel E. Denny 12083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 12183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 12283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 12383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 12483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 12583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 12683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 12783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 12883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 129ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 13083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 13183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 13283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 13383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 13483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 13583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 13683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 13783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 13883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 13983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 14083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 14183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 14283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 14383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 14483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 14583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 14683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 14783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 14883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 14983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 15083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 15183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 15283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 15383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 154d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 155d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP15]], i8* align 8 bitcast ([7 x i64]* @.offload_sizes to i8*), i64 56, i1 false) 156d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 157d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 158d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8 159d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 160d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 161d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8 162d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 163d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8 164d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 165d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8 166d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 167d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 168d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8 169d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 170d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 171d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP25]], align 8 172ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 173ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 174ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 175ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 176ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 177ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 178ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 179ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 180d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 181d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8 182d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 183d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 184d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8 185d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 186d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 187d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8 188d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 189d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8 190d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 191d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 192d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8 193d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 194d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 195d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8 196d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 197d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8 198d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 199d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8 200d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 201d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 202d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8 203d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 204d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 205d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8 206d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 207d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8 208d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 209d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 210d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8 211d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 212d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 213d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8 214d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 215d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8 216d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 217d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 218d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 219d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP56:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630.region_id, i32 7, i8** [[TMP53]], i8** [[TMP54]], i64* [[TMP55]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 220d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 221d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP57]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 22283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 223d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR3:[0-9]+]] 22483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 22583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 226d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 227d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 228d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP59]], align 8 229d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 230d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 231d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP61]], align 8 232d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 233d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP62]], align 8 234d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP63:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 235ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 236d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644.region_id, i32 1, i8** [[TMP63]], i8** [[TMP64]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 237d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 238d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 23983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed6: 240d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644(i32* [[A]]) #[[ATTR3]] 24183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 24283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont7: 24383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 24483ddfa0dSJoel E. Denny // 24583ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei( 24683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 24783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 24883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 24983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 25083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 25183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 25283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 25383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 254ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 25583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 25683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 25783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 25883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 25983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 26083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 26183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 26283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 26383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 26483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 26583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 26683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 26783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 26883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 26983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 27083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 27183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 27283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 27383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 27483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 27583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 27683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 27783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 27883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 279d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 280d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP15]], i8* align 4 bitcast ([7 x i64]* @.offload_sizes to i8*), i32 56, i1 false) 281d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 282d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 283d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4 284d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 285d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 286d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4 287d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 288d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4 289d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 290d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4 291d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 292d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 293d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4 294d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 295d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 296d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP25]], align 4 297ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 298ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 299ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 300ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 301ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 302ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 303ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 304ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 305d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 306d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4 307d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 308d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 309d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4 310d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 311d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 312d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4 313d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 314d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4 315d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 316d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 317d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4 318d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 319d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 320d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4 321d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 322d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4 323d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 324d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4 325d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 326d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 327d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4 328d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 329d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 330d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4 331d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 332d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4 333d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 334d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 335d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4 336d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 337d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 338d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4 339d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 340d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4 341d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 342d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 343d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 344d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP56:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630.region_id, i32 7, i8** [[TMP53]], i8** [[TMP54]], i64* [[TMP55]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 345d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 346d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP57]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 34783ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 348d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR3:[0-9]+]] 34983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 35083ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 351d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 352d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 353d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP59]], align 4 354d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 355d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 356d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP61]], align 4 357d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 358d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP62]], align 4 359d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP63:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 360ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 361d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644.region_id, i32 1, i8** [[TMP63]], i8** [[TMP64]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 362d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 363d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 36483ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed6: 365d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644(i32* [[A]]) #[[ATTR3]] 36683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 36783ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont7: 36883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 36983ddfa0dSJoel E. Denny // 37083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 37183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 37283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 37383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 37483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 37583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 37683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 37783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 37883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 379ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 38083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 38183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 38283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 38383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 38483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 38583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 38683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 38783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 38883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 38983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 39083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 39183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 39283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 39383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 39483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 39583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 39683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 39783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 39883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 39983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 40083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 40183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 40283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 40383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 404d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 405d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP15]], i8* align 8 bitcast ([7 x i64]* @.offload_sizes to i8*), i64 56, i1 false) 406d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 407d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 408d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8 409d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 410d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 411d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8 412d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 413d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8 414d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 415d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8 416d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 417d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 418d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8 419d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 420d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 421d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP25]], align 8 422ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 423ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 424ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 425ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 426ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 427ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 428ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 429ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 430d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 431d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8 432d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 433d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 434d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8 435d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 436d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 437d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8 438d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 439d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8 440d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 441d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 442d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8 443d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 444d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 445d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8 446d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 447d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8 448d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 449d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8 450d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 451d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 452d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8 453d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 454d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 455d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8 456d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 457d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8 458d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 459d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 460d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8 461d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 462d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 463d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8 464d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 465d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8 466d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 467d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 468d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 469d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP56:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630.region_id, i32 7, i8** [[TMP53]], i8** [[TMP54]], i64* [[TMP55]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 470d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 471d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP57]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 47283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 473d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630() #[[ATTR3:[0-9]+]] 47483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 47583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 476d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 477d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 478d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP59]], align 8 479d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 480d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 481d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP61]], align 8 482d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 483d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP62]], align 8 484d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP63:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 485ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 486d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644.region_id, i32 1, i8** [[TMP63]], i8** [[TMP64]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 487d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 488d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 48983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed6: 490d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644() #[[ATTR3]] 49183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 49283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont7: 49383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 49483ddfa0dSJoel E. Denny // 49583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei( 49683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 49783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 49883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 49983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 50083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 50183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 50283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 50383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 504ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 50583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 50683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 50783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 50883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 50983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 51083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 51183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 51283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 51383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 51483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 51583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 51683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 51783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 51883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 51983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 52083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 52183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 52283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 52383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 52483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 52583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 52683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 52783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 52883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 529d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 530d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP15]], i8* align 4 bitcast ([7 x i64]* @.offload_sizes to i8*), i32 56, i1 false) 531d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 532d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 533d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4 534d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 535d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 536d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4 537d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 538d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4 539d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 540d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4 541d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 542d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 543d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4 544d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 545d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 546d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP25]], align 4 547ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 548ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 549ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 550ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 551ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 552ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 553ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 554ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 555d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 556d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4 557d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 558d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 559d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4 560d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 561d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 562d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4 563d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 564d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4 565d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 566d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 567d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4 568d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 569d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 570d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4 571d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 572d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4 573d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 574d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4 575d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 576d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 577d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4 578d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 579d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 580d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4 581d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 582d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4 583d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 584d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 585d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4 586d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 587d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 588d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4 589d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 590d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4 591d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 592d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 593d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 594d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP56:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630.region_id, i32 7, i8** [[TMP53]], i8** [[TMP54]], i64* [[TMP55]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 595d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 596d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP57]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 59783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 598d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l630() #[[ATTR3:[0-9]+]] 59983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 60083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 601d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 602d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 603d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP59]], align 4 604d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 605d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 606d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP61]], align 4 607d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 608d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP62]], align 4 609d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP63:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 610ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 611d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644.region_id, i32 1, i8** [[TMP63]], i8** [[TMP64]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 612d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 613d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 61483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed6: 615d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l644() #[[ATTR3]] 61683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 61783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont7: 61883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 61983ddfa0dSJoel E. Denny // 62083ddfa0dSJoel E. Denny void explicit_maps_single(int ii) { 62183ddfa0dSJoel E. Denny 62283ddfa0dSJoel E. Denny // Map of a scalar. 62383ddfa0dSJoel E. Denny int a = ii; 62483ddfa0dSJoel E. Denny 62583ddfa0dSJoel E. Denny struct ST st1; 62683ddfa0dSJoel E. Denny struct ST st2; 62783ddfa0dSJoel E. Denny 62883ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 62983ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 63083ddfa0dSJoel E. Denny #pragma omp target map(tofrom : st1.i) \ 63183ddfa0dSJoel E. Denny map(ompx_hold, tofrom : a, st1.j, st2.i) \ 63283ddfa0dSJoel E. Denny map(tofrom : st2.j) 63383ddfa0dSJoel E. Denny { 63483ddfa0dSJoel E. Denny #ifdef USE 63583ddfa0dSJoel E. Denny st1.i++; 63683ddfa0dSJoel E. Denny a++; 63783ddfa0dSJoel E. Denny st1.j++; 63883ddfa0dSJoel E. Denny st2.i++; 63983ddfa0dSJoel E. Denny st2.j++; 64083ddfa0dSJoel E. Denny #endif 64183ddfa0dSJoel E. Denny } 64283ddfa0dSJoel E. Denny 64383ddfa0dSJoel E. Denny // Always Close Hold. 64483ddfa0dSJoel E. Denny #pragma omp target map(always close ompx_hold tofrom: a) 64583ddfa0dSJoel E. Denny { 64683ddfa0dSJoel E. Denny #ifdef USE 64783ddfa0dSJoel E. Denny a++; 64883ddfa0dSJoel E. Denny #endif 64983ddfa0dSJoel E. Denny } 65083ddfa0dSJoel E. Denny } 65183ddfa0dSJoel E. Denny 65283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 65383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 65483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 65583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 65683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 65783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 658ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 65983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 66083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 66183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 66283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 66383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 66483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 66583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 66683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 66783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 66883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 66983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 670d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 671d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP7]], i8* align 8 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i64 24, i1 false) 672d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 673d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 674d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8 675d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 676d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 677d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8 678d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 679d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8 680d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 681d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8 682d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 683d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 684d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8 685d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 686d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 687d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP17]], align 8 688ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 689ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 690ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 691ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 692ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 693ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 694ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 695ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 696d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 697d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8 698d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 699d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 700d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 701d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 702d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 703d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 70483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 705d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887(%struct.ST* [[THIS1]]) #[[ATTR3]] 70683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 70783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 70883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 70983ddfa0dSJoel E. Denny // 71083ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv( 71183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 71283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 71383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 71483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 71583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 716ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 71783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 71883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 71983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 72083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 72183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 72283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 72383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 72483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 72583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 72683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 72783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 728d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 729d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP7]], i8* align 4 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i32 24, i1 false) 730d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 731d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 732d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4 733d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 734d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 735d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4 736d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 737d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4 738d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 739d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4 740d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 741d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 742d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4 743d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 744d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 745d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP17]], align 4 746ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 747ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 748ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 749ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 750ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 751ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 752ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 753ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 754d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 755d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4 756d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 757d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 758d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 759d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 760d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 761d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 76283ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 763d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887(%struct.ST* [[THIS1]]) #[[ATTR3]] 76483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 76583ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 76683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 76783ddfa0dSJoel E. Denny // 76883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 76983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 77083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 77183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 77283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 77383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 774ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 77583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 77683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 77783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 77883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 77983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 78083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 78183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 78283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 78383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 78483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 78583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 786d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 787d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP7]], i8* align 8 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i64 24, i1 false) 788d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 789d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 790d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8 791d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 792d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 793d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8 794d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 795d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8 796d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 797d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8 798d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 799d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 800d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8 801d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 802d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 803d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP17]], align 8 804ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 805ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 806ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 807ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 808ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 809ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 810ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 811ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 812d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 813d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8 814d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 815d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 816d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 817d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 818d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 819d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 82083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 821d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887() #[[ATTR3]] 82283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 82383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 82483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 82583ddfa0dSJoel E. Denny // 82683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv( 82783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 82883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 82983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 83083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 83183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 832ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 83383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 83483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 83583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 83683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 83783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 83883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 83983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 84083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 84183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 84283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 84383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 844d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 845d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP7]], i8* align 4 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i32 24, i1 false) 846d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 847d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 848d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4 849d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 850d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 851d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4 852d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 853d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4 854d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 855d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4 856d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 857d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 858d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4 859d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 860d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 861d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP17]], align 4 862ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 863ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 864ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 865ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 866ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 867ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 868ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 869ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 870d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 871d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4 872d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 873d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 874d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 875d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 876d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 877d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 87883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 879d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l887() #[[ATTR3]] 88083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 88183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 88283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 88383ddfa0dSJoel E. Denny // 88483ddfa0dSJoel E. Denny void ST::test_present_members() { 88583ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 88683ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 88783ddfa0dSJoel E. Denny #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j) 88883ddfa0dSJoel E. Denny { 88983ddfa0dSJoel E. Denny #ifdef USE 89083ddfa0dSJoel E. Denny i++; 89183ddfa0dSJoel E. Denny j++; 89283ddfa0dSJoel E. Denny #endif 89383ddfa0dSJoel E. Denny } 89483ddfa0dSJoel E. Denny } 89583ddfa0dSJoel E. Denny 89683ddfa0dSJoel E. Denny #endif 897