1*ca6fa71bSAlexey Bataev // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*" 283ddfa0dSJoel E. Denny // expected-no-diagnostics 383ddfa0dSJoel E. Denny #ifndef HEADER 483ddfa0dSJoel E. Denny #define HEADER 583ddfa0dSJoel E. Denny 683ddfa0dSJoel E. Denny //-------------------------------------------------- 783ddfa0dSJoel E. Denny // With -DUSE. 883ddfa0dSJoel E. Denny //-------------------------------------------------- 983ddfa0dSJoel E. Denny 1083ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 1183ddfa0dSJoel E. Denny 1283ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \ 1383ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 1483ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 1583ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 1683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 1783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 1883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 1983ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 2083ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 2183ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 2283ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 2383ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE 2483ddfa0dSJoel E. Denny 2583ddfa0dSJoel E. Denny // i386-pc-linux-gnu 2683ddfa0dSJoel E. Denny 2783ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \ 2883ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 2983ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 3083ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 3183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 3283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 3383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 3483ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \ 3583ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 3683ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 3783ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 3883ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386 3983ddfa0dSJoel E. Denny 4083ddfa0dSJoel E. Denny //-------------------------------------------------- 4183ddfa0dSJoel E. Denny // Without -DUSE. 4283ddfa0dSJoel E. Denny //-------------------------------------------------- 4383ddfa0dSJoel E. Denny 4483ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu 4583ddfa0dSJoel E. Denny 4683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 4783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 4883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \ 4983ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 5083ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 5183ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \ 5283ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 5383ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 5483ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \ 5583ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \ 5683ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \ 5783ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE 5883ddfa0dSJoel E. Denny 5983ddfa0dSJoel E. Denny // i386-pc-linux-gnu 6083ddfa0dSJoel E. Denny 6183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \ 6283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 6383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \ 6483ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 6583ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 6683ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \ 6783ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s 6883ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \ 6983ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \ 7083ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \ 7183ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \ 7283ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386 7383ddfa0dSJoel E. Denny 7483ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below: 7583ddfa0dSJoel E. Denny // 7683ddfa0dSJoel E. Denny // TO = 0x1 7783ddfa0dSJoel E. Denny // FROM = 0x2 7883ddfa0dSJoel E. Denny // ALWAYS = 0x4 7983ddfa0dSJoel E. Denny // TARGET_PARAM = 0x20 8083ddfa0dSJoel E. Denny // CLOSE = 0x400 8183ddfa0dSJoel E. Denny // OMPX_HOLD = 0x2000 8283ddfa0dSJoel E. Denny // MEMBER_OF_1 = 0x1000000000000 8383ddfa0dSJoel E. Denny // MEMBER_OF_5 = 0x5000000000000 8483ddfa0dSJoel E. Denny 8583ddfa0dSJoel E. Denny //. 8683ddfa0dSJoel 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*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 88*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 89*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9083ddfa0dSJoel E. Denny //. 9183ddfa0dSJoel 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*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 93*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]] 94*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 9583ddfa0dSJoel E. Denny //. 9683ddfa0dSJoel 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 98*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 99*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 10083ddfa0dSJoel E. Denny //. 10183ddfa0dSJoel 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4] 103*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]] 104*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]] 10583ddfa0dSJoel E. Denny //. 10683ddfa0dSJoel E. Denny struct ST { 10783ddfa0dSJoel E. Denny int i; 10883ddfa0dSJoel E. Denny int j; 10983ddfa0dSJoel E. Denny void test_present_members(); 11083ddfa0dSJoel E. Denny }; 11183ddfa0dSJoel E. Denny 11283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 11383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 11483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 11583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 11683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 11783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 11883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 11983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 12083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 121*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 12283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 12383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 12483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 12583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 12683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 12783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 12883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 12983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 13083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 13183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 13283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 13383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 13483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 13583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 13683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 13783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 13883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 13983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 14083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 14183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 14283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 14383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 14483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 14583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 14683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 14783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 14883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8 14983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 15083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 15183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP18]], align 8 152*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 153*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 8 154*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 155*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP20]], align 8 156*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 157*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 158*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8 159*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 160*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 161*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP24]], align 8 162*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 163*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP25]], align 8 164*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 165*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 166*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 167*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 168*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 169*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 170*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 171*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 172*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 173*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP31]], align 8 174*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 175*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP32]], align 8 176*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 177*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 178*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP34]], align 8 179*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 180*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 181*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP36]], align 8 182*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 183*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP37]], align 8 184*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 185*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP38]], align 8 186*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 187*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 188*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8 189*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 190*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 191*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP42]], align 8 192*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 193*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 8 194*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 19583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP44]], align 8 196*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 19783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 19883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8 199*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 20083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 201*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP48]], align 8 202*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 203*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP49]], align 8 204*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 205*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP50]], align 8 206*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 207*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 208*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8 209*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 210*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 211*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP54]], align 8 212*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 213*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP55]], align 8 214*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 215*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP56]], align 8 216*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 217*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 218*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 219*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 221*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 22283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 223*ca6fa71bSAlexey Bataev // 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]+]] 22483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 22583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 226*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 227*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 228*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP63]], align 8 229*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 230*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 231*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP65]], align 8 232*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 233*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP66]], align 8 234*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 235*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 236*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 238*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 23983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed6: 240*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]] 24183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 24283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont7: 24383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 24483ddfa0dSJoel E. Denny // 24583ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei( 24683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 24783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 24883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 24983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 25083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 25183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 25283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 25383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 254*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 25583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 25683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 25783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 25883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 25983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 26083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 26183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 26283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 26383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 26483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 26583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 26683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 26783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 26883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 26983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 27083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 27183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 27283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 27383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 27483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 27583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 27683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 27783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 27883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 27983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 28083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 28183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4 28283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 28383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 28483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP18]], align 4 285*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 286*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 4 287*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 288*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP20]], align 4 289*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 290*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 291*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4 292*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 293*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 294*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP24]], align 4 295*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 296*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP25]], align 4 297*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 298*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 299*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 300*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 301*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 302*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 303*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 304*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 305*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 306*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP31]], align 4 307*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 308*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP32]], align 4 309*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 310*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 311*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP34]], align 4 312*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 313*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 314*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP36]], align 4 315*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 316*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP37]], align 4 317*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 318*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP38]], align 4 319*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 320*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 321*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4 322*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 323*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 324*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP42]], align 4 325*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 326*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 4 327*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 32883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP44]], align 4 329*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 33083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 33183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4 332*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 33383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 334*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP48]], align 4 335*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 336*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP49]], align 4 337*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 338*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP50]], align 4 339*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 340*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 341*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4 342*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 343*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 344*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J2]], i32** [[TMP54]], align 4 345*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 346*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP55]], align 4 347*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 348*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP56]], align 4 349*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 350*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 351*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 352*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 354*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 35583ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 356*ca6fa71bSAlexey Bataev // 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]+]] 35783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 35883ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 359*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 360*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 361*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP63]], align 4 362*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 363*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 364*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP65]], align 4 365*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 366*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP66]], align 4 367*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 368*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 369*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 371*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 37283ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed6: 373*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]] 37483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 37583ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont7: 37683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 37783ddfa0dSJoel E. Denny // 37883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei( 37983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 38083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 38183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4 38283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 38383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 38483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8 38583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8 38683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8 387*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8 38883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8 38983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8 39083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8 39183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 39283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 39383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 39483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 39583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 39683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 39783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 39883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 39983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 40083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 40183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 40283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 40383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 40483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 40583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 40683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 40783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 40883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 40983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 41083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 41183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 41283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 41383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 41483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8 41583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 41683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 41783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP18]], align 8 418*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 419*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 8 420*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 421*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP20]], align 8 422*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 423*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 424*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8 425*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 426*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 427*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP24]], align 8 428*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 429*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP25]], align 8 430*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 431*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8 432*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 433*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 434*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8 435*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 436*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 437*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8 438*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 439*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP31]], align 8 440*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 441*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP32]], align 8 442*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 443*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 444*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP34]], align 8 445*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 446*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 447*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP36]], align 8 448*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 449*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP37]], align 8 450*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3 451*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP38]], align 8 452*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 453*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 454*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8 455*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 456*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 457*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP42]], align 8 458*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 459*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 8 460*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4 46183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP44]], align 8 462*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 46383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 46483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8 465*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 46683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 467*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP48]], align 8 468*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 469*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP49]], align 8 470*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5 471*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP50]], align 8 472*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 473*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 474*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8 475*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 476*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 477*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP54]], align 8 478*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 479*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP55]], align 8 480*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6 481*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP56]], align 8 482*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 483*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 484*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 485*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 487*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 48883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 489*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]] 49083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 49183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 492*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 493*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 494*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP63]], align 8 495*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 496*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 497*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP65]], align 8 498*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0 499*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP66]], align 8 500*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 501*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 502*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 504*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 50583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed6: 506*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]] 50783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT7]] 50883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont7: 50983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 51083ddfa0dSJoel E. Denny // 51183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei( 51283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 51383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4 51483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[A:%.*]] = alloca i32, align 4 51583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4 51683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4 51783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4 51883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4 51983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4 520*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4 52183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4 52283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4 52383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4 52483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4 52583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4 52683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4 52783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0 52883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1 52983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1 53083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8* 53183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8* 53283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64 53383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64 53483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]] 53583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 53683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0 53783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1 53883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1 53983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8* 54083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8* 54183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64 54283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64 54383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]] 54483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 54583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 54683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST** 54783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4 54883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 54983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32** 55083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP18]], align 4 551*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 552*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP19]], align 4 553*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 554*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP20]], align 4 555*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 556*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST** 557*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4 558*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 559*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32** 560*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP24]], align 4 561*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 562*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP25]], align 4 563*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 564*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4 565*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 566*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST** 567*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4 568*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 569*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32** 570*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4 571*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 572*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP31]], align 4 573*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 574*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP32]], align 4 575*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3 576*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32** 577*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP34]], align 4 578*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3 579*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32** 580*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP36]], align 4 581*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3 582*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP37]], align 4 583*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3 584*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP38]], align 4 585*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4 586*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST** 587*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4 588*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4 589*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32** 590*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP42]], align 4 591*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4 592*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP43]], align 4 593*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4 59483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP44]], align 4 595*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5 59683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST** 59783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4 598*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5 59983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32** 600*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP48]], align 4 601*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5 602*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP49]], align 4 603*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5 604*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP50]], align 4 605*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6 606*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST** 607*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4 608*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6 609*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32** 610*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J2]], i32** [[TMP54]], align 4 611*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6 612*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP55]], align 4 613*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6 614*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP56]], align 4 615*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 616*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 617*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 618*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0 620*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 62183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 622*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]] 62383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 62483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 625*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 626*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32** 627*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP63]], align 4 628*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 629*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32** 630*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP65]], align 4 631*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0 632*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP66]], align 4 633*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0 634*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0 635*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0 637*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]] 63883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed6: 639*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]] 64083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT7]] 64183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont7: 64283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 64383ddfa0dSJoel E. Denny // 64483ddfa0dSJoel E. Denny void explicit_maps_single(int ii) { 64583ddfa0dSJoel E. Denny 64683ddfa0dSJoel E. Denny // Map of a scalar. 64783ddfa0dSJoel E. Denny int a = ii; 64883ddfa0dSJoel E. Denny 64983ddfa0dSJoel E. Denny struct ST st1; 65083ddfa0dSJoel E. Denny struct ST st2; 65183ddfa0dSJoel E. Denny 65283ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 65383ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 65483ddfa0dSJoel E. Denny #pragma omp target map(tofrom : st1.i) \ 65583ddfa0dSJoel E. Denny map(ompx_hold, tofrom : a, st1.j, st2.i) \ 65683ddfa0dSJoel E. Denny map(tofrom : st2.j) 65783ddfa0dSJoel E. Denny { 65883ddfa0dSJoel E. Denny #ifdef USE 65983ddfa0dSJoel E. Denny st1.i++; 66083ddfa0dSJoel E. Denny a++; 66183ddfa0dSJoel E. Denny st1.j++; 66283ddfa0dSJoel E. Denny st2.i++; 66383ddfa0dSJoel E. Denny st2.j++; 66483ddfa0dSJoel E. Denny #endif 66583ddfa0dSJoel E. Denny } 66683ddfa0dSJoel E. Denny 66783ddfa0dSJoel E. Denny // Always Close Hold. 66883ddfa0dSJoel E. Denny #pragma omp target map(always close ompx_hold tofrom: a) 66983ddfa0dSJoel E. Denny { 67083ddfa0dSJoel E. Denny #ifdef USE 67183ddfa0dSJoel E. Denny a++; 67283ddfa0dSJoel E. Denny #endif 67383ddfa0dSJoel E. Denny } 67483ddfa0dSJoel E. Denny } 67583ddfa0dSJoel E. Denny 67683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 67783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry: 67883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 67983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 68083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 68183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 682*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 68383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 68483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 68583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 68683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 68783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 68883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 68983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 69083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 69183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 69283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 69383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 69483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 69583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 69683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8 69783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 69883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 69983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP10]], align 8 700*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 701*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 8 702*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 703*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP12]], align 8 704*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 705*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 706*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8 707*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 708*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 709*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP16]], align 8 710*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 711*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP17]], align 8 712*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 713*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 714*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 715*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 716*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 717*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 718*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 719*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 720*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 721*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 4, i64* [[TMP23]], align 8 722*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 723*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP24]], align 8 724*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 725*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 726*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 727*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 729*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 73083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed: 731*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]] 73283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 73383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont: 73483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void 73583ddfa0dSJoel E. Denny // 73683ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv( 73783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry: 73883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 73983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 74083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 74183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 742*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 74383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 74483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 74583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 74683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 74783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 74883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 74983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 75083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 75183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 75283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 75383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 75483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 75583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 75683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4 75783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 75883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 75983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP10]], align 4 760*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 761*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 4 762*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 763*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP12]], align 4 764*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 765*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 766*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4 767*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 768*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 769*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP16]], align 4 770*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 771*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP17]], align 4 772*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 773*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 774*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 775*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 776*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 777*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 778*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 779*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 780*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 781*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i64 4, i64* [[TMP23]], align 4 782*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 783*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP24]], align 4 784*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 785*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 786*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 787*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 789*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 79083ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed: 791*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]] 79283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 79383ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont: 79483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void 79583ddfa0dSJoel E. Denny // 79683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv( 79783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry: 79883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8 79983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8 80083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8 80183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8 802*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8 80383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8 80483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8 80583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 80683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 80783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 80883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 80983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 81083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 81183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 81283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 81383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 81483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 81583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 81683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8 81783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 81883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 81983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP10]], align 8 820*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 821*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 8 822*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0 823*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP12]], align 8 824*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 825*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 826*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8 827*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 828*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 829*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP16]], align 8 830*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 831*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP17]], align 8 832*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1 833*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8 834*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 835*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 836*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8 837*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 838*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 839*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8 840*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 841*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 4, i64* [[TMP23]], align 8 842*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2 843*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP24]], align 8 844*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 845*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 846*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 847*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 849*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 85083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed: 851*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]] 85283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]] 85383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont: 85483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void 85583ddfa0dSJoel E. Denny // 85683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv( 85783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry: 85883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4 85983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4 86083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4 86183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4 862*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4 86383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4 86483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4 86583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0 86683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1 86783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1 86883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8* 86983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8* 87083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64 87183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64 87283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]] 87383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64) 87483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 87583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST** 87683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4 87783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 87883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32** 87983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP10]], align 4 880*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 881*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP11]], align 4 882*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0 883*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP12]], align 4 884*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1 885*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST** 886*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4 887*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1 888*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32** 889*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP16]], align 4 890*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1 891*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP17]], align 4 892*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1 893*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4 894*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2 895*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST** 896*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4 897*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2 898*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32** 899*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4 900*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2 901*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 4, i64* [[TMP23]], align 4 902*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2 903*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP24]], align 4 904*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0 905*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0 906*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0 907*ca6fa71bSAlexey Bataev // 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*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0 909*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]] 91083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed: 911*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]] 91283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]] 91383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont: 91483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void 91583ddfa0dSJoel E. Denny // 91683ddfa0dSJoel E. Denny void ST::test_present_members() { 91783ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the 91883ddfa0dSJoel E. Denny // struct doesn't have ompx_hold. 91983ddfa0dSJoel E. Denny #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j) 92083ddfa0dSJoel E. Denny { 92183ddfa0dSJoel E. Denny #ifdef USE 92283ddfa0dSJoel E. Denny i++; 92383ddfa0dSJoel E. Denny j++; 92483ddfa0dSJoel E. Denny #endif 92583ddfa0dSJoel E. Denny } 92683ddfa0dSJoel E. Denny } 92783ddfa0dSJoel E. Denny 92883ddfa0dSJoel E. Denny #endif 929