Skip to content

Commit 3041dd5

Browse files
Revert "[OpenMP][SIMD][FIX] Use conservative "omp simd ordered" lowering" (#126079)
Reverts #123867 to fix the test failures https://lab.llvm.org/buildbot/#/builders/144/builds/17521
1 parent 60d8e6f commit 3041dd5

File tree

3 files changed

+116
-302
lines changed

3 files changed

+116
-302
lines changed

clang/lib/CodeGen/CGStmtOpenMP.cpp

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2457,86 +2457,10 @@ static void emitSimdlenSafelenClause(CodeGenFunction &CGF,
24572457
}
24582458
}
24592459

2460-
// Check for the presence of an `OMPOrderedDirective`,
2461-
// i.e., `ordered` in `#pragma omp ordered simd`.
2462-
//
2463-
// Consider the following source code:
2464-
// ```
2465-
// __attribute__((noinline)) void omp_simd_loop(float X[ARRAY_SIZE][ARRAY_SIZE])
2466-
// {
2467-
// for (int r = 1; r < ARRAY_SIZE; ++r) {
2468-
// for (int c = 1; c < ARRAY_SIZE; ++c) {
2469-
// #pragma omp simd
2470-
// for (int k = 2; k < ARRAY_SIZE; ++k) {
2471-
// #pragma omp ordered simd
2472-
// X[r][k] = X[r][k - 2] + sinf((float)(r / c));
2473-
// }
2474-
// }
2475-
// }
2476-
// }
2477-
// ```
2478-
//
2479-
// Suppose we are in `CodeGenFunction::EmitOMPSimdInit(const OMPLoopDirective
2480-
// &D)`. By examining `D.dump()` we have the following AST containing
2481-
// `OMPOrderedDirective`:
2482-
//
2483-
// ```
2484-
// OMPSimdDirective 0x1c32950
2485-
// `-CapturedStmt 0x1c32028
2486-
// |-CapturedDecl 0x1c310e8
2487-
// | |-ForStmt 0x1c31e30
2488-
// | | |-DeclStmt 0x1c31298
2489-
// | | | `-VarDecl 0x1c31208 used k 'int' cinit
2490-
// | | | `-IntegerLiteral 0x1c31278 'int' 2
2491-
// | | |-<<<NULL>>>
2492-
// | | |-BinaryOperator 0x1c31308 'int' '<'
2493-
// | | | |-ImplicitCastExpr 0x1c312f0 'int' <LValueToRValue>
2494-
// | | | | `-DeclRefExpr 0x1c312b0 'int' lvalue Var 0x1c31208 'k' 'int'
2495-
// | | | `-IntegerLiteral 0x1c312d0 'int' 256
2496-
// | | |-UnaryOperator 0x1c31348 'int' prefix '++'
2497-
// | | | `-DeclRefExpr 0x1c31328 'int' lvalue Var 0x1c31208 'k' 'int'
2498-
// | | `-CompoundStmt 0x1c31e18
2499-
// | | `-OMPOrderedDirective 0x1c31dd8
2500-
// | | |-OMPSimdClause 0x1c31380
2501-
// | | `-CapturedStmt 0x1c31cd0
2502-
// ```
2503-
//
2504-
// Note the presence of `OMPOrderedDirective` above:
2505-
// It's (transitively) nested in a `CapturedStmt` representing the pragma
2506-
// annotated compound statement. Thus, we need to consider this nesting and
2507-
// include checking the `getCapturedStmt` in this case.
2508-
static bool hasOrderedDirective(const Stmt *S) {
2509-
if (isa<OMPOrderedDirective>(S))
2510-
return true;
2511-
2512-
if (const auto *CS = dyn_cast<CapturedStmt>(S))
2513-
return hasOrderedDirective(CS->getCapturedStmt());
2514-
2515-
for (const Stmt *Child : S->children()) {
2516-
if (Child && hasOrderedDirective(Child))
2517-
return true;
2518-
}
2519-
2520-
return false;
2521-
}
2522-
2523-
static void applyConservativeSimdOrderedDirective(const Stmt &AssociatedStmt,
2524-
LoopInfoStack &LoopStack) {
2525-
// Check for the presence of an `OMPOrderedDirective`
2526-
// i.e., `ordered` in `#pragma omp ordered simd`
2527-
bool HasOrderedDirective = hasOrderedDirective(&AssociatedStmt);
2528-
// If present then conservatively disable loop vectorization
2529-
// analogously to how `emitSimdlenSafelenClause` does.
2530-
if (HasOrderedDirective)
2531-
LoopStack.setParallel(/*Enable=*/false);
2532-
}
2533-
25342460
void CodeGenFunction::EmitOMPSimdInit(const OMPLoopDirective &D) {
25352461
// Walk clauses and process safelen/lastprivate.
25362462
LoopStack.setParallel(/*Enable=*/true);
25372463
LoopStack.setVectorizeEnable();
2538-
const Stmt *AssociatedStmt = D.getAssociatedStmt();
2539-
applyConservativeSimdOrderedDirective(*AssociatedStmt, LoopStack);
25402464
emitSimdlenSafelenClause(*this, D);
25412465
if (const auto *C = D.getSingleClause<OMPOrderClause>())
25422466
if (C->getKind() == OMPC_ORDER_concurrent)

0 commit comments

Comments
 (0)