Author: abataev Date: Tue Nov 28 13:11:44 2017 New Revision: 319227 URL: http://llvm.org/viewvc/llvm-project?rev=319227&view=rev Log: [OPENMP] Generalize capturing of clauses expressions.
The handling and capturing of the non-constant expressions of some of the capturable clauses in combined directives is generalized. Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp cfe/trunk/lib/Sema/SemaOpenMP.cpp cfe/trunk/test/OpenMP/target_codegen.cpp Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=319227&r1=319226&r2=319227&view=diff ============================================================================== --- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original) +++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Tue Nov 28 13:11:44 2017 @@ -892,9 +892,12 @@ void clang::getOpenMPCaptureRegions( CaptureRegions.push_back(OMPD_target); CaptureRegions.push_back(OMPD_teams); break; + case OMPD_teams: case OMPD_teams_distribute: + case OMPD_teams_distribute_simd: CaptureRegions.push_back(OMPD_teams); break; + case OMPD_target: case OMPD_target_simd: CaptureRegions.push_back(OMPD_target); break; @@ -908,12 +911,16 @@ void clang::getOpenMPCaptureRegions( CaptureRegions.push_back(OMPD_target); CaptureRegions.push_back(OMPD_parallel); break; + case OMPD_task: case OMPD_target_enter_data: case OMPD_target_exit_data: case OMPD_target_update: CaptureRegions.push_back(OMPD_task); break; - case OMPD_teams: + case OMPD_taskloop: + case OMPD_taskloop_simd: + CaptureRegions.push_back(OMPD_taskloop); + break; case OMPD_simd: case OMPD_for: case OMPD_for_simd: @@ -927,18 +934,13 @@ void clang::getOpenMPCaptureRegions( case OMPD_ordered: case OMPD_atomic: case OMPD_target_data: - case OMPD_target: - case OMPD_task: - case OMPD_taskloop: - case OMPD_taskloop_simd: case OMPD_distribute_simd: - case OMPD_teams_distribute_simd: case OMPD_teams_distribute_parallel_for_simd: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: case OMPD_target_teams_distribute_simd: - CaptureRegions.push_back(DKind); + CaptureRegions.push_back(OMPD_unknown); break; case OMPD_threadprivate: case OMPD_taskyield: Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=319227&r1=319226&r2=319227&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original) +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Tue Nov 28 13:11:44 2017 @@ -2394,6 +2394,8 @@ StmtResult Sema::ActOnOpenMPRegionEnd(St return StmtError(); } + SmallVector<OpenMPDirectiveKind, 4> CaptureRegions; + getOpenMPCaptureRegions(CaptureRegions, DSAStack->getCurrentDirective()); OMPOrderedClause *OC = nullptr; OMPScheduleClause *SC = nullptr; SmallVector<OMPLinearClause *, 4> LCs; @@ -2422,7 +2424,8 @@ StmtResult Sema::ActOnOpenMPRegionEnd(St } } DSAStack->setForceVarCapturing(/*V=*/false); - } else if (isParallelOrTaskRegion(DSAStack->getCurrentDirective())) { + } else if (CaptureRegions.size() > 1 || + CaptureRegions.back() != OMPD_unknown) { if (auto *C = OMPClauseWithPreInit::get(Clause)) PICs.push_back(C); if (auto *C = OMPClauseWithPostUpdate::get(Clause)) { @@ -2470,13 +2473,11 @@ StmtResult Sema::ActOnOpenMPRegionEnd(St return StmtError(); } StmtResult SR = S; - SmallVector<OpenMPDirectiveKind, 4> CaptureRegions; - getOpenMPCaptureRegions(CaptureRegions, DSAStack->getCurrentDirective()); - for (auto ThisCaptureRegion : llvm::reverse(CaptureRegions)) { + for (OpenMPDirectiveKind ThisCaptureRegion : llvm::reverse(CaptureRegions)) { // Mark all variables in private list clauses as used in inner region. // Required for proper codegen of combined directives. // TODO: add processing for other clauses. - if (isParallelOrTaskRegion(DSAStack->getCurrentDirective())) { + if (ThisCaptureRegion != OMPD_unknown) { for (auto *C : PICs) { OpenMPDirectiveKind CaptureRegion = C->getCaptureRegion(); // Find the particular capture region for the clause if the @@ -7533,19 +7534,21 @@ static OpenMPDirectiveKind getOpenMPCapt OpenMPDirectiveKind DKind, OpenMPClauseKind CKind, OpenMPDirectiveKind NameModifier = OMPD_unknown) { OpenMPDirectiveKind CaptureRegion = OMPD_unknown; - switch (CKind) { case OMPC_if: switch (DKind) { case OMPD_target_parallel: case OMPD_target_parallel_for: case OMPD_target_parallel_for_simd: + case OMPD_target_teams_distribute_parallel_for: + case OMPD_target_teams_distribute_parallel_for_simd: // If this clause applies to the nested 'parallel' region, capture within // the 'target' region, otherwise do not capture. if (NameModifier == OMPD_unknown || NameModifier == OMPD_parallel) CaptureRegion = OMPD_target; break; case OMPD_teams_distribute_parallel_for: + case OMPD_teams_distribute_parallel_for_simd: CaptureRegion = OMPD_teams; break; case OMPD_cancel: @@ -7558,9 +7561,6 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_target_teams: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: - case OMPD_target_teams_distribute_parallel_for: - case OMPD_target_teams_distribute_parallel_for_simd: - case OMPD_teams_distribute_parallel_for_simd: case OMPD_distribute_parallel_for: case OMPD_distribute_parallel_for_simd: case OMPD_task: @@ -7608,35 +7608,35 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_target_parallel: case OMPD_target_parallel_for: case OMPD_target_parallel_for_simd: + case OMPD_target_teams_distribute_parallel_for: + case OMPD_target_teams_distribute_parallel_for_simd: CaptureRegion = OMPD_target; break; case OMPD_teams_distribute_parallel_for: + case OMPD_teams_distribute_parallel_for_simd: CaptureRegion = OMPD_teams; break; - case OMPD_cancel: case OMPD_parallel: case OMPD_parallel_sections: case OMPD_parallel_for: case OMPD_parallel_for_simd: + case OMPD_distribute_parallel_for: + case OMPD_distribute_parallel_for_simd: + // Do not capture num_threads-clause expressions. + break; + case OMPD_target_data: + case OMPD_target_enter_data: + case OMPD_target_exit_data: + case OMPD_target_update: case OMPD_target: case OMPD_target_simd: case OMPD_target_teams: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: - case OMPD_target_teams_distribute_parallel_for: - case OMPD_target_teams_distribute_parallel_for_simd: - case OMPD_teams_distribute_parallel_for_simd: - case OMPD_distribute_parallel_for: - case OMPD_distribute_parallel_for_simd: + case OMPD_cancel: case OMPD_task: case OMPD_taskloop: case OMPD_taskloop_simd: - case OMPD_target_data: - case OMPD_target_enter_data: - case OMPD_target_exit_data: - case OMPD_target_update: - // Do not capture num_threads-clause expressions. - break; case OMPD_threadprivate: case OMPD_taskyield: case OMPD_barrier: @@ -7671,24 +7671,19 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPC_num_teams: switch (DKind) { case OMPD_target_teams: - CaptureRegion = OMPD_target; - break; - case OMPD_cancel: - case OMPD_parallel: - case OMPD_parallel_sections: - case OMPD_parallel_for: - case OMPD_parallel_for_simd: - case OMPD_target: - case OMPD_target_simd: - case OMPD_target_parallel: - case OMPD_target_parallel_for: - case OMPD_target_parallel_for_simd: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: + CaptureRegion = OMPD_target; + break; case OMPD_teams_distribute_parallel_for: case OMPD_teams_distribute_parallel_for_simd: + case OMPD_teams: + case OMPD_teams_distribute: + case OMPD_teams_distribute_simd: + // Do not capture num_teams-clause expressions. + break; case OMPD_distribute_parallel_for: case OMPD_distribute_parallel_for_simd: case OMPD_task: @@ -7698,11 +7693,16 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_target_enter_data: case OMPD_target_exit_data: case OMPD_target_update: - case OMPD_teams: - case OMPD_teams_distribute: - case OMPD_teams_distribute_simd: - // Do not capture num_teams-clause expressions. - break; + case OMPD_cancel: + case OMPD_parallel: + case OMPD_parallel_sections: + case OMPD_parallel_for: + case OMPD_parallel_for_simd: + case OMPD_target: + case OMPD_target_simd: + case OMPD_target_parallel: + case OMPD_target_parallel_for: + case OMPD_target_parallel_for_simd: case OMPD_threadprivate: case OMPD_taskyield: case OMPD_barrier: @@ -7734,24 +7734,19 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPC_thread_limit: switch (DKind) { case OMPD_target_teams: - CaptureRegion = OMPD_target; - break; - case OMPD_cancel: - case OMPD_parallel: - case OMPD_parallel_sections: - case OMPD_parallel_for: - case OMPD_parallel_for_simd: - case OMPD_target: - case OMPD_target_simd: - case OMPD_target_parallel: - case OMPD_target_parallel_for: - case OMPD_target_parallel_for_simd: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: + CaptureRegion = OMPD_target; + break; case OMPD_teams_distribute_parallel_for: case OMPD_teams_distribute_parallel_for_simd: + case OMPD_teams: + case OMPD_teams_distribute: + case OMPD_teams_distribute_simd: + // Do not capture thread_limit-clause expressions. + break; case OMPD_distribute_parallel_for: case OMPD_distribute_parallel_for_simd: case OMPD_task: @@ -7761,11 +7756,16 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_target_enter_data: case OMPD_target_exit_data: case OMPD_target_update: - case OMPD_teams: - case OMPD_teams_distribute: - case OMPD_teams_distribute_simd: - // Do not capture thread_limit-clause expressions. - break; + case OMPD_cancel: + case OMPD_parallel: + case OMPD_parallel_sections: + case OMPD_parallel_for: + case OMPD_parallel_for_simd: + case OMPD_target: + case OMPD_target_simd: + case OMPD_target_parallel: + case OMPD_target_parallel_for: + case OMPD_target_parallel_for_simd: case OMPD_threadprivate: case OMPD_taskyield: case OMPD_barrier: @@ -7798,21 +7798,23 @@ static OpenMPDirectiveKind getOpenMPCapt switch (DKind) { case OMPD_target_parallel_for: case OMPD_target_parallel_for_simd: + case OMPD_target_teams_distribute_parallel_for: + case OMPD_target_teams_distribute_parallel_for_simd: CaptureRegion = OMPD_target; break; case OMPD_teams_distribute_parallel_for: + case OMPD_teams_distribute_parallel_for_simd: CaptureRegion = OMPD_teams; break; + case OMPD_parallel_for: + case OMPD_parallel_for_simd: case OMPD_distribute_parallel_for: case OMPD_distribute_parallel_for_simd: CaptureRegion = OMPD_parallel; break; - case OMPD_parallel_for: - case OMPD_parallel_for_simd: - case OMPD_target_teams_distribute_parallel_for: - case OMPD_target_teams_distribute_parallel_for_simd: - case OMPD_teams_distribute_parallel_for_simd: - // Do not capture schedule clause expressions. + case OMPD_for: + case OMPD_for_simd: + // Do not capture schedule-clause expressions. break; case OMPD_task: case OMPD_taskloop: @@ -7843,8 +7845,6 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_declare_target: case OMPD_end_declare_target: case OMPD_simd: - case OMPD_for: - case OMPD_for_simd: case OMPD_sections: case OMPD_section: case OMPD_single: @@ -7864,17 +7864,22 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPC_dist_schedule: switch (DKind) { case OMPD_teams_distribute_parallel_for: + case OMPD_teams_distribute_parallel_for_simd: + case OMPD_teams_distribute: + case OMPD_teams_distribute_simd: CaptureRegion = OMPD_teams; break; case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: - case OMPD_teams_distribute_parallel_for_simd: - case OMPD_distribute_parallel_for: - case OMPD_distribute_parallel_for_simd: - case OMPD_teams_distribute: - case OMPD_teams_distribute_simd: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: + CaptureRegion = OMPD_target; + break; + case OMPD_distribute_parallel_for: + case OMPD_distribute_parallel_for_simd: + CaptureRegion = OMPD_parallel; + break; + case OMPD_distribute: case OMPD_distribute_simd: // Do not capture thread_limit-clause expressions. break; @@ -7915,7 +7920,6 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_master: case OMPD_critical: case OMPD_taskgroup: - case OMPD_distribute: case OMPD_ordered: case OMPD_atomic: case OMPD_target_teams: @@ -7924,6 +7928,67 @@ static OpenMPDirectiveKind getOpenMPCapt llvm_unreachable("Unknown OpenMP directive"); } break; + case OMPC_device: + switch (DKind) { + case OMPD_target_teams: + case OMPD_target_teams_distribute: + case OMPD_target_teams_distribute_simd: + case OMPD_target_teams_distribute_parallel_for: + case OMPD_target_teams_distribute_parallel_for_simd: + case OMPD_target_data: + case OMPD_target_enter_data: + case OMPD_target_exit_data: + case OMPD_target_update: + case OMPD_target: + case OMPD_target_simd: + case OMPD_target_parallel: + case OMPD_target_parallel_for: + case OMPD_target_parallel_for_simd: + // Do not capture device-clause expressions. + break; + case OMPD_teams_distribute_parallel_for: + case OMPD_teams_distribute_parallel_for_simd: + case OMPD_teams: + case OMPD_teams_distribute: + case OMPD_teams_distribute_simd: + case OMPD_distribute_parallel_for: + case OMPD_distribute_parallel_for_simd: + case OMPD_task: + case OMPD_taskloop: + case OMPD_taskloop_simd: + case OMPD_cancel: + case OMPD_parallel: + case OMPD_parallel_sections: + case OMPD_parallel_for: + case OMPD_parallel_for_simd: + case OMPD_threadprivate: + case OMPD_taskyield: + case OMPD_barrier: + case OMPD_taskwait: + case OMPD_cancellation_point: + case OMPD_flush: + case OMPD_declare_reduction: + case OMPD_declare_simd: + case OMPD_declare_target: + case OMPD_end_declare_target: + case OMPD_simd: + case OMPD_for: + case OMPD_for_simd: + case OMPD_sections: + case OMPD_section: + case OMPD_single: + case OMPD_master: + case OMPD_critical: + case OMPD_taskgroup: + case OMPD_distribute: + case OMPD_ordered: + case OMPD_atomic: + case OMPD_distribute_simd: + llvm_unreachable("Unexpected OpenMP directive with num_teams-clause"); + case OMPD_unknown: + llvm_unreachable("Unknown OpenMP directive"); + } + break; case OMPC_firstprivate: case OMPC_lastprivate: case OMPC_reduction: @@ -7953,7 +8018,6 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPC_capture: case OMPC_seq_cst: case OMPC_depend: - case OMPC_device: case OMPC_threads: case OMPC_simd: case OMPC_map: @@ -7995,7 +8059,7 @@ OMPClause *Sema::ActOnOpenMPIfClause(Ope OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective(); CaptureRegion = getOpenMPCaptureRegionForClause(DKind, OMPC_if, NameModifier); - if (CaptureRegion != OMPD_unknown) { + if (CaptureRegion != OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); HelperValStmt = buildPreInits(Context, Captures); @@ -8101,7 +8165,6 @@ OMPClause *Sema::ActOnOpenMPNumThreadsCl SourceLocation EndLoc) { Expr *ValExpr = NumThreads; Stmt *HelperValStmt = nullptr; - OpenMPDirectiveKind CaptureRegion = OMPD_unknown; // OpenMP [2.5, Restrictions] // The num_threads expression must evaluate to a positive integer value. @@ -8110,8 +8173,9 @@ OMPClause *Sema::ActOnOpenMPNumThreadsCl return nullptr; OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective(); - CaptureRegion = getOpenMPCaptureRegionForClause(DKind, OMPC_num_threads); - if (CaptureRegion != OMPD_unknown) { + OpenMPDirectiveKind CaptureRegion = + getOpenMPCaptureRegionForClause(DKind, OMPC_num_threads); + if (CaptureRegion != OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); HelperValStmt = buildPreInits(Context, Captures); @@ -8535,7 +8599,9 @@ OMPClause *Sema::ActOnOpenMPScheduleClau << "schedule" << 1 << ChunkSize->getSourceRange(); return nullptr; } - } else if (isParallelOrTaskRegion(DSAStack->getCurrentDirective()) && + } else if (getOpenMPCaptureRegionForClause( + DSAStack->getCurrentDirective(), OMPC_schedule) != + OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); @@ -11214,8 +11280,9 @@ OMPClause *Sema::ActOnOpenMPDeviceClause return nullptr; OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective(); - if (isOpenMPTargetExecutionDirective(DKind) && - !CurContext->isDependentContext()) { + OpenMPDirectiveKind CaptureRegion = + getOpenMPCaptureRegionForClause(DKind, OMPC_device); + if (CaptureRegion != OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); HelperValStmt = buildPreInits(Context, Captures); @@ -12222,7 +12289,6 @@ OMPClause *Sema::ActOnOpenMPNumTeamsClau SourceLocation EndLoc) { Expr *ValExpr = NumTeams; Stmt *HelperValStmt = nullptr; - OpenMPDirectiveKind CaptureRegion = OMPD_unknown; // OpenMP [teams Constrcut, Restrictions] // The num_teams expression must evaluate to a positive integer value. @@ -12231,8 +12297,9 @@ OMPClause *Sema::ActOnOpenMPNumTeamsClau return nullptr; OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective(); - CaptureRegion = getOpenMPCaptureRegionForClause(DKind, OMPC_num_teams); - if (CaptureRegion != OMPD_unknown) { + OpenMPDirectiveKind CaptureRegion = + getOpenMPCaptureRegionForClause(DKind, OMPC_num_teams); + if (CaptureRegion != OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); HelperValStmt = buildPreInits(Context, Captures); @@ -12248,7 +12315,6 @@ OMPClause *Sema::ActOnOpenMPThreadLimitC SourceLocation EndLoc) { Expr *ValExpr = ThreadLimit; Stmt *HelperValStmt = nullptr; - OpenMPDirectiveKind CaptureRegion = OMPD_unknown; // OpenMP [teams Constrcut, Restrictions] // The thread_limit expression must evaluate to a positive integer value. @@ -12257,8 +12323,9 @@ OMPClause *Sema::ActOnOpenMPThreadLimitC return nullptr; OpenMPDirectiveKind DKind = DSAStack->getCurrentDirective(); - CaptureRegion = getOpenMPCaptureRegionForClause(DKind, OMPC_thread_limit); - if (CaptureRegion != OMPD_unknown) { + OpenMPDirectiveKind CaptureRegion = + getOpenMPCaptureRegionForClause(DKind, OMPC_thread_limit); + if (CaptureRegion != OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); HelperValStmt = buildPreInits(Context, Captures); @@ -12365,7 +12432,9 @@ OMPClause *Sema::ActOnOpenMPDistSchedule << "dist_schedule" << ChunkSize->getSourceRange(); return nullptr; } - } else if (isParallelOrTaskRegion(DSAStack->getCurrentDirective()) && + } else if (getOpenMPCaptureRegionForClause( + DSAStack->getCurrentDirective(), OMPC_dist_schedule) != + OMPD_unknown && !CurContext->isDependentContext()) { llvm::MapVector<Expr *, DeclRefExpr *> Captures; ValExpr = tryBuildCapture(*this, ValExpr, Captures).get(); Modified: cfe/trunk/test/OpenMP/target_codegen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/target_codegen.cpp?rev=319227&r1=319226&r2=319227&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/target_codegen.cpp (original) +++ cfe/trunk/test/OpenMP/target_codegen.cpp Tue Nov 28 13:11:44 2017 @@ -97,9 +97,7 @@ int foo(int n) { static long *plocal; // CHECK: [[ADD:%.+]] = add nsw i32 - // CHECK: store i32 [[ADD]], i32* [[CAPTURE:%.+]], - // CHECK: [[LD:%.+]] = load i32, i32* [[CAPTURE]], - // CHECK: [[DEVICE:%.+]] = sext i32 [[LD]] to i64 + // CHECK: [[DEVICE:%.+]] = sext i32 [[ADD]] to i64 // CHECK: [[RET:%.+]] = call i32 @__tgt_target(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 0, i8** null, i8** null, i[[SZ]]* null, i64* null) // CHECK-NEXT: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0 // CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]] @@ -111,10 +109,8 @@ int foo(int n) { { } - // CHECK: [[ADD:%.+]] = add nsw i32 - // CHECK: store i32 [[ADD]], i32* [[CAPTURE:%.+]], - // CHECK-DAG: [[LD:%.+]] = load i32, i32* [[CAPTURE]], - // CHECK-DAG: [[DEVICE:%.+]] = sext i32 [[LD]] to i64 + // CHECK-DAG: [[ADD:%.+]] = add nsw i32 + // CHECK-DAG: [[DEVICE:%.+]] = sext i32 [[ADD]] to i64 // CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 2, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i[[SZ]]* getelementptr inbounds ([2 x i[[SZ]]], [2 x i[[SZ]]]* [[SIZET]], i32 0, i32 0), i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPT]], i32 0, i32 0) // CHECK-DAG: [[BPR]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]], i32 0, i32 0 // CHECK-DAG: [[PR]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]], i32 0, i32 0 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits