@@ -3094,7 +3094,6 @@ static mlir::omp::DistributeOp genCompositeDistributeSimd(
3094
3094
/* useDelayedPrivatization=*/ false , symTable);
3095
3095
dsp.processStep1 ();
3096
3096
dsp.processStep2 ();
3097
-
3098
3097
// Pass the innermost leaf construct's clauses because that's where COLLAPSE
3099
3098
// is placed by construct decomposition.
3100
3099
mlir::omp::LoopNestOperands loopNestClauseOps;
@@ -3144,12 +3143,18 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
3144
3143
genSimdClauses (converter, semaCtx, simdItem->clauses , loc, simdClauseOps,
3145
3144
simdReductionSyms);
3146
3145
3147
- // TODO: Support delayed privatization.
3148
- DataSharingProcessor dsp (converter, semaCtx, simdItem->clauses , eval,
3149
- /* shouldCollectPreDeterminedSymbols=*/ true ,
3150
- /* useDelayedPrivatization=*/ false , symTable);
3151
- dsp.processStep1 ();
3152
- dsp.processStep2 ();
3146
+ DataSharingProcessor wsloopItemDSP (
3147
+ converter, semaCtx, doItem->clauses , eval,
3148
+ /* shouldCollectPreDeterminedSymbols=*/ false ,
3149
+ /* useDelayedPrivatization=*/ true , symTable);
3150
+ wsloopItemDSP.processStep1 ();
3151
+ wsloopItemDSP.processStep2 (&wsloopClauseOps);
3152
+
3153
+ DataSharingProcessor simdItemDSP (converter, semaCtx, simdItem->clauses , eval,
3154
+ /* shouldCollectPreDeterminedSymbols=*/ true ,
3155
+ /* useDelayedPrivatization=*/ true , symTable);
3156
+ simdItemDSP.processStep1 ();
3157
+ simdItemDSP.processStep2 (&simdClauseOps);
3153
3158
3154
3159
// Pass the innermost leaf construct's clauses because that's where COLLAPSE
3155
3160
// is placed by construct decomposition.
@@ -3160,15 +3165,17 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
3160
3165
3161
3166
// Operation creation.
3162
3167
EntryBlockArgs wsloopArgs;
3163
- // TODO: Add private syms and vars.
3168
+ wsloopArgs.priv .syms = wsloopItemDSP.getDelayedPrivSymbols ();
3169
+ wsloopArgs.priv .vars = wsloopClauseOps.privateVars ;
3164
3170
wsloopArgs.reduction .syms = wsloopReductionSyms;
3165
3171
wsloopArgs.reduction .vars = wsloopClauseOps.reductionVars ;
3166
3172
auto wsloopOp = genWrapperOp<mlir::omp::WsloopOp>(
3167
3173
converter, loc, wsloopClauseOps, wsloopArgs);
3168
3174
wsloopOp.setComposite (/* val=*/ true );
3169
3175
3170
3176
EntryBlockArgs simdArgs;
3171
- // TODO: Add private syms and vars.
3177
+ simdArgs.priv .syms = simdItemDSP.getDelayedPrivSymbols ();
3178
+ simdArgs.priv .vars = simdClauseOps.privateVars ;
3172
3179
simdArgs.reduction .syms = simdReductionSyms;
3173
3180
simdArgs.reduction .vars = simdClauseOps.reductionVars ;
3174
3181
auto simdOp =
@@ -3178,7 +3185,7 @@ static mlir::omp::WsloopOp genCompositeDoSimd(
3178
3185
genLoopNestOp (converter, symTable, semaCtx, eval, loc, queue, simdItem,
3179
3186
loopNestClauseOps, iv,
3180
3187
{{wsloopOp, wsloopArgs}, {simdOp, simdArgs}},
3181
- llvm::omp::Directive::OMPD_do_simd, dsp );
3188
+ llvm::omp::Directive::OMPD_do_simd, simdItemDSP );
3182
3189
return wsloopOp;
3183
3190
}
3184
3191
0 commit comments