Compare commits
1 Commits
getVregSrc
...
kernel_env
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
519c834535 |
@@ -781,7 +781,7 @@ void CGOpenMPRuntimeGPU::emitKernelDeinit(CodeGenFunction &CGF,
|
|||||||
emitGenericVarsEpilog(CGF);
|
emitGenericVarsEpilog(CGF);
|
||||||
|
|
||||||
CGBuilderTy &Bld = CGF.Builder;
|
CGBuilderTy &Bld = CGF.Builder;
|
||||||
OMPBuilder.createTargetDeinit(Bld, IsSPMD);
|
OMPBuilder.createTargetDeinit(Bld);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGOpenMPRuntimeGPU::emitSPMDKernel(const OMPExecutableDirective &D,
|
void CGOpenMPRuntimeGPU::emitSPMDKernel(const OMPExecutableDirective &D,
|
||||||
@@ -819,24 +819,6 @@ void CGOpenMPRuntimeGPU::emitSPMDKernel(const OMPExecutableDirective &D,
|
|||||||
IsInTTDRegion = false;
|
IsInTTDRegion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a unique global variable to indicate the execution mode of this target
|
|
||||||
// region. The execution mode is either 'generic', or 'spmd' depending on the
|
|
||||||
// target directive. This variable is picked up by the offload library to setup
|
|
||||||
// the device appropriately before kernel launch. If the execution mode is
|
|
||||||
// 'generic', the runtime reserves one warp for the master, otherwise, all
|
|
||||||
// warps participate in parallel work.
|
|
||||||
static void setPropertyExecutionMode(CodeGenModule &CGM, StringRef Name,
|
|
||||||
bool Mode) {
|
|
||||||
auto *GVMode = new llvm::GlobalVariable(
|
|
||||||
CGM.getModule(), CGM.Int8Ty, /*isConstant=*/true,
|
|
||||||
llvm::GlobalValue::WeakAnyLinkage,
|
|
||||||
llvm::ConstantInt::get(CGM.Int8Ty, Mode ? OMP_TGT_EXEC_MODE_SPMD
|
|
||||||
: OMP_TGT_EXEC_MODE_GENERIC),
|
|
||||||
Twine(Name, "_exec_mode"));
|
|
||||||
GVMode->setVisibility(llvm::GlobalVariable::ProtectedVisibility);
|
|
||||||
CGM.addCompilerUsedGlobal(GVMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGOpenMPRuntimeGPU::emitTargetOutlinedFunction(
|
void CGOpenMPRuntimeGPU::emitTargetOutlinedFunction(
|
||||||
const OMPExecutableDirective &D, StringRef ParentName,
|
const OMPExecutableDirective &D, StringRef ParentName,
|
||||||
llvm::Function *&OutlinedFn, llvm::Constant *&OutlinedFnID,
|
llvm::Function *&OutlinedFn, llvm::Constant *&OutlinedFnID,
|
||||||
@@ -853,8 +835,6 @@ void CGOpenMPRuntimeGPU::emitTargetOutlinedFunction(
|
|||||||
else
|
else
|
||||||
emitNonSPMDKernel(D, ParentName, OutlinedFn, OutlinedFnID, IsOffloadEntry,
|
emitNonSPMDKernel(D, ParentName, OutlinedFn, OutlinedFnID, IsOffloadEntry,
|
||||||
CodeGen);
|
CodeGen);
|
||||||
|
|
||||||
setPropertyExecutionMode(CGM, OutlinedFn->getName(), Mode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CGOpenMPRuntimeGPU::CGOpenMPRuntimeGPU(CodeGenModule &CGM)
|
CGOpenMPRuntimeGPU::CGOpenMPRuntimeGPU(CodeGenModule &CGM)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
||||||
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
||||||
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @[[GLOB1:[0-9]+]] to ptr), i8 1, i1 true)
|
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_test_math_int_l9_kernel_environment to ptr))
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
@@ -54,7 +54,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[__SGN_ASCAST_I]], align 4
|
// CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[__SGN_ASCAST_I]], align 4
|
||||||
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i32 [[XOR_I]], [[TMP5]]
|
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i32 [[XOR_I]], [[TMP5]]
|
||||||
// CHECK-NEXT: store i32 [[SUB_I]], ptr [[L1_ASCAST]], align 4
|
// CHECK-NEXT: store i32 [[SUB_I]], ptr [[L1_ASCAST]], align 4
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
@@ -71,7 +71,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
||||||
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
||||||
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1, i1 true)
|
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_test_math_long_l16_kernel_environment to ptr))
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
@@ -89,7 +89,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[__SGN_ASCAST_I]], align 8
|
// CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[__SGN_ASCAST_I]], align 8
|
||||||
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i64 [[XOR_I]], [[TMP5]]
|
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i64 [[XOR_I]], [[TMP5]]
|
||||||
// CHECK-NEXT: store i64 [[SUB_I]], ptr [[L1_ASCAST]], align 8
|
// CHECK-NEXT: store i64 [[SUB_I]], ptr [[L1_ASCAST]], align 8
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
@@ -106,7 +106,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
// CHECK-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
|
||||||
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
// CHECK-NEXT: [[L1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[L1]] to ptr
|
||||||
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: store i64 [[X]], ptr [[X_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1, i1 true)
|
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_test_math_long_long_l23_kernel_environment to ptr))
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
@@ -124,7 +124,7 @@ void test_math_long_long(long long x) {
|
|||||||
// CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[__SGN_ASCAST_I]], align 8
|
// CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[__SGN_ASCAST_I]], align 8
|
||||||
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i64 [[XOR_I]], [[TMP5]]
|
// CHECK-NEXT: [[SUB_I:%.*]] = sub nsw i64 [[XOR_I]], [[TMP5]]
|
||||||
// CHECK-NEXT: store i64 [[SUB_I]], ptr [[L1_ASCAST]], align 8
|
// CHECK-NEXT: store i64 [[SUB_I]], ptr [[L1_ASCAST]], align 8
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ int test_amdgcn_target_tid_threads_simd() {
|
|||||||
// CHECK-NEXT: [[I_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[I]] to ptr
|
// CHECK-NEXT: [[I_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[I]] to ptr
|
||||||
// CHECK-NEXT: store ptr [[ARR]], ptr [[ARR_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: store ptr [[ARR]], ptr [[ARR_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARR_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARR_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @[[GLOB1:[0-9]+]] to ptr), i8 1, i1 true)
|
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z30test_amdgcn_target_tid_threadsv_l14_kernel_environment to ptr))
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
@@ -61,7 +61,7 @@ int test_amdgcn_target_tid_threads_simd() {
|
|||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: for.end:
|
// CHECK: for.end:
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -78,7 +78,7 @@ int test_amdgcn_target_tid_threads_simd() {
|
|||||||
// CHECK-NEXT: [[I_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[I]] to ptr
|
// CHECK-NEXT: [[I_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[I]] to ptr
|
||||||
// CHECK-NEXT: store ptr [[ARR]], ptr [[ARR_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: store ptr [[ARR]], ptr [[ARR_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARR_ADDR_ASCAST]], align 8
|
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARR_ADDR_ASCAST]], align 8
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 2, i1 false)
|
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr addrspacecast (ptr addrspace(1) @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z35test_amdgcn_target_tid_threads_simdv_l23_kernel_environment to ptr))
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
@@ -109,6 +109,6 @@ int test_amdgcn_target_tid_threads_simd() {
|
|||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: omp.inner.for.end:
|
// CHECK: omp.inner.for.end:
|
||||||
// CHECK-NEXT: store i32 1000, ptr [[I_ASCAST]], align 4
|
// CHECK-NEXT: store i32 1000, ptr [[I_ASCAST]], align 4
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr addrspacecast (ptr addrspace(1) @[[GLOB1]] to ptr), i8 2)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -31,15 +31,15 @@ int maini1() {
|
|||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z6maini1v_l16_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -36,13 +36,13 @@ void test_ds(){
|
|||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK-NEXT: [[C:%.*]] = alloca i32, align 4
|
// CHECK-NEXT: [[C:%.*]] = alloca i32, align 4
|
||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [2 x ptr], align 8
|
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [2 x ptr], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7test_dsv_l14_kernel_environment)
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
// CHECK-NEXT: [[A:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
// CHECK-NEXT: [[A:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
||||||
// CHECK-NEXT: [[B:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
// CHECK-NEXT: [[B:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-NEXT: store i32 10, ptr [[A]], align 4
|
// CHECK-NEXT: store i32 10, ptr [[A]], align 4
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK-NEXT: store ptr [[A]], ptr [[TMP2]], align 8
|
// CHECK-NEXT: store ptr [[A]], ptr [[TMP2]], align 8
|
||||||
@@ -56,7 +56,7 @@ void test_ds(){
|
|||||||
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 2)
|
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 2)
|
||||||
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[B]], i64 4)
|
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[B]], i64 4)
|
||||||
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[A]], i64 4)
|
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[A]], i64 4)
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|||||||
@@ -44,18 +44,18 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK4-NEXT: [[TMP1:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK4-NEXT: [[TMP1:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK4-NEXT: [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK4-NEXT: [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[D_ADDR]], align 8
|
// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[D_ADDR]], align 8
|
||||||
// CHECK4-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK4-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l19_kernel_environment)
|
||||||
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
||||||
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK4: user_code.entry:
|
// CHECK4: user_code.entry:
|
||||||
// CHECK4-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK4-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK4-NEXT: [[TMP6:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK4-NEXT: [[TMP6:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[TMP6]], ptr [[ARGC_CASTED]], align 4
|
// CHECK4-NEXT: store i32 [[TMP6]], ptr [[ARGC_CASTED]], align 4
|
||||||
// CHECK4-NEXT: [[TMP7:%.*]] = load i64, ptr [[ARGC_CASTED]], align 8
|
// CHECK4-NEXT: [[TMP7:%.*]] = load i64, ptr [[ARGC_CASTED]], align 8
|
||||||
// CHECK4-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK4-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[TMP5]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK4-NEXT: store i32 [[TMP5]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK4-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], i64 [[TMP7]], ptr [[TMP3]]) #[[ATTR5:[0-9]+]]
|
// CHECK4-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], i64 [[TMP7]], ptr [[TMP3]]) #[[ATTR5:[0-9]+]]
|
||||||
// CHECK4-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK4-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
// CHECK4: worker.exit:
|
// CHECK4: worker.exit:
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
@@ -360,18 +360,18 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[D_ADDR]], align 4
|
// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[D_ADDR]], align 4
|
||||||
// CHECK5-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK5-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l19_kernel_environment)
|
||||||
// CHECK5-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
// CHECK5-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
||||||
// CHECK5-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK5-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK5: user_code.entry:
|
// CHECK5: user_code.entry:
|
||||||
// CHECK5-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK5-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK5-NEXT: [[TMP6:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK5-NEXT: [[TMP6:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK5-NEXT: store i32 [[TMP6]], ptr [[ARGC_CASTED]], align 4
|
// CHECK5-NEXT: store i32 [[TMP6]], ptr [[ARGC_CASTED]], align 4
|
||||||
// CHECK5-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARGC_CASTED]], align 4
|
// CHECK5-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARGC_CASTED]], align 4
|
||||||
// CHECK5-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK5-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK5-NEXT: store i32 [[TMP5]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK5-NEXT: store i32 [[TMP5]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK5-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], i32 [[TMP7]], ptr [[TMP3]]) #[[ATTR5:[0-9]+]]
|
// CHECK5-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], i32 [[TMP7]], ptr [[TMP3]]) #[[ATTR5:[0-9]+]]
|
||||||
// CHECK5-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK5-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
// CHECK5: worker.exit:
|
// CHECK5: worker.exit:
|
||||||
// CHECK5-NEXT: ret void
|
// CHECK5-NEXT: ret void
|
||||||
|
|||||||
@@ -29,13 +29,13 @@ int main() {
|
|||||||
// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l21_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -64,12 +64,12 @@ int main() {
|
|||||||
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23
|
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23
|
||||||
// CHECK1-SAME: () #[[ATTR5:[0-9]+]] {
|
// CHECK1-SAME: () #[[ATTR5:[0-9]+]] {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: call void @_Z3usev() #[[ATTR8]]
|
// CHECK1-NEXT: call void @_Z3usev() #[[ATTR8]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -105,13 +105,13 @@ int main() {
|
|||||||
// CHECK2-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK2-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l21_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -140,12 +140,12 @@ int main() {
|
|||||||
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23
|
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23
|
||||||
// CHECK2-SAME: () #[[ATTR5:[0-9]+]] {
|
// CHECK2-SAME: () #[[ATTR5:[0-9]+]] {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: call void @_Z3usev() #[[ATTR8]]
|
// CHECK2-NEXT: call void @_Z3usev() #[[ATTR8]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -40,16 +40,16 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l25_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: call void @_Z3usePi(ptr noundef [[TMP0]]) #[[ATTR7:[0-9]+]]
|
// CHECK1-NEXT: call void @_Z3usePi(ptr noundef [[TMP0]]) #[[ATTR7:[0-9]+]]
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -160,16 +160,16 @@ int main() {
|
|||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l25_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: call void @_Z3usePi(ptr noundef [[TMP0]]) #[[ATTR7:[0-9]+]]
|
// CHECK2-NEXT: call void @_Z3usePi(ptr noundef [[TMP0]]) #[[ATTR7:[0-9]+]]
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -81,18 +81,18 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
|
||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS2:%.*]] = alloca [0 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS2:%.*]] = alloca [0 x ptr], align 8
|
||||||
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l26_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 0, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 0, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS2]], i64 0)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS2]], i64 0)
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
||||||
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1
|
// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1
|
||||||
// CHECK1-NEXT: store i32 [[ADD]], ptr [[A_ADDR]], align 4
|
// CHECK1-NEXT: store i32 [[ADD]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -192,7 +192,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l43_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -213,7 +213,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP7]], 1
|
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP7]], 1
|
||||||
// CHECK1-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -255,7 +255,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
|
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
|
||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l55_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -270,7 +270,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1
|
// CHECK1-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1
|
||||||
// CHECK1-NEXT: store i32 [[INC]], ptr [[A1]], align 4
|
// CHECK1-NEXT: store i32 [[INC]], ptr [[A1]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[A1]], i64 4)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[A1]], i64 4)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -344,18 +344,18 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS2:%.*]] = alloca [0 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS2:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l26_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr @__omp_outlined___wrapper, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 0, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i32 0)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 0, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr @__omp_outlined__1_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i32 0)
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS2]], i32 0)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS2]], i32 0)
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1
|
// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1
|
||||||
// CHECK2-NEXT: store i32 [[ADD]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[ADD]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -455,7 +455,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l43_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -476,7 +476,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP7]], 1
|
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP7]], 1
|
||||||
// CHECK2-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -518,7 +518,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l55_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -533,7 +533,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1
|
// CHECK2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP4]], 1
|
||||||
// CHECK2-NEXT: store i32 [[INC]], ptr [[A1]], align 4
|
// CHECK2-NEXT: store i32 [[INC]], ptr [[A1]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[A1]], i32 4)
|
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[A1]], i32 4)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -41,12 +41,12 @@ int bar(int n){
|
|||||||
// CHECK-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l13_kernel_environment)
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
// CHECK-NEXT: [[D:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
// CHECK-NEXT: [[D:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-NEXT: store i32 [[TMP3]], ptr [[D]], align 4
|
// CHECK-NEXT: store i32 [[TMP3]], ptr [[D]], align 4
|
||||||
// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
@@ -59,7 +59,7 @@ int bar(int n){
|
|||||||
// CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP6]], 1
|
// CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP6]], 1
|
||||||
// CHECK-NEXT: store i32 [[ADD]], ptr [[ARRAYIDX]], align 4
|
// CHECK-NEXT: store i32 [[ADD]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[D]], i64 4)
|
// CHECK-NEXT: call void @__kmpc_free_shared(ptr [[D]], i64 4)
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|||||||
@@ -153,17 +153,17 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: store ptr [[PTR1]], ptr [[PTR1_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[PTR1]], ptr [[PTR1_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[PTR2]], ptr [[PTR2_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[PTR2]], ptr [[PTR2_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9targetBarPiS__l25_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: store ptr [[PTR1_ADDR]], ptr [[TMP3]], align 8
|
// CHECK1-NEXT: store ptr [[PTR1_ADDR]], ptr [[TMP3]], align 8
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1
|
// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1
|
||||||
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP4]], align 8
|
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP4]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 2)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 2)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -192,11 +192,11 @@ void unreachable_call() {
|
|||||||
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39
|
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39
|
||||||
// CHECK1-SAME: () #[[ATTR4:[0-9]+]] {
|
// CHECK1-SAME: () #[[ATTR4:[0-9]+]] {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -207,7 +207,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8
|
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8
|
||||||
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l47_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -221,7 +221,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[CONV2]], 2
|
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[CONV2]], 2
|
||||||
// CHECK1-NEXT: [[CONV4:%.*]] = trunc i32 [[ADD3]] to i16
|
// CHECK1-NEXT: [[CONV4:%.*]] = trunc i32 [[ADD3]] to i16
|
||||||
// CHECK1-NEXT: store i16 [[CONV4]], ptr [[AA_ADDR]], align 2
|
// CHECK1-NEXT: store i16 [[CONV4]], ptr [[AA_ADDR]], align 2
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -256,7 +256,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[TMP5:%.*]] = load i64, ptr [[VLA_ADDR4]], align 8
|
// CHECK1-NEXT: [[TMP5:%.*]] = load i64, ptr [[VLA_ADDR4]], align 8
|
||||||
// CHECK1-NEXT: [[TMP6:%.*]] = load ptr, ptr [[CN_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP6:%.*]] = load ptr, ptr [[CN_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[D_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[D_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l53_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -300,7 +300,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[TMP17:%.*]] = load i64, ptr [[CALL]], align 8
|
// CHECK1-NEXT: [[TMP17:%.*]] = load i64, ptr [[CALL]], align 8
|
||||||
// CHECK1-NEXT: [[ADD21:%.*]] = add nsw i64 [[TMP17]], 1
|
// CHECK1-NEXT: [[ADD21:%.*]] = add nsw i64 [[TMP17]], 1
|
||||||
// CHECK1-NEXT: store i64 [[ADD21]], ptr [[CALL]], align 8
|
// CHECK1-NEXT: store i64 [[ADD21]], ptr [[CALL]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -330,7 +330,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: store i64 [[AAA]], ptr [[AAA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AAA]], ptr [[AAA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZL7fstatici_l90_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -351,7 +351,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: [[ADD6:%.*]] = add nsw i32 [[TMP5]], 1
|
// CHECK1-NEXT: [[ADD6:%.*]] = add nsw i32 [[TMP5]], 1
|
||||||
// CHECK1-NEXT: store i32 [[ADD6]], ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: store i32 [[ADD6]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -374,7 +374,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = load i64, ptr [[VLA_ADDR2]], align 8
|
// CHECK1-NEXT: [[TMP2:%.*]] = load i64, ptr [[VLA_ADDR2]], align 8
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2S12r1Ei_l108_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -397,7 +397,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[CONV7:%.*]] = fptosi double [[TMP8]] to i32
|
// CHECK1-NEXT: [[CONV7:%.*]] = fptosi double [[TMP8]] to i32
|
||||||
// CHECK1-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_S1]], ptr [[TMP0]], i32 0, i32 0
|
// CHECK1-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_S1]], ptr [[TMP0]], i32 0, i32 0
|
||||||
// CHECK1-NEXT: [[CALL:%.*]] = call i32 @_Z3baziRd(i32 [[CONV7]], ptr nonnull align 8 dereferenceable(8) [[A8]]) #[[ATTR10]]
|
// CHECK1-NEXT: [[CALL:%.*]] = call i32 @_Z3baziRd(i32 [[CONV7]], ptr nonnull align 8 dereferenceable(8) [[A8]]) #[[ATTR10]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -426,7 +426,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142
|
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142
|
||||||
// CHECK1-SAME: () #[[ATTR4]] {
|
// CHECK1-SAME: () #[[ATTR4]] {
|
||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -435,7 +435,7 @@ void unreachable_call() {
|
|||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: 1:
|
// CHECK1: 1:
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -449,7 +449,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l74_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -465,7 +465,7 @@ void unreachable_call() {
|
|||||||
// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP4]], 1
|
// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP4]], 1
|
||||||
// CHECK1-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
// CHECK1-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -523,17 +523,17 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: store ptr [[PTR1]], ptr [[PTR1_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[PTR1]], ptr [[PTR1_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store ptr [[PTR2]], ptr [[PTR2_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[PTR2]], ptr [[PTR2_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9targetBarPiS__l25_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK2-NEXT: store ptr [[PTR1_ADDR]], ptr [[TMP3]], align 4
|
// CHECK2-NEXT: store ptr [[PTR1_ADDR]], ptr [[TMP3]], align 4
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 1
|
// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 1
|
||||||
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP4]], align 4
|
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP4]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 2)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 2, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 2)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -562,11 +562,11 @@ void unreachable_call() {
|
|||||||
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39
|
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39
|
||||||
// CHECK2-SAME: () #[[ATTR4:[0-9]+]] {
|
// CHECK2-SAME: () #[[ATTR4:[0-9]+]] {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l39_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -577,7 +577,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l47_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -591,7 +591,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[CONV2]], 2
|
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[CONV2]], 2
|
||||||
// CHECK2-NEXT: [[CONV4:%.*]] = trunc i32 [[ADD3]] to i16
|
// CHECK2-NEXT: [[CONV4:%.*]] = trunc i32 [[ADD3]] to i16
|
||||||
// CHECK2-NEXT: store i16 [[CONV4]], ptr [[AA_ADDR]], align 2
|
// CHECK2-NEXT: store i16 [[CONV4]], ptr [[AA_ADDR]], align 2
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -626,7 +626,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[VLA_ADDR4]], align 4
|
// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[VLA_ADDR4]], align 4
|
||||||
// CHECK2-NEXT: [[TMP6:%.*]] = load ptr, ptr [[CN_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP6:%.*]] = load ptr, ptr [[CN_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[D_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[D_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l53_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -670,7 +670,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[TMP17:%.*]] = load i64, ptr [[CALL]], align 8
|
// CHECK2-NEXT: [[TMP17:%.*]] = load i64, ptr [[CALL]], align 8
|
||||||
// CHECK2-NEXT: [[ADD21:%.*]] = add nsw i64 [[TMP17]], 1
|
// CHECK2-NEXT: [[ADD21:%.*]] = add nsw i64 [[TMP17]], 1
|
||||||
// CHECK2-NEXT: store i64 [[ADD21]], ptr [[CALL]], align 8
|
// CHECK2-NEXT: store i64 [[ADD21]], ptr [[CALL]], align 8
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -700,7 +700,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: store i32 [[AAA]], ptr [[AAA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AAA]], ptr [[AAA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZL7fstatici_l90_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -721,7 +721,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: [[ADD6:%.*]] = add nsw i32 [[TMP5]], 1
|
// CHECK2-NEXT: [[ADD6:%.*]] = add nsw i32 [[TMP5]], 1
|
||||||
// CHECK2-NEXT: store i32 [[ADD6]], ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: store i32 [[ADD6]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -744,7 +744,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[VLA_ADDR2]], align 4
|
// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[VLA_ADDR2]], align 4
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP4:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2S12r1Ei_l108_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP4]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -767,7 +767,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[CONV7:%.*]] = fptosi double [[TMP8]] to i32
|
// CHECK2-NEXT: [[CONV7:%.*]] = fptosi double [[TMP8]] to i32
|
||||||
// CHECK2-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_S1]], ptr [[TMP0]], i32 0, i32 0
|
// CHECK2-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_S1]], ptr [[TMP0]], i32 0, i32 0
|
||||||
// CHECK2-NEXT: [[CALL:%.*]] = call i32 @_Z3baziRd(i32 [[CONV7]], ptr nonnull align 8 dereferenceable(8) [[A8]]) #[[ATTR10]]
|
// CHECK2-NEXT: [[CALL:%.*]] = call i32 @_Z3baziRd(i32 [[CONV7]], ptr nonnull align 8 dereferenceable(8) [[A8]]) #[[ATTR10]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -796,7 +796,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142
|
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142
|
||||||
// CHECK2-SAME: () #[[ATTR4]] {
|
// CHECK2-SAME: () #[[ATTR4]] {
|
||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16unreachable_callv_l142_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -805,7 +805,7 @@ void unreachable_call() {
|
|||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: 1:
|
// CHECK2: 1:
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -819,7 +819,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l74_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -835,7 +835,7 @@ void unreachable_call() {
|
|||||||
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP4]], 1
|
// CHECK2-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP4]], 1
|
||||||
// CHECK2-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
// CHECK2-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -58,15 +58,15 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l30_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -103,7 +103,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l35_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -115,7 +115,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
||||||
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP7]], align 8
|
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP7]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -159,15 +159,15 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l30_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -204,7 +204,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l35_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -216,7 +216,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK2-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK2-NEXT: store ptr [[TMP2]], ptr [[TMP7]], align 4
|
// CHECK2-NEXT: store ptr [[TMP2]], ptr [[TMP7]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -53,15 +53,15 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK1-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l25_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 1024, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 1024, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -100,7 +100,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l30_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -113,7 +113,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
||||||
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP8]], align 8
|
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP8]], align 8
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 [[TMP5]], i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 [[TMP5]], i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -157,15 +157,15 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK2-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l25_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP3]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 1024, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 1024, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -204,7 +204,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP1:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l30_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP3]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -217,7 +217,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK2-NEXT: store ptr [[TMP2]], ptr [[TMP8]], align 4
|
// CHECK2-NEXT: store ptr [[TMP2]], ptr [[TMP8]], align 4
|
||||||
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 [[TMP5]], i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK2-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP4]], i32 1, i32 [[TMP5]], i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -56,13 +56,13 @@ int bar(int n){
|
|||||||
// CHECK45-64-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK45-64-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK45-64-NEXT: entry:
|
// CHECK45-64-NEXT: entry:
|
||||||
// CHECK45-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
// CHECK45-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -85,7 +85,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[AA_CASTED:%.*]] = alloca i64, align 8
|
// CHECK45-64-NEXT: [[AA_CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK45-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK45-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK45-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -97,7 +97,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
|
// CHECK45-64-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
|
||||||
// CHECK45-64-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 8
|
// CHECK45-64-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 8
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -133,7 +133,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -153,7 +153,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
// CHECK45-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
||||||
// CHECK45-64-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 8
|
// CHECK45-64-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 8
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
// CHECK45-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -192,13 +192,13 @@ int bar(int n){
|
|||||||
// CHECK45-32-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK45-32-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK45-32-NEXT: entry:
|
// CHECK45-32-NEXT: entry:
|
||||||
// CHECK45-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
// CHECK45-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -221,7 +221,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
// CHECK45-32-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK45-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -233,7 +233,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
// CHECK45-32-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
||||||
// CHECK45-32-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
// CHECK45-32-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -269,7 +269,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -289,7 +289,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK45-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK45-32-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
// CHECK45-32-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK45-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -328,13 +328,13 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK45-32-EX-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK45-32-EX-NEXT: entry:
|
// CHECK45-32-EX-NEXT: entry:
|
||||||
// CHECK45-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
// CHECK45-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -357,7 +357,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
// CHECK45-32-EX-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK45-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -369,7 +369,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
// CHECK45-32-EX-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -405,7 +405,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -425,7 +425,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK45-32-EX-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -464,13 +464,13 @@ int bar(int n){
|
|||||||
// CHECK-64-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK-64-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK-64-NEXT: entry:
|
// CHECK-64-NEXT: entry:
|
||||||
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -493,7 +493,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[AA_CASTED:%.*]] = alloca i64, align 8
|
// CHECK-64-NEXT: [[AA_CASTED:%.*]] = alloca i64, align 8
|
||||||
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -505,7 +505,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
|
// CHECK-64-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
|
||||||
// CHECK-64-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 8
|
// CHECK-64-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 8
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -541,7 +541,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -561,7 +561,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
// CHECK-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 2
|
||||||
// CHECK-64-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 8
|
// CHECK-64-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 8
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 3)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -596,153 +596,17 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27
|
|
||||||
// CHECK-SAME: () #[[ATTR0:[0-9]+]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
|
||||||
// CHECK: user_code.entry:
|
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
|
||||||
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
// CHECK: worker.exit:
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-LABEL: define {{[^@]+}}@__omp_outlined__
|
|
||||||
// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31
|
|
||||||
// CHECK-SAME: (i32 noundef [[AA:%.*]]) #[[ATTR0]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
|
||||||
// CHECK: user_code.entry:
|
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: store i16 [[TMP2]], ptr [[AA_CASTED]], align 2
|
|
||||||
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[AA_CASTED]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
|
||||||
// CHECK-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
|
||||||
// CHECK-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
|
||||||
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
// CHECK: worker.exit:
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-LABEL: define {{[^@]+}}@__omp_outlined__1
|
|
||||||
// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[AA:%.*]]) #[[ATTR1]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: [[CONV:%.*]] = sext i16 [[TMP0]] to i32
|
|
||||||
// CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[CONV]], 1
|
|
||||||
// CHECK-NEXT: [[CONV1:%.*]] = trunc i32 [[ADD]] to i16
|
|
||||||
// CHECK-NEXT: store i16 [[CONV1]], ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36
|
|
||||||
// CHECK-SAME: (i32 noundef [[A:%.*]], i32 noundef [[AA:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR0]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[A_CASTED:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [3 x ptr], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
|
||||||
// CHECK: user_code.entry:
|
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
|
||||||
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[TMP3]], ptr [[A_CASTED]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[A_CASTED]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP5:%.*]] = load i16, ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: store i16 [[TMP5]], ptr [[AA_CASTED]], align 2
|
|
||||||
// CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[AA_CASTED]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
|
||||||
// CHECK-NEXT: [[TMP8:%.*]] = inttoptr i32 [[TMP4]] to ptr
|
|
||||||
// CHECK-NEXT: store ptr [[TMP8]], ptr [[TMP7]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 1
|
|
||||||
// CHECK-NEXT: [[TMP10:%.*]] = inttoptr i32 [[TMP6]] to ptr
|
|
||||||
// CHECK-NEXT: store ptr [[TMP10]], ptr [[TMP9]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
|
||||||
// CHECK-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
|
||||||
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
// CHECK: worker.exit:
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-LABEL: define {{[^@]+}}@__omp_outlined__2
|
|
||||||
// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[A:%.*]], i32 noundef [[AA:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] {
|
|
||||||
// CHECK-NEXT: entry:
|
|
||||||
// CHECK-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4
|
|
||||||
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP1]], 1
|
|
||||||
// CHECK-NEXT: store i32 [[ADD]], ptr [[A_ADDR]], align 4
|
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = load i16, ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: [[CONV:%.*]] = sext i16 [[TMP2]] to i32
|
|
||||||
// CHECK-NEXT: [[ADD1:%.*]] = add nsw i32 [[CONV]], 1
|
|
||||||
// CHECK-NEXT: [[CONV2:%.*]] = trunc i32 [[ADD1]] to i16
|
|
||||||
// CHECK-NEXT: store i16 [[CONV2]], ptr [[AA_ADDR]], align 2
|
|
||||||
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i32], ptr [[TMP0]], i32 0, i32 2
|
|
||||||
// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
|
|
||||||
// CHECK-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP3]], 1
|
|
||||||
// CHECK-NEXT: store i32 [[ADD3]], ptr [[ARRAYIDX]], align 4
|
|
||||||
// CHECK-NEXT: ret void
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27
|
// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27
|
||||||
// CHECK-32-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK-32-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK-32-NEXT: entry:
|
// CHECK-32-NEXT: entry:
|
||||||
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -765,7 +629,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
// CHECK-32-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -777,7 +641,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
// CHECK-32-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
||||||
// CHECK-32-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
// CHECK-32-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -813,7 +677,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -833,7 +697,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK-32-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
// CHECK-32-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -872,13 +736,13 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-SAME: () #[[ATTR0:[0-9]+]] {
|
// CHECK-32-EX-SAME: () #[[ATTR0:[0-9]+]] {
|
||||||
// CHECK-32-EX-NEXT: entry:
|
// CHECK-32-EX-NEXT: entry:
|
||||||
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l27_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 0)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -901,7 +765,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
// CHECK-32-EX-NEXT: [[AA_CASTED:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l31_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -913,7 +777,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
// CHECK-32-EX-NEXT: [[TMP5:%.*]] = inttoptr i32 [[TMP3]] to ptr
|
||||||
// CHECK-32-EX-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[TMP5]], ptr [[TMP4]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__1, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 1)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -949,7 +813,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l36_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -969,7 +833,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
// CHECK-32-EX-NEXT: [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i32 0, i32 2
|
||||||
// CHECK-32-EX-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[TMP0]], ptr [[TMP11]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i32 3)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
|
|||||||
@@ -104,17 +104,17 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 8
|
// CHECK-64-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 8
|
||||||
// CHECK-64-NEXT: store double* [[E]], double** [[E_ADDR]], align 8
|
// CHECK-64-NEXT: store double* [[E]], double** [[E_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l24_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
|
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-64-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK-64-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK-64-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
// CHECK-64-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
||||||
// CHECK-64-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 8
|
// CHECK-64-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-64-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i64 1)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i64 1)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -303,7 +303,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store float* [[D]], float** [[D_ADDR]], align 8
|
// CHECK-64-NEXT: store float* [[D]], float** [[D_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l29_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -315,7 +315,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 8
|
// CHECK-64-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-64-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i64 2)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i64 2)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -559,7 +559,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 8
|
// CHECK-64-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l35_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -572,7 +572,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 8
|
// CHECK-64-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-64-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i64 2)
|
// CHECK-64-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i64 2)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -836,17 +836,17 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 4
|
// CHECK-32-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 4
|
||||||
// CHECK-32-NEXT: store double* [[E]], double** [[E_ADDR]], align 4
|
// CHECK-32-NEXT: store double* [[E]], double** [[E_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l24_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
|
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK-32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK-32-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
// CHECK-32-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
||||||
// CHECK-32-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 4
|
// CHECK-32-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i32 1)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i32 1)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -1035,7 +1035,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store float* [[D]], float** [[D_ADDR]], align 4
|
// CHECK-32-NEXT: store float* [[D]], float** [[D_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l29_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1047,7 +1047,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 4
|
// CHECK-32-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i32 2)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i32 2)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -1291,7 +1291,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 4
|
// CHECK-32-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l35_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1304,7 +1304,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 4
|
// CHECK-32-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i32 2)
|
// CHECK-32-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i32 2)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -1568,17 +1568,17 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 4
|
// CHECK-32-EX-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x i8*], align 4
|
||||||
// CHECK-32-EX-NEXT: store double* [[E]], double** [[E_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store double* [[E]], double** [[E_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load double*, double** [[E_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l24_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1]])
|
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-EX-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
// CHECK-32-EX-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[CAPTURED_VARS_ADDRS]], i32 0, i32 0
|
||||||
// CHECK-32-EX-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
// CHECK-32-EX-NEXT: [[TMP4:%.*]] = bitcast double* [[TMP0]] to i8*
|
||||||
// CHECK-32-EX-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 4
|
// CHECK-32-EX-NEXT: store i8* [[TMP4]], i8** [[TMP3]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-EX-NEXT: [[TMP5:%.*]] = bitcast [1 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i32 1)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP2]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, double*)* @__omp_outlined__ to i8*), i8* null, i8** [[TMP5]], i32 1)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -1767,7 +1767,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store float* [[D]], float** [[D_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store float* [[D]], float** [[D_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load i8*, i8** [[C_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load float*, float** [[D_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l29_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -1779,7 +1779,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 4
|
// CHECK-32-EX-NEXT: store i8* [[TMP6]], i8** [[TMP5]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-EX-NEXT: [[TMP7:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i32 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i8*, float*)* @__omp_outlined__1 to i8*), i8* null, i8** [[TMP7]], i32 2)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -2023,7 +2023,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i16* [[B]], i16** [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load i32*, i32** [[A_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load i16*, i16** [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.ident_t* @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(%struct.KernelEnvironmentTy* @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l35_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -2036,7 +2036,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 4
|
// CHECK-32-EX-NEXT: store i8* [[TMP7]], i8** [[TMP6]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
// CHECK-32-EX-NEXT: [[TMP8:%.*]] = bitcast [2 x i8*]* [[CAPTURED_VARS_ADDRS]] to i8**
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i32 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_parallel_51(%struct.ident_t* @[[GLOB1]], i32 [[TMP3]], i32 1, i32 -1, i32 -1, i8* bitcast (void (i32*, i32*, i32*, i16*)* @__omp_outlined__5 to i8*), i8* null, i8** [[TMP8]], i32 2)
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(%struct.ident_t* @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
|
|||||||
@@ -35,15 +35,15 @@ void test() {
|
|||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z17complex_reductionIfEvv_l16_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4, !tbaa [[TBAA8:![0-9]+]]
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4, !tbaa [[TBAA8:![0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR6:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR6:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -434,7 +434,7 @@ void test() {
|
|||||||
// CHECK1-NEXT: [[TMP34:%.*]] = load ptr, ptr [[TMP33]], align 8
|
// CHECK1-NEXT: [[TMP34:%.*]] = load ptr, ptr [[TMP33]], align 8
|
||||||
// CHECK1-NEXT: [[TMP35:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP4]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP35:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP4]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: [[TMP36:%.*]] = load ptr, ptr [[TMP35]], align 8
|
// CHECK1-NEXT: [[TMP36:%.*]] = load ptr, ptr [[TMP35]], align 8
|
||||||
// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP36]], ptr align 4 [[TMP34]], i64 8, i1 false), !tbaa.struct !21
|
// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP36]], ptr align 4 [[TMP34]], i64 8, i1 false), !tbaa.struct [[TBAA_STRUCT21:![0-9]+]]
|
||||||
// CHECK1-NEXT: br label [[IFCONT6:%.*]]
|
// CHECK1-NEXT: br label [[IFCONT6:%.*]]
|
||||||
// CHECK1: else5:
|
// CHECK1: else5:
|
||||||
// CHECK1-NEXT: br label [[IFCONT6]]
|
// CHECK1-NEXT: br label [[IFCONT6]]
|
||||||
@@ -527,7 +527,7 @@ void test() {
|
|||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z17complex_reductionIdEvv_l16_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -535,7 +535,7 @@ void test() {
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4, !tbaa [[TBAA8]]
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4, !tbaa [[TBAA8]]
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR6]]
|
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR6]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -939,7 +939,7 @@ void test() {
|
|||||||
// CHECK1-NEXT: [[TMP41:%.*]] = load ptr, ptr [[TMP40]], align 8
|
// CHECK1-NEXT: [[TMP41:%.*]] = load ptr, ptr [[TMP40]], align 8
|
||||||
// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP4]], i64 0, i64 0
|
// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP4]], i64 0, i64 0
|
||||||
// CHECK1-NEXT: [[TMP43:%.*]] = load ptr, ptr [[TMP42]], align 8
|
// CHECK1-NEXT: [[TMP43:%.*]] = load ptr, ptr [[TMP42]], align 8
|
||||||
// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP43]], ptr align 8 [[TMP41]], i64 16, i1 false), !tbaa.struct !27
|
// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP43]], ptr align 8 [[TMP41]], i64 16, i1 false), !tbaa.struct [[TBAA_STRUCT27:![0-9]+]]
|
||||||
// CHECK1-NEXT: br label [[IFCONT6:%.*]]
|
// CHECK1-NEXT: br label [[IFCONT6:%.*]]
|
||||||
// CHECK1: else5:
|
// CHECK1: else5:
|
||||||
// CHECK1-NEXT: br label [[IFCONT6]]
|
// CHECK1-NEXT: br label [[IFCONT6]]
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-64-NEXT: entry:
|
// CHECK-64-NEXT: entry:
|
||||||
// CHECK-64-NEXT: [[FMT:%.*]] = alloca ptr, align 8
|
// CHECK-64-NEXT: [[FMT:%.*]] = alloca ptr, align 8
|
||||||
// CHECK-64-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS:%.*]], align 8
|
// CHECK-64-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS:%.*]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckSimple_l13_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -58,7 +58,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-64-NEXT: [[TMP4:%.*]] = getelementptr inbounds [[PRINTF_ARGS]], ptr [[TMP]], i32 0, i32 2
|
// CHECK-64-NEXT: [[TMP4:%.*]] = getelementptr inbounds [[PRINTF_ARGS]], ptr [[TMP]], i32 0, i32 2
|
||||||
// CHECK-64-NEXT: store double 3.000000e+00, ptr [[TMP4]], align 8
|
// CHECK-64-NEXT: store double 3.000000e+00, ptr [[TMP4]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP5:%.*]] = call i32 @__llvm_omp_vprintf(ptr [[TMP1]], ptr [[TMP]], i32 24)
|
// CHECK-64-NEXT: [[TMP5:%.*]] = call i32 @__llvm_omp_vprintf(ptr [[TMP1]], ptr [[TMP]], i32 24)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -67,12 +67,12 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25
|
// CHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25
|
||||||
// CHECK-64-SAME: () #[[ATTR0]] {
|
// CHECK-64-SAME: () #[[ATTR0]] {
|
||||||
// CHECK-64-NEXT: entry:
|
// CHECK-64-NEXT: entry:
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__llvm_omp_vprintf(ptr @.str1, ptr null, i32 0)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__llvm_omp_vprintf(ptr @.str1, ptr null, i32 0)
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -84,7 +84,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-64-NEXT: [[FOO_ADDR:%.*]] = alloca i64, align 8
|
// CHECK-64-NEXT: [[FOO_ADDR:%.*]] = alloca i64, align 8
|
||||||
// CHECK-64-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS_0:%.*]], align 8
|
// CHECK-64-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS_0:%.*]], align 8
|
||||||
// CHECK-64-NEXT: store i64 [[FOO]], ptr [[FOO_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[FOO]], ptr [[FOO_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK-64-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckAllocaIsInEntryBlock_l36_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -99,7 +99,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: if.end:
|
// CHECK-64: if.end:
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -108,7 +108,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-32-NEXT: entry:
|
// CHECK-32-NEXT: entry:
|
||||||
// CHECK-32-NEXT: [[FMT:%.*]] = alloca ptr, align 4
|
// CHECK-32-NEXT: [[FMT:%.*]] = alloca ptr, align 4
|
||||||
// CHECK-32-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS:%.*]], align 8
|
// CHECK-32-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS:%.*]], align 8
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckSimple_l13_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -121,7 +121,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [[PRINTF_ARGS]], ptr [[TMP]], i32 0, i32 2
|
// CHECK-32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [[PRINTF_ARGS]], ptr [[TMP]], i32 0, i32 2
|
||||||
// CHECK-32-NEXT: store double 3.000000e+00, ptr [[TMP4]], align 8
|
// CHECK-32-NEXT: store double 3.000000e+00, ptr [[TMP4]], align 8
|
||||||
// CHECK-32-NEXT: [[TMP5:%.*]] = call i32 @__llvm_omp_vprintf(ptr [[TMP1]], ptr [[TMP]], i32 24)
|
// CHECK-32-NEXT: [[TMP5:%.*]] = call i32 @__llvm_omp_vprintf(ptr [[TMP1]], ptr [[TMP]], i32 24)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -130,12 +130,12 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25
|
// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25
|
||||||
// CHECK-32-SAME: () #[[ATTR0]] {
|
// CHECK-32-SAME: () #[[ATTR0]] {
|
||||||
// CHECK-32-NEXT: entry:
|
// CHECK-32-NEXT: entry:
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckNoArgs_l25_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__llvm_omp_vprintf(ptr @.str1, ptr null, i32 0)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__llvm_omp_vprintf(ptr @.str1, ptr null, i32 0)
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -147,7 +147,7 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-32-NEXT: [[FOO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK-32-NEXT: [[FOO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS_0:%.*]], align 8
|
// CHECK-32-NEXT: [[TMP:%.*]] = alloca [[PRINTF_ARGS_0:%.*]], align 8
|
||||||
// CHECK-32-NEXT: store i32 [[FOO]], ptr [[FOO_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[FOO]], ptr [[FOO_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK-32-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_CheckAllocaIsInEntryBlock_l36_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -162,6 +162,6 @@ void CheckAllocaIsInEntryBlock(void) {
|
|||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: if.end:
|
// CHECK-32: if.end:
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -124,7 +124,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK45-64-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK45-64-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-64-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-64: simd.if.end:
|
// CHECK45-64: simd.if.end:
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -142,7 +142,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -198,7 +198,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK45-64-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK45-64-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-64-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-64: simd.if.end:
|
// CHECK45-64: simd.if.end:
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -211,7 +211,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK45-64-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -244,7 +244,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: omp.inner.for.end:
|
// CHECK45-64: omp.inner.for.end:
|
||||||
// CHECK45-64-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK45-64-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -261,7 +261,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -299,7 +299,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK45-64-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK45-64-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK45-64-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK45-64-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK45-64-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -317,7 +317,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -368,7 +368,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK45-32-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK45-32-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-32-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-32: simd.if.end:
|
// CHECK45-32: simd.if.end:
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -386,7 +386,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -441,7 +441,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK45-32-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK45-32-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-32-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-32: simd.if.end:
|
// CHECK45-32: simd.if.end:
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -454,7 +454,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK45-32-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -486,7 +486,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: omp.inner.for.end:
|
// CHECK45-32: omp.inner.for.end:
|
||||||
// CHECK45-32-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK45-32-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -503,7 +503,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -540,7 +540,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK45-32-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK45-32-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK45-32-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK45-32-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK45-32-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -558,7 +558,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -609,7 +609,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK45-32-EX-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-32-EX-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-32-EX: simd.if.end:
|
// CHECK45-32-EX: simd.if.end:
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -627,7 +627,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -682,7 +682,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK45-32-EX-NEXT: br label [[SIMD_IF_END]]
|
// CHECK45-32-EX-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK45-32-EX: simd.if.end:
|
// CHECK45-32-EX: simd.if.end:
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -695,7 +695,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK45-32-EX-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -727,7 +727,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: omp.inner.for.end:
|
// CHECK45-32-EX: omp.inner.for.end:
|
||||||
// CHECK45-32-EX-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK45-32-EX-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -744,7 +744,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -781,7 +781,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK45-32-EX-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -799,7 +799,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -851,7 +851,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK-64-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK-64-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-64-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-64: simd.if.end:
|
// CHECK-64: simd.if.end:
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -869,7 +869,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -925,7 +925,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK-64-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK-64-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-64-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-64: simd.if.end:
|
// CHECK-64: simd.if.end:
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -938,7 +938,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK-64-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -971,7 +971,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: omp.inner.for.end:
|
// CHECK-64: omp.inner.for.end:
|
||||||
// CHECK-64-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK-64-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -988,7 +988,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -1026,7 +1026,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK-64-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK-64-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK-64-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK-64-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK-64-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1044,7 +1044,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1095,7 +1095,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK-32-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK-32-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-32-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-32: simd.if.end:
|
// CHECK-32: simd.if.end:
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1113,7 +1113,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1168,7 +1168,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK-32-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK-32-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-32-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-32: simd.if.end:
|
// CHECK-32: simd.if.end:
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1181,7 +1181,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK-32-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1213,7 +1213,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: omp.inner.for.end:
|
// CHECK-32: omp.inner.for.end:
|
||||||
// CHECK-32-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK-32-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1230,7 +1230,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -1267,7 +1267,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK-32-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK-32-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK-32-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK-32-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK-32-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1285,7 +1285,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l29_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -1336,7 +1336,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[ADD10]], ptr [[I3]], align 4
|
||||||
// CHECK-32-EX-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-32-EX-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-32-EX: simd.if.end:
|
// CHECK-32-EX: simd.if.end:
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1354,7 +1354,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -1409,7 +1409,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[ADD12]], ptr [[I3]], align 4
|
||||||
// CHECK-32-EX-NEXT: br label [[SIMD_IF_END]]
|
// CHECK-32-EX-NEXT: br label [[SIMD_IF_END]]
|
||||||
// CHECK-32-EX: simd.if.end:
|
// CHECK-32-EX: simd.if.end:
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1422,7 +1422,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[I:%.*]] = alloca i32, align 4
|
// CHECK-32-EX-NEXT: [[I:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -1454,7 +1454,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: omp.inner.for.end:
|
// CHECK-32-EX: omp.inner.for.end:
|
||||||
// CHECK-32-EX-NEXT: store i32 10, ptr [[I]], align 4
|
// CHECK-32-EX-NEXT: store i32 10, ptr [[I]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -1471,7 +1471,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP2]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -1508,6 +1508,6 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
// CHECK-32-EX-NEXT: [[TMP9:%.*]] = load i32, ptr [[N1]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
// CHECK-32-EX-NEXT: [[ADD4:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]
|
||||||
// CHECK-32-EX-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[ADD4]], ptr [[TMP1]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -57,18 +57,18 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l23_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = load i8, ptr [[A_ADDR]], align 1
|
// CHECK1-NEXT: [[TMP2:%.*]] = load i8, ptr [[A_ADDR]], align 1
|
||||||
// CHECK1-NEXT: store i8 [[TMP2]], ptr [[A_CASTED]], align 1
|
// CHECK1-NEXT: store i8 [[TMP2]], ptr [[A_CASTED]], align 1
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8
|
// CHECK1-NEXT: [[TMP3:%.*]] = load i64, ptr [[A_CASTED]], align 8
|
||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -95,7 +95,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l28_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -106,7 +106,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2]]
|
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -133,7 +133,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l33_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -144,7 +144,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2]]
|
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP3]]) #[[ATTR2]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -209,18 +209,18 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l23_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = load i8, ptr [[A_ADDR]], align 1
|
// CHECK2-NEXT: [[TMP2:%.*]] = load i8, ptr [[A_ADDR]], align 1
|
||||||
// CHECK2-NEXT: store i8 [[TMP2]], ptr [[A_CASTED]], align 1
|
// CHECK2-NEXT: store i8 [[TMP2]], ptr [[A_CASTED]], align 1
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4
|
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[A_CASTED]], align 4
|
||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -247,7 +247,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l28_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -258,7 +258,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2]]
|
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -285,7 +285,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l33_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -296,7 +296,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2]]
|
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP3]]) #[[ATTR2]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -37,15 +37,15 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: entry:
|
// CHECK1-NEXT: entry:
|
||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l16_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR5:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR5:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -155,15 +155,15 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: entry:
|
// CHECK2-NEXT: entry:
|
||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l16_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR5:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR5:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -85,11 +85,11 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l28_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
||||||
@@ -99,7 +99,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -396,7 +396,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -407,7 +407,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -645,7 +645,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -653,7 +653,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -833,7 +833,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -844,7 +844,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -1059,7 +1059,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l52_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -1070,7 +1070,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -1371,7 +1371,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l59_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -1383,7 +1383,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -1635,11 +1635,11 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
// CHECK2-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l28_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
// CHECK2-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
||||||
@@ -1649,7 +1649,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1946,7 +1946,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK2-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1957,7 +1957,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -2195,7 +2195,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -2203,7 +2203,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -2383,7 +2383,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK2-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
// CHECK2-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -2394,7 +2394,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -2609,7 +2609,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK2-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l52_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -2620,7 +2620,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -2916,7 +2916,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK2-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 8
|
// CHECK2-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l59_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -2928,7 +2928,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -3180,11 +3180,11 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l28_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK3-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK3-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK3-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK3-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -3194,7 +3194,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -3484,7 +3484,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -3495,7 +3495,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -3727,7 +3727,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK3-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l39_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -3735,7 +3735,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -3909,7 +3909,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l44_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -3920,7 +3920,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -4128,7 +4128,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l52_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -4139,7 +4139,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__8(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -4443,7 +4443,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[V]], ptr [[V_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l59_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -4455,7 +4455,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__10(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], ptr [[TMP5]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l24_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[ARGC_CASTED]], align 4
|
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[ARGC_CASTED]], align 4
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[ARGC_CASTED]], align 8
|
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[ARGC_CASTED]], align 8
|
||||||
@@ -57,7 +57,7 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -341,11 +341,11 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l24_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[ARGC_CASTED]], align 4
|
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[ARGC_CASTED]], align 4
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARGC_CASTED]], align 4
|
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[ARGC_CASTED]], align 4
|
||||||
@@ -355,7 +355,7 @@ int main(int argc, char **argv) {
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -73,11 +73,11 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l26_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK1-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
||||||
@@ -87,7 +87,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -408,7 +408,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l32_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -419,7 +419,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -681,7 +681,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l37_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -689,7 +689,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -883,7 +883,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l42_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -894,7 +894,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -1128,11 +1128,11 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l26_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK2-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -1142,7 +1142,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1456,7 +1456,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l32_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1467,7 +1467,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1723,7 +1723,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l37_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1731,7 +1731,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1919,7 +1919,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l42_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1930,7 +1930,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
|
|||||||
@@ -81,11 +81,11 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
// CHECK45-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-64-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK45-64-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-64-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK45-64-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK45-64-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
// CHECK45-64-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
||||||
@@ -95,7 +95,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK45-64-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -246,7 +246,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -257,7 +257,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-64-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -396,7 +396,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK45-64-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -404,7 +404,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-64-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -515,7 +515,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK45-64-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
// CHECK45-64-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK45-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-64: user_code.entry:
|
// CHECK45-64: user_code.entry:
|
||||||
@@ -526,7 +526,7 @@ int bar(int n){
|
|||||||
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-64-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
// CHECK45-64-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK45-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
// CHECK45-64: worker.exit:
|
// CHECK45-64: worker.exit:
|
||||||
// CHECK45-64-NEXT: ret void
|
// CHECK45-64-NEXT: ret void
|
||||||
@@ -664,11 +664,11 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
// CHECK45-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-32-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK45-32-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK45-32-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -678,7 +678,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK45-32-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -828,7 +828,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -839,7 +839,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-32-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -977,7 +977,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK45-32-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -985,7 +985,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-32-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -1095,7 +1095,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK45-32-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK45-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32: user_code.entry:
|
// CHECK45-32: user_code.entry:
|
||||||
@@ -1106,7 +1106,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK45-32-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK45-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
// CHECK45-32: worker.exit:
|
// CHECK45-32: worker.exit:
|
||||||
// CHECK45-32-NEXT: ret void
|
// CHECK45-32-NEXT: ret void
|
||||||
@@ -1242,11 +1242,11 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
// CHECK45-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK45-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK45-32-EX-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -1256,7 +1256,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK45-32-EX-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -1406,7 +1406,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -1417,7 +1417,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-32-EX-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -1555,7 +1555,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK45-32-EX-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -1563,7 +1563,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK45-32-EX-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -1673,7 +1673,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK45-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK45-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK45-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK45-32-EX: user_code.entry:
|
// CHECK45-32-EX: user_code.entry:
|
||||||
@@ -1684,7 +1684,7 @@ int bar(int n){
|
|||||||
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK45-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK45-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK45-32-EX-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK45-32-EX-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK45-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
// CHECK45-32-EX: worker.exit:
|
// CHECK45-32-EX: worker.exit:
|
||||||
// CHECK45-32-EX-NEXT: ret void
|
// CHECK45-32-EX-NEXT: ret void
|
||||||
@@ -1820,11 +1820,11 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[L]], ptr [[L_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-64-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-64-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK-64-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-64-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK-64-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK-64-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
// CHECK-64-NEXT: [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 8
|
||||||
@@ -1834,7 +1834,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-64-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK-64-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]], i64 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -1985,7 +1985,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[N]], ptr [[N_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -1996,7 +1996,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-64-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-64-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i64 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -2135,7 +2135,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK-64-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -2143,7 +2143,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-64-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-64-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -2254,7 +2254,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
// CHECK-64-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
// CHECK-64-NEXT: store i64 [[F]], ptr [[F_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
// CHECK-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 8
|
||||||
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-64-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-64-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-64-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-64: user_code.entry:
|
// CHECK-64: user_code.entry:
|
||||||
@@ -2265,7 +2265,7 @@ int bar(int n){
|
|||||||
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-64-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-64-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-64-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
// CHECK-64-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i64 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK-64-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-64-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
// CHECK-64: worker.exit:
|
// CHECK-64: worker.exit:
|
||||||
// CHECK-64-NEXT: ret void
|
// CHECK-64-NEXT: ret void
|
||||||
@@ -2403,11 +2403,11 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-32-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK-32-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK-32-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -2417,7 +2417,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK-32-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -2567,7 +2567,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -2578,7 +2578,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-32-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -2716,7 +2716,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK-32-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -2724,7 +2724,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-32-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -2834,7 +2834,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK-32-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32: user_code.entry:
|
// CHECK-32: user_code.entry:
|
||||||
@@ -2845,7 +2845,7 @@ int bar(int n){
|
|||||||
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK-32-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK-32-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
// CHECK-32: worker.exit:
|
// CHECK-32: worker.exit:
|
||||||
// CHECK-32-NEXT: ret void
|
// CHECK-32-NEXT: ret void
|
||||||
@@ -2981,11 +2981,11 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[L]], ptr [[L_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l34_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-32-EX-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-32-EX-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP3:%.*]] = load i32, ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[TMP3]], ptr [[N_CASTED]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
// CHECK-32-EX-NEXT: [[TMP4:%.*]] = load i32, ptr [[N_CASTED]], align 4
|
||||||
@@ -2995,7 +2995,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
// CHECK-32-EX-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]], i32 [[TMP6]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -3145,7 +3145,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[N]], ptr [[N_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[AA]], ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[AA_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l40_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -3156,7 +3156,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-32-EX-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], i32 [[TMP4]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -3294,7 +3294,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK-32-EX-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l45_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -3302,7 +3302,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
// CHECK-32-EX-NEXT: call void @__omp_outlined__2(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]]) #[[ATTR3]]
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
@@ -3412,7 +3412,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store ptr [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[F]], ptr [[F_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
// CHECK-32-EX-NEXT: [[TMP0:%.*]] = load ptr, ptr [[C_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK-32-EX-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIiET_i_l50_kernel_environment)
|
||||||
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK-32-EX-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-32-EX-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK-32-EX: user_code.entry:
|
// CHECK-32-EX: user_code.entry:
|
||||||
@@ -3423,7 +3423,7 @@ int bar(int n){
|
|||||||
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK-32-EX-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK-32-EX-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK-32-EX-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
// CHECK-32-EX-NEXT: call void @__omp_outlined__3(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[TMP0]], i32 [[TMP4]]) #[[ATTR3]]
|
||||||
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-32-EX-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
// CHECK-32-EX: worker.exit:
|
// CHECK-32-EX: worker.exit:
|
||||||
// CHECK-32-EX-NEXT: ret void
|
// CHECK-32-EX-NEXT: ret void
|
||||||
|
|||||||
@@ -83,19 +83,19 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK1-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
// CHECK1-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 4)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 4)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -122,7 +122,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
// CHECK1-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIPPcEiT__l15_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -134,7 +134,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 8)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 8)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -161,19 +161,19 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i32 4)
|
// CHECK2-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i32 4)
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -200,7 +200,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIPPcEiT__l15_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -212,7 +212,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -243,19 +243,19 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK3-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK3-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK3-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
// CHECK3-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK3-NEXT: store i64 [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
// CHECK3-NEXT: store i64 [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l64_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
// CHECK3-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 4)
|
||||||
// CHECK3-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
// CHECK3-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
||||||
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 4)
|
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 4)
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -286,7 +286,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK3-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK3-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK3-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
// CHECK3-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK3-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
// CHECK3-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 8
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIPPcEiT__l53_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -298,7 +298,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
// CHECK3-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 8)
|
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i64 8)
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -329,19 +329,19 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK4-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK4-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
// CHECK4-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
// CHECK4-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK4-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK4-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l64_kernel_environment)
|
||||||
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK4: user_code.entry:
|
// CHECK4: user_code.entry:
|
||||||
// CHECK4-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
// CHECK4-NEXT: [[TMP1:%.*]] = load i32, ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK4-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i32 4)
|
// CHECK4-NEXT: [[ARGC1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i32 4)
|
||||||
// CHECK4-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
// CHECK4-NEXT: store i32 [[TMP1]], ptr [[ARGC1]], align 4
|
||||||
// CHECK4-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK4-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK4-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK4-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK4-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
// CHECK4-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3:[0-9]+]]
|
||||||
// CHECK4-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
// CHECK4-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
||||||
// CHECK4-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK4-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
// CHECK4: worker.exit:
|
// CHECK4: worker.exit:
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
@@ -372,7 +372,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK4-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK4-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
// CHECK4-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK4-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
// CHECK4-NEXT: store ptr [[ARGC]], ptr [[ARGC_ADDR]], align 4
|
||||||
// CHECK4-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK4-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIPPcEiT__l53_kernel_environment)
|
||||||
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK4-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK4-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK4: user_code.entry:
|
// CHECK4: user_code.entry:
|
||||||
@@ -384,7 +384,7 @@ int main (int argc, char **argv) {
|
|||||||
// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK4-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
// CHECK4-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[ARGC1]]) #[[ATTR3]]
|
||||||
// CHECK4-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
// CHECK4-NEXT: call void @__kmpc_free_shared(ptr [[ARGC1]], i32 4)
|
||||||
// CHECK4-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK4-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
// CHECK4: worker.exit:
|
// CHECK4: worker.exit:
|
||||||
// CHECK4-NEXT: ret void
|
// CHECK4-NEXT: ret void
|
||||||
|
|||||||
@@ -57,19 +57,19 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[E]], ptr [[E_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[E]], ptr [[E_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l20_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP1:%.*]] = load double, ptr [[E_ADDR]], align 8
|
// CHECK1-NEXT: [[TMP1:%.*]] = load double, ptr [[E_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[E1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 8)
|
// CHECK1-NEXT: [[E1:%.*]] = call align 8 ptr @__kmpc_alloc_shared(i64 8)
|
||||||
// CHECK1-NEXT: store double [[TMP1]], ptr [[E1]], align 8
|
// CHECK1-NEXT: store double [[TMP1]], ptr [[E1]], align 8
|
||||||
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK1-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
// CHECK1-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[E1]], i64 8)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[E1]], i64 8)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -328,7 +328,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[C]], ptr [[C_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[C]], ptr [[C_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[D]], ptr [[D_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[D]], ptr [[D_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l26_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -344,7 +344,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
// CHECK1-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i64 4)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i64 4)
|
||||||
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i64 1)
|
// CHECK1-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i64 1)
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -677,7 +677,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK1-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[A]], ptr [[A_ADDR]], align 8
|
||||||
// CHECK1-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
// CHECK1-NEXT: store i64 [[B]], ptr [[B_ADDR]], align 8
|
||||||
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l33_kernel_environment)
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -685,7 +685,7 @@ int bar(int n){
|
|||||||
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK1-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK1-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
// CHECK1-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK1-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void
|
// CHECK1-NEXT: ret void
|
||||||
@@ -1250,17 +1250,17 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 4
|
// CHECK2-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[E_ADDR]], align 4
|
// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[E_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l20_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK2-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK2-NEXT: [[TMP3:%.*]] = load double, ptr [[TMP0]], align 8
|
// CHECK2-NEXT: [[TMP3:%.*]] = load double, ptr [[TMP0]], align 8
|
||||||
// CHECK2-NEXT: store double [[TMP3]], ptr [[E1]], align 8
|
// CHECK2-NEXT: store double [[TMP3]], ptr [[E1]], align 8
|
||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
// CHECK2-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1519,7 +1519,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[C]], ptr [[C_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[D]], ptr [[D_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[D]], ptr [[D_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l26_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1535,7 +1535,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
// CHECK2-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i32 4)
|
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i32 4)
|
||||||
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i32 1)
|
// CHECK2-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i32 1)
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -1868,7 +1868,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK2-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
// CHECK2-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l33_kernel_environment)
|
||||||
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK2-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK2-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK2: user_code.entry:
|
// CHECK2: user_code.entry:
|
||||||
@@ -1876,7 +1876,7 @@ int bar(int n){
|
|||||||
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK2-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK2-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
// CHECK2-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
||||||
// CHECK2-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK2-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
// CHECK2: worker.exit:
|
// CHECK2: worker.exit:
|
||||||
// CHECK2-NEXT: ret void
|
// CHECK2-NEXT: ret void
|
||||||
@@ -2441,17 +2441,17 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK3-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 4
|
// CHECK3-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[E_ADDR]], align 4
|
// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[E_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 1, i1 true)
|
// CHECK3-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l20_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP1]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK3-NEXT: [[TMP2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK3-NEXT: [[TMP3:%.*]] = load double, ptr [[TMP0]], align 8
|
// CHECK3-NEXT: [[TMP3:%.*]] = load double, ptr [[TMP0]], align 8
|
||||||
// CHECK3-NEXT: store double [[TMP3]], ptr [[E1]], align 8
|
// CHECK3-NEXT: store double [[TMP3]], ptr [[E1]], align 8
|
||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
// CHECK3-NEXT: call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[E1]]) #[[ATTR4:[0-9]+]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -2710,7 +2710,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK3-NEXT: store i32 [[C]], ptr [[C_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[C]], ptr [[C_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[D]], ptr [[D_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[D]], ptr [[D_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 1, i1 true)
|
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l26_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -2726,7 +2726,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
// CHECK3-NEXT: call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[C1]], ptr [[D2]]) #[[ATTR4]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i32 4)
|
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[D2]], i32 4)
|
||||||
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i32 1)
|
// CHECK3-NEXT: call void @__kmpc_free_shared(ptr [[C1]], i32 1)
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 1)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
@@ -3059,7 +3059,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
// CHECK3-NEXT: [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
|
||||||
// CHECK3-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[A]], ptr [[A_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
// CHECK3-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
|
||||||
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1]], i8 2, i1 false)
|
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9ftemplateIcET_i_l33_kernel_environment)
|
||||||
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK3-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK3-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK3: user_code.entry:
|
// CHECK3: user_code.entry:
|
||||||
@@ -3067,7 +3067,7 @@ int bar(int n){
|
|||||||
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
// CHECK3-NEXT: store i32 0, ptr [[DOTZERO_ADDR]], align 4
|
||||||
// CHECK3-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
// CHECK3-NEXT: store i32 [[TMP1]], ptr [[DOTTHREADID_TEMP_]], align 4
|
||||||
// CHECK3-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
// CHECK3-NEXT: call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]]) #[[ATTR4]]
|
||||||
// CHECK3-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK3-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
// CHECK3: worker.exit:
|
// CHECK3: worker.exit:
|
||||||
// CHECK3-NEXT: ret void
|
// CHECK3-NEXT: ret void
|
||||||
|
|||||||
@@ -103,16 +103,16 @@ int main()
|
|||||||
// CHECK-NEXT: [[E_ADDR:%.*]] = alloca ptr, align 8
|
// CHECK-NEXT: [[E_ADDR:%.*]] = alloca ptr, align 8
|
||||||
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
// CHECK-NEXT: [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
|
||||||
// CHECK-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 8
|
// CHECK-NEXT: store ptr [[E]], ptr [[E_ADDR]], align 8
|
||||||
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false)
|
// CHECK-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l32_kernel_environment)
|
||||||
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
// CHECK-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
|
||||||
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
// CHECK-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
|
||||||
// CHECK: user_code.entry:
|
// CHECK: user_code.entry:
|
||||||
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
|
// CHECK-NEXT: [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
|
||||||
// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[E_ADDR]], align 8
|
// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[E_ADDR]], align 8
|
||||||
// CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
// CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0
|
||||||
// CHECK-NEXT: store ptr [[TMP2]], ptr [[TMP3]], align 8
|
// CHECK-NEXT: store ptr [[TMP2]], ptr [[TMP3]], align 8
|
||||||
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
// CHECK-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 1)
|
||||||
// CHECK-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB1]], i8 2)
|
// CHECK-NEXT: call void @__kmpc_target_deinit()
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK: worker.exit:
|
// CHECK: worker.exit:
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|||||||
@@ -84,9 +84,9 @@ void spmd(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma omp begin declare target device_type(nohost)
|
#pragma omp begin declare target device_type(nohost)
|
||||||
|
struct KernelEnvironmentTy;
|
||||||
__attribute__((weak))
|
__attribute__((weak))
|
||||||
extern "C" int __kmpc_target_init(void *Ident, char Mode,
|
extern "C" int __kmpc_target_init(struct KernelEnvironmentTy *) { // all-remark {{Could not internalize function. Some optimizations may not be possible. [OMP140]}}
|
||||||
bool UseGenericStateMachine) { // all-remark {{Could not internalize function. Some optimizations may not be possible. [OMP140]}}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#pragma omp end declare target
|
#pragma omp end declare target
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ void spmd(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma omp begin declare target device_type(nohost)
|
#pragma omp begin declare target device_type(nohost)
|
||||||
|
struct KernelEnvironmentTy;
|
||||||
__attribute__((weak))
|
__attribute__((weak))
|
||||||
extern "C" int __kmpc_target_init(void *Ident, char Mode,
|
extern "C" int __kmpc_target_init(struct KernelEnvironmentTy *) { // expected-remark {{Could not internalize function. Some optimizations may not be possible. [OMP140]}}
|
||||||
bool UseGenericStateMachine) { // expected-remark {{Could not internalize function. Some optimizations may not be possible. [OMP140]}}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#pragma omp end declare target
|
#pragma omp end declare target
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP6:%.*]] = addrspacecast ptr addrspace(1) [[TMP5]] to ptr, !dbg [[DBG47]]
|
// CHECK1-NEXT: [[TMP6:%.*]] = addrspacecast ptr addrspace(1) [[TMP5]] to ptr, !dbg [[DBG47]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP6]], ptr [[_TMP2]], align 8, !dbg [[DBG47]]
|
// CHECK1-NEXT: store ptr [[TMP6]], ptr [[_TMP2]], align 8, !dbg [[DBG47]]
|
||||||
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG47]]
|
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG47]]
|
||||||
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false), !dbg [[DBG47]]
|
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l23_kernel_environment), !dbg [[DBG47]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1, !dbg [[DBG47]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1, !dbg [[DBG47]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG47]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG47]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -113,7 +113,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG48]]
|
// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG48]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP16]], align 8, !dbg [[DBG48]]
|
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP16]], align 8, !dbg [[DBG48]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB3]], i32 [[TMP9]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG48]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB3]], i32 [[TMP9]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG48]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB5:[0-9]+]], i8 2), !dbg [[DBG49:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG49:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG51:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG51:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG47]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG47]]
|
||||||
@@ -308,11 +308,11 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP7:%.*]] = addrspacecast ptr addrspace(1) [[TMP6]] to ptr, !dbg [[DBG137]]
|
// CHECK1-NEXT: [[TMP7:%.*]] = addrspacecast ptr addrspace(1) [[TMP6]] to ptr, !dbg [[DBG137]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[_TMP2]], align 8, !dbg [[DBG137]]
|
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[_TMP2]], align 8, !dbg [[DBG137]]
|
||||||
// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG137]]
|
// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG137]]
|
||||||
// CHECK1-NEXT: [[TMP9:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB7:[0-9]+]], i8 2, i1 false), !dbg [[DBG137]]
|
// CHECK1-NEXT: [[TMP9:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l37_kernel_environment), !dbg [[DBG137]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP9]], -1, !dbg [[DBG137]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP9]], -1, !dbg [[DBG137]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG137]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG137]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9:[0-9]+]])
|
// CHECK1-NEXT: [[TMP10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[A_ADDR]], align 4, !dbg [[DBG138:![0-9]+]]
|
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[A_ADDR]], align 4, !dbg [[DBG138:![0-9]+]]
|
||||||
// CHECK1-NEXT: store i32 [[TMP11]], ptr [[A_CASTED]], align 4, !dbg [[DBG138]]
|
// CHECK1-NEXT: store i32 [[TMP11]], ptr [[A_CASTED]], align 4, !dbg [[DBG138]]
|
||||||
// CHECK1-NEXT: [[TMP12:%.*]] = load i64, ptr [[A_CASTED]], align 8, !dbg [[DBG138]]
|
// CHECK1-NEXT: [[TMP12:%.*]] = load i64, ptr [[A_CASTED]], align 8, !dbg [[DBG138]]
|
||||||
@@ -325,8 +325,8 @@ int main() {
|
|||||||
// CHECK1-NEXT: store ptr [[TMP5]], ptr [[TMP16]], align 8, !dbg [[DBG138]]
|
// CHECK1-NEXT: store ptr [[TMP5]], ptr [[TMP16]], align 8, !dbg [[DBG138]]
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG138]]
|
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG138]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP17]], align 8, !dbg [[DBG138]]
|
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP17]], align 8, !dbg [[DBG138]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB9]], i32 [[TMP10]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG138]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB7]], i32 [[TMP10]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG138]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB11:[0-9]+]], i8 2), !dbg [[DBG139:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG139:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG141:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG141:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG137]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG137]]
|
||||||
@@ -517,11 +517,11 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP10:%.*]] = addrspacecast ptr addrspace(1) [[TMP9]] to ptr, !dbg [[DBG212]]
|
// CHECK1-NEXT: [[TMP10:%.*]] = addrspacecast ptr addrspace(1) [[TMP9]] to ptr, !dbg [[DBG212]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP10]], ptr [[_TMP3]], align 8, !dbg [[DBG212]]
|
// CHECK1-NEXT: store ptr [[TMP10]], ptr [[_TMP3]], align 8, !dbg [[DBG212]]
|
||||||
// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[_TMP3]], align 8, !dbg [[DBG212]]
|
// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[_TMP3]], align 8, !dbg [[DBG212]]
|
||||||
// CHECK1-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB13:[0-9]+]], i8 2, i1 false), !dbg [[DBG212]]
|
// CHECK1-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l51_kernel_environment), !dbg [[DBG212]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP12]], -1, !dbg [[DBG212]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP12]], -1, !dbg [[DBG212]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG212]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG212]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])
|
// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0, !dbg [[DBG213:![0-9]+]]
|
// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0, !dbg [[DBG213:![0-9]+]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP14]], align 8, !dbg [[DBG213]]
|
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP14]], align 8, !dbg [[DBG213]]
|
||||||
// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1, !dbg [[DBG213]]
|
// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1, !dbg [[DBG213]]
|
||||||
@@ -530,8 +530,8 @@ int main() {
|
|||||||
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP16]], align 8, !dbg [[DBG213]]
|
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP16]], align 8, !dbg [[DBG213]]
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG213]]
|
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG213]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP11]], ptr [[TMP17]], align 8, !dbg [[DBG213]]
|
// CHECK1-NEXT: store ptr [[TMP11]], ptr [[TMP17]], align 8, !dbg [[DBG213]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB15]], i32 [[TMP13]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__4, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG213]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB11]], i32 [[TMP13]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__4, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG213]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB17:[0-9]+]], i8 2), !dbg [[DBG214:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG214:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG216:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG216:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG212]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG212]]
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP6:%.*]] = addrspacecast ptr addrspace(1) [[TMP5]] to ptr, !dbg [[DBG41]]
|
// CHECK1-NEXT: [[TMP6:%.*]] = addrspacecast ptr addrspace(1) [[TMP5]] to ptr, !dbg [[DBG41]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP6]], ptr [[_TMP2]], align 8, !dbg [[DBG41]]
|
// CHECK1-NEXT: store ptr [[TMP6]], ptr [[_TMP2]], align 8, !dbg [[DBG41]]
|
||||||
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG41]]
|
// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG41]]
|
||||||
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB1:[0-9]+]], i8 2, i1 false), !dbg [[DBG41]]
|
// CHECK1-NEXT: [[TMP8:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l13_kernel_environment), !dbg [[DBG41]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1, !dbg [[DBG41]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP8]], -1, !dbg [[DBG41]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG41]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG41]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
@@ -110,7 +110,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TOBOOL:%.*]] = trunc i8 [[TMP17]] to i1, !dbg [[DBG43]]
|
// CHECK1-NEXT: [[TOBOOL:%.*]] = trunc i8 [[TMP17]] to i1, !dbg [[DBG43]]
|
||||||
// CHECK1-NEXT: [[TMP18:%.*]] = zext i1 [[TOBOOL]] to i32, !dbg [[DBG42]]
|
// CHECK1-NEXT: [[TMP18:%.*]] = zext i1 [[TOBOOL]] to i32, !dbg [[DBG42]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB6]], i32 [[TMP9]], i32 [[TMP18]], i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG42]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB6]], i32 [[TMP9]], i32 [[TMP18]], i32 -1, i32 -1, ptr @__omp_outlined__, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG42]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB8:[0-9]+]], i8 2), !dbg [[DBG45:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG45:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG46:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG46:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG41]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG41]]
|
||||||
@@ -383,11 +383,11 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP7:%.*]] = addrspacecast ptr addrspace(1) [[TMP6]] to ptr, !dbg [[DBG146]]
|
// CHECK1-NEXT: [[TMP7:%.*]] = addrspacecast ptr addrspace(1) [[TMP6]] to ptr, !dbg [[DBG146]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[_TMP2]], align 8, !dbg [[DBG146]]
|
// CHECK1-NEXT: store ptr [[TMP7]], ptr [[_TMP2]], align 8, !dbg [[DBG146]]
|
||||||
// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG146]]
|
// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[_TMP2]], align 8, !dbg [[DBG146]]
|
||||||
// CHECK1-NEXT: [[TMP9:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB10:[0-9]+]], i8 2, i1 false), !dbg [[DBG146]]
|
// CHECK1-NEXT: [[TMP9:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l27_kernel_environment), !dbg [[DBG146]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP9]], -1, !dbg [[DBG146]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP9]], -1, !dbg [[DBG146]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG146]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG146]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])
|
// CHECK1-NEXT: [[TMP10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[A_ADDR]], align 4, !dbg [[DBG147:![0-9]+]]
|
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[A_ADDR]], align 4, !dbg [[DBG147:![0-9]+]]
|
||||||
// CHECK1-NEXT: store i32 [[TMP11]], ptr [[A_CASTED]], align 4, !dbg [[DBG147]]
|
// CHECK1-NEXT: store i32 [[TMP11]], ptr [[A_CASTED]], align 4, !dbg [[DBG147]]
|
||||||
// CHECK1-NEXT: [[TMP12:%.*]] = load i64, ptr [[A_CASTED]], align 8, !dbg [[DBG147]]
|
// CHECK1-NEXT: [[TMP12:%.*]] = load i64, ptr [[A_CASTED]], align 8, !dbg [[DBG147]]
|
||||||
@@ -400,8 +400,8 @@ int main() {
|
|||||||
// CHECK1-NEXT: store ptr [[TMP5]], ptr [[TMP16]], align 8, !dbg [[DBG147]]
|
// CHECK1-NEXT: store ptr [[TMP5]], ptr [[TMP16]], align 8, !dbg [[DBG147]]
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG147]]
|
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG147]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP17]], align 8, !dbg [[DBG147]]
|
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP17]], align 8, !dbg [[DBG147]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB15]], i32 [[TMP10]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG147]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB13]], i32 [[TMP10]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG147]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB17:[0-9]+]], i8 2), !dbg [[DBG148:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG148:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG150:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG150:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG146]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG146]]
|
||||||
@@ -466,7 +466,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: call void @llvm.dbg.declare(metadata ptr [[I]], metadata [[META172:![0-9]+]], metadata !DIExpression()), !dbg [[DBG155]]
|
// CHECK1-NEXT: call void @llvm.dbg.declare(metadata ptr [[I]], metadata [[META172:![0-9]+]], metadata !DIExpression()), !dbg [[DBG155]]
|
||||||
// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG165]]
|
// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG165]]
|
||||||
// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4, !dbg [[DBG165]]
|
// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4, !dbg [[DBG165]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB12:[0-9]+]], i32 [[TMP10]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1), !dbg [[DBG173:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB10:[0-9]+]], i32 [[TMP10]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1), !dbg [[DBG173:![0-9]+]]
|
||||||
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND:%.*]], !dbg [[DBG165]]
|
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND:%.*]], !dbg [[DBG165]]
|
||||||
// CHECK1: omp.dispatch.cond:
|
// CHECK1: omp.dispatch.cond:
|
||||||
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !dbg [[DBG168]]
|
// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !dbg [[DBG168]]
|
||||||
@@ -559,7 +559,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: store i32 [[ADD25]], ptr [[DOTOMP_UB]], align 4, !dbg [[DBG165]]
|
// CHECK1-NEXT: store i32 [[ADD25]], ptr [[DOTOMP_UB]], align 4, !dbg [[DBG165]]
|
||||||
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND]], !dbg [[DBG173]], !llvm.loop [[LOOP203:![0-9]+]]
|
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND]], !dbg [[DBG173]], !llvm.loop [[LOOP203:![0-9]+]]
|
||||||
// CHECK1: omp.dispatch.end:
|
// CHECK1: omp.dispatch.end:
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB14:[0-9]+]], i32 [[TMP10]]), !dbg [[DBG202:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB12:[0-9]+]], i32 [[TMP10]]), !dbg [[DBG202:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG204:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG204:![0-9]+]]
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
@@ -665,11 +665,11 @@ int main() {
|
|||||||
// CHECK1-NEXT: [[TMP10:%.*]] = addrspacecast ptr addrspace(1) [[TMP9]] to ptr, !dbg [[DBG236]]
|
// CHECK1-NEXT: [[TMP10:%.*]] = addrspacecast ptr addrspace(1) [[TMP9]] to ptr, !dbg [[DBG236]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP10]], ptr [[_TMP3]], align 8, !dbg [[DBG236]]
|
// CHECK1-NEXT: store ptr [[TMP10]], ptr [[_TMP3]], align 8, !dbg [[DBG236]]
|
||||||
// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[_TMP3]], align 8, !dbg [[DBG236]]
|
// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[_TMP3]], align 8, !dbg [[DBG236]]
|
||||||
// CHECK1-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_target_init(ptr @[[GLOB19:[0-9]+]], i8 2, i1 false), !dbg [[DBG236]]
|
// CHECK1-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_target_init(ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l41_kernel_environment), !dbg [[DBG236]]
|
||||||
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP12]], -1, !dbg [[DBG236]]
|
// CHECK1-NEXT: [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP12]], -1, !dbg [[DBG236]]
|
||||||
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG236]]
|
// CHECK1-NEXT: br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]], !dbg [[DBG236]]
|
||||||
// CHECK1: user_code.entry:
|
// CHECK1: user_code.entry:
|
||||||
// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB24:[0-9]+]])
|
// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB20:[0-9]+]])
|
||||||
// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0, !dbg [[DBG237:![0-9]+]]
|
// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 0, !dbg [[DBG237:![0-9]+]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP14]], align 8, !dbg [[DBG237]]
|
// CHECK1-NEXT: store ptr [[TMP2]], ptr [[TMP14]], align 8, !dbg [[DBG237]]
|
||||||
// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1, !dbg [[DBG237]]
|
// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 1, !dbg [[DBG237]]
|
||||||
@@ -678,8 +678,8 @@ int main() {
|
|||||||
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP16]], align 8, !dbg [[DBG237]]
|
// CHECK1-NEXT: store ptr [[TMP8]], ptr [[TMP16]], align 8, !dbg [[DBG237]]
|
||||||
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG237]]
|
// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[CAPTURED_VARS_ADDRS]], i64 0, i64 3, !dbg [[DBG237]]
|
||||||
// CHECK1-NEXT: store ptr [[TMP11]], ptr [[TMP17]], align 8, !dbg [[DBG237]]
|
// CHECK1-NEXT: store ptr [[TMP11]], ptr [[TMP17]], align 8, !dbg [[DBG237]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB24]], i32 [[TMP13]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__4, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG237]]
|
// CHECK1-NEXT: call void @__kmpc_parallel_51(ptr @[[GLOB20]], i32 [[TMP13]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__4, ptr null, ptr [[CAPTURED_VARS_ADDRS]], i64 4), !dbg [[DBG237]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_target_deinit(ptr @[[GLOB26:[0-9]+]], i8 2), !dbg [[DBG238:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_target_deinit(), !dbg [[DBG238:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG240:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG240:![0-9]+]]
|
||||||
// CHECK1: worker.exit:
|
// CHECK1: worker.exit:
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG236]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG236]]
|
||||||
@@ -749,7 +749,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: call void @llvm.dbg.declare(metadata ptr [[I]], metadata [[META262:![0-9]+]], metadata !DIExpression()), !dbg [[DBG245]]
|
// CHECK1-NEXT: call void @llvm.dbg.declare(metadata ptr [[I]], metadata [[META262:![0-9]+]], metadata !DIExpression()), !dbg [[DBG245]]
|
||||||
// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG255]]
|
// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG255]]
|
||||||
// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4, !dbg [[DBG255]]
|
// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4, !dbg [[DBG255]]
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB21:[0-9]+]], i32 [[TMP13]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1), !dbg [[DBG263:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_for_static_init_4(ptr @[[GLOB17:[0-9]+]], i32 [[TMP13]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1), !dbg [[DBG263:![0-9]+]]
|
||||||
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND:%.*]], !dbg [[DBG255]]
|
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND:%.*]], !dbg [[DBG255]]
|
||||||
// CHECK1: omp.dispatch.cond:
|
// CHECK1: omp.dispatch.cond:
|
||||||
// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !dbg [[DBG258]]
|
// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !dbg [[DBG258]]
|
||||||
@@ -846,7 +846,7 @@ int main() {
|
|||||||
// CHECK1-NEXT: store i32 [[ADD29]], ptr [[DOTOMP_UB]], align 4, !dbg [[DBG255]]
|
// CHECK1-NEXT: store i32 [[ADD29]], ptr [[DOTOMP_UB]], align 4, !dbg [[DBG255]]
|
||||||
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND]], !dbg [[DBG263]], !llvm.loop [[LOOP294:![0-9]+]]
|
// CHECK1-NEXT: br label [[OMP_DISPATCH_COND]], !dbg [[DBG263]], !llvm.loop [[LOOP294:![0-9]+]]
|
||||||
// CHECK1: omp.dispatch.end:
|
// CHECK1: omp.dispatch.end:
|
||||||
// CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB23:[0-9]+]], i32 [[TMP13]]), !dbg [[DBG293:![0-9]+]]
|
// CHECK1-NEXT: call void @__kmpc_for_static_fini(ptr @[[GLOB19:[0-9]+]], i32 [[TMP13]]), !dbg [[DBG293:![0-9]+]]
|
||||||
// CHECK1-NEXT: ret void, !dbg [[DBG295:![0-9]+]]
|
// CHECK1-NEXT: ret void, !dbg [[DBG295:![0-9]+]]
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1468,8 +1468,7 @@ public:
|
|||||||
/// Create a runtime call for kmpc_target_deinit
|
/// Create a runtime call for kmpc_target_deinit
|
||||||
///
|
///
|
||||||
/// \param Loc The insert and source location description.
|
/// \param Loc The insert and source location description.
|
||||||
/// \param IsSPMD Flag to indicate if the kernel is an SPMD kernel or not.
|
void createTargetDeinit(const LocationDescription &Loc);
|
||||||
void createTargetDeinit(const LocationDescription &Loc, bool IsSPMD);
|
|
||||||
|
|
||||||
///}
|
///}
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,11 @@ __OMP_STRUCT_TYPE(KernelArgs, __tgt_kernel_arguments, false, Int32, Int32, VoidP
|
|||||||
Int64, Int64, Int32Arr3Ty, Int32Arr3Ty, Int32)
|
Int64, Int64, Int32Arr3Ty, Int32Arr3Ty, Int32)
|
||||||
__OMP_STRUCT_TYPE(AsyncInfo, __tgt_async_info, false, Int8Ptr)
|
__OMP_STRUCT_TYPE(AsyncInfo, __tgt_async_info, false, Int8Ptr)
|
||||||
__OMP_STRUCT_TYPE(DependInfo, kmp_dep_info, false, SizeTy, SizeTy, Int8)
|
__OMP_STRUCT_TYPE(DependInfo, kmp_dep_info, false, SizeTy, SizeTy, Int8)
|
||||||
|
__OMP_STRUCT_TYPE(ConfigurationEnvironment, ConfigurationEnvironmentTy, false,
|
||||||
|
Int8, Int8, Int8)
|
||||||
|
__OMP_STRUCT_TYPE(DynamicEnvironment, DynamicEnvironmentTy, false, Int16)
|
||||||
|
__OMP_STRUCT_TYPE(KernelEnvironment, KernelEnvironmentTy, false,
|
||||||
|
ConfigurationEnvironment, IdentPtr, DynamicEnvironmentPtr)
|
||||||
|
|
||||||
#undef __OMP_STRUCT_TYPE
|
#undef __OMP_STRUCT_TYPE
|
||||||
#undef OMP_STRUCT_TYPE
|
#undef OMP_STRUCT_TYPE
|
||||||
@@ -452,8 +457,8 @@ __OMP_RTL(__kmpc_task_allow_completion_event, false, VoidPtr, IdentPtr,
|
|||||||
/* Int */ Int32, /* kmp_task_t */ VoidPtr)
|
/* Int */ Int32, /* kmp_task_t */ VoidPtr)
|
||||||
|
|
||||||
/// OpenMP Device runtime functions
|
/// OpenMP Device runtime functions
|
||||||
__OMP_RTL(__kmpc_target_init, false, Int32, IdentPtr, Int8, Int1)
|
__OMP_RTL(__kmpc_target_init, false, Int32, KernelEnvironmentPtr)
|
||||||
__OMP_RTL(__kmpc_target_deinit, false, Void, IdentPtr, Int8)
|
__OMP_RTL(__kmpc_target_deinit, false, Void,)
|
||||||
__OMP_RTL(__kmpc_kernel_prepare_parallel, false, Void, VoidPtr)
|
__OMP_RTL(__kmpc_kernel_prepare_parallel, false, Void, VoidPtr)
|
||||||
__OMP_RTL(__kmpc_parallel_51, false, Void, IdentPtr, Int32, Int32, Int32, Int32,
|
__OMP_RTL(__kmpc_parallel_51, false, Void, IdentPtr, Int32, Int32, Int32, Int32,
|
||||||
VoidPtr, VoidPtr, VoidPtrPtr, SizeTy)
|
VoidPtr, VoidPtr, VoidPtrPtr, SizeTy)
|
||||||
@@ -1012,9 +1017,9 @@ __OMP_RTL_ATTRS(__kmpc_task_allow_completion_event, DefaultAttrs,
|
|||||||
ReturnPtrAttrs, ParamAttrs(ReadOnlyPtrAttrs, SExt))
|
ReturnPtrAttrs, ParamAttrs(ReadOnlyPtrAttrs, SExt))
|
||||||
|
|
||||||
__OMP_RTL_ATTRS(__kmpc_target_init, AttributeSet(), SExt,
|
__OMP_RTL_ATTRS(__kmpc_target_init, AttributeSet(), SExt,
|
||||||
ParamAttrs(AttributeSet(), SExt, SExt))
|
ParamAttrs(AttributeSet()))
|
||||||
__OMP_RTL_ATTRS(__kmpc_target_deinit, AttributeSet(), AttributeSet(),
|
__OMP_RTL_ATTRS(__kmpc_target_deinit, AttributeSet(), AttributeSet(),
|
||||||
ParamAttrs(AttributeSet(), SExt))
|
ParamAttrs())
|
||||||
__OMP_RTL_ATTRS(__kmpc_parallel_51, AlwaysInlineAttrs, AttributeSet(),
|
__OMP_RTL_ATTRS(__kmpc_parallel_51, AlwaysInlineAttrs, AttributeSet(),
|
||||||
ParamAttrs(AttributeSet(), SExt, SExt, SExt, SExt,
|
ParamAttrs(AttributeSet(), SExt, SExt, SExt, SExt,
|
||||||
AttributeSet(), AttributeSet(), AttributeSet(),
|
AttributeSet(), AttributeSet(), AttributeSet(),
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "llvm/Analysis/ScalarEvolution.h"
|
#include "llvm/Analysis/ScalarEvolution.h"
|
||||||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||||
#include "llvm/IR/CFG.h"
|
#include "llvm/IR/CFG.h"
|
||||||
|
#include "llvm/IR/Constant.h"
|
||||||
#include "llvm/IR/Constants.h"
|
#include "llvm/IR/Constants.h"
|
||||||
#include "llvm/IR/DebugInfoMetadata.h"
|
#include "llvm/IR/DebugInfoMetadata.h"
|
||||||
#include "llvm/IR/DerivedTypes.h"
|
#include "llvm/IR/DerivedTypes.h"
|
||||||
@@ -3895,14 +3896,60 @@ OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD) {
|
|||||||
ConstantInt *IsSPMDVal = ConstantInt::getSigned(
|
ConstantInt *IsSPMDVal = ConstantInt::getSigned(
|
||||||
IntegerType::getInt8Ty(Int8->getContext()),
|
IntegerType::getInt8Ty(Int8->getContext()),
|
||||||
IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
|
IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
|
||||||
ConstantInt *UseGenericStateMachine =
|
ConstantInt *UseGenericStateMachineVal = ConstantInt::getSigned(
|
||||||
ConstantInt::getBool(Int32->getContext(), !IsSPMD);
|
IntegerType::getInt8Ty(Int8->getContext()), !IsSPMD);
|
||||||
|
ConstantInt *MayUseNestedParallelismVal =
|
||||||
|
ConstantInt::getSigned(IntegerType::getInt8Ty(Int8->getContext()), true);
|
||||||
|
ConstantInt *DebugIndentionLevelVal =
|
||||||
|
ConstantInt::getSigned(IntegerType::getInt16Ty(Int8->getContext()), 0);
|
||||||
|
|
||||||
|
// We need to strip the debug prefix to get the correct kernel name.
|
||||||
|
Function *Kernel = Builder.GetInsertBlock()->getParent();
|
||||||
|
StringRef KernelName = Kernel->getName();
|
||||||
|
const std::string DebugPrefix = "_debug__";
|
||||||
|
if (KernelName.ends_with(DebugPrefix))
|
||||||
|
KernelName = KernelName.drop_back(DebugPrefix.length());
|
||||||
|
|
||||||
Function *Fn = getOrCreateRuntimeFunctionPtr(
|
Function *Fn = getOrCreateRuntimeFunctionPtr(
|
||||||
omp::RuntimeFunction::OMPRTL___kmpc_target_init);
|
omp::RuntimeFunction::OMPRTL___kmpc_target_init);
|
||||||
|
const DataLayout &DL = Fn->getParent()->getDataLayout();
|
||||||
|
|
||||||
CallInst *ThreadKind = Builder.CreateCall(
|
Twine DynamicEnvironmentName = KernelName + "_dynamic_environment";
|
||||||
Fn, {Ident, IsSPMDVal, UseGenericStateMachine});
|
Constant *DynamicEnvironmentInitializer =
|
||||||
|
ConstantStruct::get(DynamicEnvironment, {DebugIndentionLevelVal});
|
||||||
|
Constant *DynamicEnvironmentGV = new GlobalVariable(
|
||||||
|
M, DynamicEnvironment, /* IsConstant */ false,
|
||||||
|
GlobalValue::InternalLinkage, DynamicEnvironmentInitializer,
|
||||||
|
DynamicEnvironmentName,
|
||||||
|
/* InsertBefore */ nullptr, llvm::GlobalValue::NotThreadLocal,
|
||||||
|
DL.getDefaultGlobalsAddressSpace());
|
||||||
|
if (DynamicEnvironmentGV->getType() != DynamicEnvironmentPtr)
|
||||||
|
DynamicEnvironmentGV = ConstantExpr::getAddrSpaceCast(
|
||||||
|
DynamicEnvironmentGV, DynamicEnvironmentPtr);
|
||||||
|
|
||||||
|
Constant *ConfigurationEnvironmentInitializer = ConstantStruct::get(
|
||||||
|
ConfigurationEnvironment, {
|
||||||
|
UseGenericStateMachineVal,
|
||||||
|
MayUseNestedParallelismVal,
|
||||||
|
IsSPMDVal,
|
||||||
|
});
|
||||||
|
Constant *KernelEnvironmentInitializer = ConstantStruct::get(
|
||||||
|
KernelEnvironment, {
|
||||||
|
ConfigurationEnvironmentInitializer,
|
||||||
|
Ident,
|
||||||
|
DynamicEnvironmentGV,
|
||||||
|
});
|
||||||
|
Twine KernelEnvironmentName = KernelName + "_kernel_environment";
|
||||||
|
Constant *KernelEnvironmentGV = new GlobalVariable(
|
||||||
|
M, KernelEnvironment, /* IsConstant */ true, GlobalValue::ExternalLinkage,
|
||||||
|
KernelEnvironmentInitializer, KernelEnvironmentName,
|
||||||
|
/* InsertBefore */ nullptr, llvm::GlobalValue::NotThreadLocal,
|
||||||
|
DL.getDefaultGlobalsAddressSpace());
|
||||||
|
if (KernelEnvironmentGV->getType() != KernelEnvironmentPtr)
|
||||||
|
KernelEnvironmentGV = ConstantExpr::getAddrSpaceCast(KernelEnvironmentGV,
|
||||||
|
KernelEnvironmentPtr);
|
||||||
|
|
||||||
|
CallInst *ThreadKind = Builder.CreateCall(Fn, {KernelEnvironmentGV});
|
||||||
|
|
||||||
Value *ExecUserCode = Builder.CreateICmpEQ(
|
Value *ExecUserCode = Builder.CreateICmpEQ(
|
||||||
ThreadKind, ConstantInt::get(ThreadKind->getType(), -1),
|
ThreadKind, ConstantInt::get(ThreadKind->getType(), -1),
|
||||||
@@ -3935,22 +3982,14 @@ OpenMPIRBuilder::createTargetInit(const LocationDescription &Loc, bool IsSPMD) {
|
|||||||
return InsertPointTy(UserCodeEntryBB, UserCodeEntryBB->getFirstInsertionPt());
|
return InsertPointTy(UserCodeEntryBB, UserCodeEntryBB->getFirstInsertionPt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenMPIRBuilder::createTargetDeinit(const LocationDescription &Loc,
|
void OpenMPIRBuilder::createTargetDeinit(const LocationDescription &Loc) {
|
||||||
bool IsSPMD) {
|
|
||||||
if (!updateToLocation(Loc))
|
if (!updateToLocation(Loc))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t SrcLocStrSize;
|
|
||||||
Constant *SrcLocStr = getOrCreateSrcLocStr(Loc, SrcLocStrSize);
|
|
||||||
Value *Ident = getOrCreateIdent(SrcLocStr, SrcLocStrSize);
|
|
||||||
ConstantInt *IsSPMDVal = ConstantInt::getSigned(
|
|
||||||
IntegerType::getInt8Ty(Int8->getContext()),
|
|
||||||
IsSPMD ? OMP_TGT_EXEC_MODE_SPMD : OMP_TGT_EXEC_MODE_GENERIC);
|
|
||||||
|
|
||||||
Function *Fn = getOrCreateRuntimeFunctionPtr(
|
Function *Fn = getOrCreateRuntimeFunctionPtr(
|
||||||
omp::RuntimeFunction::OMPRTL___kmpc_target_deinit);
|
omp::RuntimeFunction::OMPRTL___kmpc_target_deinit);
|
||||||
|
|
||||||
Builder.CreateCall(Fn, {Ident, IsSPMDVal});
|
Builder.CreateCall(Fn, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenMPIRBuilder::setOutlinedTargetRegionFunctionAttributes(
|
void OpenMPIRBuilder::setOutlinedTargetRegionFunctionAttributes(
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
|
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
|
||||||
#include "llvm/Analysis/ValueTracking.h"
|
#include "llvm/Analysis/ValueTracking.h"
|
||||||
#include "llvm/Frontend/OpenMP/OMPConstants.h"
|
#include "llvm/Frontend/OpenMP/OMPConstants.h"
|
||||||
|
#include "llvm/Frontend/OpenMP/OMPDeviceConstants.h"
|
||||||
#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
|
#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
|
||||||
#include "llvm/IR/Assumptions.h"
|
#include "llvm/IR/Assumptions.h"
|
||||||
#include "llvm/IR/BasicBlock.h"
|
#include "llvm/IR/BasicBlock.h"
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
#include "llvm/IR/IntrinsicsAMDGPU.h"
|
#include "llvm/IR/IntrinsicsAMDGPU.h"
|
||||||
#include "llvm/IR/IntrinsicsNVPTX.h"
|
#include "llvm/IR/IntrinsicsNVPTX.h"
|
||||||
#include "llvm/IR/LLVMContext.h"
|
#include "llvm/IR/LLVMContext.h"
|
||||||
|
#include "llvm/IR/Value.h"
|
||||||
#include "llvm/InitializePasses.h"
|
#include "llvm/InitializePasses.h"
|
||||||
#include "llvm/Support/CommandLine.h"
|
#include "llvm/Support/CommandLine.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
@@ -177,6 +179,80 @@ STATISTIC(NumBarriersEliminated, "Number of redundant barriers eliminated");
|
|||||||
static constexpr auto TAG = "[" DEBUG_TYPE "]";
|
static constexpr auto TAG = "[" DEBUG_TYPE "]";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace KernelInfo {
|
||||||
|
|
||||||
|
// struct ConfigurationEnvironmentTy {
|
||||||
|
// uint8_t UseGenericStateMachine;
|
||||||
|
// uint8_t MayUseNestedParallelism;
|
||||||
|
// llvm::omp::OMPTgtExecModeFlags ExecMode;
|
||||||
|
// };
|
||||||
|
|
||||||
|
// struct DynamicEnvironmentTy {
|
||||||
|
// uint16_t DebugIndentionLevel;
|
||||||
|
// };
|
||||||
|
|
||||||
|
// struct KernelEnvironmentTy {
|
||||||
|
// ConfigurationEnvironmentTy Configuration;
|
||||||
|
// IdentTy *Ident;
|
||||||
|
// DynamicEnvironmentTy *DynamicEnv;
|
||||||
|
// };
|
||||||
|
|
||||||
|
#define KERNEL_ENVIRONMENT_IDX(MEMBER, IDX) \
|
||||||
|
constexpr const unsigned MEMBER##Idx = IDX;
|
||||||
|
|
||||||
|
KERNEL_ENVIRONMENT_IDX(Configuration, 0)
|
||||||
|
KERNEL_ENVIRONMENT_IDX(Ident, 1)
|
||||||
|
|
||||||
|
#undef KERNEL_ENVIRONMENT_IDX
|
||||||
|
|
||||||
|
#define KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MEMBER, IDX) \
|
||||||
|
constexpr const unsigned MEMBER##Idx = IDX;
|
||||||
|
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(UseGenericStateMachine, 0)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(MayUseNestedParallelism, 1)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_IDX(ExecMode, 2)
|
||||||
|
|
||||||
|
#undef KERNEL_ENVIRONMENT_CONFIGURATION_IDX
|
||||||
|
|
||||||
|
#define KERNEL_ENVIRONMENT_GETTER(MEMBER, RETURNTYPE) \
|
||||||
|
RETURNTYPE *get##MEMBER##FromKernelEnvironment(ConstantStruct *KernelEnvC) { \
|
||||||
|
return cast<RETURNTYPE>(KernelEnvC->getAggregateElement(MEMBER##Idx)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
KERNEL_ENVIRONMENT_GETTER(Ident, Constant)
|
||||||
|
KERNEL_ENVIRONMENT_GETTER(Configuration, ConstantStruct)
|
||||||
|
|
||||||
|
#undef KERNEL_ENVIRONMENT_GETTER
|
||||||
|
|
||||||
|
#define KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MEMBER) \
|
||||||
|
ConstantInt *get##MEMBER##FromKernelEnvironment( \
|
||||||
|
ConstantStruct *KernelEnvC) { \
|
||||||
|
ConstantStruct *ConfigC = \
|
||||||
|
getConfigurationFromKernelEnvironment(KernelEnvC); \
|
||||||
|
return dyn_cast<ConstantInt>(ConfigC->getAggregateElement(MEMBER##Idx)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(UseGenericStateMachine)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(MayUseNestedParallelism)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_GETTER(ExecMode)
|
||||||
|
|
||||||
|
#undef KERNEL_ENVIRONMENT_CONFIGURATION_GETTER
|
||||||
|
|
||||||
|
GlobalVariable *
|
||||||
|
getKernelEnvironementGVFromKernelInitCB(CallBase *KernelInitCB) {
|
||||||
|
constexpr const int InitKernelEnvironmentArgNo = 0;
|
||||||
|
return cast<GlobalVariable>(
|
||||||
|
KernelInitCB->getArgOperand(InitKernelEnvironmentArgNo)
|
||||||
|
->stripPointerCasts());
|
||||||
|
}
|
||||||
|
|
||||||
|
ConstantStruct *getKernelEnvironementFromKernelInitCB(CallBase *KernelInitCB) {
|
||||||
|
GlobalVariable *KernelEnvGV =
|
||||||
|
getKernelEnvironementGVFromKernelInitCB(KernelInitCB);
|
||||||
|
return cast<ConstantStruct>(KernelEnvGV->getInitializer());
|
||||||
|
}
|
||||||
|
} // namespace KernelInfo
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
struct AAHeapToShared;
|
struct AAHeapToShared;
|
||||||
@@ -609,6 +685,10 @@ struct KernelInfoState : AbstractState {
|
|||||||
/// one we abort as the kernel is malformed.
|
/// one we abort as the kernel is malformed.
|
||||||
CallBase *KernelInitCB = nullptr;
|
CallBase *KernelInitCB = nullptr;
|
||||||
|
|
||||||
|
/// The constant kernel environement as taken from and passed to
|
||||||
|
/// __kmpc_target_init.
|
||||||
|
ConstantStruct *KernelEnvC = nullptr;
|
||||||
|
|
||||||
/// The __kmpc_target_deinit call in this kernel, if any. If we find more than
|
/// The __kmpc_target_deinit call in this kernel, if any. If we find more than
|
||||||
/// one we abort as the kernel is malformed.
|
/// one we abort as the kernel is malformed.
|
||||||
CallBase *KernelDeinitCB = nullptr;
|
CallBase *KernelDeinitCB = nullptr;
|
||||||
@@ -713,6 +793,12 @@ struct KernelInfoState : AbstractState {
|
|||||||
"assumptions.");
|
"assumptions.");
|
||||||
KernelDeinitCB = KIS.KernelDeinitCB;
|
KernelDeinitCB = KIS.KernelDeinitCB;
|
||||||
}
|
}
|
||||||
|
if (KIS.KernelEnvC) {
|
||||||
|
if (KernelEnvC && KernelEnvC != KIS.KernelEnvC)
|
||||||
|
llvm_unreachable("Kernel that calls another kernel violates OpenMP-Opt "
|
||||||
|
"assumptions.");
|
||||||
|
KernelEnvC = KIS.KernelEnvC;
|
||||||
|
}
|
||||||
SPMDCompatibilityTracker ^= KIS.SPMDCompatibilityTracker;
|
SPMDCompatibilityTracker ^= KIS.SPMDCompatibilityTracker;
|
||||||
ReachedKnownParallelRegions ^= KIS.ReachedKnownParallelRegions;
|
ReachedKnownParallelRegions ^= KIS.ReachedKnownParallelRegions;
|
||||||
ReachedUnknownParallelRegions ^= KIS.ReachedUnknownParallelRegions;
|
ReachedUnknownParallelRegions ^= KIS.ReachedUnknownParallelRegions;
|
||||||
@@ -2790,9 +2876,11 @@ struct AAExecutionDomainFunction : public AAExecutionDomain {
|
|||||||
CB = CB ? OpenMPOpt::getCallIfRegularCall(*CB, &RFI) : nullptr;
|
CB = CB ? OpenMPOpt::getCallIfRegularCall(*CB, &RFI) : nullptr;
|
||||||
if (!CB)
|
if (!CB)
|
||||||
return false;
|
return false;
|
||||||
const int InitModeArgNo = 1;
|
ConstantStruct *KernelEnvC =
|
||||||
auto *ModeCI = dyn_cast<ConstantInt>(CB->getOperand(InitModeArgNo));
|
KernelInfo::getKernelEnvironementFromKernelInitCB(CB);
|
||||||
return ModeCI && (ModeCI->getSExtValue() & OMP_TGT_EXEC_MODE_GENERIC);
|
ConstantInt *ExecModeC =
|
||||||
|
KernelInfo::getExecModeFromKernelEnvironment(KernelEnvC);
|
||||||
|
return ExecModeC->getSExtValue() & OMP_TGT_EXEC_MODE_GENERIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (C->isZero()) {
|
if (C->isZero()) {
|
||||||
@@ -3434,6 +3522,29 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
return GuardedInstructions;
|
return GuardedInstructions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setConfigurationOfKernelEnvironment(ConstantStruct *ConfigC) {
|
||||||
|
Constant *NewKernelEnvC = ConstantFoldInsertValueInstruction(
|
||||||
|
KernelEnvC, ConfigC, {KernelInfo::ConfigurationIdx});
|
||||||
|
assert(NewKernelEnvC && "Failed to create new kernel environment");
|
||||||
|
KernelEnvC = cast<ConstantStruct>(NewKernelEnvC);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MEMBER) \
|
||||||
|
void set##MEMBER##OfKernelEnvironment(ConstantInt *NewVal) { \
|
||||||
|
ConstantStruct *ConfigC = \
|
||||||
|
KernelInfo::getConfigurationFromKernelEnvironment(KernelEnvC); \
|
||||||
|
Constant *NewConfigC = ConstantFoldInsertValueInstruction( \
|
||||||
|
ConfigC, NewVal, {KernelInfo::MEMBER##Idx}); \
|
||||||
|
assert(NewConfigC && "Failed to create new configuration environment"); \
|
||||||
|
setConfigurationOfKernelEnvironment(cast<ConstantStruct>(NewConfigC)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(UseGenericStateMachine)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(MayUseNestedParallelism)
|
||||||
|
KERNEL_ENVIRONMENT_CONFIGURATION_SETTER(ExecMode)
|
||||||
|
|
||||||
|
#undef KERNEL_ENVIRONMENT_CONFIGURATION_SETTER
|
||||||
|
|
||||||
/// See AbstractAttribute::initialize(...).
|
/// See AbstractAttribute::initialize(...).
|
||||||
void initialize(Attributor &A) override {
|
void initialize(Attributor &A) override {
|
||||||
// This is a high-level transform that might change the constant arguments
|
// This is a high-level transform that might change the constant arguments
|
||||||
@@ -3482,76 +3593,49 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
ReachingKernelEntries.insert(Fn);
|
ReachingKernelEntries.insert(Fn);
|
||||||
IsKernelEntry = true;
|
IsKernelEntry = true;
|
||||||
|
|
||||||
// For kernels we might need to initialize/finalize the IsSPMD state and
|
KernelEnvC =
|
||||||
// we need to register a simplification callback so that the Attributor
|
KernelInfo::getKernelEnvironementFromKernelInitCB(KernelInitCB);
|
||||||
// knows the constant arguments to __kmpc_target_init and
|
|
||||||
// __kmpc_target_deinit might actually change.
|
|
||||||
|
|
||||||
Attributor::SimplifictionCallbackTy StateMachineSimplifyCB =
|
Attributor::SimplifictionCallbackTy KernelConfigurationSimplifyCB =
|
||||||
[&](const IRPosition &IRP, const AbstractAttribute *AA,
|
[&](const IRPosition &IRP, const AbstractAttribute *AA,
|
||||||
bool &UsedAssumedInformation) -> std::optional<Value *> {
|
bool &UsedAssumedInformation) -> std::optional<Value *> {
|
||||||
// IRP represents the "use generic state machine" argument of an
|
return KernelEnvC;
|
||||||
// __kmpc_target_init call. We will answer this one with the internal
|
|
||||||
// state. As long as we are not in an invalid state, we will create a
|
|
||||||
// custom state machine so the value should be a `i1 false`. If we are
|
|
||||||
// in an invalid state, we won't change the value that is in the IR.
|
|
||||||
if (!ReachedKnownParallelRegions.isValidState())
|
|
||||||
return nullptr;
|
|
||||||
// If we have disabled state machine rewrites, don't make a custom one.
|
|
||||||
if (DisableOpenMPOptStateMachineRewrite)
|
|
||||||
return nullptr;
|
|
||||||
if (AA)
|
|
||||||
A.recordDependence(*this, *AA, DepClassTy::OPTIONAL);
|
|
||||||
UsedAssumedInformation = !isAtFixpoint();
|
|
||||||
auto *FalseVal =
|
|
||||||
ConstantInt::getBool(IRP.getAnchorValue().getContext(), false);
|
|
||||||
return FalseVal;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Attributor::SimplifictionCallbackTy ModeSimplifyCB =
|
A.registerSimplificationCallback(IRPosition::value(*KernelEnvC),
|
||||||
[&](const IRPosition &IRP, const AbstractAttribute *AA,
|
KernelConfigurationSimplifyCB);
|
||||||
bool &UsedAssumedInformation) -> std::optional<Value *> {
|
|
||||||
// IRP represents the "SPMDCompatibilityTracker" argument of an
|
|
||||||
// __kmpc_target_init or
|
|
||||||
// __kmpc_target_deinit call. We will answer this one with the internal
|
|
||||||
// state.
|
|
||||||
if (!SPMDCompatibilityTracker.isValidState())
|
|
||||||
return nullptr;
|
|
||||||
if (!SPMDCompatibilityTracker.isAtFixpoint()) {
|
|
||||||
if (AA)
|
|
||||||
A.recordDependence(*this, *AA, DepClassTy::OPTIONAL);
|
|
||||||
UsedAssumedInformation = true;
|
|
||||||
} else {
|
|
||||||
UsedAssumedInformation = false;
|
|
||||||
}
|
|
||||||
auto *Val = ConstantInt::getSigned(
|
|
||||||
IntegerType::getInt8Ty(IRP.getAnchorValue().getContext()),
|
|
||||||
SPMDCompatibilityTracker.isAssumed() ? OMP_TGT_EXEC_MODE_SPMD
|
|
||||||
: OMP_TGT_EXEC_MODE_GENERIC);
|
|
||||||
return Val;
|
|
||||||
};
|
|
||||||
|
|
||||||
constexpr const int InitModeArgNo = 1;
|
|
||||||
constexpr const int DeinitModeArgNo = 1;
|
|
||||||
constexpr const int InitUseStateMachineArgNo = 2;
|
|
||||||
A.registerSimplificationCallback(
|
|
||||||
IRPosition::callsite_argument(*KernelInitCB, InitUseStateMachineArgNo),
|
|
||||||
StateMachineSimplifyCB);
|
|
||||||
A.registerSimplificationCallback(
|
|
||||||
IRPosition::callsite_argument(*KernelInitCB, InitModeArgNo),
|
|
||||||
ModeSimplifyCB);
|
|
||||||
A.registerSimplificationCallback(
|
|
||||||
IRPosition::callsite_argument(*KernelDeinitCB, DeinitModeArgNo),
|
|
||||||
ModeSimplifyCB);
|
|
||||||
|
|
||||||
// Check if we know we are in SPMD-mode already.
|
// Check if we know we are in SPMD-mode already.
|
||||||
ConstantInt *ModeArg =
|
ConstantInt *ExecModeC =
|
||||||
dyn_cast<ConstantInt>(KernelInitCB->getArgOperand(InitModeArgNo));
|
KernelInfo::getExecModeFromKernelEnvironment(KernelEnvC);
|
||||||
if (ModeArg && (ModeArg->getSExtValue() & OMP_TGT_EXEC_MODE_SPMD))
|
ConstantInt *AssumedExecModeC = ConstantInt::get(
|
||||||
|
ExecModeC->getType(),
|
||||||
|
ExecModeC->getSExtValue() | OMP_TGT_EXEC_MODE_GENERIC_SPMD);
|
||||||
|
if (ExecModeC->getSExtValue() & OMP_TGT_EXEC_MODE_SPMD)
|
||||||
SPMDCompatibilityTracker.indicateOptimisticFixpoint();
|
SPMDCompatibilityTracker.indicateOptimisticFixpoint();
|
||||||
// This is a generic region but SPMDization is disabled so stop tracking.
|
|
||||||
else if (DisableOpenMPOptSPMDization)
|
else if (DisableOpenMPOptSPMDization)
|
||||||
|
// This is a generic region but SPMDization is disabled so stop
|
||||||
|
// tracking.
|
||||||
SPMDCompatibilityTracker.indicatePessimisticFixpoint();
|
SPMDCompatibilityTracker.indicatePessimisticFixpoint();
|
||||||
|
else
|
||||||
|
setExecModeOfKernelEnvironment(AssumedExecModeC);
|
||||||
|
|
||||||
|
ConstantInt *MayUseNestedParallelismC =
|
||||||
|
KernelInfo::getMayUseNestedParallelismFromKernelEnvironment(KernelEnvC);
|
||||||
|
ConstantInt *AssumedMayUseNestedParallelismC = ConstantInt::get(
|
||||||
|
MayUseNestedParallelismC->getType(), NestedParallelism);
|
||||||
|
setMayUseNestedParallelismOfKernelEnvironment(
|
||||||
|
AssumedMayUseNestedParallelismC);
|
||||||
|
|
||||||
|
if (!DisableOpenMPOptStateMachineRewrite) {
|
||||||
|
ConstantInt *UseGenericStateMachineC =
|
||||||
|
KernelInfo::getUseGenericStateMachineFromKernelEnvironment(
|
||||||
|
KernelEnvC);
|
||||||
|
ConstantInt *AssumedUseGenericStateMachineC =
|
||||||
|
ConstantInt::get(UseGenericStateMachineC->getType(), false);
|
||||||
|
setUseGenericStateMachineOfKernelEnvironment(
|
||||||
|
AssumedUseGenericStateMachineC);
|
||||||
|
}
|
||||||
|
|
||||||
// Register virtual uses of functions we might need to preserve.
|
// Register virtual uses of functions we might need to preserve.
|
||||||
auto RegisterVirtualUse = [&](RuntimeFunction RFKind,
|
auto RegisterVirtualUse = [&](RuntimeFunction RFKind,
|
||||||
@@ -3652,21 +3736,21 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
if (!KernelInitCB || !KernelDeinitCB)
|
if (!KernelInitCB || !KernelDeinitCB)
|
||||||
return ChangeStatus::UNCHANGED;
|
return ChangeStatus::UNCHANGED;
|
||||||
|
|
||||||
/// Insert nested Parallelism global variable
|
ChangeStatus Changed = ChangeStatus::UNCHANGED;
|
||||||
Function *Kernel = getAnchorScope();
|
|
||||||
Module &M = *Kernel->getParent();
|
|
||||||
Type *Int8Ty = Type::getInt8Ty(M.getContext());
|
|
||||||
new GlobalVariable(M, Int8Ty, /* isConstant */ true,
|
|
||||||
GlobalValue::WeakAnyLinkage,
|
|
||||||
ConstantInt::get(Int8Ty, NestedParallelism ? 1 : 0),
|
|
||||||
Kernel->getName() + "_nested_parallelism");
|
|
||||||
|
|
||||||
// If we can we change the execution mode to SPMD-mode otherwise we build a
|
// If we can we change the execution mode to SPMD-mode otherwise we build a
|
||||||
// custom state machine.
|
// custom state machine.
|
||||||
ChangeStatus Changed = ChangeStatus::UNCHANGED;
|
|
||||||
if (!changeToSPMDMode(A, Changed)) {
|
if (!changeToSPMDMode(A, Changed)) {
|
||||||
if (!KernelInitCB->getCalledFunction()->isDeclaration())
|
if (!KernelInitCB->getCalledFunction()->isDeclaration())
|
||||||
return buildCustomStateMachine(A);
|
Changed |= buildCustomStateMachine(A);
|
||||||
|
}
|
||||||
|
|
||||||
|
// At last, update the KernelEnvc
|
||||||
|
GlobalVariable *KernelEnvGV =
|
||||||
|
KernelInfo::getKernelEnvironementGVFromKernelInitCB(KernelInitCB);
|
||||||
|
if (KernelEnvGV->getInitializer() != KernelEnvC) {
|
||||||
|
KernelEnvGV->setInitializer(KernelEnvC);
|
||||||
|
Changed = ChangeStatus::CHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Changed;
|
return Changed;
|
||||||
@@ -3736,14 +3820,14 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
// Find escaping outputs from the guarded region to outside users and
|
// Find escaping outputs from the guarded region to outside users and
|
||||||
// broadcast their values to them.
|
// broadcast their values to them.
|
||||||
for (Instruction &I : *RegionStartBB) {
|
for (Instruction &I : *RegionStartBB) {
|
||||||
SmallPtrSet<Instruction *, 4> OutsideUsers;
|
SmallVector<Use *, 4> OutsideUses;
|
||||||
for (User *Usr : I.users()) {
|
for (Use &U : I.uses()) {
|
||||||
Instruction &UsrI = *cast<Instruction>(Usr);
|
Instruction &UsrI = *cast<Instruction>(U.getUser());
|
||||||
if (UsrI.getParent() != RegionStartBB)
|
if (UsrI.getParent() != RegionStartBB)
|
||||||
OutsideUsers.insert(&UsrI);
|
OutsideUses.push_back(&U);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OutsideUsers.empty())
|
if (OutsideUses.empty())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
HasBroadcastValues = true;
|
HasBroadcastValues = true;
|
||||||
@@ -3766,8 +3850,8 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
RegionBarrierBB->getTerminator());
|
RegionBarrierBB->getTerminator());
|
||||||
|
|
||||||
// Emit a load instruction and replace uses of the output value.
|
// Emit a load instruction and replace uses of the output value.
|
||||||
for (Instruction *UsrI : OutsideUsers)
|
for (Use *U : OutsideUses)
|
||||||
UsrI->replaceUsesOfWith(&I, LoadI);
|
A.changeUseAfterManifest(*U, *LoadI);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &OMPInfoCache = static_cast<OMPInformationCache &>(A.getInfoCache());
|
auto &OMPInfoCache = static_cast<OMPInformationCache &>(A.getInfoCache());
|
||||||
@@ -3994,16 +4078,11 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
assert(OMPInfoCache.Kernels.count(Kernel) && "Expected kernel function!");
|
assert(OMPInfoCache.Kernels.count(Kernel) && "Expected kernel function!");
|
||||||
|
|
||||||
// Check if the kernel is already in SPMD mode, if so, return success.
|
// Check if the kernel is already in SPMD mode, if so, return success.
|
||||||
GlobalVariable *ExecMode = Kernel->getParent()->getGlobalVariable(
|
ConstantStruct *ExistingKernelEnvC =
|
||||||
(Kernel->getName() + "_exec_mode").str());
|
KernelInfo::getKernelEnvironementFromKernelInitCB(KernelInitCB);
|
||||||
assert(ExecMode && "Kernel without exec mode?");
|
auto *ExecModeC =
|
||||||
assert(ExecMode->getInitializer() && "ExecMode doesn't have initializer!");
|
KernelInfo::getExecModeFromKernelEnvironment(ExistingKernelEnvC);
|
||||||
|
const int8_t ExecModeVal = ExecModeC->getSExtValue();
|
||||||
// Set the global exec mode flag to indicate SPMD-Generic mode.
|
|
||||||
assert(isa<ConstantInt>(ExecMode->getInitializer()) &&
|
|
||||||
"ExecMode is not an integer!");
|
|
||||||
const int8_t ExecModeVal =
|
|
||||||
cast<ConstantInt>(ExecMode->getInitializer())->getSExtValue();
|
|
||||||
if (ExecModeVal != OMP_TGT_EXEC_MODE_GENERIC)
|
if (ExecModeVal != OMP_TGT_EXEC_MODE_GENERIC)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -4021,27 +4100,8 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
// kernel is executed in.
|
// kernel is executed in.
|
||||||
assert(ExecModeVal == OMP_TGT_EXEC_MODE_GENERIC &&
|
assert(ExecModeVal == OMP_TGT_EXEC_MODE_GENERIC &&
|
||||||
"Initially non-SPMD kernel has SPMD exec mode!");
|
"Initially non-SPMD kernel has SPMD exec mode!");
|
||||||
ExecMode->setInitializer(
|
setExecModeOfKernelEnvironment(ConstantInt::get(
|
||||||
ConstantInt::get(ExecMode->getInitializer()->getType(),
|
ExecModeC->getType(), ExecModeVal | OMP_TGT_EXEC_MODE_GENERIC_SPMD));
|
||||||
ExecModeVal | OMP_TGT_EXEC_MODE_GENERIC_SPMD));
|
|
||||||
|
|
||||||
// Next rewrite the init and deinit calls to indicate we use SPMD-mode now.
|
|
||||||
const int InitModeArgNo = 1;
|
|
||||||
const int DeinitModeArgNo = 1;
|
|
||||||
const int InitUseStateMachineArgNo = 2;
|
|
||||||
|
|
||||||
auto &Ctx = getAnchorValue().getContext();
|
|
||||||
A.changeUseAfterManifest(
|
|
||||||
KernelInitCB->getArgOperandUse(InitModeArgNo),
|
|
||||||
*ConstantInt::getSigned(IntegerType::getInt8Ty(Ctx),
|
|
||||||
OMP_TGT_EXEC_MODE_SPMD));
|
|
||||||
A.changeUseAfterManifest(
|
|
||||||
KernelInitCB->getArgOperandUse(InitUseStateMachineArgNo),
|
|
||||||
*ConstantInt::getBool(Ctx, false));
|
|
||||||
A.changeUseAfterManifest(
|
|
||||||
KernelDeinitCB->getArgOperandUse(DeinitModeArgNo),
|
|
||||||
*ConstantInt::getSigned(IntegerType::getInt8Ty(Ctx),
|
|
||||||
OMP_TGT_EXEC_MODE_SPMD));
|
|
||||||
|
|
||||||
++NumOpenMPTargetRegionKernelsSPMD;
|
++NumOpenMPTargetRegionKernelsSPMD;
|
||||||
|
|
||||||
@@ -4068,30 +4128,29 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
OMPRTL___kmpc_kernel_parallel, OMPRTL___kmpc_kernel_end_parallel}))
|
OMPRTL___kmpc_kernel_parallel, OMPRTL___kmpc_kernel_end_parallel}))
|
||||||
return ChangeStatus::UNCHANGED;
|
return ChangeStatus::UNCHANGED;
|
||||||
|
|
||||||
const int InitModeArgNo = 1;
|
ConstantStruct *ExistingKernelEnvC =
|
||||||
const int InitUseStateMachineArgNo = 2;
|
KernelInfo::getKernelEnvironementFromKernelInitCB(KernelInitCB);
|
||||||
|
|
||||||
// Check if the current configuration is non-SPMD and generic state machine.
|
// Check if the current configuration is non-SPMD and generic state machine.
|
||||||
// If we already have SPMD mode or a custom state machine we do not need to
|
// If we already have SPMD mode or a custom state machine we do not need to
|
||||||
// go any further. If it is anything but a constant something is weird and
|
// go any further. If it is anything but a constant something is weird and
|
||||||
// we give up.
|
// we give up.
|
||||||
ConstantInt *UseStateMachine = dyn_cast<ConstantInt>(
|
ConstantInt *UseStateMachineC =
|
||||||
KernelInitCB->getArgOperand(InitUseStateMachineArgNo));
|
KernelInfo::getUseGenericStateMachineFromKernelEnvironment(
|
||||||
ConstantInt *Mode =
|
ExistingKernelEnvC);
|
||||||
dyn_cast<ConstantInt>(KernelInitCB->getArgOperand(InitModeArgNo));
|
ConstantInt *ModeC =
|
||||||
|
KernelInfo::getExecModeFromKernelEnvironment(ExistingKernelEnvC);
|
||||||
|
|
||||||
// If we are stuck with generic mode, try to create a custom device (=GPU)
|
// If we are stuck with generic mode, try to create a custom device (=GPU)
|
||||||
// state machine which is specialized for the parallel regions that are
|
// state machine which is specialized for the parallel regions that are
|
||||||
// reachable by the kernel.
|
// reachable by the kernel.
|
||||||
if (!UseStateMachine || UseStateMachine->isZero() || !Mode ||
|
if (UseStateMachineC->isZero() ||
|
||||||
(Mode->getSExtValue() & OMP_TGT_EXEC_MODE_SPMD))
|
(ModeC->getSExtValue() & OMP_TGT_EXEC_MODE_SPMD))
|
||||||
return ChangeStatus::UNCHANGED;
|
return ChangeStatus::UNCHANGED;
|
||||||
|
|
||||||
// If not SPMD mode, indicate we use a custom state machine now.
|
// If not SPMD mode, indicate we use a custom state machine now.
|
||||||
auto &Ctx = getAnchorValue().getContext();
|
setUseGenericStateMachineOfKernelEnvironment(
|
||||||
auto *FalseVal = ConstantInt::getBool(Ctx, false);
|
ConstantInt::get(UseStateMachineC->getType(), false));
|
||||||
A.changeUseAfterManifest(
|
|
||||||
KernelInitCB->getArgOperandUse(InitUseStateMachineArgNo), *FalseVal);
|
|
||||||
|
|
||||||
// If we don't actually need a state machine we are done here. This can
|
// If we don't actually need a state machine we are done here. This can
|
||||||
// happen if there simply are no parallel regions. In the resulting kernel
|
// happen if there simply are no parallel regions. In the resulting kernel
|
||||||
@@ -4170,6 +4229,7 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
// UserCodeEntryBB: // user code
|
// UserCodeEntryBB: // user code
|
||||||
// __kmpc_target_deinit(...)
|
// __kmpc_target_deinit(...)
|
||||||
//
|
//
|
||||||
|
auto &Ctx = getAnchorValue().getContext();
|
||||||
Function *Kernel = getAssociatedFunction();
|
Function *Kernel = getAssociatedFunction();
|
||||||
assert(Kernel && "Expected an associated function!");
|
assert(Kernel && "Expected an associated function!");
|
||||||
|
|
||||||
@@ -4252,7 +4312,7 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
StateMachineBeginBB->end()),
|
StateMachineBeginBB->end()),
|
||||||
DLoc));
|
DLoc));
|
||||||
|
|
||||||
Value *Ident = KernelInitCB->getArgOperand(0);
|
Value *Ident = KernelInfo::getIdentFromKernelEnvironment(KernelEnvC);
|
||||||
Value *GTid = KernelInitCB;
|
Value *GTid = KernelInitCB;
|
||||||
|
|
||||||
FunctionCallee BarrierFn =
|
FunctionCallee BarrierFn =
|
||||||
@@ -4382,6 +4442,46 @@ struct AAKernelInfoFunction : AAKernelInfo {
|
|||||||
ChangeStatus updateImpl(Attributor &A) override {
|
ChangeStatus updateImpl(Attributor &A) override {
|
||||||
KernelInfoState StateBefore = getState();
|
KernelInfoState StateBefore = getState();
|
||||||
|
|
||||||
|
// When we leave this function this RAII will make sure the member
|
||||||
|
// KernelEnvC is updated properly depending on the state. That member is
|
||||||
|
// used for simplification of values and needs to be up to date at all
|
||||||
|
// times.
|
||||||
|
struct UpdateKernelEnvCRAII {
|
||||||
|
AAKernelInfoFunction &AA;
|
||||||
|
|
||||||
|
UpdateKernelEnvCRAII(AAKernelInfoFunction &AA) : AA(AA) {}
|
||||||
|
|
||||||
|
~UpdateKernelEnvCRAII() {
|
||||||
|
if (!AA.KernelEnvC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ConstantStruct *ExistingKernelEnvC =
|
||||||
|
KernelInfo::getKernelEnvironementFromKernelInitCB(AA.KernelInitCB);
|
||||||
|
|
||||||
|
if (!AA.isValidState()) {
|
||||||
|
AA.KernelEnvC = ExistingKernelEnvC;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!AA.ReachedKnownParallelRegions.isValidState())
|
||||||
|
AA.setUseGenericStateMachineOfKernelEnvironment(
|
||||||
|
KernelInfo::getUseGenericStateMachineFromKernelEnvironment(
|
||||||
|
ExistingKernelEnvC));
|
||||||
|
|
||||||
|
if (!AA.SPMDCompatibilityTracker.isValidState())
|
||||||
|
AA.setExecModeOfKernelEnvironment(
|
||||||
|
KernelInfo::getExecModeFromKernelEnvironment(ExistingKernelEnvC));
|
||||||
|
|
||||||
|
ConstantInt *MayUseNestedParallelismC =
|
||||||
|
KernelInfo::getMayUseNestedParallelismFromKernelEnvironment(
|
||||||
|
AA.KernelEnvC);
|
||||||
|
ConstantInt *NewMayUseNestedParallelismC = ConstantInt::get(
|
||||||
|
MayUseNestedParallelismC->getType(), AA.NestedParallelism);
|
||||||
|
AA.setMayUseNestedParallelismOfKernelEnvironment(
|
||||||
|
NewMayUseNestedParallelismC);
|
||||||
|
}
|
||||||
|
} RAII(*this);
|
||||||
|
|
||||||
// Callback to check a read/write instruction.
|
// Callback to check a read/write instruction.
|
||||||
auto CheckRWInst = [&](Instruction &I) {
|
auto CheckRWInst = [&](Instruction &I) {
|
||||||
// We handle calls later.
|
// We handle calls later.
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ set(bc_flags -c -emit-llvm -std=c++17 -fvisibility=hidden
|
|||||||
-nocudalib -nogpulib -nostdinc
|
-nocudalib -nogpulib -nostdinc
|
||||||
-fopenmp -fopenmp-cuda-mode
|
-fopenmp -fopenmp-cuda-mode
|
||||||
-Wno-unknown-cuda-version
|
-Wno-unknown-cuda-version
|
||||||
|
-DOMPTARGET_DEVICE_RUNTIME
|
||||||
-I${include_directory}
|
-I${include_directory}
|
||||||
-I${devicertl_base_directory}/../include
|
-I${devicertl_base_directory}/../include
|
||||||
${LIBOMPTARGET_LLVM_INCLUDE_DIRS_DEVICERTL}
|
${LIBOMPTARGET_LLVM_INCLUDE_DIRS_DEVICERTL}
|
||||||
|
|||||||
@@ -50,8 +50,6 @@ void __assert_fail(const char *assertion, const char *file, unsigned line,
|
|||||||
struct DebugEntryRAII {
|
struct DebugEntryRAII {
|
||||||
DebugEntryRAII(const char *File, const unsigned Line, const char *Function);
|
DebugEntryRAII(const char *File, const unsigned Line, const char *Function);
|
||||||
~DebugEntryRAII();
|
~DebugEntryRAII();
|
||||||
|
|
||||||
static void init();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -214,12 +214,14 @@ uint32_t __kmpc_get_warp_size();
|
|||||||
/// Kernel
|
/// Kernel
|
||||||
///
|
///
|
||||||
///{
|
///{
|
||||||
|
// Forward declaration
|
||||||
|
struct KernelEnvironmentTy;
|
||||||
|
|
||||||
int8_t __kmpc_is_spmd_exec_mode();
|
int8_t __kmpc_is_spmd_exec_mode();
|
||||||
|
|
||||||
int32_t __kmpc_target_init(IdentTy *Ident, int8_t Mode,
|
int32_t __kmpc_target_init(KernelEnvironmentTy &KernelEnvironment);
|
||||||
bool UseGenericStateMachine);
|
|
||||||
|
|
||||||
void __kmpc_target_deinit(IdentTy *Ident, int8_t Mode);
|
void __kmpc_target_deinit();
|
||||||
|
|
||||||
///}
|
///}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
|
|
||||||
|
// Forward declaration.
|
||||||
|
struct KernelEnvironmentTy;
|
||||||
|
|
||||||
#pragma omp begin declare target device_type(nohost)
|
#pragma omp begin declare target device_type(nohost)
|
||||||
|
|
||||||
namespace ompx {
|
namespace ompx {
|
||||||
@@ -113,7 +116,10 @@ extern ThreadStateTy **ThreadStates;
|
|||||||
#pragma omp allocate(ThreadStates) allocator(omp_pteam_mem_alloc)
|
#pragma omp allocate(ThreadStates) allocator(omp_pteam_mem_alloc)
|
||||||
|
|
||||||
/// Initialize the state machinery. Must be called by all threads.
|
/// Initialize the state machinery. Must be called by all threads.
|
||||||
void init(bool IsSPMD);
|
void init(bool IsSPMD, KernelEnvironmentTy &KernelEnvironment);
|
||||||
|
|
||||||
|
/// Return the kernel environment associated with the current kernel.
|
||||||
|
KernelEnvironmentTy &getKernelEnvironment();
|
||||||
|
|
||||||
/// TODO
|
/// TODO
|
||||||
enum ValueKind {
|
enum ValueKind {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "Configuration.h"
|
#include "Configuration.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "State.h"
|
#include "State.h"
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
@@ -53,7 +53,9 @@ bool config::isDebugMode(config::DebugKind Kind) {
|
|||||||
bool config::mayUseThreadStates() { return !__omp_rtl_assume_no_thread_state; }
|
bool config::mayUseThreadStates() { return !__omp_rtl_assume_no_thread_state; }
|
||||||
|
|
||||||
bool config::mayUseNestedParallelism() {
|
bool config::mayUseNestedParallelism() {
|
||||||
return !__omp_rtl_assume_no_nested_parallelism;
|
if (__omp_rtl_assume_no_nested_parallelism)
|
||||||
|
return false;
|
||||||
|
return state::getKernelEnvironment().Configuration.MayUseNestedParallelism;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma omp end declare target
|
#pragma omp end declare target
|
||||||
|
|||||||
@@ -12,8 +12,10 @@
|
|||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "Configuration.h"
|
#include "Configuration.h"
|
||||||
|
#include "Environment.h"
|
||||||
#include "Interface.h"
|
#include "Interface.h"
|
||||||
#include "Mapping.h"
|
#include "Mapping.h"
|
||||||
|
#include "State.h"
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
using namespace ompx;
|
using namespace ompx;
|
||||||
@@ -31,15 +33,14 @@ void __assert_fail(const char *assertion, const char *file, unsigned line,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Current indentation level for the function trace. Only accessed by thread 0.
|
|
||||||
__attribute__((loader_uninitialized)) static uint32_t Level;
|
|
||||||
#pragma omp allocate(Level) allocator(omp_pteam_mem_alloc)
|
|
||||||
|
|
||||||
DebugEntryRAII::DebugEntryRAII(const char *File, const unsigned Line,
|
DebugEntryRAII::DebugEntryRAII(const char *File, const unsigned Line,
|
||||||
const char *Function) {
|
const char *Function) {
|
||||||
if (config::isDebugMode(config::DebugKind::FunctionTracing) &&
|
if (config::isDebugMode(config::DebugKind::FunctionTracing) &&
|
||||||
mapping::getThreadIdInBlock() == 0 && mapping::getBlockId() == 0) {
|
mapping::getThreadIdInBlock() == 0 && mapping::getBlockId() == 0) {
|
||||||
|
|
||||||
|
uint16_t &Level =
|
||||||
|
state::getKernelEnvironment().DynamicEnv->DebugIndentionLevel;
|
||||||
|
|
||||||
for (int I = 0; I < Level; ++I)
|
for (int I = 0; I < Level; ++I)
|
||||||
PRINTF("%s", " ");
|
PRINTF("%s", " ");
|
||||||
|
|
||||||
@@ -51,10 +52,11 @@ DebugEntryRAII::DebugEntryRAII(const char *File, const unsigned Line,
|
|||||||
|
|
||||||
DebugEntryRAII::~DebugEntryRAII() {
|
DebugEntryRAII::~DebugEntryRAII() {
|
||||||
if (config::isDebugMode(config::DebugKind::FunctionTracing) &&
|
if (config::isDebugMode(config::DebugKind::FunctionTracing) &&
|
||||||
mapping::getThreadIdInBlock() == 0 && mapping::getBlockId() == 0)
|
mapping::getThreadIdInBlock() == 0 && mapping::getBlockId() == 0) {
|
||||||
|
uint16_t &Level =
|
||||||
|
state::getKernelEnvironment().DynamicEnv->DebugIndentionLevel;
|
||||||
Level--;
|
Level--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebugEntryRAII::init() { Level = 0; }
|
|
||||||
|
|
||||||
#pragma omp end declare target
|
#pragma omp end declare target
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
#include "Environment.h"
|
||||||
#include "Interface.h"
|
#include "Interface.h"
|
||||||
#include "Mapping.h"
|
#include "Mapping.h"
|
||||||
#include "State.h"
|
#include "State.h"
|
||||||
@@ -23,11 +24,12 @@ using namespace ompx;
|
|||||||
|
|
||||||
#pragma omp begin declare target device_type(nohost)
|
#pragma omp begin declare target device_type(nohost)
|
||||||
|
|
||||||
static void inititializeRuntime(bool IsSPMD) {
|
static void inititializeRuntime(bool IsSPMD,
|
||||||
|
KernelEnvironmentTy &KernelEnvironment) {
|
||||||
// Order is important here.
|
// Order is important here.
|
||||||
synchronize::init(IsSPMD);
|
synchronize::init(IsSPMD);
|
||||||
mapping::init(IsSPMD);
|
mapping::init(IsSPMD);
|
||||||
state::init(IsSPMD);
|
state::init(IsSPMD, KernelEnvironment);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Simple generic state machine for worker threads.
|
/// Simple generic state machine for worker threads.
|
||||||
@@ -67,16 +69,17 @@ extern "C" {
|
|||||||
///
|
///
|
||||||
/// \param Ident Source location identification, can be NULL.
|
/// \param Ident Source location identification, can be NULL.
|
||||||
///
|
///
|
||||||
int32_t __kmpc_target_init(IdentTy *Ident, int8_t Mode,
|
int32_t __kmpc_target_init(KernelEnvironmentTy &KernelEnvironment) {
|
||||||
bool UseGenericStateMachine) {
|
|
||||||
FunctionTracingRAII();
|
FunctionTracingRAII();
|
||||||
const bool IsSPMD =
|
ConfigurationEnvironmentTy &Configuration = KernelEnvironment.Configuration;
|
||||||
Mode & llvm::omp::OMPTgtExecModeFlags::OMP_TGT_EXEC_MODE_SPMD;
|
bool IsSPMD = Configuration.ExecMode &
|
||||||
|
llvm::omp::OMPTgtExecModeFlags::OMP_TGT_EXEC_MODE_SPMD;
|
||||||
|
bool UseGenericStateMachine = Configuration.UseGenericStateMachine;
|
||||||
if (IsSPMD) {
|
if (IsSPMD) {
|
||||||
inititializeRuntime(/* IsSPMD */ true);
|
inititializeRuntime(/* IsSPMD */ true, KernelEnvironment);
|
||||||
synchronize::threadsAligned();
|
synchronize::threadsAligned();
|
||||||
} else {
|
} else {
|
||||||
inititializeRuntime(/* IsSPMD */ false);
|
inititializeRuntime(/* IsSPMD */ false, KernelEnvironment);
|
||||||
// No need to wait since only the main threads will execute user
|
// No need to wait since only the main threads will execute user
|
||||||
// code and workers will run into a barrier right away.
|
// code and workers will run into a barrier right away.
|
||||||
}
|
}
|
||||||
@@ -104,7 +107,7 @@ int32_t __kmpc_target_init(IdentTy *Ident, int8_t Mode,
|
|||||||
// thread's warp, so none of its threads can ever be active worker threads.
|
// thread's warp, so none of its threads can ever be active worker threads.
|
||||||
if (UseGenericStateMachine &&
|
if (UseGenericStateMachine &&
|
||||||
mapping::getThreadIdInBlock() < mapping::getBlockSize(IsSPMD)) {
|
mapping::getThreadIdInBlock() < mapping::getBlockSize(IsSPMD)) {
|
||||||
genericStateMachine(Ident);
|
genericStateMachine(KernelEnvironment.Ident);
|
||||||
} else {
|
} else {
|
||||||
// Retrieve the work function just to ensure we always call
|
// Retrieve the work function just to ensure we always call
|
||||||
// __kmpc_kernel_parallel even if a custom state machine is used.
|
// __kmpc_kernel_parallel even if a custom state machine is used.
|
||||||
@@ -128,10 +131,9 @@ int32_t __kmpc_target_init(IdentTy *Ident, int8_t Mode,
|
|||||||
///
|
///
|
||||||
/// \param Ident Source location identification, can be NULL.
|
/// \param Ident Source location identification, can be NULL.
|
||||||
///
|
///
|
||||||
void __kmpc_target_deinit(IdentTy *Ident, int8_t Mode) {
|
void __kmpc_target_deinit() {
|
||||||
FunctionTracingRAII();
|
FunctionTracingRAII();
|
||||||
const bool IsSPMD =
|
bool IsSPMD = mapping::isSPMDMode();
|
||||||
Mode & llvm::omp::OMPTgtExecModeFlags::OMP_TGT_EXEC_MODE_SPMD;
|
|
||||||
state::assumeInitialState(IsSPMD);
|
state::assumeInitialState(IsSPMD);
|
||||||
if (IsSPMD)
|
if (IsSPMD)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "State.h"
|
#include "State.h"
|
||||||
#include "Configuration.h"
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
#include "Environment.h"
|
||||||
#include "Interface.h"
|
#include "Interface.h"
|
||||||
#include "Mapping.h"
|
#include "Mapping.h"
|
||||||
#include "Synchronization.h"
|
#include "Synchronization.h"
|
||||||
@@ -34,6 +34,9 @@ constexpr const uint32_t Alignment = 16;
|
|||||||
extern unsigned char DynamicSharedBuffer[] __attribute__((aligned(Alignment)));
|
extern unsigned char DynamicSharedBuffer[] __attribute__((aligned(Alignment)));
|
||||||
#pragma omp allocate(DynamicSharedBuffer) allocator(omp_pteam_mem_alloc)
|
#pragma omp allocate(DynamicSharedBuffer) allocator(omp_pteam_mem_alloc)
|
||||||
|
|
||||||
|
/// The kernel environment passed to the init method by the compiler.
|
||||||
|
static KernelEnvironmentTy *SHARED(KernelEnvironmentPtr);
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
/// Fallback implementations are missing to trigger a link time error.
|
/// Fallback implementations are missing to trigger a link time error.
|
||||||
@@ -241,15 +244,19 @@ int returnValIfLevelIsActive(int Level, int Val, int DefaultVal,
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void state::init(bool IsSPMD) {
|
void state::init(bool IsSPMD, KernelEnvironmentTy &KernelEnvironment) {
|
||||||
SharedMemorySmartStack.init(IsSPMD);
|
SharedMemorySmartStack.init(IsSPMD);
|
||||||
if (mapping::isInitialThreadInLevel0(IsSPMD)) {
|
if (mapping::isInitialThreadInLevel0(IsSPMD)) {
|
||||||
TeamState.init(IsSPMD);
|
TeamState.init(IsSPMD);
|
||||||
DebugEntryRAII::init();
|
|
||||||
ThreadStates = nullptr;
|
ThreadStates = nullptr;
|
||||||
|
KernelEnvironmentPtr = &KernelEnvironment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KernelEnvironmentTy &state::getKernelEnvironment() {
|
||||||
|
return *KernelEnvironmentPtr;
|
||||||
|
}
|
||||||
|
|
||||||
void state::enterDataEnvironment(IdentTy *Ident) {
|
void state::enterDataEnvironment(IdentTy *Ident) {
|
||||||
ASSERT(config::mayUseThreadStates() &&
|
ASSERT(config::mayUseThreadStates() &&
|
||||||
"Thread state modified while explicitly disabled!");
|
"Thread state modified while explicitly disabled!");
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
//===---- device_environment.h - OpenMP GPU device environment ---- C++ -*-===//
|
|
||||||
//
|
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
|
||||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
//
|
|
||||||
// Global device environment
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#ifndef _OMPTARGET_DEVICE_ENVIRONMENT_H_
|
|
||||||
#define _OMPTARGET_DEVICE_ENVIRONMENT_H_
|
|
||||||
|
|
||||||
// deviceRTL uses <stdint> and DeviceRTL uses explicit definitions
|
|
||||||
|
|
||||||
struct DeviceEnvironmentTy {
|
|
||||||
uint32_t DebugKind;
|
|
||||||
uint32_t NumDevices;
|
|
||||||
uint32_t DeviceNum;
|
|
||||||
uint32_t DynamicMemSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
61
openmp/libomptarget/include/Environment.h
Normal file
61
openmp/libomptarget/include/Environment.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
//===------------ Environment.h - OpenMP GPU environments --------- C++ -*-===//
|
||||||
|
//
|
||||||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// Environments shared between host and device.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef _OMPTARGET_ENVIRONMENT_H_
|
||||||
|
#define _OMPTARGET_ENVIRONMENT_H_
|
||||||
|
|
||||||
|
#ifdef OMPTARGET_DEVICE_RUNTIME
|
||||||
|
#include "Types.h"
|
||||||
|
#else
|
||||||
|
#include "SourceInfo.h"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
using IdentTy = ident_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "llvm/Frontend/OpenMP/OMPDeviceConstants.h"
|
||||||
|
|
||||||
|
struct DeviceEnvironmentTy {
|
||||||
|
uint32_t DebugKind;
|
||||||
|
uint32_t NumDevices;
|
||||||
|
uint32_t DeviceNum;
|
||||||
|
uint32_t DynamicMemSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
// NOTE: Please don't change the order of those members as their indices are
|
||||||
|
// used in the middle end. Always add the new data member at the end.
|
||||||
|
// Different from KernelEnvironmentTy below, this structure contains members
|
||||||
|
// that might be modified at runtime.
|
||||||
|
struct DynamicEnvironmentTy {
|
||||||
|
/// Current indentation level for the function trace. Only accessed by thread
|
||||||
|
/// 0.
|
||||||
|
uint16_t DebugIndentionLevel;
|
||||||
|
};
|
||||||
|
|
||||||
|
// NOTE: Please don't change the order of those members as their indices are
|
||||||
|
// used in the middle end. Always add the new data member at the end.
|
||||||
|
struct ConfigurationEnvironmentTy {
|
||||||
|
uint8_t UseGenericStateMachine;
|
||||||
|
uint8_t MayUseNestedParallelism;
|
||||||
|
llvm::omp::OMPTgtExecModeFlags ExecMode;
|
||||||
|
};
|
||||||
|
|
||||||
|
// NOTE: Please don't change the order of those members as their indices are
|
||||||
|
// used in the middle end. Always add the new data member at the end.
|
||||||
|
struct KernelEnvironmentTy {
|
||||||
|
ConfigurationEnvironmentTy Configuration;
|
||||||
|
IdentTy *Ident;
|
||||||
|
DynamicEnvironmentTy *DynamicEnv;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _OMPTARGET_ENVIRONMENT_H_
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "GlobalHandler.h"
|
#include "GlobalHandler.h"
|
||||||
#include "PluginInterface.h"
|
#include "PluginInterface.h"
|
||||||
#include "Utilities.h"
|
#include "Utilities.h"
|
||||||
|
|||||||
@@ -554,32 +554,45 @@ Error GenericDeviceTy::registerKernelOffloadEntry(
|
|||||||
return Plugin::success();
|
return Plugin::success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Expected<KernelEnvironmentTy>
|
||||||
|
GenericDeviceTy::getKernelEnvironmentForKernel(StringRef Name,
|
||||||
|
DeviceImageTy &Image) {
|
||||||
|
// Create a metadata object for the kernel environment object.
|
||||||
|
StaticGlobalTy<KernelEnvironmentTy> KernelEnv(Name.data(),
|
||||||
|
"_kernel_environment");
|
||||||
|
|
||||||
|
// Retrieve kernel environment object for the kernel.
|
||||||
|
GenericGlobalHandlerTy &GHandler = Plugin::get().getGlobalHandler();
|
||||||
|
if (auto Err = GHandler.readGlobalFromImage(*this, Image, KernelEnv)) {
|
||||||
|
// Consume the error since it is acceptable to fail.
|
||||||
|
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
|
||||||
|
DP("Failed to read kernel environment object for '%s': %s\n", Name.data(),
|
||||||
|
ErrStr.data());
|
||||||
|
|
||||||
|
return createStringError(inconvertibleErrorCode(), ErrStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return KernelEnv.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
Expected<OMPTgtExecModeFlags>
|
Expected<OMPTgtExecModeFlags>
|
||||||
GenericDeviceTy::getExecutionModeForKernel(StringRef Name,
|
GenericDeviceTy::getExecutionModeForKernel(StringRef Name,
|
||||||
DeviceImageTy &Image) {
|
DeviceImageTy &Image) {
|
||||||
// Create a metadata object for the exec mode global (auto-generated).
|
auto KernelEnvOrError = getKernelEnvironmentForKernel(Name, Image);
|
||||||
StaticGlobalTy<llvm::omp::OMPTgtExecModeFlags> ExecModeGlobal(Name.data(),
|
if (!KernelEnvOrError) {
|
||||||
"_exec_mode");
|
(void)KernelEnvOrError.takeError();
|
||||||
|
|
||||||
// Retrieve execution mode for the kernel. This may fail since some kernels
|
|
||||||
// may not have an execution mode.
|
|
||||||
GenericGlobalHandlerTy &GHandler = Plugin::get().getGlobalHandler();
|
|
||||||
if (auto Err = GHandler.readGlobalFromImage(*this, Image, ExecModeGlobal)) {
|
|
||||||
// Consume the error since it is acceptable to fail.
|
|
||||||
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
|
|
||||||
DP("Failed to read execution mode for '%s': %s\n"
|
|
||||||
"Using default SPMD (2) execution mode\n",
|
|
||||||
Name.data(), ErrStr.data());
|
|
||||||
|
|
||||||
return OMP_TGT_EXEC_MODE_SPMD;
|
return OMP_TGT_EXEC_MODE_SPMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the retrieved execution mode is valid.
|
auto &KernelEnv = *KernelEnvOrError;
|
||||||
if (!GenericKernelTy::isValidExecutionMode(ExecModeGlobal.getValue()))
|
auto ExecMode = KernelEnv.Configuration.ExecMode;
|
||||||
return Plugin::error("Invalid execution mode %d for '%s'",
|
|
||||||
ExecModeGlobal.getValue(), Name.data());
|
|
||||||
|
|
||||||
return ExecModeGlobal.getValue();
|
// Check that the retrieved execution mode is valid.
|
||||||
|
if (!GenericKernelTy::isValidExecutionMode(ExecMode))
|
||||||
|
return Plugin::error("Invalid execution mode %d for '%s'", ExecMode,
|
||||||
|
Name.data());
|
||||||
|
|
||||||
|
return ExecMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error PinnedAllocationMapTy::insertEntry(void *HstPtr, void *DevAccessiblePtr,
|
Error PinnedAllocationMapTy::insertEntry(void *HstPtr, void *DevAccessiblePtr,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "GlobalHandler.h"
|
#include "GlobalHandler.h"
|
||||||
#include "JIT.h"
|
#include "JIT.h"
|
||||||
#include "MemoryManager.h"
|
#include "MemoryManager.h"
|
||||||
@@ -732,6 +732,11 @@ protected:
|
|||||||
|
|
||||||
/// Map of host pinned allocations used for optimize device transfers.
|
/// Map of host pinned allocations used for optimize device transfers.
|
||||||
PinnedAllocationMapTy PinnedAllocs;
|
PinnedAllocationMapTy PinnedAllocs;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// Return the kernel environment object for kernel \p Name.
|
||||||
|
Expected<KernelEnvironmentTy>
|
||||||
|
getKernelEnvironmentForKernel(StringRef Name, DeviceImageTy &Image);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Class implementing common functionalities of offload plugins. Each plugin
|
/// Class implementing common functionalities of offload plugins. Each plugin
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "GlobalHandler.h"
|
#include "GlobalHandler.h"
|
||||||
#include "PluginInterface.h"
|
#include "PluginInterface.h"
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "GlobalHandler.h"
|
#include "GlobalHandler.h"
|
||||||
#include "PluginInterface.h"
|
#include "PluginInterface.h"
|
||||||
#include "omptarget.h"
|
#include "omptarget.h"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "rt.h"
|
#include "rt.h"
|
||||||
|
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "get_elf_mach_gfx_name.h"
|
#include "get_elf_mach_gfx_name.h"
|
||||||
#include "omptargetplugin.h"
|
#include "omptargetplugin.h"
|
||||||
#include "print_tracing.h"
|
#include "print_tracing.h"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "DeviceEnvironment.h"
|
#include "Environment.h"
|
||||||
#include "omptarget.h"
|
#include "omptarget.h"
|
||||||
#include "omptargetplugin.h"
|
#include "omptargetplugin.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user