[flang] [llvm] [mlir] [Flang] [OpenMP] [MLIR] Add lowering support for OMP ALLOCATE directives and its clauses (PR #187167)
Tom Eccles via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 18 04:03:55 PDT 2026
================
@@ -7430,6 +7446,95 @@ convertTargetAllocMemOp(Operation &opInst, llvm::IRBuilderBase &builder,
return success();
}
+static LogicalResult
+convertAllocateDirOp(Operation &opInst, llvm::IRBuilderBase &builder,
+ LLVM::ModuleTranslation &moduleTranslation) {
+ auto allocateDirOp = cast<omp::AllocateDirOp>(opInst);
+ llvm::OpenMPIRBuilder *ompBuilder = moduleTranslation.getOpenMPBuilder();
+
+ llvm::OpenMPIRBuilder::LocationDescription ompLoc(builder);
+ llvm::Module *llvmModule = moduleTranslation.getLLVMModule();
+ llvm::DataLayout dataLayout = llvmModule->getDataLayout();
+ SmallVector<Value> vars = allocateDirOp.getVarList();
+ std::optional<int64_t> alignAttr = allocateDirOp.getAlign();
+
+ llvm::Value *allocator;
+ if (auto allocatorVar = allocateDirOp.getAllocator()) {
+ allocator = moduleTranslation.lookupValue(allocatorVar);
+ if (allocator->getType()->isIntegerTy())
+ allocator = builder.CreateIntToPtr(allocator, builder.getPtrTy());
+ else if (allocator->getType()->isPointerTy())
+ allocator = builder.CreatePointerBitCastOrAddrSpaceCast(
+ allocator, builder.getPtrTy());
+ } else {
+ allocator = llvm::ConstantPointerNull::get(builder.getPtrTy());
+ }
+
+ SmallVector<std::pair<llvm::CallInst *, llvm::Value *>> allocatedVars;
+
+ for (Value var : vars) {
+ llvm::Type *llvmVarTy = moduleTranslation.convertType(var.getType());
+
+ // Opaque pointers lose element type. Trace to GlobalOp for type
+ // Falls back to llvmVarTy when not from a global.
----------------
tblah wrote:
I wonder if it would be more robust to attach the type as an attribute to the MLIR operation?
https://github.com/llvm/llvm-project/pull/187167
More information about the llvm-commits
mailing list