1*83ddfa0dSJoel E. Denny // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --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 // powerpc64le-ibm-linux-gnu 7*83ddfa0dSJoel E. Denny 8*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 9*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 10*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 11*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-PPC64LE 12*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 13*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 14*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 15*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 16*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 17*83ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 18*83ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 19*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-PPC64LE 20*83ddfa0dSJoel E. Denny 21*83ddfa0dSJoel E. Denny // i386-pc-linux-gnu 22*83ddfa0dSJoel E. Denny 23*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 24*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 25*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 26*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-I386 27*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 28*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 29*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 30*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 31*83ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 32*83ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 33*83ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 34*83ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-I386 35*83ddfa0dSJoel E. Denny 36*83ddfa0dSJoel E. Denny struct S1 { 37*83ddfa0dSJoel E. Denny int i; 38*83ddfa0dSJoel E. Denny }; 39*83ddfa0dSJoel E. Denny struct S2 { 40*83ddfa0dSJoel E. Denny S1 s; 41*83ddfa0dSJoel E. Denny struct S2 *ps; 42*83ddfa0dSJoel E. Denny }; 43*83ddfa0dSJoel E. Denny 44*83ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below: 45*83ddfa0dSJoel E. Denny // 46*83ddfa0dSJoel E. Denny // TO = 0x1 47*83ddfa0dSJoel E. Denny // FROM = 0x2 48*83ddfa0dSJoel E. Denny // ALWAYS = 0x4 49*83ddfa0dSJoel E. Denny // PTR_AND_OBJ = 0x10 50*83ddfa0dSJoel E. Denny // CLOSE = 0x400 51*83ddfa0dSJoel E. Denny // OMPX_HOLD = 0x2000 52*83ddfa0dSJoel E. Denny // MEMBER_OF_1 = 0x1000000000000 53*83ddfa0dSJoel E. Denny // MEMBER_OF_7 = 0x7000000000000 54*83ddfa0dSJoel E. Denny 55*83ddfa0dSJoel E. Denny //. 56*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 20] 57*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 [[#0x2001]]] 58*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 20] 59*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2405]]] 60*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [1 x i64] [i64 4] 61*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [1 x i64] [i64 [[#0x2003]]] 62*83ddfa0dSJoel E. Denny // CHECK-PPC64LE: @.offload_maptypes.5 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]] 63*83ddfa0dSJoel E. Denny //. 64*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 20] 65*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 [[#0x2001]]] 66*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 20] 67*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2405]]] 68*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_sizes.3 = private unnamed_addr constant [1 x i64] [i64 4] 69*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_maptypes.4 = private unnamed_addr constant [1 x i64] [i64 [[#0x2003]]] 70*83ddfa0dSJoel E. Denny // CHECK-I386: @.offload_maptypes.5 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]] 71*83ddfa0dSJoel E. Denny //. 72*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-LABEL: @_Z3fooi( 73*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: entry: 74*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 4 75*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[LB:%.*]] = alloca [5 x float], align 4 76*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS1:%.*]] = alloca %struct.S2*, align 8 77*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS2:%.*]] = alloca %struct.S2*, align 8 78*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x i8*], align 8 79*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x i8*], align 8 80*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x i8*], align 8 81*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x i8*], align 8 82*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x i8*], align 8 83*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x i8*], align 8 84*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS5:%.*]] = alloca [1 x i8*], align 8 85*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS6:%.*]] = alloca [1 x i8*], align 8 86*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS7:%.*]] = alloca [1 x i8*], align 8 87*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS29:%.*]] = alloca [11 x i8*], align 8 88*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS30:%.*]] = alloca [11 x i8*], align 8 89*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS31:%.*]] = alloca [11 x i8*], align 8 90*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [11 x i64], align 8 91*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32 [[ARG:%.*]], i32* [[ARG_ADDR]], align 4 92*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 93*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i8** [[TMP0]] to [5 x float]** 94*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP1]], align 8 95*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 96*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i8** [[TMP2]] to [5 x float]** 97*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP3]], align 8 98*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 99*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP4]], align 8 100*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 101*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 102*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 1, i8** [[TMP5]], i8** [[TMP6]], 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, i32 0, i32 0), i8** null, i8** null) 103*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP7:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 104*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[INC:%.*]] = add nsw i32 [[TMP7]], 1 105*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32 [[INC]], i32* [[ARG_ADDR]], align 4 106*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 107*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP9:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 108*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP8]], i8** [[TMP9]], 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, i32 0, i32 0), i8** null, i8** null) 109*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 110*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to [5 x float]** 111*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP11]], align 8 112*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 113*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to [5 x float]** 114*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP13]], align 8 115*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0 116*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP14]], align 8 117*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 118*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 119*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP15]], i8** [[TMP16]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 120*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP17:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 121*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[INC4:%.*]] = add nsw i32 [[TMP17]], 1 122*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32 [[INC4]], i32* [[ARG_ADDR]], align 4 123*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 124*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 125*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP18]], i8** [[TMP19]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 126*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 127*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32** 128*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP21]], align 8 129*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 130*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32** 131*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP23]], align 8 132*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS7]], i64 0, i64 0 133*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP24]], align 8 134*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 135*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 136*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP25]], i8** [[TMP26]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.3, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 137*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP27:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 138*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[INC8:%.*]] = add nsw i32 [[TMP27]], 1 139*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32 [[INC8]], i32* [[ARG_ADDR]], align 4 140*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP28:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 141*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 142*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.3, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 143*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP30:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 144*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP31:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 145*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[S:%.*]] = getelementptr inbounds [[STRUCT_S2:%.*]], %struct.S2* [[TMP31]], i32 0, i32 0 146*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP32:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 147*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP33:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 148*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP33]], i32 0, i32 1 149*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP34:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 150*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS9:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP34]], i32 0, i32 1 151*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP35:%.*]] = load %struct.S2*, %struct.S2** [[PS9]], align 8 152*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS10:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP35]], i32 0, i32 1 153*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP36:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 154*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS11:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP36]], i32 0, i32 1 155*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP37:%.*]] = load %struct.S2*, %struct.S2** [[PS11]], align 8 156*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS12:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP37]], i32 0, i32 1 157*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP38:%.*]] = load %struct.S2*, %struct.S2** [[PS12]], align 8 158*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS13:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP38]], i32 0, i32 1 159*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP39:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 8 160*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS14:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP39]], i32 0, i32 1 161*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP40:%.*]] = load %struct.S2*, %struct.S2** [[PS14]], align 8 162*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS15:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP40]], i32 0, i32 1 163*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP41:%.*]] = load %struct.S2*, %struct.S2** [[PS15]], align 8 164*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS16:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP41]], i32 0, i32 1 165*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP42:%.*]] = load %struct.S2*, %struct.S2** [[PS16]], align 8 166*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[S17:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP42]], i32 0, i32 0 167*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr %struct.S2*, %struct.S2** [[PS]], i32 1 168*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast %struct.S1* [[S]] to i8* 169*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP45:%.*]] = bitcast %struct.S2** [[TMP43]] to i8* 170*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP46:%.*]] = ptrtoint i8* [[TMP45]] to i64 171*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP47:%.*]] = ptrtoint i8* [[TMP44]] to i64 172*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP48:%.*]] = sub i64 [[TMP46]], [[TMP47]] 173*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP49:%.*]] = sdiv exact i64 [[TMP48]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 174*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP50:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 175*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP51:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 176*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[S18:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP51]], i32 0, i32 0 177*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP52:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 178*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP53:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 179*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS19:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP53]], i32 0, i32 1 180*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP54:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 181*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS20:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP54]], i32 0, i32 1 182*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP55:%.*]] = load %struct.S2*, %struct.S2** [[PS20]], align 8 183*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS21:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP55]], i32 0, i32 1 184*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP56:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 185*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS22:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP56]], i32 0, i32 1 186*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP57:%.*]] = load %struct.S2*, %struct.S2** [[PS22]], align 8 187*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS23:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP57]], i32 0, i32 1 188*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP58:%.*]] = load %struct.S2*, %struct.S2** [[PS23]], align 8 189*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS24:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP58]], i32 0, i32 1 190*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP59:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 8 191*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS25:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP59]], i32 0, i32 1 192*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP60:%.*]] = load %struct.S2*, %struct.S2** [[PS25]], align 8 193*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS26:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP60]], i32 0, i32 1 194*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP61:%.*]] = load %struct.S2*, %struct.S2** [[PS26]], align 8 195*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[PS27:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP61]], i32 0, i32 1 196*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP62:%.*]] = load %struct.S2*, %struct.S2** [[PS27]], align 8 197*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[S28:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP62]], i32 0, i32 0 198*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP63:%.*]] = getelementptr %struct.S2*, %struct.S2** [[PS19]], i32 1 199*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP64:%.*]] = bitcast %struct.S1* [[S18]] to i8* 200*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP65:%.*]] = bitcast %struct.S2** [[TMP63]] to i8* 201*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP66:%.*]] = ptrtoint i8* [[TMP65]] to i64 202*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP67:%.*]] = ptrtoint i8* [[TMP64]] to i64 203*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP68:%.*]] = sub i64 [[TMP66]], [[TMP67]] 204*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP69:%.*]] = sdiv exact i64 [[TMP68]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 205*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP70:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 206*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP71:%.*]] = bitcast i8** [[TMP70]] to %struct.S2** 207*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP71]], align 8 208*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP72:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 209*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP73:%.*]] = bitcast i8** [[TMP72]] to %struct.S1** 210*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP73]], align 8 211*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 212*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 [[TMP49]], i64* [[TMP74]], align 8 213*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 0 214*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP75]], align 8 215*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP76:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1 216*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP77:%.*]] = bitcast i8** [[TMP76]] to %struct.S2** 217*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP77]], align 8 218*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP78:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1 219*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP79:%.*]] = bitcast i8** [[TMP78]] to %struct.S1** 220*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP79]], align 8 221*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 222*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP80]], align 8 223*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP81:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 1 224*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP81]], align 8 225*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2 226*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP83:%.*]] = bitcast i8** [[TMP82]] to %struct.S2*** 227*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP83]], align 8 228*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2 229*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP85:%.*]] = bitcast i8** [[TMP84]] to %struct.S2*** 230*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP85]], align 8 231*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP86:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 232*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP86]], align 8 233*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 2 234*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP87]], align 8 235*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP88:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3 236*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP89:%.*]] = bitcast i8** [[TMP88]] to %struct.S2*** 237*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP89]], align 8 238*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3 239*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP91:%.*]] = bitcast i8** [[TMP90]] to %struct.S2*** 240*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP91]], align 8 241*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 242*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP92]], align 8 243*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP93:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 3 244*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP93]], align 8 245*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4 246*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP95:%.*]] = bitcast i8** [[TMP94]] to %struct.S2*** 247*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP95]], align 8 248*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP96:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4 249*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP97:%.*]] = bitcast i8** [[TMP96]] to %struct.S1** 250*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP97]], align 8 251*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP98:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 252*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP98]], align 8 253*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 4 254*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP99]], align 8 255*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5 256*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to i32** 257*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP101]], align 8 258*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5 259*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to i32** 260*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP103]], align 8 261*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 262*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP104]], align 8 263*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 5 264*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP105]], align 8 265*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP106:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6 266*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP107:%.*]] = bitcast i8** [[TMP106]] to %struct.S2** 267*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP107]], align 8 268*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP108:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6 269*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP109:%.*]] = bitcast i8** [[TMP108]] to %struct.S1** 270*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP109]], align 8 271*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 272*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 [[TMP69]], i64* [[TMP110]], align 8 273*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP111:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 6 274*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP111]], align 8 275*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7 276*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2** 277*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP113]], align 8 278*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7 279*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP115:%.*]] = bitcast i8** [[TMP114]] to %struct.S1** 280*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP115]], align 8 281*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP116:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 7 282*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP116]], align 8 283*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 7 284*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP117]], align 8 285*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP118:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8 286*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP119:%.*]] = bitcast i8** [[TMP118]] to %struct.S2*** 287*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP119]], align 8 288*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8 289*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP121:%.*]] = bitcast i8** [[TMP120]] to %struct.S2*** 290*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP121]], align 8 291*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 8 292*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP122]], align 8 293*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP123:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 8 294*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP123]], align 8 295*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9 296*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP125:%.*]] = bitcast i8** [[TMP124]] to %struct.S2*** 297*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP125]], align 8 298*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9 299*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP127:%.*]] = bitcast i8** [[TMP126]] to %struct.S2*** 300*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP127]], align 8 301*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 9 302*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP128]], align 8 303*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 9 304*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP129]], align 8 305*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP130:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10 306*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP131:%.*]] = bitcast i8** [[TMP130]] to %struct.S2*** 307*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP131]], align 8 308*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP132:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10 309*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP133:%.*]] = bitcast i8** [[TMP132]] to %struct.S1** 310*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP133]], align 8 311*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP134:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 10 312*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP134]], align 8 313*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP135:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 10 314*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP135]], align 8 315*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP136:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 316*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP137:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 317*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP138:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 318*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP136]], i8** [[TMP137]], i64* [[TMP138]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null) 319*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP139:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 320*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP139]], 1 321*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: store i32 [[INC32]], i32* [[ARG_ADDR]], align 4 322*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP140:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 323*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP141:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 324*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: [[TMP142:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 325*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP140]], i8** [[TMP141]], i64* [[TMP142]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null) 326*83ddfa0dSJoel E. Denny // CHECK-PPC64LE-NEXT: ret void 327*83ddfa0dSJoel E. Denny // 328*83ddfa0dSJoel E. Denny // CHECK-I386-LABEL: @_Z3fooi( 329*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: entry: 330*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 4 331*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[LB:%.*]] = alloca [5 x float], align 4 332*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS1:%.*]] = alloca %struct.S2*, align 4 333*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS2:%.*]] = alloca %struct.S2*, align 4 334*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x i8*], align 4 335*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x i8*], align 4 336*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x i8*], align 4 337*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x i8*], align 4 338*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x i8*], align 4 339*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x i8*], align 4 340*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_BASEPTRS5:%.*]] = alloca [1 x i8*], align 4 341*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_PTRS6:%.*]] = alloca [1 x i8*], align 4 342*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_MAPPERS7:%.*]] = alloca [1 x i8*], align 4 343*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_BASEPTRS29:%.*]] = alloca [11 x i8*], align 4 344*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_PTRS30:%.*]] = alloca [11 x i8*], align 4 345*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_MAPPERS31:%.*]] = alloca [11 x i8*], align 4 346*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [11 x i64], align 4 347*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32 [[ARG:%.*]], i32* [[ARG_ADDR]], align 4 348*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 349*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP1:%.*]] = bitcast i8** [[TMP0]] to [5 x float]** 350*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP1]], align 4 351*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 352*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP3:%.*]] = bitcast i8** [[TMP2]] to [5 x float]** 353*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP3]], align 4 354*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 355*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP4]], align 4 356*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 357*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 358*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 1, i8** [[TMP5]], i8** [[TMP6]], 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, i32 0, i32 0), i8** null, i8** null) 359*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP7:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 360*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[INC:%.*]] = add nsw i32 [[TMP7]], 1 361*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32 [[INC]], i32* [[ARG_ADDR]], align 4 362*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 363*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP9:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 364*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP8]], i8** [[TMP9]], 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, i32 0, i32 0), i8** null, i8** null) 365*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 366*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to [5 x float]** 367*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP11]], align 4 368*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 369*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to [5 x float]** 370*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store [5 x float]* [[LB]], [5 x float]** [[TMP13]], align 4 371*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0 372*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP14]], align 4 373*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 374*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 375*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP15]], i8** [[TMP16]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 376*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP17:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 377*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[INC4:%.*]] = add nsw i32 [[TMP17]], 1 378*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32 [[INC4]], i32* [[ARG_ADDR]], align 4 379*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0 380*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS2]], i32 0, i32 0 381*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP18]], i8** [[TMP19]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null) 382*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 383*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32** 384*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP21]], align 4 385*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 386*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32** 387*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP23]], align 4 388*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS7]], i32 0, i32 0 389*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP24]], align 4 390*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 391*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 392*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP25]], i8** [[TMP26]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.3, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 393*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP27:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 394*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[INC8:%.*]] = add nsw i32 [[TMP27]], 1 395*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32 [[INC8]], i32* [[ARG_ADDR]], align 4 396*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP28:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0 397*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS6]], i32 0, i32 0 398*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 1, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.3, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null) 399*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP30:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 400*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP31:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 401*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[S:%.*]] = getelementptr inbounds [[STRUCT_S2:%.*]], %struct.S2* [[TMP31]], i32 0, i32 0 402*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP32:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 403*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP33:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 404*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP33]], i32 0, i32 1 405*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP34:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 406*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS9:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP34]], i32 0, i32 1 407*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP35:%.*]] = load %struct.S2*, %struct.S2** [[PS9]], align 4 408*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS10:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP35]], i32 0, i32 1 409*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP36:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 410*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS11:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP36]], i32 0, i32 1 411*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP37:%.*]] = load %struct.S2*, %struct.S2** [[PS11]], align 4 412*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS12:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP37]], i32 0, i32 1 413*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP38:%.*]] = load %struct.S2*, %struct.S2** [[PS12]], align 4 414*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS13:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP38]], i32 0, i32 1 415*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP39:%.*]] = load %struct.S2*, %struct.S2** [[PS1]], align 4 416*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS14:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP39]], i32 0, i32 1 417*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP40:%.*]] = load %struct.S2*, %struct.S2** [[PS14]], align 4 418*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS15:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP40]], i32 0, i32 1 419*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP41:%.*]] = load %struct.S2*, %struct.S2** [[PS15]], align 4 420*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS16:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP41]], i32 0, i32 1 421*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP42:%.*]] = load %struct.S2*, %struct.S2** [[PS16]], align 4 422*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[S17:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP42]], i32 0, i32 0 423*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP43:%.*]] = getelementptr %struct.S2*, %struct.S2** [[PS]], i32 1 424*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP44:%.*]] = bitcast %struct.S1* [[S]] to i8* 425*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP45:%.*]] = bitcast %struct.S2** [[TMP43]] to i8* 426*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP46:%.*]] = ptrtoint i8* [[TMP45]] to i64 427*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP47:%.*]] = ptrtoint i8* [[TMP44]] to i64 428*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP48:%.*]] = sub i64 [[TMP46]], [[TMP47]] 429*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP49:%.*]] = sdiv exact i64 [[TMP48]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 430*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP50:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 431*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP51:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 432*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[S18:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP51]], i32 0, i32 0 433*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP52:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 434*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP53:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 435*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS19:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP53]], i32 0, i32 1 436*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP54:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 437*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS20:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP54]], i32 0, i32 1 438*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP55:%.*]] = load %struct.S2*, %struct.S2** [[PS20]], align 4 439*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS21:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP55]], i32 0, i32 1 440*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP56:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 441*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS22:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP56]], i32 0, i32 1 442*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP57:%.*]] = load %struct.S2*, %struct.S2** [[PS22]], align 4 443*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS23:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP57]], i32 0, i32 1 444*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP58:%.*]] = load %struct.S2*, %struct.S2** [[PS23]], align 4 445*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS24:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP58]], i32 0, i32 1 446*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP59:%.*]] = load %struct.S2*, %struct.S2** [[PS2]], align 4 447*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS25:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP59]], i32 0, i32 1 448*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP60:%.*]] = load %struct.S2*, %struct.S2** [[PS25]], align 4 449*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS26:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP60]], i32 0, i32 1 450*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP61:%.*]] = load %struct.S2*, %struct.S2** [[PS26]], align 4 451*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[PS27:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP61]], i32 0, i32 1 452*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP62:%.*]] = load %struct.S2*, %struct.S2** [[PS27]], align 4 453*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[S28:%.*]] = getelementptr inbounds [[STRUCT_S2]], %struct.S2* [[TMP62]], i32 0, i32 0 454*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP63:%.*]] = getelementptr %struct.S2*, %struct.S2** [[PS19]], i32 1 455*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP64:%.*]] = bitcast %struct.S1* [[S18]] to i8* 456*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP65:%.*]] = bitcast %struct.S2** [[TMP63]] to i8* 457*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP66:%.*]] = ptrtoint i8* [[TMP65]] to i64 458*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP67:%.*]] = ptrtoint i8* [[TMP64]] to i64 459*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP68:%.*]] = sub i64 [[TMP66]], [[TMP67]] 460*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP69:%.*]] = sdiv exact i64 [[TMP68]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 461*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP70:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 462*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP71:%.*]] = bitcast i8** [[TMP70]] to %struct.S2** 463*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP71]], align 4 464*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP72:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 465*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP73:%.*]] = bitcast i8** [[TMP72]] to %struct.S1** 466*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP73]], align 4 467*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 468*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 [[TMP49]], i64* [[TMP74]], align 4 469*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 0 470*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP75]], align 4 471*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP76:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1 472*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP77:%.*]] = bitcast i8** [[TMP76]] to %struct.S2** 473*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP77]], align 4 474*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP78:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1 475*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP79:%.*]] = bitcast i8** [[TMP78]] to %struct.S1** 476*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP79]], align 4 477*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 478*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP80]], align 4 479*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP81:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 1 480*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP81]], align 4 481*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2 482*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP83:%.*]] = bitcast i8** [[TMP82]] to %struct.S2*** 483*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP83]], align 4 484*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2 485*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP85:%.*]] = bitcast i8** [[TMP84]] to %struct.S2*** 486*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP85]], align 4 487*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP86:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 488*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP86]], align 4 489*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 2 490*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP87]], align 4 491*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP88:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3 492*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP89:%.*]] = bitcast i8** [[TMP88]] to %struct.S2*** 493*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP89]], align 4 494*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3 495*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP91:%.*]] = bitcast i8** [[TMP90]] to %struct.S2*** 496*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP91]], align 4 497*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 498*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP92]], align 4 499*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP93:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 3 500*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP93]], align 4 501*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4 502*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP95:%.*]] = bitcast i8** [[TMP94]] to %struct.S2*** 503*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP95]], align 4 504*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP96:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4 505*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP97:%.*]] = bitcast i8** [[TMP96]] to %struct.S1** 506*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP97]], align 4 507*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP98:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 508*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP98]], align 4 509*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 4 510*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP99]], align 4 511*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5 512*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to i32** 513*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP101]], align 4 514*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5 515*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to i32** 516*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP103]], align 4 517*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 518*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP104]], align 4 519*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 5 520*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP105]], align 4 521*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP106:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6 522*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP107:%.*]] = bitcast i8** [[TMP106]] to %struct.S2** 523*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP107]], align 4 524*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP108:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6 525*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP109:%.*]] = bitcast i8** [[TMP108]] to %struct.S1** 526*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP109]], align 4 527*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 528*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 [[TMP69]], i64* [[TMP110]], align 4 529*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP111:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 6 530*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP111]], align 4 531*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7 532*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2** 533*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP113]], align 4 534*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7 535*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP115:%.*]] = bitcast i8** [[TMP114]] to %struct.S1** 536*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP115]], align 4 537*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP116:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 7 538*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP116]], align 4 539*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 7 540*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP117]], align 4 541*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP118:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8 542*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP119:%.*]] = bitcast i8** [[TMP118]] to %struct.S2*** 543*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP119]], align 4 544*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8 545*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP121:%.*]] = bitcast i8** [[TMP120]] to %struct.S2*** 546*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP121]], align 4 547*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 8 548*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP122]], align 4 549*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP123:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 8 550*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP123]], align 4 551*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9 552*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP125:%.*]] = bitcast i8** [[TMP124]] to %struct.S2*** 553*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP125]], align 4 554*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9 555*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP127:%.*]] = bitcast i8** [[TMP126]] to %struct.S2*** 556*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP127]], align 4 557*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 9 558*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP128]], align 4 559*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 9 560*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP129]], align 4 561*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP130:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10 562*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP131:%.*]] = bitcast i8** [[TMP130]] to %struct.S2*** 563*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP131]], align 4 564*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP132:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10 565*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP133:%.*]] = bitcast i8** [[TMP132]] to %struct.S1** 566*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP133]], align 4 567*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP134:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 10 568*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i64 4, i64* [[TMP134]], align 4 569*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP135:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 10 570*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i8* null, i8** [[TMP135]], align 4 571*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP136:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 572*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP137:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 573*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP138:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 574*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP136]], i8** [[TMP137]], i64* [[TMP138]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null) 575*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP139:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 576*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP139]], 1 577*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: store i32 [[INC32]], i32* [[ARG_ADDR]], align 4 578*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP140:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0 579*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP141:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0 580*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: [[TMP142:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 581*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP140]], i8** [[TMP141]], i64* [[TMP142]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null) 582*83ddfa0dSJoel E. Denny // CHECK-I386-NEXT: ret void 583*83ddfa0dSJoel E. Denny // 584*83ddfa0dSJoel E. Denny void foo(int arg) { 585*83ddfa0dSJoel E. Denny float lb[5]; 586*83ddfa0dSJoel E. Denny S2 *ps1; 587*83ddfa0dSJoel E. Denny S2 *ps2; 588*83ddfa0dSJoel E. Denny 589*83ddfa0dSJoel E. Denny #pragma omp target data map(ompx_hold, to: lb) 590*83ddfa0dSJoel E. Denny {++arg;} 591*83ddfa0dSJoel E. Denny 592*83ddfa0dSJoel E. Denny #pragma omp target data map(always close ompx_hold, to: lb) 593*83ddfa0dSJoel E. Denny {++arg;} 594*83ddfa0dSJoel E. Denny 595*83ddfa0dSJoel E. Denny #pragma omp target data map(ompx_hold, tofrom : arg) 596*83ddfa0dSJoel E. Denny {++arg;} 597*83ddfa0dSJoel E. Denny 598*83ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 599*83ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 600*83ddfa0dSJoel E. Denny #pragma omp target data map(tofrom : ps1->s, arg) \ 601*83ddfa0dSJoel E. Denny map(ompx_hold, tofrom : ps1->ps->ps->ps->s, ps2->s) \ 602*83ddfa0dSJoel E. Denny map(tofrom : ps2->ps->ps->ps->s) 603*83ddfa0dSJoel E. Denny { 604*83ddfa0dSJoel E. Denny ++(arg); 605*83ddfa0dSJoel E. Denny } 606*83ddfa0dSJoel E. Denny } 607*83ddfa0dSJoel E. Denny 608*83ddfa0dSJoel E. Denny #endif 609