@@ -372,29 +372,6 @@ getAttrsFromVariable(fir::FortranVariableOpInterface var) {
372
372
return attrs;
373
373
}
374
374
375
- template <typename OMPTypeOp, typename DeclTypeOp>
376
- static Value getPrivateArg (omp::BlockArgOpenMPOpInterface &argIface,
377
- OMPTypeOp &op, DeclTypeOp &declOp) {
378
- Value privateArg;
379
- if (!op.getPrivateSyms ().has_value ())
380
- return privateArg;
381
- for (auto [opSym, blockArg] :
382
- llvm::zip_equal (*op.getPrivateSyms (), argIface.getPrivateBlockArgs ())) {
383
- if (blockArg == declOp.getMemref ()) {
384
- omp::PrivateClauseOp privateOp =
385
- SymbolTable::lookupNearestSymbolFrom<omp::PrivateClauseOp>(
386
- op, cast<SymbolRefAttr>(opSym));
387
- privateOp.walk ([&](omp::YieldOp yieldOp) {
388
- llvm::TypeSwitch<Operation *>(yieldOp.getResults ()[0 ].getDefiningOp ())
389
- .template Case <fir::DeclareOp, hlfir::DeclareOp>(
390
- [&](auto declOp) { privateArg = declOp.getMemref (); });
391
- });
392
- return privateArg;
393
- }
394
- }
395
- return privateArg;
396
- }
397
-
398
375
AliasAnalysis::Source AliasAnalysis::getSource (mlir::Value v,
399
376
bool getInstantiationPoint) {
400
377
auto *defOp = v.getDefiningOp ();
@@ -493,37 +470,20 @@ AliasAnalysis::Source AliasAnalysis::getSource(mlir::Value v,
493
470
breakFromLoop = true ;
494
471
})
495
472
.Case <hlfir::DeclareOp, fir::DeclareOp>([&](auto op) {
496
- if (omp::BlockArgOpenMPOpInterface argIface =
497
- dyn_cast<omp::BlockArgOpenMPOpInterface>(op->getParentOp ())) {
498
- Value ompValArg;
499
- llvm::TypeSwitch<Operation *>(op->getParentOp ())
500
- .template Case <omp::TargetOp>([&](auto targetOp) {
501
- // If declare operation is inside omp target region,
502
- // continue alias analysis outside the target region
503
- for (auto [opArg, blockArg] : llvm::zip_equal (
504
- targetOp.getMapVars (), argIface.getMapBlockArgs ())) {
505
- if (blockArg == op.getMemref ()) {
506
- omp::MapInfoOp mapInfo =
507
- llvm::cast<omp::MapInfoOp>(opArg.getDefiningOp ());
508
- ompValArg = mapInfo.getVarPtr ();
509
- break ;
510
- }
511
- }
512
- // If given operation does not reflect mapping item,
513
- // check private clause
514
- if (!ompValArg)
515
- ompValArg = getPrivateArg (argIface, targetOp, op);
516
- })
517
- .template Case <omp::DistributeOp, omp::ParallelOp,
518
- omp::SectionsOp, omp::SimdOp, omp::SingleOp,
519
- omp::TaskloopOp, omp::TaskOp, omp::WsloopOp>(
520
- [&](auto privateOp) {
521
- ompValArg = getPrivateArg (argIface, privateOp, op);
522
- });
523
- if (ompValArg) {
524
- v = ompValArg;
525
- defOp = ompValArg.getDefiningOp ();
526
- return ;
473
+ // If declare operation is inside omp target region,
474
+ // continue alias analysis outside the target region
475
+ if (auto targetOp =
476
+ llvm::dyn_cast<omp::TargetOp>(op->getParentOp ())) {
477
+ auto argIface = cast<omp::BlockArgOpenMPOpInterface>(*targetOp);
478
+ for (auto [opArg, blockArg] : llvm::zip_equal (
479
+ targetOp.getMapVars (), argIface.getMapBlockArgs ())) {
480
+ if (blockArg == op.getMemref ()) {
481
+ omp::MapInfoOp mapInfo =
482
+ llvm::cast<omp::MapInfoOp>(opArg.getDefiningOp ());
483
+ v = mapInfo.getVarPtr ();
484
+ defOp = v.getDefiningOp ();
485
+ return ;
486
+ }
527
487
}
528
488
}
529
489
auto varIf = llvm::cast<fir::FortranVariableOpInterface>(defOp);
0 commit comments