1*83ddfa0dSJoel E. Denny // 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]+" --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*" 2*83ddfa0dSJoel E. Denny // expected-no-diagnostics 3*83ddfa0dSJoel E. Denny #ifndef HEADER 4*83ddfa0dSJoel E. Denny #define HEADER 5*83ddfa0dSJoel E. Denny 6*83ddfa0dSJoel E. Denny //-------------------------------------------------- 7*83ddfa0dSJoel E. Denny // With -DUSE. 8*83ddfa0dSJoel E. Denny //-------------------------------------------------- 9*83ddfa0dSJoel E. Denny 10*83ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 11*83ddfa0dSJoel E. Denny 12*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \ 13*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 14*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 15*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 16*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 17*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 18*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 19*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 20*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 21*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 22*83ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 23*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 24*83ddfa0dSJoel E. Denny 25*83ddfa0dSJoel E. Denny // i386-pc-linux-gnu 26*83ddfa0dSJoel E. Denny 27*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \ 28*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 29*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 30*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 31*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 32*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 33*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 34*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 35*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 36*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 37*83ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 38*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 39*83ddfa0dSJoel E. Denny 40*83ddfa0dSJoel E. Denny //-------------------------------------------------- 41*83ddfa0dSJoel E. Denny // Without -DUSE. 42*83ddfa0dSJoel E. Denny //-------------------------------------------------- 43*83ddfa0dSJoel E. Denny 44*83ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 45*83ddfa0dSJoel E. Denny 46*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 47*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 48*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 49*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 50*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 51*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 52*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 53*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 54*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 55*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 56*83ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 57*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 58*83ddfa0dSJoel E. Denny 59*83ddfa0dSJoel E. Denny // i386-pc-linux-gnu 60*83ddfa0dSJoel E. Denny 61*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 62*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 63*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 64*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 65*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 66*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 67*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 68*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 69*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 70*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 71*83ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 72*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 73*83ddfa0dSJoel E. Denny 74*83ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below: 75*83ddfa0dSJoel E. Denny // 76*83ddfa0dSJoel E. Denny // TO = 0x1 77*83ddfa0dSJoel E. Denny // FROM = 0x2 78*83ddfa0dSJoel E. Denny // ALWAYS = 0x4 79*83ddfa0dSJoel E. Denny // TARGET_PARAM = 0x20 80*83ddfa0dSJoel E. Denny // CLOSE = 0x400 81*83ddfa0dSJoel E. Denny // OMPX_HOLD = 0x2000 82*83ddfa0dSJoel E. Denny // MEMBER_OF_1 = 0x1000000000000 83*83ddfa0dSJoel E. Denny // MEMBER_OF_5 = 0x5000000000000 84*83ddfa0dSJoel E. Denny 85*83ddfa0dSJoel E. Denny //. 86*83ddfa0dSJoel 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]]] 87*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 88*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 89*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 90*83ddfa0dSJoel E. Denny //. 91*83ddfa0dSJoel 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]]] 92*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 93*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 94*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 95*83ddfa0dSJoel E. Denny //. 96*83ddfa0dSJoel 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]]] 97*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 98*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 99*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 100*83ddfa0dSJoel E. Denny //. 101*83ddfa0dSJoel 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]]] 102*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 103*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 104*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 105*83ddfa0dSJoel E. Denny //. 106*83ddfa0dSJoel E. Denny struct ST { 107*83ddfa0dSJoel E. Denny int i; 108*83ddfa0dSJoel E. Denny int j; 109*83ddfa0dSJoel E. Denny void test_present_members(); 110*83ddfa0dSJoel E. Denny }; 111*83ddfa0dSJoel E. Denny 112*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 113*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 114*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 115*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 116*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 117*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 118*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 119*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 120*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 121*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 122*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 123*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 124*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 125*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 126*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 127*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 128*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 129*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 130*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 131*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 132*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 133*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 134*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 135*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 136*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 137*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 138*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 139*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 140*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 141*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 142*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 143*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 144*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 145*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 146*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 147*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 148*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8 149*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 150*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 151*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP18]], align 8 152*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 153*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 8 154*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 155*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP20]], align 8 156*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 157*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 158*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8 159*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 160*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 161*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP24]], align 8 162*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 163*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP25]], align 8 164*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 165*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 166*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 167*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 168*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 169*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 170*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 171*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 172*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 173*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP31]], align 8 174*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 175*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP32]], align 8 176*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 177*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 178*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP34]], align 8 179*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 180*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 181*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP36]], align 8 182*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 183*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP37]], align 8 184*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 185*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP38]], align 8 186*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 187*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 188*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8 189*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 190*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 191*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP42]], align 8 192*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 193*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 8 194*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 195*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP44]], align 8 196*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 197*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 198*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8 199*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 200*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 201*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP48]], align 8 202*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 203*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP49]], align 8 204*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 205*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP50]], align 8 206*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 207*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 208*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8 209*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 210*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 211*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP54]], align 8 212*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 213*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP55]], align 8 214*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 215*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP56]], align 8 216*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 217*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 218*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 219*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP60:%.*]] = 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_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 220*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 221*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 222*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 223*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR2:[0-9]+]] 224*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 225*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 226*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 227*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 228*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP63]], align 8 229*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 230*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 231*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP65]], align 8 232*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 233*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP66]], align 8 234*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 235*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 236*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null) 237*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 238*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 239*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed6: 240*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]] 241*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 242*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont7: 243*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 244*83ddfa0dSJoel E. Denny // 245*83ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei( 246*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 247*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 248*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 249*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 250*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 251*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 252*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 253*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 254*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 255*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 256*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 257*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 258*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 259*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 260*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 261*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 262*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 263*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 264*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 265*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 266*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 267*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 268*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 269*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 270*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 271*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 272*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 273*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 274*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 275*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 276*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 277*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 278*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 279*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 280*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 281*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4 282*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 283*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 284*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP18]], align 4 285*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 286*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 4 287*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 288*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP20]], align 4 289*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 290*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 291*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4 292*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 293*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 294*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP24]], align 4 295*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 296*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP25]], align 4 297*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 298*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 299*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 300*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 301*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 302*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 303*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 304*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 305*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 306*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP31]], align 4 307*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 308*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP32]], align 4 309*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 310*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 311*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP34]], align 4 312*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 313*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 314*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP36]], align 4 315*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 316*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP37]], align 4 317*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 318*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP38]], align 4 319*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 320*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 321*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4 322*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 323*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 324*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP42]], align 4 325*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 326*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 4 327*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 328*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP44]], align 4 329*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 330*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 331*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4 332*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 333*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 334*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP48]], align 4 335*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 336*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP49]], align 4 337*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 338*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP50]], align 4 339*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 340*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 341*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4 342*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 343*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 344*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[J2]], i32** [[TMP54]], align 4 345*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 346*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP55]], align 4 347*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 348*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP56]], align 4 349*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 350*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 351*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 352*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP60:%.*]] = 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_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 353*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 354*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 355*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 356*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR2:[0-9]+]] 357*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 358*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 359*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 360*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 361*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP63]], align 4 362*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 363*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 364*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP65]], align 4 365*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 366*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP66]], align 4 367*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 368*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 369*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null) 370*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 371*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 372*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed6: 373*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]] 374*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 375*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont7: 376*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 377*83ddfa0dSJoel E. Denny // 378*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 379*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 380*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 381*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 382*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 383*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 384*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 385*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 386*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 387*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 388*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 389*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 390*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 391*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 392*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 393*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 394*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 395*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 396*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 397*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 398*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 399*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 400*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 401*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 402*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 403*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 404*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 405*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 406*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 407*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 408*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 409*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 410*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 411*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 412*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 413*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 414*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8 415*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 416*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 417*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP18]], align 8 418*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 419*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 8 420*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 421*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP20]], align 8 422*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 423*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 424*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8 425*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 426*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 427*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP24]], align 8 428*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 429*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP25]], align 8 430*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 431*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 432*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 433*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 434*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 435*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 436*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 437*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 438*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 439*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP31]], align 8 440*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 441*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP32]], align 8 442*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 443*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 444*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP34]], align 8 445*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 446*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 447*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP36]], align 8 448*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 449*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP37]], align 8 450*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 451*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP38]], align 8 452*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 453*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 454*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8 455*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 456*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 457*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP42]], align 8 458*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 459*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 8 460*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 461*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP44]], align 8 462*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 463*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 464*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8 465*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 466*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 467*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP48]], align 8 468*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 469*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP49]], align 8 470*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 471*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP50]], align 8 472*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 473*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 474*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8 475*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 476*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 477*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP54]], align 8 478*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 479*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP55]], align 8 480*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 481*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP56]], align 8 482*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 483*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 484*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 485*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP60:%.*]] = 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_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 486*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 487*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 488*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 489*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]] 490*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 491*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 492*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 493*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 494*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP63]], align 8 495*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 496*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 497*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP65]], align 8 498*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 499*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP66]], align 8 500*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 501*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 502*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null) 503*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 504*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 505*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed6: 506*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]] 507*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 508*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont7: 509*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 510*83ddfa0dSJoel E. Denny // 511*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei( 512*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 513*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 514*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 515*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 516*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 517*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 518*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 519*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 520*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 521*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 522*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 523*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 524*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 525*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 526*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 527*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 528*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 529*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 530*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 531*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 532*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 533*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 534*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 535*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 536*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 537*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 538*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 539*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 540*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 541*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 542*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 543*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 544*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 545*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 546*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 547*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4 548*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 549*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 550*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP18]], align 4 551*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 552*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 4 553*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 554*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP20]], align 4 555*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 556*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 557*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4 558*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 559*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 560*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP24]], align 4 561*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 562*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP25]], align 4 563*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 564*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 565*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 566*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 567*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 568*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 569*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 570*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 571*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 572*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP31]], align 4 573*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 574*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP32]], align 4 575*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 576*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 577*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP34]], align 4 578*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 579*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 580*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP36]], align 4 581*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 582*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP37]], align 4 583*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 584*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP38]], align 4 585*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 586*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 587*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4 588*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 589*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 590*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP42]], align 4 591*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 592*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 4 593*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 594*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP44]], align 4 595*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 596*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 597*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4 598*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 599*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 600*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP48]], align 4 601*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 602*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP49]], align 4 603*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 604*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP50]], align 4 605*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 606*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 607*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4 608*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 609*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 610*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[J2]], i32** [[TMP54]], align 4 611*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 612*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP55]], align 4 613*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 614*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP56]], align 4 615*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 616*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 617*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 618*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP60:%.*]] = 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_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null) 619*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 620*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 621*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 622*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]] 623*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 624*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 625*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 626*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 627*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP63]], align 4 628*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 629*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 630*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP65]], align 4 631*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 632*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP66]], align 4 633*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 634*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 635*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null) 636*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 637*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 638*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed6: 639*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]] 640*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 641*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont7: 642*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 643*83ddfa0dSJoel E. Denny // 644*83ddfa0dSJoel E. Denny void explicit_maps_single(int ii) { 645*83ddfa0dSJoel E. Denny 646*83ddfa0dSJoel E. Denny // Map of a scalar. 647*83ddfa0dSJoel E. Denny int a = ii; 648*83ddfa0dSJoel E. Denny 649*83ddfa0dSJoel E. Denny struct ST st1; 650*83ddfa0dSJoel E. Denny struct ST st2; 651*83ddfa0dSJoel E. Denny 652*83ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 653*83ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 654*83ddfa0dSJoel E. Denny #pragma omp target map(tofrom : st1.i) \ 655*83ddfa0dSJoel E. Denny map(ompx_hold, tofrom : a, st1.j, st2.i) \ 656*83ddfa0dSJoel E. Denny map(tofrom : st2.j) 657*83ddfa0dSJoel E. Denny { 658*83ddfa0dSJoel E. Denny #ifdef USE 659*83ddfa0dSJoel E. Denny st1.i++; 660*83ddfa0dSJoel E. Denny a++; 661*83ddfa0dSJoel E. Denny st1.j++; 662*83ddfa0dSJoel E. Denny st2.i++; 663*83ddfa0dSJoel E. Denny st2.j++; 664*83ddfa0dSJoel E. Denny #endif 665*83ddfa0dSJoel E. Denny } 666*83ddfa0dSJoel E. Denny 667*83ddfa0dSJoel E. Denny // Always Close Hold. 668*83ddfa0dSJoel E. Denny #pragma omp target map(always close ompx_hold tofrom: a) 669*83ddfa0dSJoel E. Denny { 670*83ddfa0dSJoel E. Denny #ifdef USE 671*83ddfa0dSJoel E. Denny a++; 672*83ddfa0dSJoel E. Denny #endif 673*83ddfa0dSJoel E. Denny } 674*83ddfa0dSJoel E. Denny } 675*83ddfa0dSJoel E. Denny 676*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 677*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 678*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 679*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 680*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 681*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 682*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 683*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 684*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 685*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 686*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 687*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 688*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 689*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 690*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 691*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 692*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 693*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 694*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 695*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 696*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8 697*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 698*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 699*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP10]], align 8 700*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 701*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 8 702*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 703*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP12]], align 8 704*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 705*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 706*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8 707*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 708*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 709*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP16]], align 8 710*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 711*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP17]], align 8 712*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 713*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 714*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 715*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 716*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 717*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 718*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 719*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 720*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 721*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP23]], align 8 722*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 723*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP24]], align 8 724*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 725*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 726*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 727*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 728*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 729*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 730*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 731*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]] 732*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 733*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 734*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 735*83ddfa0dSJoel E. Denny // 736*83ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv( 737*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 738*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 739*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 740*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 741*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 742*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 743*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 744*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 745*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 746*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 747*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 748*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 749*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 750*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 751*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 752*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 753*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 754*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 755*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 756*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4 757*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 758*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 759*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP10]], align 4 760*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 761*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 4 762*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 763*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP12]], align 4 764*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 765*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 766*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4 767*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 768*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 769*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP16]], align 4 770*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 771*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP17]], align 4 772*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 773*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 774*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 775*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 776*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 777*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 778*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 779*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 780*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 781*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP23]], align 4 782*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 783*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP24]], align 4 784*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 785*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 786*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 787*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 788*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 789*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 790*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 791*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]] 792*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 793*83ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 794*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 795*83ddfa0dSJoel E. Denny // 796*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 797*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 798*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 799*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 800*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 801*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 802*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 803*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 804*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 805*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 806*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 807*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 808*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 809*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 810*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 811*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 812*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 813*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 814*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 815*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 816*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8 817*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 818*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 819*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP10]], align 8 820*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 821*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 8 822*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 823*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP12]], align 8 824*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 825*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 826*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8 827*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 828*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 829*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP16]], align 8 830*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 831*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP17]], align 8 832*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 833*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 834*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 835*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 836*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 837*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 838*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 839*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 840*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 841*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP23]], align 8 842*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 843*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP24]], align 8 844*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 845*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 846*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 847*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 848*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 849*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 850*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 851*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]] 852*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 853*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 854*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 855*83ddfa0dSJoel E. Denny // 856*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv( 857*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 858*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 859*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 860*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 861*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 862*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 863*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 864*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 865*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 866*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 867*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 868*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 869*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 870*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 871*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 872*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 873*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 874*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 875*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 876*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4 877*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 878*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 879*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP10]], align 4 880*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 881*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 4 882*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 883*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP12]], align 4 884*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 885*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 886*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4 887*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 888*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 889*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP16]], align 4 890*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 891*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP17]], align 4 892*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 893*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 894*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 895*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 896*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 897*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 898*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 899*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 900*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 901*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP23]], align 4 902*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 903*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP24]], align 4 904*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 905*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 906*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 907*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 908*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 909*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 910*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 911*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]] 912*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 913*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 914*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 915*83ddfa0dSJoel E. Denny // 916*83ddfa0dSJoel E. Denny void ST::test_present_members() { 917*83ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 918*83ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 919*83ddfa0dSJoel E. Denny #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j) 920*83ddfa0dSJoel E. Denny { 921*83ddfa0dSJoel E. Denny #ifdef USE 922*83ddfa0dSJoel E. Denny i++; 923*83ddfa0dSJoel E. Denny j++; 924*83ddfa0dSJoel E. Denny #endif 925*83ddfa0dSJoel E. Denny } 926*83ddfa0dSJoel E. Denny } 927*83ddfa0dSJoel E. Denny 928*83ddfa0dSJoel E. Denny #endif 929