================
@@ -55,15 +55,19 @@ class MapsForPrivatizedSymbolsPass
std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO);
Operation *definingOp = var.getDefiningOp();
- auto declOp = llvm::dyn_cast_or_null<hlfir::DeclareOp>(definingOp);
- assert(declOp &&
- "Expected defining Op of privatized var to be hlfir.declare");
+ assert(definingOp &&
+ "Privatizing a block argument without any hlfir.declare");
----------------
tblah wrote:
MLIR values can come from two places:
1. the result of an operation
2. a block argument
We can't assume that getting the defining operation produces a non-null result
because the value might be a block argument.
For example,
```
func.func @func(%arg0 : !type0, %arg1 : !type1) {
%0 = hlfir.declare %arg0
omp.private(%0, %arg1)
}
```
Here we can get a defining operation for `%0` because it is the `hlfir.declare`
for that function argument (which is the normal way flang would lower a
function argument). `%arg1` has no defining operation because it is a block
argument.
https://github.com/llvm/llvm-project/pull/124019
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits