1*d04d9220SAlexey 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 1283ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 1683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 1983ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 2783ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 3183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 3483ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 4683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 5083ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 5383ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 6183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 6583ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 6883ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 //. 86*d04d9220SAlexey 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]]] 88*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 89*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 90*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 91*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9283ddfa0dSJoel E. Denny //. 93*d04d9220SAlexey 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]]] 95*d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 96*d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 97*d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 98*d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9983ddfa0dSJoel E. Denny //. 100*d04d9220SAlexey 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]]] 102*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 103*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 104*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 105*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 10683ddfa0dSJoel E. Denny //. 107*d04d9220SAlexey 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]]] 109*d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4] 110*d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 111*d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4] 112*d04d9220SAlexey 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) 154*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 155*d04d9220SAlexey 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) 156*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 157*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 158*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8 159*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 160*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 161*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8 162*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 163*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8 164*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 165*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8 166*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 167*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 168*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8 169*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 170*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 171*d04d9220SAlexey 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 180*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 181*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8 182*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 183*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 184*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8 185*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 186*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 187*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8 188*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 189*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8 190*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 191*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 192*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8 193*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 194*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 195*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8 196*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 197*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8 198*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 199*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8 200*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 201*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 202*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8 203*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 204*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 205*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8 206*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 207*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8 208*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 209*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 210*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8 211*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 212*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 213*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8 214*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 215*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8 216*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 217*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 218*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 219*d04d9220SAlexey 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) 220*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 221*d04d9220SAlexey 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: 223*d04d9220SAlexey 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: 226*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 227*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 228*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP59]], align 8 229*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 230*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 231*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP61]], align 8 232*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 233*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP62]], align 8 234*d04d9220SAlexey 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 236*d04d9220SAlexey 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) 237*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 238*d04d9220SAlexey 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: 240*d04d9220SAlexey 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) 279*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 280*d04d9220SAlexey 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) 281*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 282*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 283*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4 284*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 285*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 286*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4 287*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 288*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4 289*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 290*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4 291*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 292*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 293*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4 294*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 295*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 296*d04d9220SAlexey 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 305*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 306*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4 307*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 308*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 309*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4 310*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 311*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 312*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4 313*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 314*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4 315*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 316*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 317*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4 318*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 319*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 320*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4 321*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 322*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4 323*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 324*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4 325*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 326*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 327*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4 328*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 329*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 330*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4 331*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 332*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4 333*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 334*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 335*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4 336*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 337*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 338*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4 339*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 340*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4 341*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 342*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 343*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 344*d04d9220SAlexey 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) 345*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 346*d04d9220SAlexey 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: 348*d04d9220SAlexey 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: 351*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 352*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 353*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP59]], align 4 354*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 355*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 356*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP61]], align 4 357*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 358*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP62]], align 4 359*d04d9220SAlexey 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 361*d04d9220SAlexey 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) 362*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 363*d04d9220SAlexey 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: 365*d04d9220SAlexey 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) 404*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 405*d04d9220SAlexey 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) 406*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 407*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 408*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8 409*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 410*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 411*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8 412*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 413*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8 414*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 415*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8 416*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 417*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 418*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8 419*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 420*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 421*d04d9220SAlexey 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 430*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 431*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8 432*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 433*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 434*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8 435*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 436*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 437*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8 438*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 439*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8 440*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 441*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 442*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8 443*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 444*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 445*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8 446*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 447*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8 448*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 449*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8 450*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 451*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 452*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8 453*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 454*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 455*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8 456*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 457*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8 458*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 459*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 460*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8 461*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 462*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 463*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8 464*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 465*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8 466*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 467*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 468*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 469*d04d9220SAlexey 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) 470*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 471*d04d9220SAlexey 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: 473*d04d9220SAlexey 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: 476*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 477*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 478*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP59]], align 8 479*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 480*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 481*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP61]], align 8 482*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 483*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP62]], align 8 484*d04d9220SAlexey 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 486*d04d9220SAlexey 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) 487*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 488*d04d9220SAlexey 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: 490*d04d9220SAlexey 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) 529*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 530*d04d9220SAlexey 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) 531*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 532*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST** 533*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4 534*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 535*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32** 536*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4 537*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 538*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4 539*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 540*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4 541*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 542*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST** 543*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4 544*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 545*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32** 546*d04d9220SAlexey 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 555*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 556*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4 557*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 558*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32** 559*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4 560*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 561*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32** 562*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4 563*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 564*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4 565*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 566*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST** 567*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4 568*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 569*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32** 570*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4 571*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 572*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4 573*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 574*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4 575*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 576*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST** 577*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4 578*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 579*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32** 580*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4 581*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 582*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4 583*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 584*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST** 585*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4 586*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 587*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32** 588*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4 589*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 590*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4 591*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 592*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 593*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 594*d04d9220SAlexey 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) 595*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP57:%.*]] = icmp ne i32 [[TMP56]], 0 596*d04d9220SAlexey 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: 598*d04d9220SAlexey 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: 601*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 602*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP59:%.*]] = bitcast i8** [[TMP58]] to i32** 603*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP59]], align 4 604*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 605*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP61:%.*]] = bitcast i8** [[TMP60]] to i32** 606*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP61]], align 4 607*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 608*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP62]], align 4 609*d04d9220SAlexey 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 611*d04d9220SAlexey 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) 612*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0 613*d04d9220SAlexey 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: 615*d04d9220SAlexey 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) 670*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 671*d04d9220SAlexey 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) 672*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 673*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 674*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8 675*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 676*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 677*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8 678*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 679*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8 680*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 681*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8 682*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 683*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 684*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8 685*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 686*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 687*d04d9220SAlexey 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 696*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 697*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8 698*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 699*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 700*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 701*d04d9220SAlexey 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) 702*d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 703*d04d9220SAlexey 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: 705*d04d9220SAlexey 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) 728*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 729*d04d9220SAlexey 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) 730*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 731*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 732*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4 733*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 734*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 735*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4 736*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 737*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4 738*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 739*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4 740*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 741*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 742*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4 743*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 744*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 745*d04d9220SAlexey 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 754*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 755*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4 756*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 757*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 758*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 759*d04d9220SAlexey 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) 760*d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 761*d04d9220SAlexey 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: 763*d04d9220SAlexey 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) 786*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 787*d04d9220SAlexey 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) 788*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 789*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 790*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8 791*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 792*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 793*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8 794*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 795*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8 796*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 797*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8 798*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 799*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 800*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8 801*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 802*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 803*d04d9220SAlexey 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 812*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 813*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8 814*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 815*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 816*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 817*d04d9220SAlexey 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) 818*d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 819*d04d9220SAlexey 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: 821*d04d9220SAlexey 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) 844*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8* 845*d04d9220SAlexey 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) 846*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 847*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST** 848*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4 849*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 850*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32** 851*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4 852*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 853*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4 854*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 855*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4 856*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 857*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST** 858*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4 859*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 860*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32** 861*d04d9220SAlexey 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 870*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 871*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4 872*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 873*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 874*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 875*d04d9220SAlexey 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) 876*d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0 877*d04d9220SAlexey 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: 879*d04d9220SAlexey 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