@@ -2109,10 +2109,9 @@ TargetRegionFlags TargetOp::getKernelExecFlags(Operation *capturedOp) {
2109
2109
if (isa<LoopOp>(innermostWrapper))
2110
2110
return TargetRegionFlags::spmd | TargetRegionFlags::trip_count;
2111
2111
2112
- TargetRegionFlags result =
2113
- TargetRegionFlags::generic | TargetRegionFlags::trip_count;
2114
-
2115
- // Find single nested parallel-do and add spmd flag (generic-spmd case).
2112
+ // Find single immediately nested captured omp.parallel and add spmd flag
2113
+ // (generic-spmd case).
2114
+ //
2116
2115
// TODO: This shouldn't have to be done here, as it is too easy to break.
2117
2116
// The openmp-opt pass should be updated to be able to promote kernels like
2118
2117
// this from "Generic" to "Generic-SPMD". However, the use of the
@@ -2125,24 +2124,17 @@ TargetRegionFlags TargetOp::getKernelExecFlags(Operation *capturedOp) {
2125
2124
sibling->hasTrait <OpTrait::IsTerminator>());
2126
2125
});
2127
2126
2128
- if (!isa_and_present<LoopNestOp>(nestedCapture))
2129
- return result;
2130
-
2131
- int numNestedWrappers;
2132
- LoopWrapperInterface *nestedWrapper =
2133
- getInnermostWrapper (cast<LoopNestOp>(nestedCapture), numNestedWrappers);
2134
-
2135
- if (numNestedWrappers != 1 || !isa<WsloopOp>(nestedWrapper))
2136
- return result;
2127
+ TargetRegionFlags result =
2128
+ TargetRegionFlags::generic | TargetRegionFlags::trip_count;
2137
2129
2138
- Operation *parallelOp = (*nestedWrapper)->getParentOp ();
2139
- if (!isa_and_present<ParallelOp>(parallelOp))
2130
+ if (!nestedCapture)
2140
2131
return result;
2141
2132
2142
- if (parallelOp ->getParentOp () != capturedOp)
2143
- return result ;
2133
+ while (nestedCapture ->getParentOp () != capturedOp)
2134
+ nestedCapture = nestedCapture-> getParentOp () ;
2144
2135
2145
- return result | TargetRegionFlags::spmd;
2136
+ return isa<ParallelOp>(nestedCapture) ? result | TargetRegionFlags::spmd
2137
+ : result;
2146
2138
}
2147
2139
// Detect target-parallel-wsloop[-simd].
2148
2140
else if (isa<WsloopOp>(innermostWrapper)) {
0 commit comments