forked from OSchip/llvm-project
[OPENMP]Mark the loop as started when initialized.
Need to mark the loop as started when the initialization statement is found. It is required to prevent possible incorrect loop iteraton variable detection during template instantiation and fix the compiler crash during the codegen. llvm-svn: 349657
This commit is contained in:
parent
2bb4a4901b
commit
ce90181751
|
@ -4649,6 +4649,7 @@ void Sema::ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init) {
|
|||
unsigned AssociatedLoops = DSAStack->getAssociatedLoops();
|
||||
if (AssociatedLoops > 0 &&
|
||||
isOpenMPLoopDirective(DSAStack->getCurrentDirective())) {
|
||||
DSAStack->loopStart();
|
||||
OpenMPIterationSpaceChecker ISC(*this, ForLoc);
|
||||
if (!ISC.checkAndSetInit(Init, /*EmitDiags=*/false)) {
|
||||
if (ValueDecl *D = ISC.getLoopDecl()) {
|
||||
|
|
|
@ -53,6 +53,13 @@ tx ftemplate(int n) {
|
|||
}
|
||||
}
|
||||
|
||||
#pragma omp target teams distribute parallel for collapse(2)
|
||||
for(int i = 0; i < n; i++) {
|
||||
for(int j = 0; j < n; j++) {
|
||||
c[i][j] = i + j;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma omp target teams distribute parallel for map(a, v[:N])
|
||||
for(int i = 0; i < n; i++)
|
||||
a[i] = v[i];
|
||||
|
@ -212,7 +219,11 @@ int bar(int n){
|
|||
// CHECK: call void @__kmpc_for_static_fini(
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define weak void @__omp_offloading_{{.*}}_l56(i[[SZ:64|32]] %{{[^,]+}}, [1000 x i32]* dereferenceable{{.*}}, i32* %{{[^)]+}})
|
||||
// CHECK: define weak void @__omp_offloading_{{.*}}_l56(i[[SZ:64|32]] %{{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{.*}})
|
||||
// CHECK: call void [[OUTLINED:@__omp_outlined.*]](i32* %{{.+}}, i32* %{{.+}}, i[[SZ]] %{{.*}}, i[[SZ]] %{{.*}}, i[[SZ]] %{{.*}}, [10 x [10 x i32]]* %{{.*}})
|
||||
// CHECK: define internal void [[OUTLINED]](i32* noalias %{{.*}}, i32* noalias %{{.*}} i[[SZ]] %{{.+}}, i[[SZ]] %{{.+}}, i[[SZ]] %{{.+}}, [10 x [10 x i32]]* dereferenceable{{.*}})
|
||||
|
||||
// CHECK: define weak void @__omp_offloading_{{.*}}_l63(i[[SZ:64|32]] %{{[^,]+}}, [1000 x i32]* dereferenceable{{.*}}, i32* %{{[^)]+}})
|
||||
// CHECK: call void [[OUTLINED:@__omp_outlined.*]](i32* %{{.+}}, i32* %{{.+}}, i[[SZ]] %{{.*}}, i[[SZ]] %{{.*}}, i[[SZ]] %{{.*}}, [1000 x i32]* %{{.*}}, i32* %{{.*}})
|
||||
// CHECK: define internal void [[OUTLINED]](i32* noalias %{{.*}}, i32* noalias %{{.*}} i[[SZ]] %{{.+}}, i[[SZ]] %{{.+}}, i[[SZ]] %{{.+}}, [1000 x i32]* dereferenceable{{.*}}, i32* %{{.*}})
|
||||
|
||||
|
|
Loading…
Reference in New Issue