forked from OSchip/llvm-project
[OPENMP]Fix PR50347: Mapping of global scope deep object fails.
Changed the we handle llvm::Constants in sizes arrays. ConstExprs and GlobalValues cannot be used as initializers, need to put them at the runtime, otherwise there wight be the compilation errors. Differential Revision: https://reviews.llvm.org/D105297
This commit is contained in:
parent
140c13d318
commit
638938117a
|
@ -29,6 +29,7 @@
|
|||
#include "clang/CodeGen/ConstantInitBuilder.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/SetOperations.h"
|
||||
#include "llvm/ADT/SmallBitVector.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/Bitcode/BitcodeReader.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
|
@ -9602,12 +9603,6 @@ static void emitOffloadingArrays(
|
|||
if (Info.NumberOfPtrs) {
|
||||
// Detect if we have any capture size requiring runtime evaluation of the
|
||||
// size so that a constant array could be eventually used.
|
||||
bool hasRuntimeEvaluationCaptureSize = false;
|
||||
for (llvm::Value *S : CombinedInfo.Sizes)
|
||||
if (!isa<llvm::Constant>(S)) {
|
||||
hasRuntimeEvaluationCaptureSize = true;
|
||||
break;
|
||||
}
|
||||
|
||||
llvm::APInt PointerNumAP(32, Info.NumberOfPtrs, /*isSigned=*/true);
|
||||
QualType PointerArrayType = Ctx.getConstantArrayType(
|
||||
|
@ -9627,33 +9622,37 @@ static void emitOffloadingArrays(
|
|||
// need to fill up the arrays as we do for the pointers.
|
||||
QualType Int64Ty =
|
||||
Ctx.getIntTypeForBitwidth(/*DestWidth=*/64, /*Signed=*/1);
|
||||
if (hasRuntimeEvaluationCaptureSize) {
|
||||
SmallVector<llvm::Constant *> ConstSizes;
|
||||
llvm::SmallBitVector RuntimeSizes(CombinedInfo.Sizes.size());
|
||||
for (unsigned I = 0, E = CombinedInfo.Sizes.size(); I < E; ++I) {
|
||||
if (IsNonContiguous &&
|
||||
(CombinedInfo.Types[I] & MappableExprsHandler::OMP_MAP_NON_CONTIG)) {
|
||||
ConstSizes.push_back(llvm::ConstantInt::get(
|
||||
CGF.Int64Ty, CombinedInfo.NonContigInfo.Dims[I]));
|
||||
} else {
|
||||
if (auto *CI = dyn_cast<llvm::Constant>(CombinedInfo.Sizes[I]))
|
||||
if (!isa<llvm::ConstantExpr>(CI) && !isa<llvm::GlobalValue>(CI)) {
|
||||
ConstSizes.push_back(cast<llvm::Constant>(CombinedInfo.Sizes[I]));
|
||||
continue;
|
||||
}
|
||||
ConstSizes.push_back(llvm::ConstantInt::get(CGF.Int64Ty, 0));
|
||||
RuntimeSizes.set(I);
|
||||
}
|
||||
}
|
||||
|
||||
if (RuntimeSizes.all()) {
|
||||
QualType SizeArrayType = Ctx.getConstantArrayType(
|
||||
Int64Ty, PointerNumAP, nullptr, ArrayType::Normal,
|
||||
/*IndexTypeQuals=*/0);
|
||||
Info.SizesArray =
|
||||
CGF.CreateMemTemp(SizeArrayType, ".offload_sizes").getPointer();
|
||||
} else {
|
||||
// We expect all the sizes to be constant, so we collect them to create
|
||||
// a constant array.
|
||||
SmallVector<llvm::Constant *, 16> ConstSizes;
|
||||
for (unsigned I = 0, E = CombinedInfo.Sizes.size(); I < E; ++I) {
|
||||
if (IsNonContiguous &&
|
||||
(CombinedInfo.Types[I] & MappableExprsHandler::OMP_MAP_NON_CONTIG)) {
|
||||
ConstSizes.push_back(llvm::ConstantInt::get(
|
||||
CGF.Int64Ty, CombinedInfo.NonContigInfo.Dims[I]));
|
||||
} else {
|
||||
ConstSizes.push_back(cast<llvm::Constant>(CombinedInfo.Sizes[I]));
|
||||
}
|
||||
}
|
||||
|
||||
auto *SizesArrayInit = llvm::ConstantArray::get(
|
||||
llvm::ArrayType::get(CGM.Int64Ty, ConstSizes.size()), ConstSizes);
|
||||
std::string Name = CGM.getOpenMPRuntime().getName({"offload_sizes"});
|
||||
auto *SizesArrayGbl = new llvm::GlobalVariable(
|
||||
CGM.getModule(), SizesArrayInit->getType(),
|
||||
/*isConstant=*/true, llvm::GlobalValue::PrivateLinkage,
|
||||
SizesArrayInit, Name);
|
||||
CGM.getModule(), SizesArrayInit->getType(), !RuntimeSizes.any(),
|
||||
llvm::GlobalValue::PrivateLinkage, SizesArrayInit, Name);
|
||||
SizesArrayGbl->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
|
||||
Info.SizesArray = SizesArrayGbl;
|
||||
}
|
||||
|
@ -9729,7 +9728,7 @@ static void emitOffloadingArrays(
|
|||
Address::deprecated(P, Ctx.getTypeAlignInChars(Ctx.VoidPtrTy));
|
||||
CGF.Builder.CreateStore(PVal, PAddr);
|
||||
|
||||
if (hasRuntimeEvaluationCaptureSize) {
|
||||
if (RuntimeSizes.test(I)) {
|
||||
llvm::Value *S = CGF.Builder.CreateConstInBoundsGEP2_32(
|
||||
llvm::ArrayType::get(CGM.Int64Ty, Info.NumberOfPtrs),
|
||||
Info.SizesArray,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -76,11 +76,13 @@
|
|||
// CHECK-DAG: [[MAPT2:@.+]] = private unnamed_addr constant [1 x i64] [i64 800]
|
||||
// CHECK-DAG: [[SIZET3:@.+]] = private unnamed_addr constant [2 x i64] [i64 4, i64 2]
|
||||
// CHECK-DAG: [[MAPT3:@.+]] = private unnamed_addr constant [2 x i64] [i64 800, i64 800]
|
||||
// CHECK-DAG: [[SIZET4:@.+]] = private unnamed_addr global [9 x i64] [i64 4, i64 40, i64 {{4|8}}, i64 0, i64 400, i64 {{4|8}}, i64 {{4|8}}, i64 0, i64 {{12|16}}]
|
||||
// CHECK-DAG: [[MAPT4:@.+]] = private unnamed_addr constant [9 x i64] [i64 800, i64 547, i64 800, i64 547, i64 547, i64 800, i64 800, i64 547, i64 547]
|
||||
// CHECK-DAG: [[SIZET5:@.+]] = private unnamed_addr constant [3 x i64] [i64 4, i64 2, i64 40]
|
||||
// CHECK-DAG: [[MAPT5:@.+]] = private unnamed_addr constant [3 x i64] [i64 800, i64 800, i64 547]
|
||||
// CHECK-DAG: [[SIZET6:@.+]] = private unnamed_addr constant [4 x i64] [i64 4, i64 2, i64 1, i64 40]
|
||||
// CHECK-DAG: [[MAPT6:@.+]] = private unnamed_addr constant [4 x i64] [i64 800, i64 800, i64 800, i64 547]
|
||||
// CHECK-DAG: [[SIZET7:@.+]] = private unnamed_addr global [5 x i64] [i64 8, i64 4, i64 {{4|8}}, i64 {{4|8}}, i64 0]
|
||||
// CHECK-DAG: [[MAPT7:@.+]] = private unnamed_addr constant [5 x i64] [i64 547, i64 800, i64 800, i64 800, i64 547]
|
||||
// CHECK-DAG: [[SIZET9:@.+]] = private unnamed_addr constant [1 x i64] [i64 12]
|
||||
// CHECK-DAG: [[MAPT10:@.+]] = private unnamed_addr constant [1 x i64] [i64 35]
|
||||
|
@ -272,37 +274,27 @@ int foo(int n) {
|
|||
// CHECK-32: [[CNSZSIZE:%.+]] = mul nuw i32 [[CNELEMSIZE2]], 8
|
||||
// CHECK-32: [[CNSIZE:%.+]] = sext i32 [[CNSZSIZE]] to i64
|
||||
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 9, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SR:%[^,]+]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 9, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 0), i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-DAG: [[BPR]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP:%[^,]+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[PR]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P:%[^,]+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[SR]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CHECK-DAG: [[SADDR0:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX0:0]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX0:0]]
|
||||
// CHECK-DAG: [[PADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[SADDR1:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX1:1]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX1:1]]
|
||||
// CHECK-DAG: [[PADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[SADDR2:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX2:2]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX2:2]]
|
||||
// CHECK-DAG: [[PADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[SADDR3:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX3:3]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX3:3]]
|
||||
// CHECK-DAG: [[PADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[SADDR4:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX4:4]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX4]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX4:4]]
|
||||
// CHECK-DAG: [[PADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX4]]
|
||||
// CHECK-DAG: [[SADDR5:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX5:5]]
|
||||
// CHECK-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX5]]
|
||||
// CHECK-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX5:5]]
|
||||
// CHECK-DAG: [[PADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX5]]
|
||||
// CHECK-DAG: [[SADDR6:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX6:6]]
|
||||
// CHECK-DAG: [[BPADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX6]]
|
||||
// CHECK-DAG: [[BPADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX6:6]]
|
||||
// CHECK-DAG: [[PADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX6]]
|
||||
// CHECK-DAG: [[SADDR7:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX7:7]]
|
||||
// CHECK-DAG: [[BPADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX7]]
|
||||
// CHECK-DAG: [[BPADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX7:7]]
|
||||
// CHECK-DAG: [[PADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX7]]
|
||||
// CHECK-DAG: [[SADDR8:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX8:8]]
|
||||
// CHECK-DAG: [[BPADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX8]]
|
||||
// CHECK-DAG: [[BPADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX8:8]]
|
||||
// CHECK-DAG: [[PADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX8]]
|
||||
|
||||
// The names below are not necessarily consistent with the names used for the
|
||||
|
@ -311,55 +303,48 @@ int foo(int n) {
|
|||
// CHECK-DAG: [[CPADDR2:%.+]] = bitcast i8** [[PADDR2]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA0]], i[[SZ]]* [[CBPADDR2]]
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA0]], i[[SZ]]* [[CPADDR2]]
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* [[SADDR2]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR6:%.+]] = bitcast i8** [[BPADDR6]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR6:%.+]] = bitcast i8** [[PADDR6]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA1]], i[[SZ]]* [[CBPADDR6]]
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA1]], i[[SZ]]* [[CPADDR6]]
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* [[SADDR6]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR5:%.+]] = bitcast i8** [[BPADDR5]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR5:%.+]] = bitcast i8** [[PADDR5]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] 5, i[[SZ]]* [[CBPADDR5]]
|
||||
// CHECK-DAG: store i[[SZ]] 5, i[[SZ]]* [[CPADDR5]]
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* [[SADDR5]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR0:%.+]] = bitcast i8** [[BPADDR0]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR0:%.+]] = bitcast i8** [[PADDR0]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] [[A_CVAL]], i[[SZ]]* [[CBPADDR0]]
|
||||
// CHECK-DAG: store i[[SZ]] [[A_CVAL]], i[[SZ]]* [[CPADDR0]]
|
||||
// CHECK-DAG: store i64 4, i64* [[SADDR0]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR1:%.+]] = bitcast i8** [[BPADDR1]] to [10 x float]**
|
||||
// CHECK-DAG: [[CPADDR1:%.+]] = bitcast i8** [[PADDR1]] to [10 x float]**
|
||||
// CHECK-DAG: store [10 x float]* %{{.+}}, [10 x float]** [[CBPADDR1]]
|
||||
// CHECK-DAG: store [10 x float]* %{{.+}}, [10 x float]** [[CPADDR1]]
|
||||
// CHECK-DAG: store i64 40, i64* [[SADDR1]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR3:%.+]] = bitcast i8** [[BPADDR3]] to float**
|
||||
// CHECK-DAG: [[CPADDR3:%.+]] = bitcast i8** [[PADDR3]] to float**
|
||||
// CHECK-DAG: store float* %{{.+}}, float** [[CBPADDR3]]
|
||||
// CHECK-DAG: store float* %{{.+}}, float** [[CPADDR3]]
|
||||
// CHECK-DAG: store i64 [[BNSIZE]], i64* [[SADDR3]]
|
||||
// CHECK-DAG: store i64 [[BNSIZE]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 [[IDX3]])
|
||||
|
||||
// CHECK-DAG: [[CBPADDR4:%.+]] = bitcast i8** [[BPADDR4]] to [5 x [10 x double]]**
|
||||
// CHECK-DAG: [[CPADDR4:%.+]] = bitcast i8** [[PADDR4]] to [5 x [10 x double]]**
|
||||
// CHECK-DAG: store [5 x [10 x double]]* %{{.+}}, [5 x [10 x double]]** [[CBPADDR4]]
|
||||
// CHECK-DAG: store [5 x [10 x double]]* %{{.+}}, [5 x [10 x double]]** [[CPADDR4]]
|
||||
// CHECK-DAG: store i64 400, i64* [[SADDR4]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR7:%.+]] = bitcast i8** [[BPADDR7]] to double**
|
||||
// CHECK-DAG: [[CPADDR7:%.+]] = bitcast i8** [[PADDR7]] to double**
|
||||
// CHECK-DAG: store double* %{{.+}}, double** [[CBPADDR7]]
|
||||
// CHECK-DAG: store double* %{{.+}}, double** [[CPADDR7]]
|
||||
// CHECK-DAG: store i64 [[CNSIZE]], i64* [[SADDR7]]
|
||||
// CHECK-DAG: store i64 [[CNSIZE]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 [[IDX7]])
|
||||
|
||||
// CHECK-DAG: [[CBPADDR8:%.+]] = bitcast i8** [[BPADDR8]] to [[TT]]**
|
||||
// CHECK-DAG: [[CPADDR8:%.+]] = bitcast i8** [[PADDR8]] to [[TT]]**
|
||||
// CHECK-DAG: store [[TT]]* %{{.+}}, [[TT]]** [[CBPADDR8]]
|
||||
// CHECK-DAG: store [[TT]]* %{{.+}}, [[TT]]** [[CPADDR8]]
|
||||
// CHECK-DAG: store i64 {{12|16}}, i64* [[SADDR8]]
|
||||
|
||||
// CHECK: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0
|
||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:.+]], label %[[END:[^,]+]]
|
||||
|
@ -580,24 +565,18 @@ int bar(int n){
|
|||
// CHECK-32: [[CSZSIZE:%.+]] = mul nuw i32 [[CELEMSIZE2]], 2
|
||||
// CHECK-32: [[CSIZE:%.+]] = sext i32 [[CSZSIZE]] to i64
|
||||
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 5, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SR:%[^,]+]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 5, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZET7]], i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-DAG: [[BPR]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP:%.+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[PR]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[SR]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S:%.+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[SADDR0:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 0, i32 [[IDX0:0]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX0:0]]
|
||||
// CHECK-DAG: [[PADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[SADDR1:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 0, i32 [[IDX1:1]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX1:1]]
|
||||
// CHECK-DAG: [[PADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[SADDR2:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 0, i32 [[IDX2:2]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX2:2]]
|
||||
// CHECK-DAG: [[PADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[SADDR3:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 0, i32 [[IDX3:3]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX3:3]]
|
||||
// CHECK-DAG: [[PADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[SADDR4:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 0, i32 [[IDX4:4]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX4]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 0, i32 [[IDX4:4]]
|
||||
// CHECK-DAG: [[PADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 0, i32 [[IDX4]]
|
||||
|
||||
// The names below are not necessarily consistent with the names used for the
|
||||
|
@ -606,31 +585,27 @@ int bar(int n){
|
|||
// CHECK-DAG: [[CPADDR4:%.+]] = bitcast i8** [[PADDR4]] to i16**
|
||||
// CHECK-DAG: store i16* %{{.+}}, i16** [[CBPADDR4]]
|
||||
// CHECK-DAG: store i16* %{{.+}}, i16** [[CPADDR4]]
|
||||
// CHECK-DAG: store i64 [[CSIZE]], i64* [[SADDR4]]
|
||||
// CHECK-DAG: store i64 [[CSIZE]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZET7]], i32 0, i32 [[IDX4]])
|
||||
|
||||
// CHECK-DAG: [[CBPADDR3:%.+]] = bitcast i8** [[BPADDR3]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR3:%.+]] = bitcast i8** [[PADDR3]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA0]], i[[SZ]]* [[CBPADDR3]]
|
||||
// CHECK-DAG: store i[[SZ]] [[VLA0]], i[[SZ]]* [[CPADDR3]]
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* [[SADDR3]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR2:%.+]] = bitcast i8** [[BPADDR2]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR2:%.+]] = bitcast i8** [[PADDR2]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] 2, i[[SZ]]* [[CBPADDR2]]
|
||||
// CHECK-DAG: store i[[SZ]] 2, i[[SZ]]* [[CPADDR2]]
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* [[SADDR2]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR1:%.+]] = bitcast i8** [[BPADDR1]] to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR1:%.+]] = bitcast i8** [[PADDR1]] to i[[SZ]]*
|
||||
// CHECK-DAG: store i[[SZ]] [[B_CVAL]], i[[SZ]]* [[CBPADDR1]]
|
||||
// CHECK-DAG: store i[[SZ]] [[B_CVAL]], i[[SZ]]* [[CPADDR1]]
|
||||
// CHECK-DAG: store i64 4, i64* [[SADDR1]]
|
||||
|
||||
// CHECK-DAG: [[CBPADDR0:%.+]] = bitcast i8** [[BPADDR0]] to [[S1]]**
|
||||
// CHECK-DAG: [[CPADDR0:%.+]] = bitcast i8** [[PADDR0]] to double**
|
||||
// CHECK-DAG: store [[S1]]* [[THIS:%.+]], [[S1]]** [[CBPADDR0]]
|
||||
// CHECK-DAG: store double* [[A:%.+]], double** [[CPADDR0]]
|
||||
// CHECK-DAG: store i64 8, i64* [[SADDR0]]
|
||||
|
||||
// CHECK: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0
|
||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:.+]], label %[[END:[^,]+]]
|
||||
|
|
|
@ -37,7 +37,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 5]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK1: [[MTYPE05:@.+]] = {{.+}}constant [1 x i64] [i64 1025]
|
||||
|
@ -150,6 +150,7 @@ void foo(int arg) {
|
|||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]]
|
||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]]
|
||||
// CK1-DAG: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
|
||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -357,6 +358,7 @@ struct ST {
|
|||
}
|
||||
};
|
||||
|
||||
// CK2: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710677]
|
||||
|
||||
// CK2-LABEL: _Z3bari
|
||||
|
@ -368,31 +370,27 @@ int bar(int arg){
|
|||
// Region 00
|
||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK2: [[IFTHEN]]
|
||||
// CK2-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK2-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]]
|
||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]]
|
||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]]
|
||||
|
||||
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK2-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK2-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK2-DAG: store double** [[SEC0:%.+]], double*** [[CP0]]
|
||||
// CK2-DAG: store i[[sz]] {{%.+}}, i[[sz]]* [[S0]]
|
||||
// CK2-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK2-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double**
|
||||
// CK2-DAG: store double** [[SEC0]], double*** [[CBP1]]
|
||||
// CK2-DAG: store double* [[SEC1:%.+]], double** [[CP1]]
|
||||
// CK2-DAG: store i[[sz]] 24, i[[sz]]* [[S1]]
|
||||
// CK2-DAG: [[SEC1]] = getelementptr inbounds {{.*}}double* [[SEC11:%[^,]+]], i{{.+}} 1
|
||||
// CK2-DAG: [[SEC11]] = load double*, double** [[SEC111:%[^,]+]],
|
||||
// CK2-DAG: [[SEC111]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
|
||||
|
@ -406,12 +404,11 @@ int bar(int arg){
|
|||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
|
||||
// CK2: [[IFTHEN]]
|
||||
// CK2-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK2-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]]
|
||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]]
|
||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]]
|
||||
// CK2: br label %[[IFEND:[^,]+]]
|
||||
// CK2: [[IFELSE]]
|
||||
// CK2: br label %[[IFEND]]
|
||||
|
@ -475,6 +472,7 @@ struct STT {
|
|||
}
|
||||
};
|
||||
|
||||
// CK4: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK4: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976711701]
|
||||
|
||||
// CK4-LABEL: _Z3bari
|
||||
|
@ -486,31 +484,27 @@ int bar(int arg){
|
|||
// Region 00
|
||||
// CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK4: [[IFTHEN]]
|
||||
// CK4-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK4-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK4-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]]
|
||||
// CK4-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]]
|
||||
// CK4-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]]
|
||||
|
||||
// CK4-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]**
|
||||
// CK4-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK4-DAG: store [[STT]]* [[VAR0:%.+]], [[STT]]** [[CBP0]]
|
||||
// CK4-DAG: store double** [[SEC0:%.+]], double*** [[CP0]]
|
||||
// CK4-DAG: store i[[sz]] {{%.+}}, i[[sz]]* [[S0]]
|
||||
// CK4-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK4-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK4-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK4-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK4-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK4-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double**
|
||||
// CK4-DAG: store double** [[SEC0]], double*** [[CBP1]]
|
||||
// CK4-DAG: store double* [[SEC1:%.+]], double** [[CP1]]
|
||||
// CK4-DAG: store i[[sz]] 24, i[[sz]]* [[S1]]
|
||||
// CK4-DAG: [[SEC1]] = getelementptr inbounds {{.*}}double* [[SEC11:%[^,]+]], i{{.+}} 1
|
||||
// CK4-DAG: [[SEC11]] = load double*, double** [[SEC111:%[^,]+]],
|
||||
// CK4-DAG: [[SEC111]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1
|
||||
|
@ -524,12 +518,11 @@ int bar(int arg){
|
|||
// CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
|
||||
// CK4: [[IFTHEN]]
|
||||
// CK4-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK4-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK4-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]]
|
||||
// CK4-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]]
|
||||
// CK4-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]]
|
||||
// CK4: br label %[[IFEND:[^,]+]]
|
||||
// CK4: [[IFELSE]]
|
||||
// CK4: br label %[[IFEND]]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*"
|
||||
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --prefix-filecheck-ir-name _ --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*"
|
||||
// expected-no-diagnostics
|
||||
#ifndef HEADER
|
||||
#define HEADER
|
||||
|
@ -59,7 +59,8 @@ struct S2 {
|
|||
// CHECK-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2405]]]
|
||||
// CHECK-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [1 x i64] [i64 4]
|
||||
// CHECK-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [1 x i64] [i64 [[#0x2003]]]
|
||||
// CHECK-PPC64LE: @.offload_maptypes.5 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]]
|
||||
// CHECK-PPC64LE: @.offload_sizes.5 = private unnamed_addr global [11 x i64] [i64 0, i64 4, i64 8, i64 8, i64 4, i64 4, i64 0, i64 4, i64 8, i64 8, i64 4]
|
||||
// CHECK-PPC64LE: @.offload_maptypes.6 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]]
|
||||
//.
|
||||
// CHECK-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 20]
|
||||
// CHECK-I386: @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 [[#0x2001]]]
|
||||
|
@ -67,7 +68,8 @@ struct S2 {
|
|||
// CHECK-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2405]]]
|
||||
// CHECK-I386: @.offload_sizes.3 = private unnamed_addr constant [1 x i64] [i64 4]
|
||||
// CHECK-I386: @.offload_maptypes.4 = private unnamed_addr constant [1 x i64] [i64 [[#0x2003]]]
|
||||
// CHECK-I386: @.offload_maptypes.5 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]]
|
||||
// CHECK-I386: @.offload_sizes.5 = private unnamed_addr global [11 x i64] [i64 0, i64 4, i64 4, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4, i64 4, i64 4]
|
||||
// CHECK-I386: @.offload_maptypes.6 = private unnamed_addr constant [11 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002010]], i64 [[#0x2010]], i64 [[#0x2013]], i64 [[#0x3]], i64 [[#0x2000]], i64 [[#0x7000000002003]], i64 [[#0x7000000002010]], i64 [[#0x2010]], i64 [[#0x2013]]]
|
||||
//.
|
||||
// CHECK-PPC64LE-LABEL: @_Z3fooi(
|
||||
// CHECK-PPC64LE-NEXT: entry:
|
||||
|
@ -87,7 +89,6 @@ struct S2 {
|
|||
// CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS29:%.*]] = alloca [11 x i8*], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS30:%.*]] = alloca [11 x i8*], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS31:%.*]] = alloca [11 x i8*], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [11 x i64], align 8
|
||||
// CHECK-PPC64LE-NEXT: store i32 [[ARG:%.*]], i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i8** [[TMP0]] to [5 x float]**
|
||||
|
@ -208,121 +209,99 @@ struct S2 {
|
|||
// CHECK-PPC64LE-NEXT: [[TMP72:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP73:%.*]] = bitcast i8** [[TMP72]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP73]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: store i64 [[TMP49]], i64* [[TMP74]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 0
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP75]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP76:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1
|
||||
// CHECK-PPC64LE-NEXT: [[TMP77:%.*]] = bitcast i8** [[TMP76]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP77]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP78:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1
|
||||
// CHECK-PPC64LE-NEXT: [[TMP79:%.*]] = bitcast i8** [[TMP78]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP79]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP80]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP81:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 1
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP81]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2
|
||||
// CHECK-PPC64LE-NEXT: store i64 [[TMP49]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 0
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP74]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1
|
||||
// CHECK-PPC64LE-NEXT: [[TMP76:%.*]] = bitcast i8** [[TMP75]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP76]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP77:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1
|
||||
// CHECK-PPC64LE-NEXT: [[TMP78:%.*]] = bitcast i8** [[TMP77]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP78]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP79:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 1
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP79]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2
|
||||
// CHECK-PPC64LE-NEXT: [[TMP81:%.*]] = bitcast i8** [[TMP80]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP81]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2
|
||||
// CHECK-PPC64LE-NEXT: [[TMP83:%.*]] = bitcast i8** [[TMP82]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP83]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2
|
||||
// CHECK-PPC64LE-NEXT: [[TMP85:%.*]] = bitcast i8** [[TMP84]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP85]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP86:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP86]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 2
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP87]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP88:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3
|
||||
// CHECK-PPC64LE-NEXT: [[TMP89:%.*]] = bitcast i8** [[TMP88]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP89]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP83]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 2
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP84]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP85:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3
|
||||
// CHECK-PPC64LE-NEXT: [[TMP86:%.*]] = bitcast i8** [[TMP85]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP86]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3
|
||||
// CHECK-PPC64LE-NEXT: [[TMP88:%.*]] = bitcast i8** [[TMP87]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP88]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP89:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 3
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP89]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP91:%.*]] = bitcast i8** [[TMP90]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP91]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP92]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP93:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 3
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP93]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP95:%.*]] = bitcast i8** [[TMP94]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP95]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP96:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP97:%.*]] = bitcast i8** [[TMP96]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP97]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP98:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP98]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP93:%.*]] = bitcast i8** [[TMP92]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP93]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 4
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP94]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP95:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5
|
||||
// CHECK-PPC64LE-NEXT: [[TMP96:%.*]] = bitcast i8** [[TMP95]] to i32**
|
||||
// CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP96]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP97:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5
|
||||
// CHECK-PPC64LE-NEXT: [[TMP98:%.*]] = bitcast i8** [[TMP97]] to i32**
|
||||
// CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP98]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 5
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP99]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5
|
||||
// CHECK-PPC64LE-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to i32**
|
||||
// CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP101]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5
|
||||
// CHECK-PPC64LE-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to i32**
|
||||
// CHECK-PPC64LE-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP103]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
|
||||
// CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP104]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 5
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP105]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP106:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6
|
||||
// CHECK-PPC64LE-NEXT: [[TMP107:%.*]] = bitcast i8** [[TMP106]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP107]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP108:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6
|
||||
// CHECK-PPC64LE-NEXT: [[TMP109:%.*]] = bitcast i8** [[TMP108]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP109]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
|
||||
// CHECK-PPC64LE-NEXT: store i64 [[TMP69]], i64* [[TMP110]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP111:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 6
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP111]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7
|
||||
// CHECK-PPC64LE-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP113]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7
|
||||
// CHECK-PPC64LE-NEXT: [[TMP115:%.*]] = bitcast i8** [[TMP114]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP115]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP116:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 7
|
||||
// CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP116]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 7
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP117]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP118:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP119:%.*]] = bitcast i8** [[TMP118]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP119]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6
|
||||
// CHECK-PPC64LE-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP101]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6
|
||||
// CHECK-PPC64LE-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP103]], align 8
|
||||
// CHECK-PPC64LE-NEXT: store i64 [[TMP69]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 6), align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 6
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP104]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7
|
||||
// CHECK-PPC64LE-NEXT: [[TMP106:%.*]] = bitcast i8** [[TMP105]] to %struct.S2**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP106]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP107:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7
|
||||
// CHECK-PPC64LE-NEXT: [[TMP108:%.*]] = bitcast i8** [[TMP107]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP108]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP109:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 7
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP109]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP111:%.*]] = bitcast i8** [[TMP110]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP111]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP113]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 8
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP114]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP115:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9
|
||||
// CHECK-PPC64LE-NEXT: [[TMP116:%.*]] = bitcast i8** [[TMP115]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP116]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9
|
||||
// CHECK-PPC64LE-NEXT: [[TMP118:%.*]] = bitcast i8** [[TMP117]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP118]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP119:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 9
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP119]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10
|
||||
// CHECK-PPC64LE-NEXT: [[TMP121:%.*]] = bitcast i8** [[TMP120]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP121]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 8
|
||||
// CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP122]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP123:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 8
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP123]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9
|
||||
// CHECK-PPC64LE-NEXT: [[TMP125:%.*]] = bitcast i8** [[TMP124]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP125]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9
|
||||
// CHECK-PPC64LE-NEXT: [[TMP127:%.*]] = bitcast i8** [[TMP126]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP127]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 9
|
||||
// CHECK-PPC64LE-NEXT: store i64 8, i64* [[TMP128]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 9
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP129]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP130:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10
|
||||
// CHECK-PPC64LE-NEXT: [[TMP131:%.*]] = bitcast i8** [[TMP130]] to %struct.S2***
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP131]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP132:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10
|
||||
// CHECK-PPC64LE-NEXT: [[TMP133:%.*]] = bitcast i8** [[TMP132]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP133]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP134:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 10
|
||||
// CHECK-PPC64LE-NEXT: store i64 4, i64* [[TMP134]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP135:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 10
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP135]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP136:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP137:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP138:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP136]], i8** [[TMP137]], i64* [[TMP138]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-PPC64LE-NEXT: [[TMP139:%.*]] = load i32, i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-PPC64LE-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP139]], 1
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP121]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10
|
||||
// CHECK-PPC64LE-NEXT: [[TMP123:%.*]] = bitcast i8** [[TMP122]] to %struct.S1**
|
||||
// CHECK-PPC64LE-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP123]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i64 0, i64 10
|
||||
// CHECK-PPC64LE-NEXT: store i8* null, i8** [[TMP124]], align 8
|
||||
// CHECK-PPC64LE-NEXT: [[TMP125:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP125]], i8** [[TMP126]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.6, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-PPC64LE-NEXT: [[TMP127:%.*]] = load i32, i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-PPC64LE-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP127]], 1
|
||||
// CHECK-PPC64LE-NEXT: store i32 [[INC32]], i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-PPC64LE-NEXT: [[TMP140:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP141:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP142:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP140]], i8** [[TMP141]], i64* [[TMP142]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-PPC64LE-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-PPC64LE-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP128]], i8** [[TMP129]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.6, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-PPC64LE-NEXT: ret void
|
||||
//
|
||||
// CHECK-I386-LABEL: @_Z3fooi(
|
||||
|
@ -343,7 +322,6 @@ struct S2 {
|
|||
// CHECK-I386-NEXT: [[DOTOFFLOAD_BASEPTRS29:%.*]] = alloca [11 x i8*], align 4
|
||||
// CHECK-I386-NEXT: [[DOTOFFLOAD_PTRS30:%.*]] = alloca [11 x i8*], align 4
|
||||
// CHECK-I386-NEXT: [[DOTOFFLOAD_MAPPERS31:%.*]] = alloca [11 x i8*], align 4
|
||||
// CHECK-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [11 x i64], align 4
|
||||
// CHECK-I386-NEXT: store i32 [[ARG:%.*]], i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP1:%.*]] = bitcast i8** [[TMP0]] to [5 x float]**
|
||||
|
@ -464,121 +442,99 @@ struct S2 {
|
|||
// CHECK-I386-NEXT: [[TMP72:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP73:%.*]] = bitcast i8** [[TMP72]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP73]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: store i64 [[TMP49]], i64* [[TMP74]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP75]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP76:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: [[TMP77:%.*]] = bitcast i8** [[TMP76]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP77]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP78:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: [[TMP79:%.*]] = bitcast i8** [[TMP78]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP79]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP80]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP81:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP81]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: store i64 [[TMP49]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), align 4
|
||||
// CHECK-I386-NEXT: [[TMP74:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP74]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP75:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: [[TMP76:%.*]] = bitcast i8** [[TMP75]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP30]], %struct.S2** [[TMP76]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP77:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: [[TMP78:%.*]] = bitcast i8** [[TMP77]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S]], %struct.S1** [[TMP78]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP79:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 1
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP79]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP80:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: [[TMP81:%.*]] = bitcast i8** [[TMP80]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP81]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP82:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: [[TMP83:%.*]] = bitcast i8** [[TMP82]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS]], %struct.S2*** [[TMP83]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: [[TMP85:%.*]] = bitcast i8** [[TMP84]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP85]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP86:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP86]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP87]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP88:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: [[TMP89:%.*]] = bitcast i8** [[TMP88]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP89]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP83]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP84:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 2
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP84]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP85:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: [[TMP86:%.*]] = bitcast i8** [[TMP85]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS10]], %struct.S2*** [[TMP86]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP87:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: [[TMP88:%.*]] = bitcast i8** [[TMP87]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP88]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP89:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP89]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP90:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: [[TMP91:%.*]] = bitcast i8** [[TMP90]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP91]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP92]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP93:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 3
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP93]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: [[TMP95:%.*]] = bitcast i8** [[TMP94]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS13]], %struct.S2*** [[TMP95]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP96:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: [[TMP97:%.*]] = bitcast i8** [[TMP96]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP97]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP98:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP98]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: [[TMP92:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: [[TMP93:%.*]] = bitcast i8** [[TMP92]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S17]], %struct.S1** [[TMP93]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP94:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 4
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP94]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP95:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: [[TMP96:%.*]] = bitcast i8** [[TMP95]] to i32**
|
||||
// CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP96]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP97:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: [[TMP98:%.*]] = bitcast i8** [[TMP97]] to i32**
|
||||
// CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP98]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP99:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP99]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to i32**
|
||||
// CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP101]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to i32**
|
||||
// CHECK-I386-NEXT: store i32* [[ARG_ADDR]], i32** [[TMP103]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP104]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 5
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP105]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP106:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: [[TMP107:%.*]] = bitcast i8** [[TMP106]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP107]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP108:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: [[TMP109:%.*]] = bitcast i8** [[TMP108]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP109]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: store i64 [[TMP69]], i64* [[TMP110]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP111:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP111]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP113]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: [[TMP115:%.*]] = bitcast i8** [[TMP114]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP115]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP116:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP116]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP117]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP118:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: [[TMP119:%.*]] = bitcast i8** [[TMP118]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP119]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: [[TMP100:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: [[TMP101:%.*]] = bitcast i8** [[TMP100]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP101]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP102:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: [[TMP103:%.*]] = bitcast i8** [[TMP102]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP103]], align 4
|
||||
// CHECK-I386-NEXT: store i64 [[TMP69]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 6), align 4
|
||||
// CHECK-I386-NEXT: [[TMP104:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 6
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP104]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP105:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: [[TMP106:%.*]] = bitcast i8** [[TMP105]] to %struct.S2**
|
||||
// CHECK-I386-NEXT: store %struct.S2* [[TMP50]], %struct.S2** [[TMP106]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP107:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: [[TMP108:%.*]] = bitcast i8** [[TMP107]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S18]], %struct.S1** [[TMP108]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP109:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 7
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP109]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP110:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: [[TMP111:%.*]] = bitcast i8** [[TMP110]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS19]], %struct.S2*** [[TMP111]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP112:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: [[TMP113:%.*]] = bitcast i8** [[TMP112]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP113]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP114:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP114]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP115:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: [[TMP116:%.*]] = bitcast i8** [[TMP115]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP116]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP117:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: [[TMP118:%.*]] = bitcast i8** [[TMP117]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP118]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP119:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP119]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP120:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: [[TMP121:%.*]] = bitcast i8** [[TMP120]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP121]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP122]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP123:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 8
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP123]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: [[TMP125:%.*]] = bitcast i8** [[TMP124]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS21]], %struct.S2*** [[TMP125]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: [[TMP127:%.*]] = bitcast i8** [[TMP126]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP127]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP128]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 9
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP129]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP130:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: [[TMP131:%.*]] = bitcast i8** [[TMP130]] to %struct.S2***
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP131]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP132:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: [[TMP133:%.*]] = bitcast i8** [[TMP132]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP133]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP134:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: store i64 4, i64* [[TMP134]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP135:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP135]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP136:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP137:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP138:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP136]], i8** [[TMP137]], i64* [[TMP138]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-I386-NEXT: [[TMP139:%.*]] = load i32, i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-I386-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP139]], 1
|
||||
// CHECK-I386-NEXT: store %struct.S2** [[PS24]], %struct.S2*** [[TMP121]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP122:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: [[TMP123:%.*]] = bitcast i8** [[TMP122]] to %struct.S1**
|
||||
// CHECK-I386-NEXT: store %struct.S1* [[S28]], %struct.S1** [[TMP123]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP124:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_MAPPERS31]], i32 0, i32 10
|
||||
// CHECK-I386-NEXT: store i8* null, i8** [[TMP124]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP125:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP126:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP125]], i8** [[TMP126]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.6, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-I386-NEXT: [[TMP127:%.*]] = load i32, i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-I386-NEXT: [[INC32:%.*]] = add nsw i32 [[TMP127]], 1
|
||||
// CHECK-I386-NEXT: store i32 [[INC32]], i32* [[ARG_ADDR]], align 4
|
||||
// CHECK-I386-NEXT: [[TMP140:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP141:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP142:%.*]] = getelementptr inbounds [11 x i64], [11 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP140]], i8** [[TMP141]], i64* [[TMP142]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-I386-NEXT: [[TMP128:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_BASEPTRS29]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: [[TMP129:%.*]] = getelementptr inbounds [11 x i8*], [11 x i8*]* [[DOTOFFLOAD_PTRS30]], i32 0, i32 0
|
||||
// CHECK-I386-NEXT: call void @__tgt_target_data_end_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i32 11, i8** [[TMP128]], i8** [[TMP129]], i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_sizes.5, i32 0, i32 0), i64* getelementptr inbounds ([11 x i64], [11 x i64]* @.offload_maptypes.6, i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK-I386-NEXT: ret void
|
||||
//
|
||||
void foo(int arg) {
|
||||
|
|
|
@ -35,6 +35,7 @@ MyObject *objects;
|
|||
|
||||
// CHECK-DAG: [[SIZES0:@.+]] = private unnamed_addr constant [1 x i64] [i64 {{8|4}}]
|
||||
// CHECK-DAG: [[MAPS0:@.+]] = private unnamed_addr constant [1 x i64] [i64 17]
|
||||
// CHECK-DAG: [[SIZES1:@.+]] = private unnamed_addr global [2 x i64] [i64 0, i64 4]
|
||||
// CHECK-DAG: [[MAPS1:@.+]] = private unnamed_addr constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
// CHECK: @main
|
||||
int main(void) {
|
||||
|
@ -47,7 +48,7 @@ int main(void) {
|
|||
// CHECK: [[BPTR0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* %{{.+}}, i32 0, i32 0
|
||||
// CHECK: [[BPTRC0:%.+]] = bitcast i8** [[BPTR0]] to %struct.MyObject**
|
||||
// CHECK: store %struct.MyObject* [[OBJ]], %struct.MyObject** [[BPTRC0]],
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** %{{.+}}, i8** %{{.+}}, i64* %{{.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPS1]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** %{{.+}}, i8** %{{.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES1]], i32 0, i32 0), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPS1]], i32 0, i32 0), i8** null, i8** null)
|
||||
#pragma omp target enter data map(to : objects[1].arr [0:1])
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
// CHECK-DAG: [[SIZES1:@.+]] = private unnamed_addr constant [5 x i64] zeroinitializer
|
||||
// 64 = 0x40 = OMP_MAP_RETURN_PARAM
|
||||
// CHECK-DAG: [[MAPTYPES1:@.+]] = private unnamed_addr constant [5 x i64] [i64 64, i64 64, i64 64, i64 64, i64 64]
|
||||
// CHECK-DAG: [[SIZES2:@.+]] = private unnamed_addr global [5 x i64] zeroinitializer
|
||||
// 0 = OMP_MAP_NONE
|
||||
// 281474976710720 = 0x1000000000040 = OMP_MAP_MEMBER_OF | OMP_MAP_RETURN_PARAM
|
||||
// CHECK-DAG: [[MAPTYPES2:@.+]] = private unnamed_addr constant [5 x i64] [i64 0, i64 281474976710720, i64 281474976710720, i64 281474976710720, i64 281474976710720]
|
||||
|
@ -119,7 +120,6 @@ int main() {
|
|||
// %this.addr = alloca %struct.S*, align 8
|
||||
// CHECK: [[BPTRS:%.+]] = alloca [5 x i8*],
|
||||
// CHECK: [[PTRS:%.+]] = alloca [5 x i8*],
|
||||
// CHECK: [[SIZES:%.+]] = alloca [5 x i64],
|
||||
// %tmp = alloca i32*, align 8
|
||||
// %tmp6 = alloca i32**, align 8
|
||||
// %tmp7 = alloca i32*, align 8
|
||||
|
@ -150,44 +150,34 @@ int main() {
|
|||
// CHECK: [[PTR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR0_BEGIN:%.+]] = bitcast i8** [[PTR0]] to i32**
|
||||
// CHECK: store i32* [[A_ADDR]], i32** [[PTR0_BEGIN]],
|
||||
// CHECK: [[SIZE0:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: store i64 [[SZ]], i64* [[SIZE0]],
|
||||
// CHECK: store i64 [[SZ]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZES2]], i32 0, i32 0),
|
||||
// CHECK: [[BPTR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 1
|
||||
// CHECK: [[BPTR1_A_ADDR:%.+]] = bitcast i8** [[BPTR1]] to i32**
|
||||
// CHECK: store i32* [[A_ADDR2]], i32** [[BPTR1_A_ADDR]],
|
||||
// CHECK: [[PTR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 1
|
||||
// CHECK: [[PTR1_A_ADDR:%.+]] = bitcast i8** [[PTR1]] to i32**
|
||||
// CHECK: store i32* [[A_ADDR2]], i32** [[PTR1_A_ADDR]],
|
||||
// CHECK: [[SIZE1:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 1
|
||||
// CHECK: store i64 0, i64* [[SIZE1]],
|
||||
// CHECK: [[BPTR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 2
|
||||
// CHECK: [[BPTR2_PTR_ADDR:%.+]] = bitcast i8** [[BPTR2]] to i32***
|
||||
// CHECK: store i32** [[PTR_ADDR]], i32*** [[BPTR2_PTR_ADDR]],
|
||||
// CHECK: [[PTR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 2
|
||||
// CHECK: [[PTR2_PTR_ADDR:%.+]] = bitcast i8** [[PTR2]] to i32***
|
||||
// CHECK: store i32** [[PTR_ADDR]], i32*** [[PTR2_PTR_ADDR]],
|
||||
// CHECK: [[SIZE2:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 2
|
||||
// CHECK: store i64 0, i64* [[SIZE2]],
|
||||
// CHECK: [[BPTR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 3
|
||||
// CHECK: [[BPTR3_REF_PTR:%.+]] = bitcast i8** [[BPTR3]] to i32**
|
||||
// CHECK: store i32* [[REF_PTR]], i32** [[BPTR3_REF_PTR]],
|
||||
// CHECK: [[PTR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 3
|
||||
// CHECK: [[PTR3_REF_PTR:%.+]] = bitcast i8** [[PTR3]] to i32**
|
||||
// CHECK: store i32* [[REF_PTR]], i32** [[PTR3_REF_PTR]],
|
||||
// CHECK: [[SIZE3:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 3
|
||||
// CHECK: store i64 0, i64* [[SIZE3]],
|
||||
// CHECK: [[BPTR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 4
|
||||
// CHECK: [[BPTR4_ARR_ADDR:%.+]] = bitcast i8** [[BPTR4]] to [4 x i32]**
|
||||
// CHECK: store [4 x i32]* [[ARR_ADDR2]], [4 x i32]** [[BPTR4_ARR_ADDR]],
|
||||
// CHECK: [[PTR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 4
|
||||
// CHECK: [[PTR4_ARR_ADDR:%.+]] = bitcast i8** [[PTR4]] to [4 x i32]**
|
||||
// CHECK: store [4 x i32]* [[ARR_ADDR2]], [4 x i32]** [[PTR4_ARR_ADDR]],
|
||||
// CHECK: [[SIZE4:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 4
|
||||
// CHECK: store i64 0, i64* [[SIZE4]],
|
||||
// CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[SIZE:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 5, i8** [[BPTR]], i8** [[PTR]], i64* [[SIZE]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPTYPES2]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 5, i8** [[BPTR]], i8** [[PTR]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZES2]], i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPTYPES2]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: [[A_ADDR:%.+]] = load i32*, i32** [[BPTR1_A_ADDR]],
|
||||
// CHECK: store i32* [[A_ADDR]], i32** [[A_REF:%.+]],
|
||||
// CHECK: [[PTR_ADDR:%.+]] = load i32**, i32*** [[BPTR2_PTR_ADDR]],
|
||||
|
@ -218,7 +208,6 @@ int main() {
|
|||
// CHECK: store i32 [[INC]], i32* [[ARR0_ADDR]],
|
||||
// CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BPTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[SIZE:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 5, i8** [[BPTR]], i8** [[PTR]], i64* [[SIZE]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPTYPES2]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 5, i8** [[BPTR]], i8** [[PTR]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZES2]], i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPTYPES2]], i32 0, i32 0), i8** null, i8** null)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -739,7 +739,7 @@ void explicit_maps_single (){
|
|||
|
||||
// CK15-LABEL: @.__omp_offloading_{{.*}}implicit_maps_variable_length_array{{.*}}_l{{[0-9]+}}.region_id = weak{{.*}} constant i8 0
|
||||
|
||||
// We don't have a constant map size for VLAs.
|
||||
// CK15-DAG: [[SIZES:@.+]] = {{.+}}global [3 x i64] [i64 {{4|8}}, i64 {{4|8}}, i64 0]
|
||||
// Map types:
|
||||
// - OMP_MAP_LITERAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size)
|
||||
// - OMP_MAP_LITERAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size)
|
||||
|
@ -750,37 +750,31 @@ void explicit_maps_single (){
|
|||
void implicit_maps_variable_length_array (int a){
|
||||
double vla[2][a];
|
||||
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SGEP:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[SGEP]] = getelementptr inbounds {{.+}}[[SS:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
|
||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
|
||||
// CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 0
|
||||
// CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[sz:64|32]]*
|
||||
// CK15-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[sz]]*
|
||||
// CK15-DAG: store i[[sz]] 2, i[[sz]]* [[CBP0]]
|
||||
// CK15-DAG: store i[[sz]] 2, i[[sz]]* [[CP0]]
|
||||
// CK15-DAG: store i64 {{8|4}}, i64* [[S0]],
|
||||
|
||||
// CK15-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
|
||||
// CK15-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
|
||||
// CK15-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 1
|
||||
// CK15-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz]]*
|
||||
// CK15-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]*
|
||||
// CK15-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]]
|
||||
// CK15-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]]
|
||||
// CK15-DAG: store i64 {{8|4}}, i64* [[S1]],
|
||||
|
||||
// CK15-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 2
|
||||
// CK15-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 2
|
||||
// CK15-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 2
|
||||
// CK15-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to double**
|
||||
// CK15-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK15-DAG: store double* [[DECL:%.+]], double** [[CBP2]]
|
||||
// CK15-DAG: store double* [[DECL]], double** [[CP2]]
|
||||
// CK15-DAG: store i64 [[VALS2:%.+]], i64* [[S2]],
|
||||
// CK15-DAG: store i64 [[VALS2:%.+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZES]], i32 0, i32 2),
|
||||
// CK15-DAG: [[VALS2]] = {{mul nuw i64 %.+, 8|sext i32 %.+ to i64}}
|
||||
|
||||
// CK15: call void [[KERNEL:@.+]](i[[sz]] {{.+}}, i[[sz]] {{.+}}, double* [[DECL]])
|
||||
|
|
|
@ -44,7 +44,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 5]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK1: [[MTYPE05:@.+]] = {{.+}}constant [1 x i64] [i64 1025]
|
||||
|
@ -156,6 +156,7 @@ void foo(int arg) {
|
|||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]]
|
||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]]
|
||||
// CK1-DAG: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
|
||||
|
||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -355,6 +356,7 @@ struct ST {
|
|||
}
|
||||
};
|
||||
|
||||
// CK2: [[SIZES:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710677]
|
||||
|
||||
// CK2-LABEL: _Z3bari
|
||||
|
@ -366,21 +368,19 @@ int bar(int arg){
|
|||
// Region 00
|
||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK2: [[IFTHEN]]
|
||||
// CK2-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZES]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK2-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK2-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK2-DAG: store double** [[SEC0:%.+]], double*** [[CP0]]
|
||||
// CK2-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK2-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -505,6 +505,7 @@ struct STT {
|
|||
}
|
||||
};
|
||||
|
||||
// CK5: [[SIZES:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK5: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976711701]
|
||||
|
||||
// CK5-LABEL: _Z3bari
|
||||
|
@ -516,21 +517,19 @@ int bar(int arg){
|
|||
// Region 00
|
||||
// CK5: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK5: [[IFTHEN]]
|
||||
// CK5-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK5-DAG: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZES]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK5-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK5-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK5-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK5-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK5-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK5-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK5-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK5-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK5-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]**
|
||||
// CK5-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK5-DAG: store [[STT]]* [[VAR0:%.+]], [[STT]]** [[CBP0]]
|
||||
// CK5-DAG: store double** [[SEC0:%.+]], double*** [[CP0]]
|
||||
// CK5-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK5-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
// CK5-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK5-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
|
|
@ -37,7 +37,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] zeroinitializer
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK1-LABEL: _Z3fooi
|
||||
|
@ -290,6 +290,7 @@ void foo(int arg) {
|
|||
// CK1: [[P0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// CK1: [[P0_BC:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[P0_BC]],
|
||||
// CK1: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
// CK1: [[BP1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 1
|
||||
// CK1: [[BP1_BC:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[BP1_BC]],
|
||||
|
|
|
@ -43,7 +43,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 6]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710672]
|
||||
|
||||
// CK1: [[MTYPE05:@.+]] = {{.+}}constant [1 x i64] [i64 1026]
|
||||
|
@ -155,6 +155,7 @@ void foo(int arg) {
|
|||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]]
|
||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]]
|
||||
// CK1-DAG: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
|
||||
|
||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -266,6 +267,7 @@ struct ST {
|
|||
}
|
||||
};
|
||||
|
||||
// CK2: [[SIZES:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710676]
|
||||
|
||||
// CK2-LABEL: _Z3bari
|
||||
|
@ -278,21 +280,19 @@ int bar(int arg){
|
|||
// CK2-NOT: __tgt_target_data_begin
|
||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK2: [[IFTHEN]]
|
||||
// CK2-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:.+]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZES]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK2-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK2-DAG: store [[ST]]* [[VAR0:%[^,]+]], [[ST]]** [[CBP0]]
|
||||
// CK2-DAG: store double** [[SEC0:%[^,]+]], double*** [[CP0]]
|
||||
// CK2-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]]
|
||||
// CK2-DAG: store i64 [[CSVAL0:%[^,]+]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -370,6 +370,7 @@ struct STT {
|
|||
}
|
||||
};
|
||||
|
||||
// CK4: [[SIZES:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK4: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976711700]
|
||||
|
||||
// CK4-LABEL: _Z3bari
|
||||
|
@ -382,21 +383,19 @@ int bar(int arg){
|
|||
// CK4-NOT: __tgt_target_data_begin
|
||||
// CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK4: [[IFTHEN]]
|
||||
// CK4-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:.+]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK4-DAG: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZES]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK4-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK4-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK4-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK4-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK4-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]**
|
||||
// CK4-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK4-DAG: store [[STT]]* [[VAR0:%[^,]+]], [[STT]]** [[CBP0]]
|
||||
// CK4-DAG: store double** [[SEC0:%[^,]+]], double*** [[CP0]]
|
||||
// CK4-DAG: store i64 [[CSVAL0:%[^,]+]], i64* [[S0]]
|
||||
// CK4-DAG: store i64 [[CSVAL0:%[^,]+]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
// CK4-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
|
|
@ -37,7 +37,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 2]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710674]
|
||||
|
||||
// CK1-LABEL: _Z3fooi
|
||||
|
@ -290,6 +290,7 @@ void foo(int arg) {
|
|||
// CK1: [[P0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// CK1: [[P0_BC:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[P0_BC]],
|
||||
// CK1: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
// CK1: [[BP1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 1
|
||||
// CK1: [[BP1_BC:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[BP1_BC]],
|
||||
|
|
|
@ -57,9 +57,11 @@ int ga = 5;
|
|||
|
||||
// CHECK-DAG: [[SIZET:@.+]] = private unnamed_addr constant [3 x i{{32|64}}] [i[[SZ:32|64]] 4, i{{64|32}} {{8|4}}, i[[SZ:32|64]] 4]
|
||||
// CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [3 x i64] [i64 288, i64 49, i64 288]
|
||||
// CHECK-DAG: [[SIZET2:@.+]] = private unnamed_addr global [9 x i64] [i64 2, i64 40, i64 {{4|8}}, i64 0, i64 400, i64 {{4|8}}, i64 {{4|8}}, i64 0, i64 {{12|16}}]
|
||||
// CHECK-DAG: [[MAPT2:@.+]] = private unnamed_addr constant [9 x i64] [i64 288, i64 161, i64 800, i64 161, i64 161, i64 800, i64 800, i64 161, i64 161]
|
||||
// CHECK-DAG: [[SIZET3:@.+]] = private unnamed_addr constant [2 x i{{32|64}}] [i{{32|64}} 0, i{{32|64}} 8]
|
||||
// CHECK-DAG: [[MAPT3:@.+]] = private unnamed_addr constant [2 x i64] [i64 32, i64 161]
|
||||
// CHECK-DAG: [[SIZET4:@.+]] = private unnamed_addr global [5 x i64] [i64 8, i64 4, i64 {{4|8}}, i64 {{4|8}}, i64 0]
|
||||
// CHECK-DAG: [[MAPT4:@.+]] = private unnamed_addr constant [5 x i64] [i64 547, i64 288, i64 800, i64 800, i64 161]
|
||||
// CHECK-DAG: [[SIZET5:@.+]] = private unnamed_addr constant [3 x i{{32|64}}] [i[[SZ]] 4, i[[SZ]] 1, i[[SZ]] 40]
|
||||
// CHECK-DAG: [[MAPT5:@.+]] = private unnamed_addr constant [3 x i64] [i64 288, i64 288, i64 161]
|
||||
|
@ -99,7 +101,6 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[A2CAST:%.+]] = alloca i{{[0-9]+}},
|
||||
// CHECK: [[BASE_PTR_ARR2:%.+]] = alloca [9 x i8*],
|
||||
// CHECK: [[PTR_ARR2:%.+]] = alloca [9 x i8*],
|
||||
// CHECK: [[SIZET2:%.+]] = alloca [9 x i{{[0-9]+}}],
|
||||
// CHECK: [[BASE_PTR_ARR3:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[PTR_ARR3:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[N_ADDR_VAL:%.+]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[N_ADDR]],
|
||||
|
@ -184,8 +185,6 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[PTR_GEP2_0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: [[ACAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_0]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} [[A2CAST_VAL]], i{{[0-9]+}}* [[ACAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPA2:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: store i{{[0-9]+}} 2, i{{[0-9]+}}* [[SIZE_GEPA2]],
|
||||
|
||||
// firstprivate(b): base_ptr = &b[0], ptr = &b[0], size = 40 (sizeof(float)*10)
|
||||
// CHECK: [[BASE_PTR_GEP2_1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -194,8 +193,6 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[PTR_GEP2_1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_1]] to [10 x float]**
|
||||
// CHECK: store [10 x float]* [[B]], [10 x float]** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPB:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK: store i{{[0-9]+}} 40, i{{[0-9]+}}* [[SIZE_GEPB]],
|
||||
|
||||
// firstprivate(bn), 2 entries, n and bn: (1) base_ptr = n, ptr = n, size = 8 ; (2) base_ptr = &c[0], ptr = &c[0], size = n*sizeof(float)
|
||||
// CHECK: [[BASE_PTR_GEP2_2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
|
@ -206,13 +203,10 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_2]] to i{{[0-9]+}}*
|
||||
// CHECK-64: store i{{[0-9]+}} [[N_EXT]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK-32: store i{{[0-9]+}} [[N_ADDR_VAL]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPBN_1:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK: store i{{[0-9]+}} {{[0-9]}}, i{{[0-9]+}}* [[SIZE_GEPBN_1]],
|
||||
// CHECK: [[BASE_PTR_GEP2_3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[BASE_PTR_GEP2_3]] to float**
|
||||
// CHECK: store float* [[BN_VLA]], float** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPBN_3:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK: store i{{[0-9]+}} [[BN_SIZE]], i{{[0-9]+}}* [[SIZE_GEPBN_3]]
|
||||
// CHECK: store i{{[0-9]+}} [[BN_SIZE]], i{{[0-9]+}}* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET2]], i32 0, i32 3),
|
||||
|
||||
// firstprivate(c): base_ptr = &c[0], ptr = &c[0], size = 400 (5*10*sizeof(double))
|
||||
// CHECK: [[BASE_PTR_GEP2_4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
|
@ -221,8 +215,6 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[PTR_GEP2_4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_4]] to [5 x [10 x double]]**
|
||||
// CHECK: store [5 x [10 x double]]* [[C]], [5 x [10 x double]]** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPC_4:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK: store i{{[0-9]+}} 400, i{{[0-9]+}}* [[SIZE_GEPC_4]],
|
||||
|
||||
// firstprivate(cn), 3 entries, 5, n, cn: (1) base_ptr = 5, ptr = 5, size = 8; (2) (1) base_ptr = n, ptr = n, size = 8; (3) base_ptr = &cn[0], ptr = &cn[0], size = 5*n*sizeof(double)
|
||||
// CHECK: [[BASE_PTR_GEP2_5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 5
|
||||
|
@ -231,8 +223,6 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[PTR_GEP2_5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 5
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_5]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} 5, i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPCN_5:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 5
|
||||
// CHECK: store i{{[0-9]+}} {{[0-9]}}, i{{[0-9]+}}* [[SIZE_GEPCN_5]],
|
||||
// CHECK: [[BASE_PTR_GEP2_6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 6
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[BASE_PTR_GEP2_6]] to i{{[0-9]+}}*
|
||||
// CHECK-64: store i{{[0-9]+}} [[N_EXT2]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
|
@ -241,16 +231,13 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_6]] to i{{[0-9]+}}*
|
||||
// CHECK-64: store i{{[0-9]+}} [[N_EXT2]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK-32: store i{{[0-9]+}} [[N_ADDR_VAL2]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPCN_6:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 6
|
||||
// CHECK: store i{{[0-9]+}} {{[0-9]}}, i{{[0-9]+}}* [[SIZE_GEPCN_6]],
|
||||
// CHECK: [[BASE_PTR_GEP2_7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 7
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[BASE_PTR_GEP2_7]] to double**
|
||||
// CHECK: store double* [[CN_VLA]], double** [[BCAST_TOPTR]],
|
||||
// CHECK: [[PTR_GEP2_7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 7
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_7]] to double**
|
||||
// CHECK: store double* [[CN_VLA]], double** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPCN_7:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 7
|
||||
// CHECK: store i{{[0-9]+}} [[CN_SIZE_2]], i{{[0-9]+}}* [[SIZE_GEPCN_7]],
|
||||
// CHECK: store i{{[0-9]+}} [[CN_SIZE_2]], i{{[0-9]+}}* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET2]], i32 0, i32 7),
|
||||
|
||||
// firstprivate(d): base_ptr = &d, ptr = &d, size = 16
|
||||
// CHECK: [[BASE_PTR_GEP2_8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 8
|
||||
|
@ -259,13 +246,10 @@ int foo(int n, double *ptr) {
|
|||
// CHECK: [[PTR_GEP2_8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 8
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTR_GEP2_8]] to [[TT]]**
|
||||
// CHECK: store [[TT]]* [[D]], [[TT]]** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZE_GEPCN_8:%.+]] = getelementptr inbounds [9 x i{{[0-9]+}}], [9 x i{{[0-9]+}}]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 8
|
||||
// CHECK: store i{{[0-9]+}} {{[0-9]+}}, i{{[0-9]+}}* [[SIZE_GEPCN_8]],
|
||||
|
||||
// CHECK: [[BASE_PTR_GEP_ARG2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BASE_PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: [[PTR_GEP_ARG2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[PTR_ARR2]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: [[SIZES_ARG2:%.+]] = getelementptr inbounds [9 x i[[SZ]]], [9 x i[[SZ]]]* [[SIZET2]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: {{.+}} = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, {{.+}}, i32 9, i8** [[BASE_PTR_GEP_ARG2]], i8** [[PTR_GEP_ARG2]], i[[SZ]]* [[SIZES_ARG2]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT2]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: {{.+}} = call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, {{.+}}, i32 9, i8** [[BASE_PTR_GEP_ARG2]], i8** [[PTR_GEP_ARG2]], i[[SZ]]* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET2]], i32 0, i32 0), i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT2]], i32 0, i32 0), i8** null, i8** null)
|
||||
|
||||
// make sure that firstprivate variables are generated in all cases and that we use those instances for operations inside the
|
||||
// target region
|
||||
|
@ -448,7 +432,6 @@ struct S1 {
|
|||
// CHECK: define{{.+}} i32 {{.+}}([[S1]]* {{.+}}, i{{[0-9]+}} {{.+}})
|
||||
// CHECK: [[BASE_PTRS4:%.+]] = alloca [5 x i8*],
|
||||
// CHECK: [[PTRS4:%.+]] = alloca [5 x i8*],
|
||||
// CHECK: [[SIZET4:%.+]] = alloca [5 x i{{[0-9]+}}],
|
||||
|
||||
// map(this: this ptr is implicitly captured (not firstprivate matter)
|
||||
// CHECK: [[BP0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BASE_PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -457,8 +440,6 @@ struct S1 {
|
|||
// CHECK: [[P0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: [[CP0:%.+]] = bitcast i8** [[P0]] to double**
|
||||
// CHECK: store double* [[A:%.+]], double** [[CP0]],
|
||||
// CHECK: [[SZ0:%.+]] = getelementptr inbounds [5 x i{{[0-9]+}}], [5 x i{{[0-9]+}}]* [[SIZET4]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK: store i{{[0-9]+}} 8, i{{[0-9]+}}* [[SZ0]],
|
||||
|
||||
// firstprivate(b): base_ptr = b, ptr = b, size = 4 (pass by-value)
|
||||
// CHECK: [[BASE_PTRS_GEP4_1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BASE_PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -467,8 +448,6 @@ struct S1 {
|
|||
// CHECK: [[PTRS_GEP4_1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTRS_GEP4_1]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} [[B_CAST]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZES_GEP4_1:%.+]] = getelementptr inbounds [5 x i{{[0-9]+}}], [5 x i{{[0-9]+}}]* [[SIZET4]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK: store i{{[0-9]+}} 4, i{{[0-9]+}}* [[SIZES_GEP4_1]],
|
||||
|
||||
// firstprivate(c), 3 entries: 2, n, c
|
||||
// CHECK: [[BASE_PTRS_GEP4_2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BASE_PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
|
@ -477,29 +456,22 @@ struct S1 {
|
|||
// CHECK: [[PTRS_GEP4_2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTRS_GEP4_2]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} 2, i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZES_GEP4_2:%.+]] = getelementptr inbounds [5 x i{{[0-9]+}}], [5 x i{{[0-9]+}}]* [[SIZET4]], i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK-64: store i{{[0-9]+}} 8, i{{[0-9]+}}* [[SIZES_GEP4_2]],
|
||||
// CHECK-32: store i{{[0-9]+}} 4, i{{[0-9]+}}* [[SIZES_GEP4_2]],
|
||||
// CHECK: [[BASE_PTRS_GEP4_3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BASE_PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[BASE_PTRS_GEP4_3]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} [[N:%.+]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[PTRS_GEP4_3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTRS_GEP4_3]] to i{{[0-9]+}}*
|
||||
// CHECK: store i{{[0-9]+}} [[N]], i{{[0-9]+}}* [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZES_GEP4_3:%.+]] = getelementptr inbounds [5 x i{{[0-9]+}}], [5 x i{{[0-9]+}}]* [[SIZET4]], i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK-64: store i{{[0-9]+}} 8, i{{[0-9]+}}* [[SIZES_GEP4_3]],
|
||||
// CHECK-32: store i{{[0-9]+}} 4, i{{[0-9]+}}* [[SIZES_GEP4_3]],
|
||||
// CHECK: [[BASE_PTRS_GEP4_4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BASE_PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[BASE_PTRS_GEP4_4]] to i{{[0-9]+}}**
|
||||
// CHECK: store i{{[0-9]+}}* [[B:%.+]], i{{[0-9]+}}** [[BCAST_TOPTR]],
|
||||
// CHECK: [[PTRS_GEP4_4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[PTRS4]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK: [[BCAST_TOPTR:%.+]] = bitcast i8** [[PTRS_GEP4_4]] to i{{[0-9]+}}**
|
||||
// CHECK: store i{{[0-9]+}}* [[B]], i{{[0-9]+}}** [[BCAST_TOPTR]],
|
||||
// CHECK: [[SIZES_GEP4_4:%.+]] = getelementptr inbounds [5 x i{{[0-9]+}}], [5 x i{{[0-9]+}}]* [[SIZET4]], i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK: store i{{[0-9]+}} [[B_SIZE:%.+]], i{{[0-9]+}}* [[SIZES_GEP4_4]],
|
||||
// CHECK: store i{{[0-9]+}} [[B_SIZE:%.+]], i{{[0-9]+}}* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZET4]], i32 0, i32 4),
|
||||
|
||||
// only check that we use the map types stored in the global variable
|
||||
// CHECK: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, {{.+}}, i32 5, i8** {{.+}}, i8** {{.+}}, i{{[0-9]+}}* {{.+}}, i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, {{.+}}, i32 5, i8** {{.+}}, i8** {{.+}}, i{{[0-9]+}}* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZET4]], i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null)
|
||||
|
||||
// TCHECK: define weak void @__omp_offloading_{{.+}}([[S1]]* noundef [[TH:%.+]], i{{[0-9]+}} noundef [[B_IN:%.+]], i{{[0-9]+}} noundef [[VLA:%.+]], i{{[0-9]+}} noundef [[VLA1:%.+]], i{{[0-9]+}}{{.+}} [[C_IN:%.+]])
|
||||
// TCHECK: [[TH_ADDR:%.+]] = alloca [[S1]]*,
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
// CK13-LABEL: @.__omp_offloading_{{.*}}implicit_maps_variable_length_array{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
|
||||
// We don't have a constant map size for VLAs.
|
||||
// CK13-DAG: [[SIZES:@.+]] = {{.+}}global [3 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// Map types:
|
||||
// - OMP_MAP_PRIVATE_VAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size)
|
||||
// - OMP_MAP_PRIVATE_VAL + OMP_MAP_TARGET_PARAM + OMP_MAP_IMPLICIT = 800 (vla size)
|
||||
|
@ -46,37 +46,31 @@
|
|||
void implicit_maps_variable_length_array (int a){
|
||||
double vla[2][a];
|
||||
|
||||
// CK13-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SGEP:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK13-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 3, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK13-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
|
||||
// CK13-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
|
||||
// CK13-DAG: [[SGEP]] = getelementptr inbounds {{.+}}[[SS:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CK13-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
|
||||
// CK13-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
|
||||
// CK13-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 0
|
||||
// CK13-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[sz:64|32]]*
|
||||
// CK13-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[sz]]*
|
||||
// CK13-DAG: store i[[sz]] 2, i[[sz]]* [[CBP0]]
|
||||
// CK13-DAG: store i[[sz]] 2, i[[sz]]* [[CP0]]
|
||||
// CK13-DAG: store i64 {{8|4}}, i64* [[S0]],
|
||||
|
||||
// CK13-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
|
||||
// CK13-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
|
||||
// CK13-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 1
|
||||
// CK13-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[sz]]*
|
||||
// CK13-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[sz]]*
|
||||
// CK13-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP1]]
|
||||
// CK13-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP1]]
|
||||
// CK13-DAG: store i64 {{8|4}}, i64* [[S1]],
|
||||
|
||||
// CK13-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 2
|
||||
// CK13-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 2
|
||||
// CK13-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[SS]], i32 0, i32 2
|
||||
// CK13-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to double**
|
||||
// CK13-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK13-DAG: store double* [[DECL:%.+]], double** [[CBP2]]
|
||||
// CK13-DAG: store double* [[DECL]], double** [[CP2]]
|
||||
// CK13-DAG: store i64 [[VALS2:%.+]], i64* [[S2]],
|
||||
// CK13-DAG: store i64 [[VALS2:%.+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZES]], i32 0, i32 2),
|
||||
// CK13-DAG: [[VALS2]] = {{mul nuw i64 %.+, 8|sext i32 %.+ to i64}}
|
||||
|
||||
// CK13: call void [[KERNEL:@.+]](i[[sz]] {{.+}}, i[[sz]] {{.+}}, double* [[DECL]])
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
// CK14-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
|
||||
|
||||
// CK14-DAG: [[SIZES:@.+]] = {{.+}}global [4 x i64] [i64 0, i64 4, i64 8, i64 4]
|
||||
// Map types:
|
||||
// - OMP_MAP_TARGET_PARAM = 32
|
||||
// - OMP_MAP_TO + OMP_MAP_FROM | OMP_MAP_IMPLICIT | OMP_MAP_MEMBER_OF = 281474976711171
|
||||
|
@ -65,46 +66,38 @@ void implicit_maps_class (int a){
|
|||
SSS sss(a, (double)a);
|
||||
|
||||
// CK14: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}})
|
||||
// CK14-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK14-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK14-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
|
||||
// CK14-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
|
||||
// CK14-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CK14-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
|
||||
// CK14-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
|
||||
// CK14-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0
|
||||
// CK14-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK14-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK14-DAG: store [[ST]]* [[DECL:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK14-DAG: store i32* [[A:%.+]], i32** [[CP0]]
|
||||
// CK14-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK14-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
|
||||
// CK14-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
|
||||
// CK14-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
|
||||
// CK14-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 1
|
||||
// CK14-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK14-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK14-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP1]]
|
||||
// CK14-DAG: store i32* [[A]], i32** [[CP1]]
|
||||
// CK14-DAG: store i64 4, i64* [[S1]]
|
||||
|
||||
// CK14-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 2
|
||||
// CK14-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 2
|
||||
// CK14-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 2
|
||||
// CK14-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK14-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK14-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP2]]
|
||||
// CK14-DAG: store double* %{{.+}}, double** [[CP2]]
|
||||
// CK14-DAG: store i64 8, i64* [[S2]]
|
||||
|
||||
// CK14-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 3
|
||||
// CK14-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 3
|
||||
// CK14-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 3
|
||||
// CK14-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i[[sz:64|32]]*
|
||||
// CK14-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i[[sz]]*
|
||||
// CK14-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP3]]
|
||||
// CK14-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP3]]
|
||||
// CK14-DAG: store i64 4, i64* [[S3]]
|
||||
// CK14-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]],
|
||||
// CK14-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32*
|
||||
// CK14-64-DAG: store i32 {{.+}}, i32* [[CADDR]],
|
||||
|
|
|
@ -34,12 +34,14 @@
|
|||
#ifdef CK15
|
||||
|
||||
// CK15: [[ST:%.+]] = type { i32, double }
|
||||
// CK15: [[SIZES:@.+]] = {{.+}}global [4 x i64] [i64 0, i64 4, i64 8, i64 4]
|
||||
// Map types:
|
||||
// - OMP_MAP_TARGET_PARAM = 32
|
||||
// - OMP_MAP_TO + OMP_MAP_FROM | OMP_MAP_IMPLICIT | OMP_MAP_MEMBER_OF = 281474976711171
|
||||
// - OMP_MAP_PRIVATE_VAL + OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT = 800
|
||||
// CK15: [[TYPES:@.+]] = {{.+}}constant [4 x i64] [i64 32, i64 281474976711171, i64 281474976711171, i64 800]
|
||||
|
||||
// CK15: [[SIZES2:@.+]] = {{.+}}global [4 x i64] [i64 0, i64 4, i64 8, i64 4]
|
||||
// Map types:
|
||||
// - OMP_MAP_TARGET_PARAM = 32
|
||||
// - OMP_MAP_TO + OMP_MAP_FROM | OMP_MAP_IMPLICIT | OMP_MAP_MEMBER_OF = 281474976711171
|
||||
|
@ -76,46 +78,38 @@ void implicit_maps_templated_class (int a){
|
|||
SSST<123> ssst(a, (double)a);
|
||||
|
||||
// CK15: define {{.*}}void @{{.+}}foo{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}})
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:%[^,]+]], {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
|
||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
|
||||
// CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0
|
||||
// CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK15-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK15-DAG: store [[ST]]* [[DECL:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK15-DAG: store i32* [[A:%.+]], i32** [[CP0]]
|
||||
// CK15-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK15-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZES]], i32 0, i32 0),
|
||||
|
||||
// CK15-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
|
||||
// CK15-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
|
||||
// CK15-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 1
|
||||
// CK15-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK15-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK15-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP1]]
|
||||
// CK15-DAG: store i32* [[A]], i32** [[CP1]]
|
||||
// CK15-DAG: store i64 4, i64* [[S1]]
|
||||
|
||||
// CK15-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 2
|
||||
// CK15-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 2
|
||||
// CK15-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 2
|
||||
// CK15-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK15-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK15-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP2]]
|
||||
// CK15-DAG: store double* %{{.+}}, double** [[CP2]]
|
||||
// CK15-DAG: store i64 8, i64* [[S2]]
|
||||
|
||||
// CK15-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 3
|
||||
// CK15-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 3
|
||||
// CK15-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 3
|
||||
// CK15-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i[[sz:64|32]]*
|
||||
// CK15-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i[[sz]]*
|
||||
// CK15-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP3]]
|
||||
// CK15-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP3]]
|
||||
// CK15-DAG: store i64 4, i64* [[S3]]
|
||||
// CK15-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]],
|
||||
// CK15-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32*
|
||||
// CK15-64-DAG: store i32 {{.+}}, i32* [[CADDR]],
|
||||
|
@ -124,46 +118,38 @@ void implicit_maps_templated_class (int a){
|
|||
ssst.foo(456);
|
||||
|
||||
// CK15: define {{.*}}void @{{.+}}bar{{.+}}([[ST]]* {{[^,]+}}, i32 {{[^,]+}})
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZES:[^,]+]], {{.+}}[[TYPES2]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 4, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES2]]{{.+}}, {{.+}}[[TYPES2]]{{.+}}, i8** null, i8** null)
|
||||
// CK15-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
|
||||
// CK15-DAG: [[SIZES]] = getelementptr inbounds {{.+}}[[S:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
|
||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
|
||||
// CK15-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 0
|
||||
// CK15-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK15-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK15-DAG: store [[ST]]* [[DECL:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK15-DAG: store i32* [[A:%.+]], i32** [[CP0]]
|
||||
// CK15-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK15-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZES2]], i32 0, i32 0),
|
||||
|
||||
// CK15-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
|
||||
// CK15-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
|
||||
// CK15-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 1
|
||||
// CK15-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK15-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK15-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP1]]
|
||||
// CK15-DAG: store i32* [[A]], i32** [[CP1]]
|
||||
// CK15-DAG: store i64 4, i64* [[S1]]
|
||||
|
||||
// CK15-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 2
|
||||
// CK15-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 2
|
||||
// CK15-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 2
|
||||
// CK15-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK15-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK15-DAG: store [[ST]]* [[DECL]], [[ST]]** [[CBP2]]
|
||||
// CK15-DAG: store double* %{{.+}}, double** [[CP2]]
|
||||
// CK15-DAG: store i64 8, i64* [[S2]]
|
||||
|
||||
// CK15-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 3
|
||||
// CK15-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 3
|
||||
// CK15-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i32 0, i32 3
|
||||
// CK15-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i[[sz]]*
|
||||
// CK15-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i[[sz]]*
|
||||
// CK15-DAG: store i[[sz]] [[VAL:%.+]], i[[sz]]* [[CBP3]]
|
||||
// CK15-DAG: store i[[sz]] [[VAL]], i[[sz]]* [[CP3]]
|
||||
// CK15-DAG: store i64 4, i64* [[S3]]
|
||||
// CK15-DAG: [[VAL]] = load i[[sz]], i[[sz]]* [[ADDR:%.+]],
|
||||
// CK15-64-DAG: [[CADDR:%.+]] = bitcast i[[sz]]* [[ADDR]] to i32*
|
||||
// CK15-64-DAG: store i32 {{.+}}, i32* [[CADDR]],
|
||||
|
|
|
@ -91,6 +91,7 @@
|
|||
// CK19-NOUSE: [[MTYPE15:@.+]] = private {{.*}}constant [1 x i64] [i64 2]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE16:@.+]] = private {{.*}}global [2 x i64] [i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE16:@.+]] = private {{.*}}constant [2 x i64] [i64 800, i64 33]
|
||||
// CK19-NOUSE: [[MTYPE16:@.+]] = private {{.*}}constant [1 x i64] [i64 1]
|
||||
|
||||
|
@ -107,6 +108,7 @@
|
|||
// CK19-NOUSE: [[MTYPE18:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE19:@.+]] = private {{.*}}global [2 x i64] [i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE19:@.+]] = private {{.*}}constant [2 x i64] [i64 800, i64 32]
|
||||
// CK19-NOUSE: [[MTYPE19:@.+]] = private {{.*}}constant [1 x i64] zeroinitializer
|
||||
|
||||
|
@ -117,6 +119,7 @@
|
|||
// CK19-NOUSE: [[MTYPE20:@.+]] = private {{.*}}constant [1 x i64] [i64 1]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE21:@.+]] = private {{.*}}global [2 x i64] [i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE21:@.+]] = private {{.*}}constant [2 x i64] [i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE21:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
|
@ -162,6 +165,7 @@
|
|||
// CK19-NOUSE: [[MTYPE29:@.+]] = private {{.*}}constant [3 x i64] [i64 3, i64 16, i64 19]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE30:@.+]] = private {{.*}}global [4 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE30:@.+]] = private {{.*}}constant [4 x i64] [i64 800, i64 800, i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE30:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
|
@ -196,18 +200,22 @@
|
|||
// CK19-NOUSE: [[MTYPE36:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE37:@.+]] = private {{.*}}global [3 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE37:@.+]] = private {{.*}}constant [3 x i64] [i64 800, i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE37:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE38:@.+]] = private {{.*}}global [3 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE38:@.+]] = private {{.*}}constant [3 x i64] [i64 800, i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE38:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE39:@.+]] = private {{.*}}global [3 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE39:@.+]] = private {{.*}}constant [3 x i64] [i64 800, i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE39:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK19-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK19-USE: [[SIZE40:@.+]] = private {{.*}}global [3 x i64] [i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// CK19-USE: [[MTYPE40:@.+]] = private {{.*}}constant [3 x i64] [i64 800, i64 800, i64 35]
|
||||
// CK19-NOUSE: [[MTYPE40:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
|
@ -648,30 +656,28 @@ void explicit_maps_single (int ii){
|
|||
int va[ii];
|
||||
|
||||
// Region 16
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|2}} x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE16]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z:64|32]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i{{.+}} {{8|4}}, i{{.+}}* [[S0]]
|
||||
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32**
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK19-USE-DAG: store i32* [[VAR1:%.+]], i32** [[CBP1]]
|
||||
// CK19-USE-DAG: store i32* [[VAR1]], i32** [[CP1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* [[S1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE16]], i32 0, i32 1),
|
||||
// CK19-USE-DAG: [[CSVAL1]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -766,31 +772,29 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 19
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|2}} x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE19]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i{{.+}} {{8|4}}, i{{.+}}* [[S0]]
|
||||
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32**
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK19-USE-DAG: store i32* [[VAR1:%.+]], i32** [[CBP1]]
|
||||
// CK19-USE-DAG: store i32* [[SEC1:%.+]], i32** [[CP1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* [[S1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE19]], i32 0, i32 1),
|
||||
// CK19-USE-DAG: [[CSVAL1]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}}
|
||||
// CK19-USE-DAG: [[SEC1]] = getelementptr {{.*}}i32* [[VAR1]], i{{.+}} 0
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -849,31 +853,29 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 21
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|2}} x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE21]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|2}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] {{%.+}}, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i{{.+}} {{8|4}}, i{{.+}}* [[S0]]
|
||||
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32**
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK19-USE-DAG: store i32* [[VAR1:%.+]], i32** [[CBP1]]
|
||||
// CK19-USE-DAG: store i32* [[SEC1:%.+]], i32** [[CP1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* [[S1]]
|
||||
// CK19-USE-DAG: store i{{.+}} [[CSVAL1:%[^,]+]], i{{.+}}* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE21]], i32 0, i32 1),
|
||||
// CK19-USE-DAG: [[CSVAL1]] = {{mul nuw i64 %.*, 4|sext i32 .+ to i64}}
|
||||
// CK19-USE-DAG: [[SEC1]] = getelementptr {{.*}}i32* [[VAR1]], i{{.+}} %{{.+}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -1150,52 +1152,46 @@ void explicit_maps_single (int ii){
|
|||
double mva[23][ii][ii+5];
|
||||
|
||||
// Region 30
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|4}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|4}} x i{{.+}}]* [[MTYPE30]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|4}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE30]]{{.+}}, {{.+}}getelementptr {{.+}}[{{1|4}} x i{{.+}}]* [[MTYPE30]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|4}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE30]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] 23, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] 23, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S0]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR1:%.+]], i[[Z]]* [[CBP1]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR11:%.+]], i[[Z]]* [[CP1]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
// CK19-64-USE-DAG: [[VAR1]] = zext i32 %{{[^,]+}} to i64
|
||||
// CK19-64-USE-DAG: [[VAR11]] = zext i32 %{{[^,]+}} to i64
|
||||
//
|
||||
// CK19-USE-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR2:%.+]], i[[Z]]* [[CBP2]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR22:%.+]], i[[Z]]* [[CP2]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S2]]
|
||||
// CK19-64-USE-DAG: [[VAR2]] = zext i32 %{{[^,]+}} to i64
|
||||
// CK19-64-USE-DAG: [[VAR22]] = zext i32 %{{[^,]+}} to i64
|
||||
//
|
||||
// CK19-USE-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK19-USE-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK19-USE-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK19-USE-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to double**
|
||||
// CK19-USE-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to double**
|
||||
// CK19-USE-DAG: store double* [[VAR3:%.+]], double** [[CBP3]]
|
||||
// CK19-USE-DAG: store double* [[VAR3]], double** [[CP3]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL3:%[^,]+]], i64* [[S3]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL3:%[^,]+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE30]], i32 0, i32 3),
|
||||
// CK19-USE-DAG: [[CSVAL3]] = {{mul nuw i64 %[^,]+, 8|sext i32 .+ to i64}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -1397,39 +1393,35 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 37
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|3}} x i{{.+}}]* [[MTYPE37]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE37]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE37]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE37]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S0]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR1:%.+]], i[[Z]]* [[CBP1]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR11:%.+]], i[[Z]]* [[CP1]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [13 x double]**
|
||||
// CK19-USE-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to [13 x double]**
|
||||
// CK19-USE-DAG: store [13 x double]* [[VAR2:%.+]], [13 x double]** [[CBP2]]
|
||||
// CK19-USE-DAG: store [13 x double]* [[VAR2]], [13 x double]** [[CP2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* [[S2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE37]], i32 0, i32 2),
|
||||
// CK19-USE-DAG: [[CSVAL2]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -1450,41 +1442,37 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 38
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|3}} x i{{.+}}]* [[MTYPE38]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE38]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE38]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE38]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S0]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR1:%.+]], i[[Z]]* [[CBP1]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR11:%.+]], i[[Z]]* [[CP1]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [13 x double]**
|
||||
// CK19-USE-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to [13 x double]**
|
||||
// CK19-USE-DAG: store [13 x double]* [[VAR2:%.+]], [13 x double]** [[CBP2]]
|
||||
// CK19-USE-DAG: store [13 x double]* [[SEC2:%.+]], [13 x double]** [[CP2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* [[S2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE38]], i32 0, i32 2),
|
||||
// CK19-USE-DAG: [[SEC2]] = getelementptr {{.+}}[13 x double]* [[VAR2]], i[[Z]] [[SEC22:%[^,]+]]
|
||||
// CK19-USE-DAG: [[SEC22]] = mul nsw i[[Z]] 0, %{{[^,]+}}
|
||||
// CK19-USE-DAG: [[CSVAL2]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -1507,41 +1495,37 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 39
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|3}} x i{{.+}}]* [[MTYPE39]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE39]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE39]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE39]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S0]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR1:%.+]], i[[Z]]* [[CBP1]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR11:%.+]], i[[Z]]* [[CP1]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [13 x double]**
|
||||
// CK19-USE-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to [13 x double]**
|
||||
// CK19-USE-DAG: store [13 x double]* [[VAR2:%.+]], [13 x double]** [[CBP2]]
|
||||
// CK19-USE-DAG: store [13 x double]* [[SEC2:%.+]], [13 x double]** [[CP2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* [[S2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE39]], i32 0, i32 2),
|
||||
// CK19-USE-DAG: [[SEC2]] = getelementptr {{.+}}[13 x double]* [[VAR2]], i[[Z]] [[SEC22:%[^,]+]]
|
||||
// CK19-USE-DAG: [[SEC22]] = mul nsw i[[Z]] 0, %{{[^,]+}}
|
||||
// CK19-USE-DAG: [[CSVAL2]] = {{mul nuw i64 %[^,]+, 104|sext i32 .+ to i64}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
@ -1564,41 +1548,37 @@ void explicit_maps_single (int ii){
|
|||
}
|
||||
|
||||
// Region 40
|
||||
// CK19-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[{{1|3}} x i{{.+}}]* [[MTYPE40]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-USE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE40]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE40]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-NOUSE-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 {{1|3}}, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE40]]{{.+}}, i8** null, i8** null)
|
||||
// CK19-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK19-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK19-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-USE-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CBP0]]
|
||||
// CK19-USE-DAG: store i[[Z]] 11, i[[Z]]* [[CP0]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S0]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK19-USE-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i[[Z]]*
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR1:%.+]], i[[Z]]* [[CBP1]]
|
||||
// CK19-USE-DAG: store i[[Z]] [[VAR11:%.+]], i[[Z]]* [[CP1]]
|
||||
// CK19-USE-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
//
|
||||
// CK19-USE-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK19-USE-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [13 x double]**
|
||||
// CK19-USE-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to [13 x double]**
|
||||
// CK19-USE-DAG: store [13 x double]* [[VAR2:%.+]], [13 x double]** [[CBP2]]
|
||||
// CK19-USE-DAG: store [13 x double]* [[SEC2:%.+]], [13 x double]** [[CP2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* [[S2]]
|
||||
// CK19-USE-DAG: store i64 [[CSVAL2:%[^,]+]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE40]], i32 0, i32 2),
|
||||
// CK19-USE-DAG: [[SEC2]] = getelementptr {{.+}}[13 x double]* [[SEC22:%[^,]+]], i[[Z]] 0
|
||||
// CK19-USE-DAG: [[SEC22]] = getelementptr {{.+}}[13 x double]* [[VAR2]], i[[Z]] [[SEC222:%[^,]+]]
|
||||
// CK19-USE-DAG: [[SEC222]] = mul nsw i[[Z]] 1, %{{[^,]+}}
|
||||
|
||||
// CK19-NOUSE-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK19-NOUSE-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK19-NOUSE-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
// CK21-NOUSE: [[MTYPE01:@.+]] = private {{.*}}constant [1 x i64] [i64 3]
|
||||
|
||||
// CK21-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK21: [[SIZE02:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 500]
|
||||
// CK21-USE: [[MTYPE02:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710674]
|
||||
// CK21-NOUSE: [[MTYPE02:@.+]] = private {{.*}}constant [2 x i64] [i64 0, i64 281474976710674]
|
||||
|
||||
|
@ -88,6 +89,7 @@
|
|||
// CK21-NOUSE: [[MTYPE04:@.+]] = private {{.*}}constant [1 x i64] [i64 2]
|
||||
|
||||
// CK21-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK21: [[SIZE05:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 4, i64 4]
|
||||
// CK21-USE: [[MTYPE05:@.+]] = private {{.*}}constant [3 x i64] [i64 32, i64 281474976710659, i64 281474976710659]
|
||||
// CK21-NOUSE: [[MTYPE05:@.+]] = private {{.*}}constant [3 x i64] [i64 0, i64 281474976710659, i64 281474976710659]
|
||||
|
||||
|
@ -150,29 +152,25 @@ struct CC {
|
|||
}
|
||||
|
||||
// Region 02
|
||||
// CK21-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null, i8** null)
|
||||
// CK21-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE02]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null, i8** null)
|
||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float***
|
||||
// CK21-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK21-DAG: store float** [[SEC0:%.+]], float*** [[CP0]]
|
||||
// CK21-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK21-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE02]], i32 0, i32 0),
|
||||
// CK21-DAG: [[SEC0]] = getelementptr {{.*}}[[ST]]* [[VAR0]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK21-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to float***
|
||||
// CK21-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to float**
|
||||
// CK21-DAG: store float** [[SEC0]], float*** [[CBP1]]
|
||||
// CK21-DAG: store float* [[SEC1:%.+]], float** [[CP1]]
|
||||
// CK21-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
// CK21-DAG: [[SEC1]] = getelementptr {{.*}}float* [[RVAR1:%[^,]+]], i{{.+}} 123
|
||||
// CK21-DAG: [[RVAR1]] = load float*, float** [[SEC1_:%[^,]+]]
|
||||
// CK21-DAG: [[SEC1_]] = getelementptr {{.*}}[[ST]]* [[VAR0]], i{{.+}} 0, i{{.+}} 2
|
||||
|
@ -230,38 +228,32 @@ struct CC {
|
|||
|
||||
// Make sure the extra flag is passed to the second map.
|
||||
// Region 05
|
||||
// CK21-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null, i8** null)
|
||||
// CK21-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE05]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE05]]{{.+}}, i8** null, i8** null)
|
||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK21-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK21-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK21-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK21-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK21-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]]
|
||||
// CK21-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]]
|
||||
// CK21-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK21-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE05]], i32 0, i32 0),
|
||||
// CK21-DAG: [[SEC0]] = getelementptr {{.*}}[[ST]]* [[VAR0]], i{{.+}} 0, i{{.+}} 0
|
||||
|
||||
// CK21-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK21-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK21-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK21-DAG: store [[ST]]* [[VAR0]], [[ST]]** [[CBP1]]
|
||||
// CK21-DAG: store i32* [[SEC0]], i32** [[CP1]]
|
||||
// CK21-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK21-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK21-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK21-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK21-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK21-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
|
||||
// CK21-DAG: store [[ST]]* [[VAR2:%.+]], [[ST]]** [[CBP2]]
|
||||
// CK21-DAG: store i32* [[SEC2:%.+]], i32** [[CP2]]
|
||||
// CK21-DAG: store i64 {{.+}}, i64* [[S2]]
|
||||
// CK21-DAG: [[SEC2]] = getelementptr {{.*}}[[ST]]* [[VAR2]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK21-USE: call void [[CALL05:@.+]]([[ST]]* {{[^,]+}})
|
||||
|
|
|
@ -73,9 +73,11 @@ struct SC{
|
|||
// CK24: [[MTYPE15:@.+]] = private {{.*}}constant [1 x i64] [i64 35]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE16:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 20]
|
||||
// CK24: [[MTYPE16:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710659]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE17:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 {{3560|2880}}]
|
||||
// CK24: [[MTYPE17:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710675]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
|
@ -83,21 +85,27 @@ struct SC{
|
|||
// CK24: [[MTYPE18:@.+]] = private {{.*}}constant [1 x i64] [i64 35]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE19:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 {{8|4}}, i64 4]
|
||||
// CK24: [[MTYPE19:@.+]] = private {{.*}}constant [3 x i64] [i64 32, i64 281474976710659, i64 281474976710675]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE20:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 4]
|
||||
// CK24: [[MTYPE20:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710675]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE21:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 {{8|4}}, i64 4]
|
||||
// CK24: [[MTYPE21:@.+]] = private {{.*}}constant [3 x i64] [i64 32, i64 281474976710659, i64 281474976710675]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE22:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 8]
|
||||
// CK24: [[MTYPE22:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710659]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE23:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 {{8|4}}, i64 8]
|
||||
// CK24: [[MTYPE23:@.+]] = private {{.*}}constant [3 x i64] [i64 32, i64 281474976710659, i64 281474976710675]
|
||||
|
||||
// CK24-LABEL: @.__omp_offloading_{{.*}}explicit_maps_struct_fields{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK24: [[SIZE24:@.+]] = private {{.*}}global [4 x i64] [i64 0, i64 {{8|4}}, i64 {{8|4}}, i64 4]
|
||||
// CK24: [[MTYPE24:@.+]] = private {{.*}}constant [4 x i64] [i64 32, i64 281474976710672, i64 16, i64 19]
|
||||
|
||||
// CK24-LABEL: explicit_maps_struct_fields
|
||||
|
@ -189,30 +197,26 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 16
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE16]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE16]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE16]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[10 x i32]* [[SEC00:%[^,]+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[SEC00]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 3
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SC]]**
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK24-DAG: store [[SC]]* [[VAR0]], [[SC]]** [[CBP1]]
|
||||
// CK24-DAG: store i32* [[SEC0]], i32** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}}
|
||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}}
|
||||
|
@ -222,29 +226,25 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 17
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE17]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE17]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SB]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SB]]** [[SEC0:%.+]], [[SB]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE17]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SB]]***
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[SB]]**
|
||||
// CK24-DAG: store [[SB]]** [[SEC0]], [[SB]]*** [[CBP1]]
|
||||
// CK24-DAG: store [[SB]]* [[SEC1:%.+]], [[SB]]** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
// CK24-DAG: [[SEC1]] = getelementptr {{.*}}[[SB]]* [[SEC11:%[^,]+]], i{{.+}} 0
|
||||
// CK24-DAG: [[SEC11]] = load [[SB]]*, [[SB]]** [[SEC111:%[^,]+]],
|
||||
// CK24-DAG: [[SEC111]] = getelementptr {{.*}}[[SC]]* [[VAR000:%.+]], i{{.+}} 0, i{{.+}} 2
|
||||
|
@ -281,31 +281,27 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 19
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE19]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE19]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0:%.+]], [[SA]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE19]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[10 x [[SA]]*]* [[SEC00:%[^,]+]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK24-DAG: [[SEC00]] = getelementptr {{.*}}[[SB]]* [[SEC000:%[^,]+]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK24-DAG: [[SEC000]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SC]]**
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0]], [[SC]]** [[CBP1]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0]], [[SA]]*** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK24-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
|
@ -328,19 +324,17 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 20
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE20]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE20]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SB]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SB]]** [[SEC0:%.+]], [[SB]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE20]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -362,39 +356,33 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 21
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE21]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE21]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0:%.+]], [[SA]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE21]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[[SB]]* [[SEC00:[^,]+]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK24-DAG: [[SEC00]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SC]]**
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0]], [[SC]]** [[CBP1]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0]], [[SA]]*** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK24-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[SA]]***
|
||||
// CK24-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
|
||||
// CK24-DAG: store [[SA]]** [[SEC0]], [[SA]]*** [[CBP2]]
|
||||
// CK24-DAG: store i32* [[SEC1:%.+]], i32** [[CP2]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S2]]
|
||||
// CK24-DAG: [[SEC1]] = getelementptr {{.*}}[[SA]]* [[SEC11:%[^,]+]], i{{.+}} 0
|
||||
// CK24-DAG: [[SEC11]] = load [[SA]]*, [[SA]]** [[SEC111:%[^,]+]],
|
||||
// CK24-DAG: [[SEC111]] = getelementptr {{.*}}[[SB]]* [[SEC1111:[^,]+]], i{{.+}} 0, i{{.+}} 4
|
||||
|
@ -409,19 +397,17 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 22
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE22]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE22]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store i32* [[SEC0:%.+]], i32** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE22]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[10 x i32]* [[SEC00:%[^,]+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[SEC00]] = getelementptr {{.*}}[[SA]]* [[SEC000:%[^,]+]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[SEC000]] = getelementptr {{.*}}[[SB]]* [[SEC0000:%[^,]+]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -429,12 +415,10 @@ int explicit_maps_struct_fields(int a){
|
|||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SC]]**
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK24-DAG: store [[SC]]* [[VAR0]], [[SC]]** [[CBP1]]
|
||||
// CK24-DAG: store i32* [[SEC0]], i32** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK24-DAG: [[VAR0]] = load [[SC]]*, [[SC]]** %{{.+}}
|
||||
// CK24-DAG: [[VAR00]] = load [[SC]]*, [[SC]]** %{{.+}}
|
||||
|
@ -444,39 +428,33 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 23
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE23]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE23]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE23]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0:%.+]], [[SA]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE23]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[[SB]]* [[SEC00:%[^,]+]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK24-DAG: [[SEC00]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SC]]**
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[SA]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0]], [[SC]]** [[CBP1]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC0]], [[SA]]*** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
|
||||
// CK24-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[SA]]***
|
||||
// CK24-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
|
||||
// CK24-DAG: store [[SA]]** [[SEC0]], [[SA]]*** [[CBP2]]
|
||||
// CK24-DAG: store i32* [[SEC1:%.+]], i32** [[CP2]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S2]]
|
||||
// CK24-DAG: [[SEC1]] = getelementptr {{.*}}[10 x i32]* [[SEC11:%[^,]+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[SEC11]] = getelementptr {{.*}}[[SA]]* [[SEC111:%[^,]+]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[SEC111]] = load [[SA]]*, [[SA]]** [[SEC1111:%[^,]+]],
|
||||
|
@ -492,41 +470,35 @@ int explicit_maps_struct_fields(int a){
|
|||
{ p->a++; }
|
||||
|
||||
// Region 24
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE24]]{{.+}}, i8** null)
|
||||
// CK24-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE24]]{{.+}}, {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE24]]{{.+}}, i8** null)
|
||||
// CK24-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK24-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK24-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK24-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SC]]**
|
||||
// CK24-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SB]]***
|
||||
// CK24-DAG: store [[SC]]* [[VAR0:%.+]], [[SC]]** [[CBP0]]
|
||||
// CK24-DAG: store [[SB]]** [[SEC0:%.+]], [[SB]]*** [[CP0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* [[S0]]
|
||||
// CK24-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE24]], i32 0, i32 0),
|
||||
// CK24-DAG: [[SEC0]] = getelementptr {{.*}}[[SC]]* [[VAR00:%.+]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK24-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SB]]***
|
||||
// CK24-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [[SA]]***
|
||||
// CK24-DAG: store [[SB]]** [[SEC0]], [[SB]]*** [[CBP1]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC1:%.+]], [[SA]]*** [[CP1]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S1]]
|
||||
// CK24-DAG: [[SEC1]] = getelementptr {{.*}}[[SB]]* [[SEC11:%[^,]+]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK24-DAG: [[SEC11]] = load [[SB]]*, [[SB]]** [[SEC111:%[^,]+]],
|
||||
// CK24-DAG: [[SEC111]] = getelementptr {{.*}}[[SC]]* [[VAR000:%.+]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK24-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK24-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[SA]]***
|
||||
// CK24-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to [[SA]]***
|
||||
// CK24-DAG: store [[SA]]** [[SEC1]], [[SA]]*** [[CBP2]]
|
||||
// CK24-DAG: store [[SA]]** [[SEC2:%.+]], [[SA]]*** [[CP2]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S2]]
|
||||
// CK24-DAG: [[SEC2]] = getelementptr {{.*}}[[SA]]* [[SEC22:%[^,]+]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK24-DAG: [[SEC22]] = load [[SA]]*, [[SA]]** [[SEC222:%[^,]+]],
|
||||
// CK24-DAG: [[SEC222]] = getelementptr {{.*}}[[SB]]* [[SEC2222:%[^,]+]], i{{.+}} 0, i{{.+}} 4
|
||||
|
@ -535,12 +507,10 @@ int explicit_maps_struct_fields(int a){
|
|||
|
||||
// CK24-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK24-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK24-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK24-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to [[SA]]***
|
||||
// CK24-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i32**
|
||||
// CK24-DAG: store [[SA]]** [[SEC2]], [[SA]]*** [[CBP3]]
|
||||
// CK24-DAG: store i32* [[SEC3:%.+]], i32** [[CP3]]
|
||||
// CK24-DAG: store i64 {{.+}}, i64* [[S3]]
|
||||
// CK24-DAG: [[SEC3]] = getelementptr {{.*}}[[SA]]* [[SEC33:%[^,]+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK24-DAG: [[SEC33]] = load [[SA]]*, [[SA]]** [[SEC333:%[^,]+]],
|
||||
// CK24-DAG: [[SEC333]] = getelementptr {{.*}}[[SA]]* [[SEC3333:%[^,]+]], i{{.+}} 0, i{{.+}} 1
|
||||
|
|
|
@ -37,12 +37,15 @@
|
|||
// CK29: [[SSB:%.+]] = type { [[SSA]]*, [[SSA]]** }
|
||||
|
||||
// CK29-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK29: [[SIZE00:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 80]
|
||||
// CK29: [[MTYPE00:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710675]
|
||||
|
||||
// CK29-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK29: [[SIZE01:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 {{8|4}}, i64 80]
|
||||
// CK29: [[MTYPE01:@.+]] = private {{.*}}constant [3 x i64] [i64 32, i64 281474976710672, i64 19]
|
||||
|
||||
// CK29-LABEL: @.__omp_offloading_{{.*}}foo{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK29: [[SIZE02:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 80]
|
||||
// CK29: [[MTYPE02:@.+]] = private {{.*}}constant [2 x i64] [i64 32, i64 281474976710675]
|
||||
|
||||
struct SSA{
|
||||
|
@ -60,31 +63,27 @@ struct SSB{
|
|||
void foo() {
|
||||
|
||||
// Region 00
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[Z:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null, i8** null)
|
||||
|
||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SSB]]**
|
||||
// CK29-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SSA]]***
|
||||
// CK29-DAG: store [[SSB]]* [[VAR0:%.+]], [[SSB]]** [[CBP0]]
|
||||
// CK29-DAG: store [[SSA]]** [[VAR00:%.+]], [[SSA]]*** [[CP0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK29-DAG: [[VAR0]] = load [[SSB]]*, [[SSB]]** %
|
||||
// CK29-DAG: [[VAR00]] = getelementptr inbounds [[SSB]], [[SSB]]* [[VAR0]], i32 0, i32 0
|
||||
|
||||
// CK29-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to double****
|
||||
// CK29-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK29-DAG: store double*** [[VAR1:%.+]], double**** [[CBP2]]
|
||||
// CK29-DAG: store double* [[VAR2:%.+]], double** [[CP2]]
|
||||
// CK29-DAG: store i64 80, i64* [[S2]]
|
||||
// CK29-DAG: [[VAR1]] = getelementptr inbounds [[SSA]], [[SSA]]* %{{.+}}, i32 0, i32 1
|
||||
// CK29-DAG: [[VAR2]] = getelementptr inbounds double, double* [[VAR22:%.+]], i{{.+}} 0
|
||||
// CK29-DAG: [[VAR22]] = load double*, double** %{{.+}},
|
||||
|
@ -96,40 +95,34 @@ struct SSB{
|
|||
}
|
||||
|
||||
// Region 01
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null, i8** null)
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE01]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE01]]{{.+}}, i8** null, i8** null)
|
||||
|
||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SSB]]**
|
||||
// CK29-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SSA]]****
|
||||
// CK29-DAG: store [[SSB]]* [[VAR0]], [[SSB]]** [[CBP0]]
|
||||
// CK29-DAG: store [[SSA]]*** [[VAR000:%.+]], [[SSA]]**** [[CP0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE01]], i32 0, i32 0),
|
||||
// CK29-DAG: [[VAR000]] = getelementptr inbounds [[SSB]], [[SSB]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK29-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[SSA]]****
|
||||
// CK29-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double***
|
||||
// CK29-DAG: store [[SSA]]*** [[VAR000]], [[SSA]]**** [[CBP1]]
|
||||
// CK29-DAG: store double** [[VAR1:%.+]], double*** [[CP1]]
|
||||
// CK29-DAG: store i64 {{8|4}}, i64* [[S1]]
|
||||
// CK29-DAG: [[VAR1]] = getelementptr inbounds [[SSA]], [[SSA]]* %{{.+}}, i32 0, i32 0
|
||||
|
||||
// CK29-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK29-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK29-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK29-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to double***
|
||||
// CK29-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK29-DAG: store double** [[VAR1]], double*** [[CBP2]]
|
||||
// CK29-DAG: store double* [[VAR2:%.+]], double** [[CP2]]
|
||||
// CK29-DAG: store i64 80, i64* [[S2]]
|
||||
// CK29-DAG: [[VAR2]] = getelementptr inbounds double, double* [[VAR22:%.+]], i{{.+}} 0
|
||||
// CK29-DAG: [[VAR22]] = load double*, double** %{{.+}},
|
||||
|
||||
|
@ -140,30 +133,26 @@ struct SSB{
|
|||
}
|
||||
|
||||
// Region 02
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null, i8** null)
|
||||
// CK29-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE02]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE02]]{{.+}}, i8** null, i8** null)
|
||||
|
||||
// CK29-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK29-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK29-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK29-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK29-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[SSB]]**
|
||||
// CK29-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [[SSA]]****
|
||||
// CK29-DAG: store [[SSB]]* [[VAR0]], [[SSB]]** [[CBP0]]
|
||||
// CK29-DAG: store [[SSA]]*** [[VAR000:%.+]], [[SSA]]**** [[CP0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK29-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE02]], i32 0, i32 0),
|
||||
// CK29-DAG: [[VAR000]] = getelementptr inbounds [[SSB]], [[SSB]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
// CK29-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK29-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to double****
|
||||
// CK29-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK29-DAG: store double*** [[VAR1:%.+]], double**** [[CBP2]]
|
||||
// CK29-DAG: store double* [[VAR2:%.+]], double** [[CP2]]
|
||||
// CK29-DAG: store i64 80, i64* [[S2]]
|
||||
// CK29-DAG: [[VAR1]] = getelementptr inbounds [[SSA]], [[SSA]]* %{{.+}}, i32 0, i32 1
|
||||
// CK29-DAG: [[VAR2]] = getelementptr inbounds double, double* [[VAR22:%.+]], i{{.+}} 0
|
||||
// CK29-DAG: [[VAR22]] = load double*, double** %{{.+}},
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
// CK30-DAG: [[STRUCT:%.+]] = type { [[BASE]], i32*, i32*, i32, i32* }
|
||||
|
||||
// CK30-LABEL: @.__omp_offloading_{{.*}}map_with_deep_copy{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK30: [[SIZE00:@.+]] = private unnamed_addr global [4 x i64] [i64 0, i64 {{56|28}}, i64 4, i64 4]
|
||||
// The first element: 0x20 - OMP_MAP_TARGET_PARAM
|
||||
// 2: 0x1000000000003 - OMP_MAP_MEMBER_OF(0) | OMP_MAP_TO | OMP_MAP_FROM - copies all the data in structs excluding deep-copied elements (from &s to end of s).
|
||||
// 3-4: 0x1000000000013 - OMP_MAP_MEMBER_OF(0) | OMP_MAP_PTR_AND_OBJ | OMP_MAP_TO | OMP_MAP_FROM - deep copy of the pointers + pointee.
|
||||
|
@ -55,8 +56,7 @@ typedef struct StructWithPtrTag : public Base {
|
|||
int *ptr1;
|
||||
} StructWithPtr;
|
||||
|
||||
// CK30-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @.__omp_offloading_{{.*}}map_with_deep_copy{{.*}}_l{{[0-9]+}}.region_id, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[MTYPE00]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CK30-DAG: [[GEPS]] = getelementptr inbounds [4 x i{{64|32}}], [4 x i64]* [[SIZES:%.+]], i32 0, i32 0
|
||||
// CK30-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @.__omp_offloading_{{.*}}map_with_deep_copy{{.*}}_l{{[0-9]+}}.region_id, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE00]], i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[MTYPE00]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CK30-DAG: [[GEPP]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[PTRS:%.+]], i32 0, i32 0
|
||||
// CK30-DAG: [[GEPBP]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[BASES:%.+]], i32 0, i32 0
|
||||
|
||||
|
@ -66,8 +66,7 @@ typedef struct StructWithPtrTag : public Base {
|
|||
// CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[PTR]] to [[STRUCT]]**
|
||||
// CK30-DAG: store [[STRUCT]]* [[S]], [[STRUCT]]** [[BC]],
|
||||
// CK30-DAG: [[SIZE:%.+]] = getelementptr inbounds [4 x i{{64|32}}], [4 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CK30-DAG: store i64 [[S_ALLOC_SIZE:%.+]], i64* [[SIZE]],
|
||||
// CK30-DAG: store i64 [[S_ALLOC_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK30-DAG: [[S_ALLOC_SIZE]] = sdiv exact i64 [[DIFF:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
// CK30-DAG: [[DIFF]] = sub i64 [[S_END_BC:%.+]], [[S_BEGIN_BC:%.+]]
|
||||
// CK30-DAG: [[S_BEGIN_BC]] = ptrtoint i8* [[S_BEGIN:%.+]] to i64
|
||||
|
@ -82,8 +81,6 @@ typedef struct StructWithPtrTag : public Base {
|
|||
// CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[PTRS]], i32 0, i32 1
|
||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[PTR]] to [[STRUCT]]**
|
||||
// CK30-DAG: store [[STRUCT]]* [[S]], [[STRUCT]]** [[BC]],
|
||||
// CK30-DAG: [[SIZE:%.+]] = getelementptr inbounds [4 x i64], [4 x i64]* [[SIZES]], i32 0, i32 1
|
||||
// CK30-DAG: store i64 {{56|28}}, i64* [[SIZE]],
|
||||
|
||||
// CK30-DAG: [[BASE_PTR:%.+]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[BASES]], i32 0, i32 2
|
||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[BASE_PTR]] to i32***
|
||||
|
@ -91,8 +88,6 @@ typedef struct StructWithPtrTag : public Base {
|
|||
// CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[PTRS]], i32 0, i32 2
|
||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[PTR]] to i32**
|
||||
// CK30-DAG: store i32* [[S_PTR1_BEGIN:%.+]], i32** [[BC]],
|
||||
// CK30-DAG: [[SIZE:%.+]] = getelementptr inbounds [4 x i64], [4 x i64]* [[SIZES]], i32 0, i32 2
|
||||
// CK30-DAG: store i64 4, i64* [[SIZE]],
|
||||
// CK30-DAG: [[S_PTR1]] = getelementptr inbounds [[STRUCT]], [[STRUCT]]* [[S]], i32 0, i32 4
|
||||
// CK30-DAG: [[S_PTR1_BEGIN]] = getelementptr inbounds i32, i32* [[S_PTR1_BEGIN_REF:%.+]], i{{64|32}} 0
|
||||
// CK30-DAG: [[S_PTR1_BEGIN_REF]] = load i32*, i32** [[S_PTR1:%.+]],
|
||||
|
@ -104,8 +99,6 @@ typedef struct StructWithPtrTag : public Base {
|
|||
// CK30-DAG: [[PTR:%.+]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[PTRS]], i32 0, i32 3
|
||||
// CK30-DAG: [[BC:%.+]] = bitcast i8** [[PTR]] to i32**
|
||||
// CK30-DAG: store i32* [[S_PTRBASE1_BEGIN:%.+]], i32** [[BC]],
|
||||
// CK30-DAG: [[SIZE:%.+]] = getelementptr inbounds [4 x i{{64|32}}], [4 x i{{64|32}}]* [[SIZES]], i32 0, i32 3
|
||||
// CK30-DAG: store i{{64|32}} 4, i{{64|32}}* [[SIZE]],
|
||||
// CK30-DAG: [[S_PTRBASE1]] = getelementptr inbounds [[BASE]], [[BASE]]* [[S_BASE:%.+]], i32 0, i32 2
|
||||
// CK30-DAG: [[S_BASE]] = bitcast [[STRUCT]]* [[S]] to [[BASE]]*
|
||||
// CK30-DAG: [[S_PTRBASE1_BEGIN]] = getelementptr inbounds i32, i32* [[S_PTRBASE1_BEGIN_REF:%.+]], i{{64|32}} 0
|
||||
|
|
|
@ -41,6 +41,7 @@ struct ST {
|
|||
|
||||
// CK31A-LABEL: @.__omp_offloading_{{.*}}explicit_maps_single{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
//
|
||||
// CK31A: [[SIZE00:@.+]] = private {{.*}}global [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4]
|
||||
// PRESENT=0x1000 | TARGET_PARAM=0x20 = 0x1020
|
||||
// CK31A-USE: [[MTYPE00:@.+]] = private {{.*}}constant [7 x i64] [i64 [[#0x1020]],
|
||||
// CK31A-NOUSE: [[MTYPE00:@.+]] = private {{.*}}constant [7 x i64] [i64 [[#0x1000]],
|
||||
|
@ -84,80 +85,67 @@ void explicit_maps_single (int ii){
|
|||
// CK31A: [[ST1_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST1]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A: [[ST2_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A: [[ST2_J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31A-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 7, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* [[GEPS:%.+]], i64* getelementptr {{.+}}[7 x i{{.+}}]* [[MTYPE00]]{{.+}})
|
||||
// CK31A-DAG: [[GEPS]] = getelementptr inbounds [7 x i64], [7 x i64]* [[S:%.+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 7, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* getelementptr {{.+}}[7 x i{{.+}}]* [[SIZE00]]{{.+}}, i64* getelementptr {{.+}}[7 x i{{.+}}]* [[MTYPE00]]{{.+}})
|
||||
// CK31A-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK31A-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
|
||||
// st1
|
||||
// CK31A-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31A-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP0]]
|
||||
// CK31A-DAG: store i32* [[ST1_I]], i32** [[CP0]]
|
||||
// CK31A-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK31A-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([7 x i64], [7 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
|
||||
// st1.j
|
||||
// CK31A-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31A-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31A-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31A-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP1]]
|
||||
// CK31A-DAG: store i32* [[ST1_J]], i32** [[CP1]]
|
||||
// CK31A-DAG: store i64 4, i64* [[S1]]
|
||||
|
||||
// st1.i
|
||||
// CK31A-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31A-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31A-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31A-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP2]]
|
||||
// CK31A-DAG: store i32* [[ST1_I]], i32** [[CP2]]
|
||||
// CK31A-DAG: store i64 4, i64* [[S2]]
|
||||
|
||||
// a
|
||||
// CK31A-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK31A-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK31A-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK31A-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i32**
|
||||
// CK31A-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i32**
|
||||
// CK31A-DAG: store i32* [[A]], i32** [[CBP3]]
|
||||
// CK31A-DAG: store i32* [[A]], i32** [[CP3]]
|
||||
// CK31A-DAG: store i64 4, i64* [[S3]]
|
||||
|
||||
// st2
|
||||
// CK31A-DAG: [[BP4:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK31A-DAG: [[P4:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK31A-DAG: [[S4:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 4
|
||||
// CK31A-DAG: [[CBP4:%.+]] = bitcast i8** [[BP4]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP4:%.+]] = bitcast i8** [[P4]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP4]]
|
||||
// CK31A-DAG: store i32* [[ST2_I]], i32** [[CP4]]
|
||||
// CK31A-DAG: store i64 %{{.+}}, i64* [[S4]]
|
||||
// CK31A-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([7 x i64], [7 x i64]* [[SIZE00]], i32 0, i32 4),
|
||||
|
||||
// st2.i
|
||||
// CK31A-DAG: [[BP5:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 5
|
||||
// CK31A-DAG: [[P5:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 5
|
||||
// CK31A-DAG: [[S5:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 5
|
||||
// CK31A-DAG: [[CBP5:%.+]] = bitcast i8** [[BP5]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP5:%.+]] = bitcast i8** [[P5]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP5]]
|
||||
// CK31A-DAG: store i32* [[ST2_I]], i32** [[CP5]]
|
||||
// CK31A-DAG: store i64 4, i64* [[S5]]
|
||||
|
||||
// st2.j
|
||||
// CK31A-DAG: [[BP6:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 6
|
||||
// CK31A-DAG: [[P6:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 6
|
||||
// CK31A-DAG: [[S6:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 6
|
||||
// CK31A-DAG: [[CBP6:%.+]] = bitcast i8** [[BP6]] to [[ST]]**
|
||||
// CK31A-DAG: [[CP6:%.+]] = bitcast i8** [[P6]] to i32**
|
||||
// CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP6]]
|
||||
// CK31A-DAG: store i32* [[ST2_J]], i32** [[CP6]]
|
||||
// CK31A-DAG: store i64 4, i64* [[S6]]
|
||||
|
||||
// CK31A-USE: call void [[CALL00:@.+]]([[ST]]* [[ST1]], i32* [[A]], [[ST]]* [[ST2]])
|
||||
// CK31A-NOUSE: call void [[CALL00:@.+]]()
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
// MEMBER_OF_1=0x1000000000000 | FROM=0x2 | TO=0x1 = 0x1000000000003
|
||||
|
||||
// CK31B-LABEL: @.__omp_offloading_{{.*}}test_present_members{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
|
||||
// CK31B: [[SIZE00:@.+]] = private {{.*}}global [3 x i64] [i64 0, i64 4, i64 4]
|
||||
// CK31B-USE: [[MTYPE00:@.+]] = private {{.*}}constant [3 x i64] [i64 [[#0x1020]],
|
||||
// CK31B-NOUSE: [[MTYPE00:@.+]] = private {{.*}}constant [3 x i64] [i64 [[#0x1000]],
|
||||
// CK31B-USE-SAME: {{^}} i64 [[#0x1000000001003]], i64 [[#0x1000000000003]]]
|
||||
|
@ -55,40 +56,34 @@ struct ST {
|
|||
// Region 00
|
||||
// CK31B: [[J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[THIS:%.+]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31B: [[I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[THIS]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31B-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* [[GEPS:%.+]], i64* getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE00]]{{.+}})
|
||||
// CK31B-DAG: [[GEPS]] = getelementptr inbounds [3 x i64], [3 x i64]* [[S:%.+]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31B-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 3, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* getelementptr {{.+}}[3 x i{{.+}}]* [[SIZE00]]{{.+}}, i64* getelementptr {{.+}}[3 x i{{.+}}]* [[MTYPE00]]{{.+}})
|
||||
// CK31B-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK31B-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
|
||||
// this
|
||||
// CK31B-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31B-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31B-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK31B-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK31B-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
|
||||
// CK31B-DAG: store [[ST]]* [[THIS]], [[ST]]** [[CBP0]]
|
||||
// CK31B-DAG: store i32* [[I]], i32** [[CP0]]
|
||||
// CK31B-DAG: store i64 %{{.+}}, i64* [[S0]]
|
||||
// CK31B-DAG: store i64 %{{.+}}, i64* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
|
||||
// j
|
||||
// CK31B-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31B-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31B-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK31B-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
|
||||
// CK31B-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
|
||||
// CK31B-DAG: store [[ST]]* [[THIS]], [[ST]]** [[CBP1]]
|
||||
// CK31B-DAG: store i32* [[J]], i32** [[CP1]]
|
||||
// CK31B-DAG: store i64 4, i64* [[S1]]
|
||||
|
||||
// i
|
||||
// CK31B-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31B-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31B-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK31B-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
|
||||
// CK31B-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
|
||||
// CK31B-DAG: store [[ST]]* [[THIS]], [[ST]]** [[CBP2]]
|
||||
// CK31B-DAG: store i32* [[I]], i32** [[CP2]]
|
||||
// CK31B-DAG: store i64 4, i64* [[S2]]
|
||||
|
||||
// CK31B-USE: call void [[CALL00:@.+]]([[ST]]* [[THIS]])
|
||||
// CK31B-NOUSE: call void [[CALL00:@.+]]()
|
||||
|
|
|
@ -35,10 +35,12 @@ public:
|
|||
void foo();
|
||||
};
|
||||
|
||||
// CK34-DAG: [[SIZE_TO:@.+]] = private {{.*}}global [4 x i64] [i64 0, i64 0, i64 0, i64 {{16|8}}]
|
||||
// TARGET_PARAM = 0x20
|
||||
// MEMBER_OF_1 | TO = 0x1000000000001
|
||||
// MEMBER_OF_1 | IMPLICIT | TO = 0x1000000000201
|
||||
// CK34-DAG: [[MTYPE_TO:@.+]] = {{.+}}constant [4 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]], i64 [[#0x1000000000201]]]
|
||||
// CK34-DAG: [[SIZE_FROM:@.+]] = private {{.*}}global [4 x i64] [i64 0, i64 0, i64 0, i64 {{16|8}}]
|
||||
// TARGET_PARAM = 0x20
|
||||
// MEMBER_OF_1 | FROM = 0x1000000000002
|
||||
// MEMBER_OF_1 | IMPLICIT | FROM = 0x1000000000202
|
||||
|
@ -47,17 +49,15 @@ public:
|
|||
void default_mapper() {
|
||||
S s;
|
||||
|
||||
// CK34-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_TO]]{{.+}}, i8** null, i8** [[GEPMF:%.+]])
|
||||
// CK34-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE_TO]]{{.+}}, {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_TO]]{{.+}}, i8** null, i8** [[GEPMF:%.+]])
|
||||
// CK34-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK34-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK34-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK34-DAG: [[GEPMF]] = bitcast [4 x i8*]* [[MF:%.+]] to i8**
|
||||
|
||||
// pass TARGET_PARAM {&s, &s, ((void*)(&s+1)-(void*)&s)}
|
||||
|
||||
// CK34-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[MF0:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 0
|
||||
|
||||
// CK34-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to %class.S**
|
||||
|
@ -65,7 +65,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR:%.+]], %class.S** [[BPC0]],
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC0]],
|
||||
// CK34-DAG: store i64 [[S_SIZE:%.+]], i64* [[S0]],
|
||||
// CK34-DAG: store i64 [[S_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 0),
|
||||
// CK34-DAG: store i8* null, i8** [[MF0]],
|
||||
|
||||
// CK34-DAG: [[S_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
|
@ -80,7 +80,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[MF1:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK34-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to %class.S**
|
||||
|
@ -88,7 +87,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC1]],
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC1]],
|
||||
// CK34-DAG: store i64 [[A_SIZE:%.+]], i64* [[S1]],
|
||||
// CK34-DAG: store i64 [[A_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 1),
|
||||
// CK34-DAG: store i8* null, i8** [[MF1]],
|
||||
|
||||
// CK34-DAG: [[A_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
|
@ -104,7 +103,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[MF2:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK34-DAG: [[BPC2:%.+]] = bitcast i8** [[BP2]] to %class.S**
|
||||
|
@ -112,7 +110,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC2]],
|
||||
// CK34-DAG: store %class.C* [[C_END:%.+]], %class.C** [[PC2]],
|
||||
// CK34-DAG: store i64 [[B_SIZE:%.+]], i64* [[S2]],
|
||||
// CK34-DAG: store i64 [[B_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 2),
|
||||
// CK34-DAG: store i8* null, i8** [[MF2]],
|
||||
|
||||
// CK34-DAG: [[C_END]] = getelementptr %class.C, %class.C* [[C_ADDR]], i{{.+}} 1
|
||||
|
@ -131,7 +129,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[MF3:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 3
|
||||
|
||||
// CK34-DAG: [[BPC3:%.+]] = bitcast i8** [[BP3]] to %class.S**
|
||||
|
@ -139,8 +136,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC3]],
|
||||
// CK34-DAG: store %class.C* [[C_ADDR:%.+]], %class.C** [[PC3]],
|
||||
// CK34-64-DAG: store i64 16, i64* [[S3]],
|
||||
// CK34-32-DAG: store i64 8, i64* [[S3]],
|
||||
// CK34-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[C_DEFAULT_MAPPER:@.+]] to i8*), i8** [[MF3]],
|
||||
|
||||
// CK34-64-DAG: [[C_ADDR]] = getelementptr inbounds %class.S, %class.S* [[S_ADDR]], i32 0, i32 2
|
||||
|
@ -151,17 +146,15 @@ void default_mapper() {
|
|||
|
||||
// CK34 : call void
|
||||
|
||||
// CK34-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}, i8** null, i8** [[GEPMF:%.+]])
|
||||
// CK34-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE_FROM]]{{.+}}, {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}, i8** null, i8** [[GEPMF:%.+]])
|
||||
// CK34-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK34-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK34-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
// CK34-DAG: [[GEPMF]] = bitcast [4 x i8*]* [[MF:%.+]] to i8**
|
||||
|
||||
// pass TARGET_PARAM {&s, &s, ((void*)(&s+1)-(void*)&s)}
|
||||
|
||||
// CK34-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK34-DAG: [[MF0:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 0
|
||||
|
||||
// CK34-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to %class.S**
|
||||
|
@ -169,7 +162,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC0]],
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC0]],
|
||||
// CK34-DAG: store i64 [[S_SIZE:%.+]], i64* [[S0]],
|
||||
// CK34-DAG: store i64 [[S_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_FROM]], i32 0, i32 0),
|
||||
// CK34-DAG: store i8* null, i8** [[MF0]],
|
||||
|
||||
// CK34-DAG: [[S_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
|
@ -184,7 +177,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK34-DAG: [[MF1:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK34-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to %class.S**
|
||||
|
@ -192,7 +184,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC1]],
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC1]],
|
||||
// CK34-DAG: store i64 [[A_SIZE:%.+]], i64* [[S1]],
|
||||
// CK34-DAG: store i64 [[A_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_FROM]], i32 0, i32 1),
|
||||
// CK34-DAG: store i8* null, i8** [[MF1]],
|
||||
|
||||
// CK34-DAG: [[A_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
|
@ -208,7 +200,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK34-DAG: [[MF2:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK34-DAG: [[BPC2:%.+]] = bitcast i8** [[BP2]] to %class.S**
|
||||
|
@ -216,7 +207,7 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC2]],
|
||||
// CK34-DAG: store %class.C* [[C_END:%.+]], %class.C** [[PC2]],
|
||||
// CK34-DAG: store i64 [[B_SIZE:%.+]], i64* [[S2]],
|
||||
// CK34-DAG: store i64 [[B_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_FROM]], i32 0, i32 2),
|
||||
// CK34-DAG: store i8* null, i8** [[MF2]],
|
||||
|
||||
// CK34-DAG: [[C_END]] = getelementptr %class.C, %class.C* [[C_ADDR]], i{{.+}} 1
|
||||
|
@ -235,7 +226,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK34-DAG: [[MF3:%.+]] = getelementptr inbounds {{.+}}[[MF]], i{{.+}} 0, i{{.+}} 3
|
||||
|
||||
// CK34-DAG: [[BPC3:%.+]] = bitcast i8** [[BP3]] to %class.S**
|
||||
|
@ -243,8 +233,6 @@ void default_mapper() {
|
|||
|
||||
// CK34-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC3]],
|
||||
// CK34-DAG: store %class.C* [[C_ADDR:%.+]], %class.C** [[PC3]],
|
||||
// CK34-64-DAG: store i64 16, i64* [[S3]],
|
||||
// CK34-32-DAG: store i64 8, i64* [[S3]],
|
||||
// CK34-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[C_DEFAULT_MAPPER]] to i8*), i8** [[MF3]],
|
||||
|
||||
// CK34-64-DAG: [[C_ADDR]] = getelementptr inbounds %class.S, %class.S* [[S_ADDR]], i32 0, i32 2
|
||||
|
|
|
@ -27,10 +27,12 @@ public:
|
|||
void foo();
|
||||
};
|
||||
|
||||
// CK35-DAG: [[SIZE_TO:@.+]] = private {{.*}}global [4 x i64] [i64 0, i64 0, i64 0, i64 8]
|
||||
// TARGET_PARAM = 0x20
|
||||
// MEMBER_OF_1 | TO = 0x1000000000001
|
||||
// MEMBER_OF_1 | PTR_AND_OBJ | TO = 0x1000000000011
|
||||
// CK35-DAG: [[MTYPE_TO:@.+]] = {{.+}}constant [4 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]], i64 [[#0x1000000000011]]]
|
||||
// CK35-DAG: [[SIZE_FROM:@.+]] = private {{.*}}global [2 x i64] [i64 0, i64 8]
|
||||
// TARGET_PARAM = 0x20
|
||||
// MEMBER_OF_1 | PTR_AND_OBJ | FROM = 0x1000000000012
|
||||
// CK35-DAG: [[MTYPE_FROM:@.+]] = {{.+}}constant [2 x i64] [i64 [[#0x20]], i64 [[#0x1000000000012]]]
|
||||
|
@ -39,23 +41,21 @@ void ref_map() {
|
|||
double b;
|
||||
S s(b);
|
||||
|
||||
// CK35-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_TO]]{{.+}}, i8** null, i8** null)
|
||||
// CK35-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 4, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[SIZE_TO]]{{.+}}, {{.+}}getelementptr {{.+}}[4 x i{{.+}}]* [[MTYPE_TO]]{{.+}}, i8** null, i8** null)
|
||||
// CK35-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK35-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK35-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// pass TARGET_PARAM {&s, &s, ((void*)(&s+1)-(void*)&s)}
|
||||
|
||||
// CK35-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK35-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK35-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
||||
// CK35-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to %class.S**
|
||||
// CK35-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to %class.S**
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR:%.+]], %class.S** [[BPC0]],
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC0]],
|
||||
// CK35-DAG: store i64 [[S_SIZE:%.+]], i64* [[S0]],
|
||||
// CK35-DAG: store i64 [[S_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 0),
|
||||
|
||||
// CK35-DAG: [[S_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
// CK35-DAG: [[SZ]] = sub i64 [[S_1_INTPTR:%.+]], [[S_INTPTR:%.+]]
|
||||
|
@ -69,14 +69,13 @@ void ref_map() {
|
|||
|
||||
// CK35-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK35-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK35-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK35-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to %class.S**
|
||||
// CK35-DAG: [[PC1:%.+]] = bitcast i8** [[P1]] to %class.S**
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC1]],
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[PC1]],
|
||||
// CK35-DAG: store i64 [[A_SIZE:%.+]], i64* [[S1]],
|
||||
// CK35-DAG: store i64 [[A_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 1),
|
||||
|
||||
// CK35-DAG: [[A_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
// CK35-DAG: [[SZ]] = sub i64 [[B_BEGIN_INTPTR:%.+]], [[S_INTPTR:%.+]]
|
||||
|
@ -90,14 +89,13 @@ void ref_map() {
|
|||
|
||||
// CK35-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK35-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK35-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
|
||||
|
||||
// CK35-DAG: [[BPC2:%.+]] = bitcast i8** [[BP2]] to %class.S**
|
||||
// CK35-DAG: [[PC2:%.+]] = bitcast i8** [[P2]] to double***
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC2]],
|
||||
// CK35-DAG: store double** [[B_END:%.+]], double*** [[PC2]],
|
||||
// CK35-DAG: store i64 [[REM_SIZE:%.+]], i64* [[S2]],
|
||||
// CK35-DAG: store i64 [[REM_SIZE:%.+]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* [[SIZE_TO]], i32 0, i32 2),
|
||||
|
||||
// CK35-DAG: [[B_END]] = getelementptr double*, double** [[B_ADDR]], i{{.+}} 1
|
||||
|
||||
|
@ -115,14 +113,12 @@ void ref_map() {
|
|||
|
||||
// CK35-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK35-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
|
||||
// CK35-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
|
||||
|
||||
// CK35-DAG: [[BPC3:%.+]] = bitcast i8** [[BP3]] to %class.S**
|
||||
// CK35-DAG: [[PC3:%.+]] = bitcast i8** [[P3]] to double**
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC3]],
|
||||
// CK35-DAG: store double* [[B_ADDR:%.+]], double** [[PC3]],
|
||||
// CK35-DAG: store i64 8, i64* [[S3]],
|
||||
|
||||
// CK35-DAG: [[B_ADDR]] = load double*, double** [[B_REF:%.+]],
|
||||
// CK35-DAG: [[B_REF]] = getelementptr inbounds %class.S, %class.S* [[S_ADDR]], i32 0, i32 1
|
||||
|
@ -132,23 +128,21 @@ void ref_map() {
|
|||
|
||||
// CK35 : call void
|
||||
|
||||
// CK35-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}, i8** null, i8** null)
|
||||
// CK35-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE_FROM]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE_FROM]]{{.+}}, i8** null, i8** null)
|
||||
// CK35-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK35-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK35-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// pass TARGET_PARAM {&s, &s.b, ((void*)(&s.b+1)-(void*)&s.b)}
|
||||
|
||||
// CK35-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK35-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK35-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
|
||||
// CK35-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to %class.S**
|
||||
// CK35-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC0]],
|
||||
// CK35-DAG: store double** [[SB_ADDR:%.+]], double*** [[PC0]],
|
||||
// CK35-DAG: store i64 [[B_SIZE:%.+]], i64* [[S0]],
|
||||
// CK35-DAG: store i64 [[B_SIZE:%.+]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE_FROM]], i32 0, i32 0),
|
||||
|
||||
// CK35-DAG: [[B_SIZE]] = sdiv exact i64 [[SZ:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
// CK35-DAG: [[SZ]] = sub i64 [[SB_1_INTPTR:%.+]], [[SB_INTPTR:%.+]]
|
||||
|
@ -163,14 +157,12 @@ void ref_map() {
|
|||
|
||||
// CK35-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK35-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK35-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
|
||||
|
||||
// CK35-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to %class.S**
|
||||
// CK35-DAG: [[PC1:%.+]] = bitcast i8** [[P1]] to double**
|
||||
|
||||
// CK35-DAG: store %class.S* [[S_ADDR]], %class.S** [[BPC1]],
|
||||
// CK35-DAG: store double* [[B_ADDR:%.+]], double** [[PC1]],
|
||||
// CK35-DAG: store i64 8, i64* [[S1]],
|
||||
|
||||
// CK35-DAG: [[B_ADDR]] = load double*, double** [[SB_ADDR]],
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,9 +5,11 @@
|
|||
#ifndef HEADER
|
||||
#define HEADER
|
||||
|
||||
// CHECK: [[SIZE_ENTER:@.+]] = private unnamed_addr global [2 x i64] [i64 0, i64 24]
|
||||
// 0 = OMP_MAP_NONE
|
||||
// 281474976710656 = 0x1000000000000 = OMP_MAP_MEMBER_OF of 1-st element
|
||||
// CHECK: [[MAP_ENTER:@.+]] = private unnamed_addr constant [2 x i64] [i64 0, i64 281474976710656]
|
||||
// CHECK: [[SIZE_EXIT:@.+]] = private unnamed_addr global [2 x i64] [i64 0, i64 24]
|
||||
// 281474976710664 = 0x1000000000008 = OMP_MAP_MEMBER_OF of 1-st element | OMP_MAP_DELETE
|
||||
// CHECK: [[MAP_EXIT:@.+]] = private unnamed_addr constant [2 x i64] [i64 0, i64 281474976710664]
|
||||
template <typename T>
|
||||
|
@ -22,7 +24,6 @@ struct maptest {
|
|||
maptest() {
|
||||
// CHECK: [[BPTRS:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[PTRS:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[SIZES:%.+]] = alloca [2 x i64],
|
||||
// CHECK: getelementptr inbounds
|
||||
// CHECK: [[S_ADDR:%.+]] = getelementptr inbounds %struct.maptest, %struct.maptest* [[THIS:%.+]], i32 0, i32 0
|
||||
// CHECK: [[S_DATA_ADDR:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_ADDR]], i32 0, i32 0
|
||||
|
@ -47,27 +48,22 @@ struct maptest {
|
|||
// CHECK: [[PTR0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR0_DATA:%.+]] = bitcast i8** [[PTR0]] to float**
|
||||
// CHECK: store float* [[S_DATA_0_ADDR]], float** [[PTR0_DATA]],
|
||||
// CHECK: [[SIZE0:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: store i64 [[SZ]], i64* [[SIZE0]],
|
||||
// CHECK: store i64 [[SZ]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE_ENTER]], i32 0, i32 0),
|
||||
// CHECK: [[BPTR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BPTRS]], i32 0, i32 1
|
||||
// CHECK: [[BPTR1_THIS:%.+]] = bitcast i8** [[BPTR1]] to %struct.maptest**
|
||||
// CHECK: store %struct.maptest* [[THIS]], %struct.maptest** [[BPTR1_THIS]],
|
||||
// CHECK: [[PTR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 1
|
||||
// CHECK: [[PTR1_DATA:%.+]] = bitcast i8** [[PTR1]] to float**
|
||||
// CHECK: store float* [[S_DATA_0_ADDR]], float** [[PTR1_DATA]],
|
||||
// CHECK: [[SIZE1:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 1
|
||||
// CHECK: store i64 24, i64* [[SIZE1]],
|
||||
// CHECK: [[BPTR:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BPTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[SIZE:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[BPTR]], i8** [[PTR]], i64* [[SIZE]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAP_ENTER]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call void @__tgt_target_data_begin_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[BPTR]], i8** [[PTR]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE_ENTER]], i32 0, i32 0), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAP_ENTER]], i32 0, i32 0), i8** null, i8** null)
|
||||
#pragma omp target enter data map(alloc : s.data[:6])
|
||||
}
|
||||
|
||||
~maptest() {
|
||||
// CHECK: [[BPTRS:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[PTRS:%.+]] = alloca [2 x i8*],
|
||||
// CHECK: [[SIZE:%.+]] = alloca [2 x i64],
|
||||
// CHECK: [[S_ADDR:%.+]] = getelementptr inbounds %struct.maptest, %struct.maptest* [[THIS:%.+]], i32 0, i32 0
|
||||
// CHECK: [[S_DATA_ADDR:%.+]] = getelementptr inbounds %struct.S, %struct.S* [[S_ADDR]], i32 0, i32 0
|
||||
// CHECK: [[S_DATA_0_ADDR:%.+]] = getelementptr inbounds [6 x float], [6 x float]* [[S_DATA_ADDR]], i64 0, i64 0
|
||||
|
@ -91,20 +87,16 @@ struct maptest {
|
|||
// CHECK: [[PTR0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR0_DATA:%.+]] = bitcast i8** [[PTR0]] to float**
|
||||
// CHECK: store float* [[S_DATA_0_ADDR]], float** [[PTR0_DATA]],
|
||||
// CHECK: [[SIZE0:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: store i64 [[SZ]], i64* [[SIZE0]],
|
||||
// CHECK: store i64 [[SZ]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE_EXIT]], i32 0, i32 0),
|
||||
// CHECK: [[BPTR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BPTRS]], i32 0, i32 1
|
||||
// CHECK: [[BPTR1_THIS:%.+]] = bitcast i8** [[BPTR1]] to %struct.maptest**
|
||||
// CHECK: store %struct.maptest* [[THIS]], %struct.maptest** [[BPTR1_THIS]],
|
||||
// CHECK: [[PTR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 1
|
||||
// CHECK: [[PTR1_DATA:%.+]] = bitcast i8** [[PTR1]] to float**
|
||||
// CHECK: store float* [[S_DATA_0_ADDR]], float** [[PTR1_DATA]],
|
||||
// CHECK: [[SIZE1:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 1
|
||||
// CHECK: store i64 24, i64* [[SIZE1]],
|
||||
// CHECK: [[BPTR:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BPTRS]], i32 0, i32 0
|
||||
// CHECK: [[PTR:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[PTRS]], i32 0, i32 0
|
||||
// CHECK: [[SIZE:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* [[SIZES]], i32 0, i32 0
|
||||
// CHECK: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[BPTR]], i8** [[PTR]], i64* [[SIZE]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAP_EXIT]], i32 0, i32 0), i8** null, i8** null)
|
||||
// CHECK: call void @__tgt_target_data_end_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[BPTR]], i8** [[PTR]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE_EXIT]], i32 0, i32 0), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAP_EXIT]], i32 0, i32 0), i8** null, i8** null)
|
||||
#pragma omp target exit data map(delete : s.data[:6])
|
||||
}
|
||||
};
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -83,11 +83,14 @@
|
|||
// CHECK-DAG: [[MAPT2:@.+]] = private unnamed_addr constant [3 x i64] [i64 800, i64 800, i64 800]
|
||||
// CHECK-DAG: [[SIZET3:@.+]] = private unnamed_addr constant [2 x i64] [i64 4, i64 2]
|
||||
// CHECK-DAG: [[MAPT3:@.+]] = private unnamed_addr constant [2 x i64] [i64 800, i64 800]
|
||||
// CHECK-DAG: [[SIZET4:@.+]] = private unnamed_addr global [9 x i64] [i64 4, i64 40, i64 {{8|4}}, i64 0, i64 400, i64 {{8|4}}, i64 {{8|4}}, i64 0, i64 {{16|12}}]
|
||||
// CHECK-DAG: [[MAPT4:@.+]] = private unnamed_addr constant [9 x i64] [i64 800, i64 547, i64 800, i64 547, i64 547, i64 800, i64 800, i64 547, i64 547]
|
||||
// CHECK-DAG: [[SIZET5:@.+]] = private unnamed_addr constant [3 x i64] [i64 4, i64 2, i64 40]
|
||||
// CHECK-DAG: [[MAPT5:@.+]] = private unnamed_addr constant [3 x i64] [i64 800, i64 800, i64 547]
|
||||
// CHECK-DAG: [[SIZET6:@.+]] = private unnamed_addr constant [4 x i64] [i64 4, i64 2, i64 1, i64 40]
|
||||
// CHECK-DAG: [[MAPT6:@.+]] = private unnamed_addr constant [4 x i64] [i64 800, i64 800, i64 800, i64 547]
|
||||
// OMP45-DAG: [[SIZET7:@.+]] = private unnamed_addr global [5 x i64] [i64 {{8|4}}, i64 4, i64 {{8|4}}, i64 {{8|4}}, i64 0]
|
||||
// OMP50-DAG: [[SIZET7:@.+]] = private unnamed_addr global [6 x i64] [i64 {{8|4}}, i64 4, i64 {{8|4}}, i64 {{8|4}}, i64 0, i64 1]
|
||||
// OMP45-DAG: [[MAPT7:@.+]] = private unnamed_addr constant [5 x i64] [i64 547, i64 800, i64 800, i64 800, i64 547]
|
||||
// OMP50-DAG: [[MAPT7:@.+]] = private unnamed_addr constant [6 x i64] [i64 547, i64 800, i64 800, i64 800, i64 547, i64 800]
|
||||
// CHECK-DAG: @{{.*}} = weak constant i8 0
|
||||
|
@ -237,37 +240,27 @@ int foo(int n) {
|
|||
// CHECK-32: [[CNSZSIZE:%.+]] = mul nuw i32 [[CNELEMSIZE2]], 8
|
||||
// CHECK-32: [[CNSIZE:%.+]] = sext i32 [[CNSZSIZE]] to i64
|
||||
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 9, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SR:%[^,]+]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 9, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 0), i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[MAPT4]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// CHECK-DAG: [[BPR]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP:%[^,]+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[PR]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P:%[^,]+]], i32 0, i32 0
|
||||
// CHECK-DAG: [[SR]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S:%[^,]+]], i32 0, i32 0
|
||||
|
||||
// CHECK-DAG: [[SADDR0:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX0:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX0:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR0:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX0]]
|
||||
// CHECK-DAG: [[SADDR1:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX1:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX1:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR1:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX1]]
|
||||
// CHECK-DAG: [[SADDR2:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX2:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX2:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR2:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX2]]
|
||||
// CHECK-DAG: [[SADDR3:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX3:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX3:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR3:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX3]]
|
||||
// CHECK-DAG: [[SADDR4:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX4:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX4]]
|
||||
// CHECK-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX4:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR4:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX4]]
|
||||
// CHECK-DAG: [[SADDR5:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX5:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX5]]
|
||||
// CHECK-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX5:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR5:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX5]]
|
||||
// CHECK-DAG: [[SADDR6:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX6:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX6]]
|
||||
// CHECK-DAG: [[BPADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX6:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR6:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX6]]
|
||||
// CHECK-DAG: [[SADDR7:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX7:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX7]]
|
||||
// CHECK-DAG: [[BPADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX7:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR7:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX7]]
|
||||
// CHECK-DAG: [[SADDR8:%.+]] = getelementptr inbounds [9 x i64], [9 x i64]* [[S]], i32 0, i32 [[IDX8:[0-9]+]]
|
||||
// CHECK-DAG: [[BPADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX8]]
|
||||
// CHECK-DAG: [[BPADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[BP]], i32 0, i32 [[IDX8:[0-9]+]]
|
||||
// CHECK-DAG: [[PADDR8:%.+]] = getelementptr inbounds [9 x i8*], [9 x i8*]* [[P]], i32 0, i32 [[IDX8]]
|
||||
|
||||
// The names below are not necessarily consistent with the names used for the
|
||||
|
@ -276,55 +269,48 @@ int foo(int n) {
|
|||
// CHECK-DAG: store i[[SZ]] [[A_CVAL]], i[[SZ]]* [[CPADDR0:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR0]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR0]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 4, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store [10 x float]* %{{.+}}, [10 x float]** [[CBPADDR1:%.+]],
|
||||
// CHECK-DAG: store [10 x float]* %{{.+}}, [10 x float]** [[CPADDR1:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR1]] = bitcast i8** {{%[^,]+}} to [10 x float]**
|
||||
// CHECK-DAG: [[CPADDR1]] = bitcast i8** {{%[^,]+}} to [10 x float]**
|
||||
// CHECK-DAG: store i64 40, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CBPADDR2:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CPADDR2:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR2]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR2]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store float* %{{.+}}, float** [[CBPADDR3:%.+]],
|
||||
// CHECK-DAG: store float* %{{.+}}, float** [[CPADDR3:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR3]] = bitcast i8** {{%[^,]+}} to float**
|
||||
// CHECK-DAG: [[CPADDR3]] = bitcast i8** {{%[^,]+}} to float**
|
||||
// CHECK-DAG: store i64 [[BNSIZE]], i64* {{%[^,]+}}
|
||||
// CHECK-DAG: store i64 [[BNSIZE]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 3),
|
||||
|
||||
// CHECK-DAG: store [5 x [10 x double]]* %{{.+}}, [5 x [10 x double]]** [[CBPADDR4:%.+]],
|
||||
// CHECK-DAG: store [5 x [10 x double]]* %{{.+}}, [5 x [10 x double]]** [[CPADDR4:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR4]] = bitcast i8** {{%[^,]+}} to [5 x [10 x double]]**
|
||||
// CHECK-DAG: [[CPADDR4]] = bitcast i8** {{%[^,]+}} to [5 x [10 x double]]**
|
||||
// CHECK-DAG: store i64 400, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] 5, i[[SZ]]* [[CBPADDR5:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] 5, i[[SZ]]* [[CPADDR5:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR5]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR5]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CBPADDR6:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CPADDR6:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR6]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR6]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store double* %{{.+}}, double** [[CBPADDR7:%.+]],
|
||||
// CHECK-DAG: store double* %{{.+}}, double** [[CPADDR7:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR7]] = bitcast i8** {{%[^,]+}} to double**
|
||||
// CHECK-DAG: [[CPADDR7]] = bitcast i8** {{%[^,]+}} to double**
|
||||
// CHECK-DAG: store i64 [[CNSIZE]], i64* {{%[^,]+}}
|
||||
// CHECK-DAG: store i64 [[CNSIZE]], i64* getelementptr inbounds ([9 x i64], [9 x i64]* [[SIZET4]], i32 0, i32 7),
|
||||
|
||||
// CHECK-DAG: store [[TT]]* %{{.+}}, [[TT]]** [[CBPADDR8:%.+]],
|
||||
// CHECK-DAG: store [[TT]]* %{{.+}}, [[TT]]** [[CPADDR8:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR8]] = bitcast i8** {{%[^,]+}} to [[TT]]**
|
||||
// CHECK-DAG: [[CPADDR8]] = bitcast i8** {{%[^,]+}} to [[TT]]**
|
||||
// CHECK-DAG: store i64 {{12|16}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-NEXT: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0
|
||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]]
|
||||
|
@ -532,46 +518,33 @@ int bar(int n){
|
|||
// CHECK-32: [[CSZSIZE:%.+]] = mul nuw i32 [[CELEMSIZE2]], 2
|
||||
// CHECK-32: [[CSIZE:%.+]] = sext i32 [[CSZSIZE]] to i64
|
||||
|
||||
// OMP45-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 5, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SR:%[^,]+]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// OMP50-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 6, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SR:%[^,]+]], i64* getelementptr inbounds ([6 x i64], [6 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// OMP45-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 5, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[SIZET7]], i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// OMP50-DAG: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{[^,]+}}, i32 6, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* getelementptr inbounds ([6 x i64], [6 x i64]* [[SIZET7]], i32 0, i32 0), i64* getelementptr inbounds ([6 x i64], [6 x i64]* [[MAPT7]], i32 0, i32 0), i8** null, i8** null, i32 1, i32 1)
|
||||
// OMP45-DAG: [[BPR]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP:%.+]], i32 0, i32 0
|
||||
// OMP45-DAG: [[PR]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// OMP45-DAG: [[SR]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S:%.+]], i32 0, i32 0
|
||||
// OMP45-DAG: [[SADDR0:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 [[IDX0:[0-9]+]]
|
||||
// OMP45-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX0]]
|
||||
// OMP45-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX0:[0-9]+]]
|
||||
// OMP45-DAG: [[PADDR0:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 [[IDX0]]
|
||||
// OMP45-DAG: [[SADDR1:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 [[IDX1:[0-9]+]]
|
||||
// OMP45-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX1]]
|
||||
// OMP45-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX1:[0-9]+]]
|
||||
// OMP45-DAG: [[PADDR1:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 [[IDX1]]
|
||||
// OMP45-DAG: [[SADDR2:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 [[IDX2:[0-9]+]]
|
||||
// OMP45-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX2]]
|
||||
// OMP45-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX2:[0-9]+]]
|
||||
// OMP45-DAG: [[PADDR2:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 [[IDX2]]
|
||||
// OMP45-DAG: [[SADDR3:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 [[IDX3:[0-9]+]]
|
||||
// OMP45-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX3]]
|
||||
// OMP45-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX3:[0-9]+]]
|
||||
// OMP45-DAG: [[PADDR3:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 [[IDX3]]
|
||||
// OMP45-DAG: [[SADDR4:%.+]] = getelementptr inbounds [5 x i64], [5 x i64]* [[S]], i32 [[IDX4:[0-9]+]]
|
||||
// OMP45-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX4]]
|
||||
// OMP45-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[BP]], i32 [[IDX4:[0-9]+]]
|
||||
// OMP45-DAG: [[PADDR4:%.+]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[P]], i32 [[IDX4]]
|
||||
// OMP50-DAG: [[BPR]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP:%.+]], i32 0, i32 0
|
||||
// OMP50-DAG: [[PR]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// OMP50-DAG: [[SR]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S:%.+]], i32 0, i32 0
|
||||
// OMP50-DAG: [[SADDR0:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX0:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX0]]
|
||||
// OMP50-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX0:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR0:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX0]]
|
||||
// OMP50-DAG: [[SADDR1:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX1:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX1]]
|
||||
// OMP50-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX1:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR1:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX1]]
|
||||
// OMP50-DAG: [[SADDR2:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX2:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX2]]
|
||||
// OMP50-DAG: [[BPADDR2:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX2:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR2:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX2]]
|
||||
// OMP50-DAG: [[SADDR3:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX3:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX3]]
|
||||
// OMP50-DAG: [[BPADDR3:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX3:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR3:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX3]]
|
||||
// OMP50-DAG: [[SADDR4:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX4:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX4]]
|
||||
// OMP50-DAG: [[BPADDR4:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX4:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR4:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX4]]
|
||||
// OMP50-DAG: [[SADDR5:%.+]] = getelementptr inbounds [6 x i64], [6 x i64]* [[S]], i32 [[IDX5:[0-9]+]]
|
||||
// OMP50-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX5]]
|
||||
// OMP50-DAG: [[BPADDR5:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[BP]], i32 [[IDX5:[0-9]+]]
|
||||
// OMP50-DAG: [[PADDR5:%.+]] = getelementptr inbounds [6 x i8*], [6 x i8*]* [[P]], i32 [[IDX5]]
|
||||
|
||||
// The names below are not necessarily consistent with the names used for the
|
||||
|
@ -580,37 +553,32 @@ int bar(int n){
|
|||
// CHECK-DAG: store [[S1]]* %{{.+}}, [[S1]]** [[CPADDR0:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR0]] = bitcast i8** {{%[^,]+}} to [[S1]]**
|
||||
// CHECK-DAG: [[CPADDR0]] = bitcast i8** {{%[^,]+}} to [[S1]]**
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] [[B_CVAL]], i[[SZ]]* [[CBPADDR1:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] [[B_CVAL]], i[[SZ]]* [[CPADDR1:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR1]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR1]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 4, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] 2, i[[SZ]]* [[CBPADDR2:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] 2, i[[SZ]]* [[CPADDR2:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR2]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR2]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CBPADDR3:%.+]],
|
||||
// CHECK-DAG: store i[[SZ]] %{{.+}}, i[[SZ]]* [[CPADDR3:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR3]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: [[CPADDR3]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// CHECK-DAG: store i64 {{4|8}}, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-DAG: store i16* %{{.+}}, i16** [[CBPADDR4:%.+]],
|
||||
// CHECK-DAG: store i16* %{{.+}}, i16** [[CPADDR4:%.+]],
|
||||
// CHECK-DAG: [[CBPADDR4]] = bitcast i8** {{%[^,]+}} to i16**
|
||||
// CHECK-DAG: [[CPADDR4]] = bitcast i8** {{%[^,]+}} to i16**
|
||||
// CHECK-DAG: store i64 [[CSIZE]], i64* {{%[^,]+}}
|
||||
// CHECK-DAG: store i64 [[CSIZE]], i64* getelementptr inbounds ([{{.+}} x i64], [{{.+}} x i64]* [[SIZET7]], i32 0, i32 4),
|
||||
|
||||
// OMP50-DAG: store i[[SZ]] [[SIMD_COND]], i[[SZ]]* [[CBPADDR5:%.+]],
|
||||
// OMP50-DAG: store i[[SZ]] [[SIMD_COND]], i[[SZ]]* [[CPADDR5:%.+]],
|
||||
// OMP50-DAG: [[CBPADDR5]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// OMP50-DAG: [[CPADDR5]] = bitcast i8** {{%[^,]+}} to i[[SZ]]*
|
||||
// OMP50-DAG: store i64 1, i64* {{%[^,]+}}
|
||||
|
||||
// CHECK-NEXT: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0
|
||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]]
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -682,7 +682,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -719,74 +718,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -794,10 +783,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -1002,7 +991,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1126,7 +1115,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1163,74 +1151,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1238,10 +1216,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -1446,7 +1424,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -1570,7 +1548,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1604,74 +1581,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1679,10 +1646,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -1879,7 +1846,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -2001,7 +1968,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2035,74 +2001,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2110,10 +2066,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -2310,7 +2266,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -979,7 +979,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1016,74 +1015,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1091,10 +1080,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -1429,7 +1418,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1628,7 +1617,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1665,74 +1653,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1740,10 +1718,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -2078,7 +2056,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -2277,7 +2255,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2311,74 +2288,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2386,10 +2353,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -2716,7 +2683,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -2909,7 +2876,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2943,74 +2909,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3018,10 +2974,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -3348,7 +3304,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1323,7 +1323,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1360,74 +1359,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1435,10 +1424,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -1809,7 +1798,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -2024,7 +2013,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2061,74 +2049,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2136,10 +2114,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -2510,7 +2488,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -2725,7 +2703,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2759,74 +2736,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2834,10 +2801,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -3200,7 +3167,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -3409,7 +3376,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -3443,74 +3409,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3518,10 +3474,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l81
|
||||
|
@ -3884,7 +3840,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -994,7 +994,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1031,74 +1030,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR4:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1106,10 +1095,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -1332,7 +1321,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1464,7 +1453,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1501,74 +1489,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR4:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1576,10 +1554,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -1802,7 +1780,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -1934,7 +1912,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1968,74 +1945,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR4:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2043,10 +2010,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -2261,7 +2228,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -2391,7 +2358,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2425,74 +2391,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR4:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2500,10 +2456,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l80
|
||||
|
@ -2718,7 +2674,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l67.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -43,7 +43,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 2]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK1-LABEL: _Z3fooi
|
||||
|
@ -145,6 +145,7 @@ void foo(int arg) {
|
|||
// CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]]
|
||||
// CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]]
|
||||
// CK1-DAG: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
|
||||
|
||||
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
|
@ -206,6 +207,7 @@ struct ST {
|
|||
}
|
||||
};
|
||||
|
||||
// CK2: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710674]
|
||||
|
||||
// CK2-LABEL: _Z3bari
|
||||
|
@ -217,21 +219,19 @@ int bar(int arg){
|
|||
// Region 00
|
||||
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
|
||||
// CK2: [[IFTHEN]]
|
||||
// CK2-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
|
||||
// CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}},
|
||||
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
|
||||
|
||||
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK2-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
|
||||
// CK2-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK2-DAG: store [[ST]]* [[VAR0:%[^,]+]], [[ST]]** [[CBP0]]
|
||||
// CK2-DAG: store double** [[SEC0:%[^,]+]], double*** [[CP0]]
|
||||
// CK2-DAG: store i[[sz]] {{%.+}}, i[[sz]]* [[S0]]
|
||||
// CK2-DAG: store i64 {{%.+}}, i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
|
||||
|
||||
|
||||
|
@ -536,24 +536,22 @@ struct S {
|
|||
double *p;
|
||||
};
|
||||
|
||||
// CK9: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 8]
|
||||
// CK9: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK9-LABEL: lvalue
|
||||
void lvalue(struct S *s, int l, int e) {
|
||||
|
||||
// CK9-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i{{.+}} [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK9-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK9-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK9-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK9-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
//
|
||||
// CK9-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK9-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK9-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK9-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to double***
|
||||
// CK9-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double**
|
||||
// CK9-DAG: store double** [[P:%.+]], double*** [[BPC0]]
|
||||
// CK9-DAG: store double* [[P_VAL:%.+]], double** [[PC0]]
|
||||
// CK9-DAG: store i{{.+}} 8, i{{.+}}* [[SIZE0]]
|
||||
// CK9-DAG: [[P]] = getelementptr inbounds [[STRUCT_S:%.+]], [[STRUCT_S]]* [[S_VAL:%.+]], i32 0, i32 0
|
||||
// CK9-DAG: [[S_VAL]] = load [[STRUCT_S]]*, [[STRUCT_S]]** [[S_ADDR:%.+]]
|
||||
// CK9-DAG: [[P_VAL]] = load double*, double** [[P_1:%.+]],
|
||||
|
@ -586,24 +584,22 @@ struct S {
|
|||
double *p;
|
||||
};
|
||||
|
||||
// CK10: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 8]
|
||||
// CK10: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK10-LABEL: lvalue
|
||||
void lvalue(struct S *s, int l, int e) {
|
||||
|
||||
// CK10-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i{{.+}} [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK10-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK10-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK10-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK10-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
//
|
||||
// CK10-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK10-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK10-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK10-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to double***
|
||||
// CK10-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double**
|
||||
// CK10-DAG: store double** [[P_VAL:%.+]], double*** [[BPC0]]
|
||||
// CK10-DAG: store double* [[ADD_PTR:%.+]], double** [[PC0]]
|
||||
// CK10-DAG: store i{{.+}} 8, i{{.+}}* [[SIZE0]]
|
||||
// CK10-64-DAG: [[ADD_PTR]] = getelementptr inbounds double, double* [[S_P:%.+]], i{{.+}} [[IDX_EXT:%.+]]
|
||||
// CK10-32-DAG: [[ADD_PTR]] = getelementptr inbounds double, double* [[S_P:%.+]], i{{.+}} [[L_VAL:%.+]]
|
||||
// CK10-64-DAG: [[IDX_EXT]] = sext i32 [[L_VAL:%.+]] to i64
|
||||
|
@ -636,24 +632,22 @@ void lvalue(struct S *s, int l, int e) {
|
|||
struct S {
|
||||
double *p;
|
||||
};
|
||||
// CK11: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 8]
|
||||
// CK11: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK11-LABEL: lvalue
|
||||
void lvalue(struct S *s, int l, int e) {
|
||||
|
||||
// CK11-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i{{.+}} [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK11-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}, [2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK11-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK11-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK11-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
//
|
||||
// CK11-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK11-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK11-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK11-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to double***
|
||||
// CK11-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double**
|
||||
// CK11-DAG: store double** [[P:%.+]], double*** [[BPC0]]
|
||||
// CK11-DAG: store double* [[ARRAY_IDX:%.+]], double** [[PC0]]
|
||||
// CK11-DAG: store i{{.+}} 8, i{{.+}} [[SIZE0]]
|
||||
// CK11-DAG: [[P]] = getelementptr inbounds [[STRUCT_S:%.+]], [[STRUCT_S]]* [[SS_1:%.+]], i32 0, i32 0
|
||||
// CK11-DAG: [[ARRAY_IDX]] = getelementptr inbounds double, double* [[ADD_PTR:%.+]], i{{.+}} 3
|
||||
// CK11-64-DAG: [[ADD_PTR]] = getelementptr inbounds double, double* [[S_P:%.+]], i{{.+}} [[IDX_EXT:%.+]]
|
||||
|
@ -688,41 +682,36 @@ struct S {
|
|||
double *p;
|
||||
struct S *sp;
|
||||
};
|
||||
// CK12: [[SIZE00:@.+]] = {{.+}}global [3 x i64] [i64 0, i64 {{4|8}}, i64 8]
|
||||
// CK12: [[MTYPE00:@.+]] = {{.+}}constant [3 x i64] [i64 0, i64 281474976710672, i64 17]
|
||||
|
||||
// CK12-LABEL: lvalue
|
||||
void lvalue(struct S *s, int l, int e) {
|
||||
|
||||
// CK12-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i{{.+}} [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}, [3 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK12-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 3, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[3 x i{{.+}}, [3 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[3 x i{{.+}}, [3 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK12-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK12-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK12-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
//
|
||||
// CK12-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK12-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK12-DAG: [[SIZE2:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 2
|
||||
// CK12-DAG: [[BPC2:%.+]] = bitcast i8** [[BP2]] to double***
|
||||
// CK12-DAG: [[PC2:%.+]] = bitcast i8** [[P2]] to double**
|
||||
// CK12-DAG: store double** [[P_VAL:%.+]], double*** [[BPC2]]
|
||||
// CK12-DAG: store double* [[SIX:%.+]], double** [[PC2]]
|
||||
// CK12-DAG: store i{{.+}} 8, i{{.+}}* [[SIZE2]]
|
||||
// CK12-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK12-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK12-DAG: [[SIZE1:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK12-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to [[STRUCT_S:%.+]]***
|
||||
// CK12-DAG: [[PC1:%.+]] = bitcast i8** [[P1]] to double***
|
||||
// CK12-DAG: store [[STRUCT_S]]** [[SP:%.+]], [[STRUCT_S]]*** [[BPC1]]
|
||||
// CK12-DAG: store double** [[P_VAL:%.+]], double*** [[PC1]]
|
||||
// CK12-DAG: store i{{.+}} {{4|8}}, i{{.+}}* [[SIZE1]]
|
||||
// CK12-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK12-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK12-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK12-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to [[STRUCT_S:%.+]]**
|
||||
// CK12-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to [[STRUCT_S]]***
|
||||
// CK12-DAG: store [[STRUCT_S]]* [[ZERO:%.+]], [[STRUCT_S]]** [[BPC0]]
|
||||
// CK12-DAG: store [[STRUCT_S]]** [[SP]], [[STRUCT_S]]*** [[PC0]]
|
||||
// CK12-DAG: store [[STRUCT_S]]** [[S:%.+]], [[STRUCT_S]]*** [[S_VAL:%.+]]
|
||||
// CK12-DAG: store i{{.+}} {{.+}}, i{{.+}}* [[SIZE0]]
|
||||
// CK12-DAG: store i{{.+}} {{.+}}, i{{.+}}* getelementptr inbounds ([3 x i64], [3 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK12-DAG: [[SP]] = getelementptr inbounds [[STRUCT_S]], [[STRUCT_S]]* [[ONE:%.+]], i32 0, i32 1
|
||||
// CK12-DAG: [[ONE]] = load [[STRUCT_S]]*, [[STRUCT_S]]** [[S:%.+]],
|
||||
// CK12-DAG: [[ZERO]] = load [[STRUCT_S]]*, [[STRUCT_S]]** [[S]],
|
||||
|
@ -797,6 +786,7 @@ void lvalue(int **BB, int a, int b) {
|
|||
// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
|
||||
#ifdef CK14
|
||||
|
||||
// CK14: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 8]
|
||||
// CK14: [[MTYPE00:@.+]] = private {{.*}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
struct SSA {
|
||||
|
@ -814,30 +804,26 @@ struct SSB {
|
|||
// CK14-LABEL: define {{.+}}foo
|
||||
void foo() {
|
||||
|
||||
// CK14-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK14-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK14-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK14-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK14-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
|
||||
// CK14-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK14-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK14-DAG: [[SIZE1:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK14-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK14-DAG: [[PC1:%.+]] = bitcast i8** [[P1]] to double**
|
||||
// CK14-DAG: store double** [[D_VAL:%.+]], double*** [[BPC1]]
|
||||
// CK14-DAG: store double* [[ADD_PTR:%.+]], double** [[PC1]]
|
||||
// CK14-DAG: store i64 8, i64* [[SIZE1]]
|
||||
// CK14-DAG: [[ADD_PTR]] = getelementptr inbounds double, double* [[ZERO:%.+]], i{{.+}} 1
|
||||
// CK14-DAG: [[ZERO]] = load double*, double** [[D_VAL_2:%.+]]
|
||||
// CK14-DAG: [[D_VAL]] = getelementptr inbounds [[SSB:%.+]], [[SSB:%.+]]* [[THIS:%.+]], i32 0, i32 0
|
||||
// CK14-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK14-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK14-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK14-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to [[SSB]]**
|
||||
// CK14-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK14-DAG: store [[SSB]]* [[THIS]], [[SSB]]** [[BPC0]],
|
||||
// CK14-DAG: store double** [[D_VAL]], double*** [[PC0]]
|
||||
// CK14-DAG: store i{{.+}} [[COMPUTE_LEN:%.+]], i{{.+}}* [[SIZE0]]
|
||||
// CK14-DAG: store i{{.+}} [[COMPUTE_LEN:%.+]], i{{.+}}* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
|
||||
#pragma omp target update to(*(this->d+1))
|
||||
*(this->d+1) = 1;
|
||||
|
@ -870,6 +856,7 @@ void lvalue_member(SSA *sap) {
|
|||
// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
|
||||
#ifdef CK15
|
||||
|
||||
// CK15: [[SIZE00:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 {{8|4}}]
|
||||
// CK15: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
struct SSA {
|
||||
|
@ -881,30 +868,26 @@ struct SSA {
|
|||
//CK-15-LABEL: lvalue_member
|
||||
void lvalue_member(SSA *sap) {
|
||||
|
||||
// CK15-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GSIZE:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK15-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}, i8** null)
|
||||
// CK15-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
|
||||
// CK15-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK15-DAG: [[GSIZE]] = getelementptr inbounds {{.+}}[[SIZE:%[^,]+]]
|
||||
|
||||
// CK15-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK15-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK15-DAG: [[SIZE1:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 1
|
||||
// CK15-DAG: [[BPC1:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK15-DAG: [[PC1:%.+]] = bitcast i8** [[P1]] to double**
|
||||
// CK15-DAG: store double** [[P_VAL:%.+]], double*** [[BPC1]]
|
||||
// CK15-DAG: store double* [[ADD_PTR:%.+]], double** [[PC1]]
|
||||
// CK15-DAG: store i64 {{4|8}}, i64* [[SIZE1]]
|
||||
// CK15-DAG: [[ADD_PTR]] = getelementptr inbounds double, double* [[THREE:%.+]], i{{.+}} 3
|
||||
// CK15-DAG: [[THREE]] = load double*, double** [[P_VAL_1:%.+]]
|
||||
// CK15-DAG: [[P_VAL]] = getelementptr inbounds [[SSA:%.+]], [[SSA:%.+]]* [[THIS:%.+]], i32 0, i32 0
|
||||
// CK15-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK15-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK15-DAG: [[SIZE0:%.+]] = getelementptr inbounds {{.+}}[[SIZE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CK15-DAG: [[BPC0:%.+]] = bitcast i8** [[BP0]] to [[SSA]]**
|
||||
// CK15-DAG: store [[SSA]]* [[ZERO:%.+]], [[SSA]]** [[BPC0]],
|
||||
// CK15-DAG: [[PC0:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK15-DAG: store double** [[P_VAL]], double*** [[PC0]],
|
||||
// CK15-DAG: store i{{.+}} [[COMPUTE_SIZE:%.+]], i{{.+}}* [[SIZE0]]
|
||||
// CK15-DAG: store i{{.+}} [[COMPUTE_SIZE:%.+]], i{{.+}}* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE00]], i32 0, i32 0),
|
||||
// CK15-DAG: [[COMPUTE_SIZE]] = sdiv exact i64 [[NINE:%.+]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
|
||||
// CK15-DAG: [[NINE]] = sub i{{.+}} [[SEVEN:%.+]], [[EIGHT:%.+]]
|
||||
// CK15-DAG: [[SEVEN]] = ptrtoint i8* [[SIX:%.+]] to i64
|
||||
|
@ -1255,6 +1238,7 @@ void foo(int arg) {
|
|||
// CK21: [[STRUCT_ST:%.+]] = type { [10 x [10 x [10 x double*]]] }
|
||||
// CK21: [[STRUCT_DESCRIPTOR:%.+]] = type { i64, i64, i64 }
|
||||
|
||||
// CK21: [[SIZE:@.+]] = private unnamed_addr global [2 x i64] zeroinitializer
|
||||
// CK21: [[MTYPE:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 299067162755073]
|
||||
|
||||
struct ST {
|
||||
|
@ -1298,7 +1282,7 @@ struct ST {
|
|||
// CK21: store i64 1, i64* [[COUNT_4]],
|
||||
// CK21: [[STRIDE_4:%.+]] = getelementptr inbounds [[STRUCT_DESCRIPTOR]], [[STRUCT_DESCRIPTOR]]* [[DIM_4]], {{.+}} 0, {{.+}} 2
|
||||
// CK21: store i64 {{4|8}}, i64* [[STRIDE_4]],
|
||||
// CK21-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i{{.+}}* [[GEPSZ:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE]]{{.+}})
|
||||
// CK21-DAG: call void @__tgt_target_data_update_mapper(%struct.ident_t* @{{.+}}, i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE]]{{.+}}, {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE]]{{.+}})
|
||||
// CK21-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]]
|
||||
// CK21-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
|
||||
// CK21-DAG: [[PC0:%.+]] = bitcast [4 x [[STRUCT_DESCRIPTOR]]]* [[DIMS]] to i8*
|
||||
|
|
|
@ -37,7 +37,7 @@ double gc[100];
|
|||
|
||||
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 2]
|
||||
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24]
|
||||
// CK1: [[SIZE04:@.+]] = {{.+}}global [2 x i64] [i64 0, i64 24]
|
||||
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
|
||||
|
||||
// CK1-LABEL: _Z3fooi
|
||||
|
@ -290,6 +290,7 @@ void foo(int arg) {
|
|||
// CK1: [[P0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%.+]], i32 0, i32 0
|
||||
// CK1: [[P0_BC:%.+]] = bitcast i8** [[P0]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[P0_BC]],
|
||||
// CK1: store i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[SIZE04]], i32 0, i32 0),
|
||||
// CK1: [[BP1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 1
|
||||
// CK1: [[BP1_BC:%.+]] = bitcast i8** [[BP1]] to double***
|
||||
// CK1: store double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), double*** [[BP1_BC]],
|
||||
|
|
|
@ -1621,7 +1621,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -1643,56 +1642,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK9-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK9-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK9-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK9-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK9: omp_offload.cont:
|
||||
// CHECK9-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -1823,7 +1816,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -1845,56 +1837,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK10-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK10-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK10-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK10-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK10: omp_offload.cont:
|
||||
// CHECK10-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -2025,7 +2011,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -2046,56 +2031,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK11-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK11-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK11: omp_offload.cont:
|
||||
// CHECK11-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -2224,7 +2203,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -2245,56 +2223,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK12-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK12-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK12-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK12-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK12: omp_offload.cont:
|
||||
// CHECK12-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -2936,7 +2908,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -2961,47 +2932,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK25-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK25-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK25-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK25-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK25-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK25-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK25-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK25-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK25-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
// CHECK25-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK25-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3009,10 +2974,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK25-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP33]])
|
||||
// CHECK25-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK25-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -3179,7 +3144,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = load i32, i32* [[TH]], align 4
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10)
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP24]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
|
@ -3296,7 +3261,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -3321,47 +3285,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK26-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK26-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK26-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK26-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK26-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK26-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK26-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK26-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK26-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
// CHECK26-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK26-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3369,10 +3327,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK26-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP33]])
|
||||
// CHECK26-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK26-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK26-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -3539,7 +3497,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = load i32, i32* [[TH]], align 4
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10)
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP24]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
|
@ -3656,7 +3614,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -3680,47 +3637,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK27-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK27-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK27-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK27-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK27-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK27-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK27-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
// CHECK27-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK27-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3728,10 +3679,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK27-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP33]])
|
||||
// CHECK27-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK27-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -3894,7 +3845,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = load i32, i32* [[TH]], align 4
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10)
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP24]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
|
@ -4008,7 +3959,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -4032,47 +3982,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK28-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK28-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK28-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK28-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK28-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK28-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK28-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
// CHECK28-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK28-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -4080,10 +4024,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK28-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP33]])
|
||||
// CHECK28-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK28-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK28-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -4246,7 +4190,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = load i32, i32* [[TH]], align 4
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10)
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 [[TMP22]])
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP24]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
|
|
|
@ -29,7 +29,7 @@ struct SS{
|
|||
#pragma omp teams distribute collapse(2)
|
||||
for(int i = 0; i < X; i++) {
|
||||
for(int j = 0; j < Y; j++) {
|
||||
a[i][j] = (T)0;
|
||||
a[i][j] = (T)0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -685,7 +685,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -722,74 +721,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -797,10 +786,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82
|
||||
|
@ -995,7 +984,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1119,7 +1108,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1156,74 +1144,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1231,10 +1209,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82
|
||||
|
@ -1429,7 +1407,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -1553,7 +1531,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1587,74 +1564,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1662,10 +1629,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82
|
||||
|
@ -1856,7 +1823,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -1978,7 +1945,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2012,74 +1978,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2087,10 +2043,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l82
|
||||
|
@ -2281,7 +2237,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l68.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2445,7 +2445,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -2467,56 +2466,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK9-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK9-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK9-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK9-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK9: omp_offload.cont:
|
||||
// CHECK9-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -2748,7 +2741,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -2770,56 +2762,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK10-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK10-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK10-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK10-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK10: omp_offload.cont:
|
||||
// CHECK10-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -3051,7 +3037,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -3072,56 +3057,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK11-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK11-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK11: omp_offload.cont:
|
||||
// CHECK11-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -3347,7 +3326,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -3368,56 +3346,50 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK12-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK12-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK12-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK12-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK12: omp_offload.cont:
|
||||
// CHECK12-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP33]]
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP29]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73
|
||||
|
@ -4440,7 +4412,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -4465,47 +4436,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK25-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK25-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK25-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK25-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK25-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK25-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK25-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK25-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK25-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
// CHECK25-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK25-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -4513,10 +4478,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK25-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP33]])
|
||||
// CHECK25-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK25-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -4783,7 +4748,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 10)
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
|
@ -4973,7 +4938,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
|
||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -4998,47 +4962,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP4]], i64* [[TMP9]], align 8
|
||||
// CHECK26-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: store i64 4, i64* [[TMP10]], align 8
|
||||
// CHECK26-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP11]], align 8
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP13]], align 8
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP15]], align 8
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK26-NEXT: store i64 8, i64* [[TMP16]], align 8
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP10]], align 8
|
||||
// CHECK26-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP12]], align 8
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP14]], align 8
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP15]], align 8
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 8
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK26-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 8
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK26-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP20]], align 8
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK26-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK26-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK26-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
// CHECK26-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i64 [[TMP4]], i64 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK26-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -5046,10 +5004,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK26-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP33]])
|
||||
// CHECK26-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK26-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK26-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -5316,7 +5274,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 10)
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
|
@ -5506,7 +5464,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -5530,47 +5487,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK27-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK27-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK27-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK27-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK27-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK27-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK27-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
// CHECK27-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK27-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -5578,10 +5529,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK27-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP33]])
|
||||
// CHECK27-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK27-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -5840,7 +5791,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 10)
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
|
@ -6023,7 +5974,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
|
||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -6047,47 +5997,41 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP3]], i32* [[TMP9]], align 4
|
||||
// CHECK28-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP10]], align 4
|
||||
// CHECK28-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP11]], align 4
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = bitcast i8** [[TMP12]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP13]], align 4
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP15]], align 4
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP16]], align 4
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP10]], align 4
|
||||
// CHECK28-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = bitcast i8** [[TMP11]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP12]], align 4
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP14]], align 4
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP19]], align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP21]], align 4
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i64 [[TMP5]], i64* [[TMP22]], align 4
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP23]], align 4
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP27]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP28]], 0
|
||||
// CHECK28-NEXT: store i64 [[TMP5]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 2), align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP23]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0
|
||||
// CHECK28-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK28-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK28-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP29]], 1
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP30]])
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP24]], i8** [[TMP25]], i64* [[TMP26]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP32]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP25]], 1
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[TMP26]])
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, i32 3, i8** [[TMP21]], i8** [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
// CHECK28-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i32 [[TMP3]], i32 [[TMP0]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK28-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -6095,10 +6039,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP33:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK28-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP33]])
|
||||
// CHECK28-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: [[TMP34:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP34]])
|
||||
// CHECK28-NEXT: [[TMP35:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP35]]
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP30]])
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP31]]
|
||||
//
|
||||
//
|
||||
// CHECK28-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162
|
||||
|
@ -6357,7 +6301,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 10)
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
|
|
|
@ -982,7 +982,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1019,74 +1018,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1094,10 +1083,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -1412,7 +1401,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1611,7 +1600,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1648,74 +1636,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1723,10 +1701,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -2041,7 +2019,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -2240,7 +2218,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2274,74 +2251,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2349,10 +2316,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -2667,7 +2634,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -2860,7 +2827,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2894,74 +2860,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2969,10 +2925,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -3287,7 +3243,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -3277,7 +3277,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4
|
||||
|
@ -3303,66 +3302,58 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP11]], align 8
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP12]], align 8
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP13]], align 8
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP12]], align 8
|
||||
// CHECK9-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 8
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP4]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP4]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP4]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP24]], align 8
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP6]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP6]], i64* [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP6]], i64* [[TMP24]], align 8
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP6]], i64* [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[SUB3:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK9-NEXT: store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74(i64 [[TMP1]], i32* [[VLA]], i64 [[TMP4]], i64 [[TMP6]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK9: omp_offload.cont:
|
||||
// CHECK9-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP41]]
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK9-NEXT: ret i32 [[TMP36]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74
|
||||
|
@ -3644,7 +3635,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4
|
||||
|
@ -3670,66 +3660,58 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP11]], align 8
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP12]], align 8
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP13]], align 8
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP12]], align 8
|
||||
// CHECK10-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 8
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP4]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP4]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP4]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP24]], align 8
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP6]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP6]], i64* [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP6]], i64* [[TMP24]], align 8
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP6]], i64* [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[SUB3:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK10-NEXT: store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74(i64 [[TMP1]], i32* [[VLA]], i64 [[TMP4]], i64 [[TMP6]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK10: omp_offload.cont:
|
||||
// CHECK10-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 0
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP41]]
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK10-NEXT: ret i32 [[TMP36]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74
|
||||
|
@ -4011,7 +3993,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -4035,66 +4016,58 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP11]], align 4
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP12]], align 4
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP13]], align 4
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP12]], align 4
|
||||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP3]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP3]], i32* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP3]], i32* [[TMP23]], align 4
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP31]], align 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK11-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74(i32 [[TMP0]], i32* [[VLA]], i32 [[TMP3]], i32 [[TMP5]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK11: omp_offload.cont:
|
||||
// CHECK11-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP41]]
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK11-NEXT: ret i32 [[TMP36]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74
|
||||
|
@ -4369,7 +4342,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -4393,66 +4365,58 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP11]], align 4
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP12]], align 4
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP13]], align 4
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP12]], align 4
|
||||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP3]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP3]], i32* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP3]], i32* [[TMP23]], align 4
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP31]], align 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK12-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74(i32 [[TMP0]], i32* [[VLA]], i32 [[TMP3]], i32 [[TMP5]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
// CHECK12: omp_offload.cont:
|
||||
// CHECK12-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i32 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP41]]
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK12-NEXT: ret i32 [[TMP36]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l74
|
||||
|
@ -6314,7 +6278,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK25-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 8
|
||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK25-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4
|
||||
|
@ -6343,57 +6306,49 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP1]], i64* [[TMP11]], align 8
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: store i64 8, i64* [[TMP12]], align 8
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP13]], align 8
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 8
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK25-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 8
|
||||
// CHECK25-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP19]], align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP12]], align 8
|
||||
// CHECK25-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 8
|
||||
// CHECK25-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK25-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK25-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 8
|
||||
// CHECK25-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 8
|
||||
// CHECK25-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK25-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP4]], i64* [[TMP19]], align 8
|
||||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP4]], i64* [[TMP21]], align 8
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP4]], i64* [[TMP23]], align 8
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK25-NEXT: store i64 4, i64* [[TMP24]], align 8
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP25]], align 8
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP6]], i64* [[TMP27]], align 8
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK25-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP6]], i64* [[TMP29]], align 8
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK25-NEXT: store i64 4, i64* [[TMP30]], align 8
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK25-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP22]], align 8
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK25-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP6]], i64* [[TMP24]], align 8
|
||||
// CHECK25-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK25-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i64*
|
||||
// CHECK25-NEXT: store i64 [[TMP6]], i64* [[TMP26]], align 8
|
||||
// CHECK25-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK25-NEXT: store i8* null, i8** [[TMP27]], align 8
|
||||
// CHECK25-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK25-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK25-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK25-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK25-NEXT: [[SUB3:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK25-NEXT: store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK25-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK25-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK25-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK25-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK25-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK25-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK25-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
// CHECK25-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166(i64 [[TMP1]], i32* [[VLA]], i64 [[TMP4]], i64 [[TMP6]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK25-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -6401,10 +6356,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK25-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP41]])
|
||||
// CHECK25-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK25-NEXT: [[TMP43:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP43]]
|
||||
// CHECK25-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK25-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK25-NEXT: [[TMP38:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK25-NEXT: ret i32 [[TMP38]]
|
||||
//
|
||||
//
|
||||
// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166
|
||||
|
@ -6719,7 +6674,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK25-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK25-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK25-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i64 10)
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK25-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK25-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK25-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK25: omp_offload.failed:
|
||||
|
@ -6925,7 +6880,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 8
|
||||
// CHECK26-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 8
|
||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK26-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4
|
||||
|
@ -6954,57 +6908,49 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP1]], i64* [[TMP11]], align 8
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: store i64 8, i64* [[TMP12]], align 8
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP13]], align 8
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 8
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK26-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 8
|
||||
// CHECK26-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP19]], align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP12]], align 8
|
||||
// CHECK26-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 8
|
||||
// CHECK26-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK26-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK26-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 8
|
||||
// CHECK26-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 8
|
||||
// CHECK26-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK26-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP4]], i64* [[TMP19]], align 8
|
||||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP4]], i64* [[TMP21]], align 8
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP4]], i64* [[TMP23]], align 8
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK26-NEXT: store i64 4, i64* [[TMP24]], align 8
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP25]], align 8
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP6]], i64* [[TMP27]], align 8
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK26-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP6]], i64* [[TMP29]], align 8
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK26-NEXT: store i64 4, i64* [[TMP30]], align 8
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK26-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP22]], align 8
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK26-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP6]], i64* [[TMP24]], align 8
|
||||
// CHECK26-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK26-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i64*
|
||||
// CHECK26-NEXT: store i64 [[TMP6]], i64* [[TMP26]], align 8
|
||||
// CHECK26-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK26-NEXT: store i8* null, i8** [[TMP27]], align 8
|
||||
// CHECK26-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK26-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK26-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK26-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK26-NEXT: [[SUB3:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK26-NEXT: store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK26-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK26-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK26-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK26-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK26-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK26-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK26-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
// CHECK26-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166(i64 [[TMP1]], i32* [[VLA]], i64 [[TMP4]], i64 [[TMP6]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK26-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -7012,10 +6958,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK26-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP41]])
|
||||
// CHECK26-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK26-NEXT: [[TMP43:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP43]]
|
||||
// CHECK26-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK26-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK26-NEXT: [[TMP38:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK26-NEXT: ret i32 [[TMP38]]
|
||||
//
|
||||
//
|
||||
// CHECK26-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166
|
||||
|
@ -7330,7 +7276,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK26-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK26-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK26-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i64 10)
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK26-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK26-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK26-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK26: omp_offload.failed:
|
||||
|
@ -7536,7 +7482,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK27-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 4
|
||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK27-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -7563,57 +7508,49 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP0]], i32* [[TMP11]], align 4
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP12]], align 4
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP13]], align 4
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 4
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 4
|
||||
// CHECK27-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP19]], align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP12]], align 4
|
||||
// CHECK27-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 4
|
||||
// CHECK27-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK27-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 4
|
||||
// CHECK27-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 4
|
||||
// CHECK27-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK27-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP3]], i32* [[TMP19]], align 4
|
||||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP3]], i32* [[TMP21]], align 4
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP3]], i32* [[TMP23]], align 4
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP24]], align 4
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP5]], i32* [[TMP27]], align 4
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP5]], i32* [[TMP29]], align 4
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK27-NEXT: store i64 4, i64* [[TMP30]], align 4
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP31]], align 4
|
||||
// CHECK27-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP5]], i32* [[TMP24]], align 4
|
||||
// CHECK27-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK27-NEXT: store i32 [[TMP5]], i32* [[TMP26]], align 4
|
||||
// CHECK27-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK27-NEXT: store i8* null, i8** [[TMP27]], align 4
|
||||
// CHECK27-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK27-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK27-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK27-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK27-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK27-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK27-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK27-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK27-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK27-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK27-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK27-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
// CHECK27-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166(i32 [[TMP0]], i32* [[VLA]], i32 [[TMP3]], i32 [[TMP5]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK27-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -7621,10 +7558,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK27-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP41]])
|
||||
// CHECK27-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK27-NEXT: [[TMP43:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP43]]
|
||||
// CHECK27-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK27-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK27-NEXT: [[TMP38:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK27-NEXT: ret i32 [[TMP38]]
|
||||
//
|
||||
//
|
||||
// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166
|
||||
|
@ -7930,7 +7867,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK27-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK27-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK27-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i64 10)
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK27-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK27-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK27-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK27: omp_offload.failed:
|
||||
|
@ -8129,7 +8066,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x i8*], align 4
|
||||
// CHECK28-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [4 x i64], align 4
|
||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
// CHECK28-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
|
||||
|
@ -8156,57 +8092,49 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP10:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP0]], i32* [[TMP11]], align 4
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP12]], align 4
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP13]], align 4
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP15]], align 4
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i64 [[TMP7]], i64* [[TMP18]], align 4
|
||||
// CHECK28-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP19]], align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP12:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP12]], align 4
|
||||
// CHECK28-NEXT: [[TMP13:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP14]], align 4
|
||||
// CHECK28-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
|
||||
// CHECK28-NEXT: store i32* [[VLA]], i32** [[TMP16]], align 4
|
||||
// CHECK28-NEXT: store i64 [[TMP7]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 1), align 4
|
||||
// CHECK28-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP17]], align 4
|
||||
// CHECK28-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP3]], i32* [[TMP19]], align 4
|
||||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP3]], i32* [[TMP21]], align 4
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP3]], i32* [[TMP23]], align 4
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP24]], align 4
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP5]], i32* [[TMP27]], align 4
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP5]], i32* [[TMP29]], align 4
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK28-NEXT: store i64 4, i64* [[TMP30]], align 4
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP31]], align 4
|
||||
// CHECK28-NEXT: [[TMP32:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP33:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP34:%.*]] = getelementptr inbounds [4 x i64], [4 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP35:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP35]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP36:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP36]], 0
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP5]], i32* [[TMP24]], align 4
|
||||
// CHECK28-NEXT: [[TMP25:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK28-NEXT: store i32 [[TMP5]], i32* [[TMP26]], align 4
|
||||
// CHECK28-NEXT: [[TMP27:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK28-NEXT: store i8* null, i8** [[TMP27]], align 4
|
||||
// CHECK28-NEXT: [[TMP28:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP29:%.*]] = getelementptr inbounds [4 x i8*], [4 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP30:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK28-NEXT: store i32 [[TMP30]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[TMP31:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK28-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP31]], 0
|
||||
// CHECK28-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK28-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1
|
||||
// CHECK28-NEXT: store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[TMP37:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP37]], 1
|
||||
// CHECK28-NEXT: [[TMP38:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP38]])
|
||||
// CHECK28-NEXT: [[TMP39:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP32]], i8** [[TMP33]], i64* [[TMP34]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP40:%.*]] = icmp ne i32 [[TMP39]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP40]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28-NEXT: [[TMP32:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4
|
||||
// CHECK28-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP32]], 1
|
||||
// CHECK28-NEXT: [[TMP33:%.*]] = zext i32 [[ADD]] to i64
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4:[0-9]+]], i64 -1, i64 [[TMP33]])
|
||||
// CHECK28-NEXT: [[TMP34:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166.region_id, i32 4, i8** [[TMP28]], i8** [[TMP29]], i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([4 x i64], [4 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK28-NEXT: [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP35]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
// CHECK28-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166(i32 [[TMP0]], i32* [[VLA]], i32 [[TMP3]], i32 [[TMP5]]) #[[ATTR5:[0-9]+]]
|
||||
// CHECK28-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -8214,10 +8142,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP41:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK28-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP41]])
|
||||
// CHECK28-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: [[TMP42:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP42]])
|
||||
// CHECK28-NEXT: [[TMP43:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP43]]
|
||||
// CHECK28-NEXT: [[TMP37:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK28-NEXT: call void @llvm.stackrestore(i8* [[TMP37]])
|
||||
// CHECK28-NEXT: [[TMP38:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK28-NEXT: ret i32 [[TMP38]]
|
||||
//
|
||||
//
|
||||
// CHECK28-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l166
|
||||
|
@ -8523,7 +8451,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK28-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK28-NEXT: [[TMP21:%.*]] = load i32, i32* [[TE]], align 4
|
||||
// CHECK28-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i64 10)
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK28-NEXT: [[TMP22:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB4]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l155.region_id, i32 3, i8** [[TMP19]], i8** [[TMP20]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 [[TMP21]], i32 0)
|
||||
// CHECK28-NEXT: [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 0
|
||||
// CHECK28-NEXT: br i1 [[TMP23]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK28: omp_offload.failed:
|
||||
|
|
|
@ -29,7 +29,7 @@ struct SS{
|
|||
#pragma omp teams distribute parallel for simd collapse(2)
|
||||
for(int i = 0; i < X; i++) {
|
||||
for(int j = 0; j < Y; j++) {
|
||||
a[i][j] = (T)0;
|
||||
a[i][j] = (T)0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1331,7 +1331,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1368,74 +1367,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1443,10 +1432,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86
|
||||
|
@ -1797,7 +1786,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -2012,7 +2001,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2049,74 +2037,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2124,10 +2102,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86
|
||||
|
@ -2478,7 +2456,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -2693,7 +2671,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2727,74 +2704,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2802,10 +2769,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86
|
||||
|
@ -3156,7 +3123,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -3365,7 +3332,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -3399,74 +3365,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -3474,10 +3430,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l86
|
||||
|
@ -3828,7 +3784,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.4, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB3]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l72.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.4, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.5, i32 0, i32 0), i8** null, i8** null, i32 0, i32 0)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -29,7 +29,7 @@ struct SS{
|
|||
#pragma omp teams distribute simd collapse(2)
|
||||
for(int i = 0; i < X; i++) {
|
||||
for(int j = 0; j < Y; j++) {
|
||||
a[i][j] = (T)0;
|
||||
a[i][j] = (T)0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -998,7 +998,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK9-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK9-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1035,74 +1034,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK9-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK9-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK9-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK9-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK9-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK9-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK9-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK9-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK9-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK9-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK9-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK9-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK9-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK9-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK9-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK9-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK9-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK9-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK9-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK9-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK9-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK9-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK9-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK9-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK9-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK9-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK9-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK9-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK9-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK9-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK9-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK9-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK9-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK9-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK9-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK9-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
// CHECK9-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK9-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1110,10 +1099,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK9-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK9-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK9-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK9-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK9-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK9-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK9-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -1326,7 +1315,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK9-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK9-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK9-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK9: omp_offload.failed:
|
||||
|
@ -1458,7 +1447,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 8
|
||||
// CHECK10-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 8
|
||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[_TMP2:%.*]] = alloca i32, align 4
|
||||
// CHECK10-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1495,74 +1483,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP7]], i64* [[TMP15]], align 8
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP17]], align 8
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP19]], align 8
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = bitcast i8** [[TMP20]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK10-NEXT: store i64 4, i64* [[TMP22]], align 8
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP16]], align 8
|
||||
// CHECK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP18]], align 8
|
||||
// CHECK10-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK10-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP9]], i64* [[TMP20]], align 8
|
||||
// CHECK10-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP21]], align 8
|
||||
// CHECK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP23]], align 8
|
||||
// CHECK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP25]], align 8
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP1]], i64* [[TMP27]], align 8
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP29]], align 8
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = bitcast i8** [[TMP30]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK10-NEXT: store i64 8, i64* [[TMP34]], align 8
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = bitcast i8** [[TMP36]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP37]], align 8
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = bitcast i8** [[TMP38]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP39]], align 8
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* [[TMP40]], align 8
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP41]], align 8
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP46:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP46]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP26]], align 8
|
||||
// CHECK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP28]], align 8
|
||||
// CHECK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK10-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i64*
|
||||
// CHECK10-NEXT: store i64 [[TMP3]], i64* [[TMP30]], align 8
|
||||
// CHECK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP31]], align 8
|
||||
// CHECK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP33]], align 8
|
||||
// CHECK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK10-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
|
||||
// CHECK10-NEXT: store i32* [[VLA]], i32** [[TMP35]], align 8
|
||||
// CHECK10-NEXT: store i64 [[TMP11]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 8
|
||||
// CHECK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
|
||||
// CHECK10-NEXT: store i8* null, i8** [[TMP36]], align 8
|
||||
// CHECK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP39:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[TMP40:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK10-NEXT: store i32 [[TMP40]], i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK10-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK10-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK10-NEXT: [[CONV5:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP48]], 0
|
||||
// CHECK10-NEXT: [[TMP42:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_3]], align 4
|
||||
// CHECK10-NEXT: [[SUB6:%.*]] = sub nsw i32 [[TMP42]], 0
|
||||
// CHECK10-NEXT: [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1
|
||||
// CHECK10-NEXT: [[CONV8:%.*]] = sext i32 [[DIV7]] to i64
|
||||
// CHECK10-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV5]], [[CONV8]]
|
||||
// CHECK10-NEXT: [[SUB9:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK10-NEXT: store i64 [[SUB9]], i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[TMP49:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP49]], 1
|
||||
// CHECK10-NEXT: [[TMP43:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_4]], align 8
|
||||
// CHECK10-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP43]], 1
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK10-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP42]], i8** [[TMP43]], i64* [[TMP44]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10-NEXT: [[TMP44:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP37]], i8** [[TMP38]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP45:%.*]] = icmp ne i32 [[TMP44]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP45]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
// CHECK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i64 [[TMP7]], i64 [[TMP9]], i64 [[TMP1]], i64 [[TMP3]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -1570,10 +1548,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP52:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK10-NEXT: [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef signext [[TMP52]])
|
||||
// CHECK10-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: [[TMP53:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP53]])
|
||||
// CHECK10-NEXT: [[TMP54:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP54]]
|
||||
// CHECK10-NEXT: [[TMP47:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8
|
||||
// CHECK10-NEXT: call void @llvm.stackrestore(i8* [[TMP47]])
|
||||
// CHECK10-NEXT: [[TMP48:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK10-NEXT: ret i32 [[TMP48]]
|
||||
//
|
||||
//
|
||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -1786,7 +1764,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK10-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK10-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK10-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK10: omp_offload.failed:
|
||||
|
@ -1918,7 +1896,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK11-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK11-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -1952,74 +1929,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK11-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK11-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK11-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK11-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK11-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK11-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK11-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK11-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK11-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK11-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK11-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK11-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK11-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK11-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK11-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK11-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK11-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK11-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK11-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK11-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
// CHECK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2027,10 +1994,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK11-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK11-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK11-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK11-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK11-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK11-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK11-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -2239,7 +2206,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK11-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK11-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK11-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK11: omp_offload.failed:
|
||||
|
@ -2369,7 +2336,6 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [5 x i8*], align 4
|
||||
// CHECK12-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [5 x i64], align 4
|
||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[_TMP1:%.*]] = alloca i32, align 4
|
||||
// CHECK12-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
|
||||
|
@ -2403,74 +2369,64 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP14:%.*]] = bitcast i8** [[TMP13]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP5]], i32* [[TMP14]], align 4
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP16]], align 4
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP18]], align 4
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP21]], align 4
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP15]], align 4
|
||||
// CHECK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP17]], align 4
|
||||
// CHECK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[TMP19]], align 4
|
||||
// CHECK12-NEXT: [[TMP20:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP20]], align 4
|
||||
// CHECK12-NEXT: [[TMP21:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP22]], align 4
|
||||
// CHECK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP24]], align 4
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = bitcast i8** [[TMP25]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP0]], i32* [[TMP26]], align 4
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP28]], align 4
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i64 4, i64* [[TMP33]], align 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP36]], align 4
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP38]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* [[TMP39]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP40]], align 4
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [5 x i64], [5 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP44]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP45:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP45]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP46]], 0
|
||||
// CHECK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP25]], align 4
|
||||
// CHECK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP27:%.*]] = bitcast i8** [[TMP26]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP27]], align 4
|
||||
// CHECK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: [[TMP29:%.*]] = bitcast i8** [[TMP28]] to i32*
|
||||
// CHECK12-NEXT: store i32 [[TMP1]], i32* [[TMP29]], align 4
|
||||
// CHECK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP30]], align 4
|
||||
// CHECK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP32:%.*]] = bitcast i8** [[TMP31]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP32]], align 4
|
||||
// CHECK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
|
||||
// CHECK12-NEXT: store i32* [[VLA]], i32** [[TMP34]], align 4
|
||||
// CHECK12-NEXT: store i64 [[TMP10]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 4), align 4
|
||||
// CHECK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
|
||||
// CHECK12-NEXT: store i8* null, i8** [[TMP35]], align 4
|
||||
// CHECK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [5 x i8*], [5 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP38:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP38]], i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[TMP39:%.*]] = load i32, i32* [[M]], align 4
|
||||
// CHECK12-NEXT: store i32 [[TMP39]], i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[TMP40:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4
|
||||
// CHECK12-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP40]], 0
|
||||
// CHECK12-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1
|
||||
// CHECK12-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP47]], 0
|
||||
// CHECK12-NEXT: [[TMP41:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4
|
||||
// CHECK12-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP41]], 0
|
||||
// CHECK12-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1
|
||||
// CHECK12-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64
|
||||
// CHECK12-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]]
|
||||
// CHECK12-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1
|
||||
// CHECK12-NEXT: store i64 [[SUB7]], i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[TMP48:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP48]], 1
|
||||
// CHECK12-NEXT: [[TMP42:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_3]], align 8
|
||||
// CHECK12-NEXT: [[ADD:%.*]] = add nsw i64 [[TMP42]], 1
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2:[0-9]+]], i64 -1, i64 [[ADD]])
|
||||
// CHECK12-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP41]], i8** [[TMP42]], i64* [[TMP43]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12-NEXT: [[TMP43:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83.region_id, i32 5, i8** [[TMP36]], i8** [[TMP37]], i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([5 x i64], [5 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP44:%.*]] = icmp ne i32 [[TMP43]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP44]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
// CHECK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83(i32 [[TMP5]], i32 [[TMP7]], i32 [[TMP0]], i32 [[TMP1]], i32* [[VLA]]) #[[ATTR3:[0-9]+]]
|
||||
// CHECK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
|
||||
|
@ -2478,10 +2434,10 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP51:%.*]] = load i32, i32* [[ARGC_ADDR]], align 4
|
||||
// CHECK12-NEXT: [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10ELi2EEiT_(i32 noundef [[TMP51]])
|
||||
// CHECK12-NEXT: store i32 [[CALL]], i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: [[TMP52:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP52]])
|
||||
// CHECK12-NEXT: [[TMP53:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP53]]
|
||||
// CHECK12-NEXT: [[TMP46:%.*]] = load i8*, i8** [[SAVED_STACK]], align 4
|
||||
// CHECK12-NEXT: call void @llvm.stackrestore(i8* [[TMP46]])
|
||||
// CHECK12-NEXT: [[TMP47:%.*]] = load i32, i32* [[RETVAL]], align 4
|
||||
// CHECK12-NEXT: ret i32 [[TMP47]]
|
||||
//
|
||||
//
|
||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l83
|
||||
|
@ -2690,7 +2646,7 @@ int main (int argc, char **argv) {
|
|||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
|
||||
// CHECK12-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 20)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP7:%.*]] = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10ELi2EEiT__l69.region_id, i32 1, i8** [[TMP5]], i8** [[TMP6]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.2, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.3, i32 0, i32 0), i8** null, i8** null, i32 0, i32 1)
|
||||
// CHECK12-NEXT: [[TMP8:%.*]] = icmp ne i32 [[TMP7]], 0
|
||||
// CHECK12-NEXT: br i1 [[TMP8]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
|
||||
// CHECK12: omp_offload.failed:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue