[llvm-branch-commits] [mlir] [mlir][ptr] Add translations to LLVMIR for ptr ops. (PR #156355)
Christian Ulmann via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Sep 1 21:52:49 PDT 2025
================
@@ -16,11 +16,197 @@
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/Operation.h"
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
+#include "llvm/ADT/TypeSwitch.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/Value.h"
using namespace mlir;
using namespace mlir::ptr;
namespace {
+
+/// Converts ptr::AtomicOrdering to llvm::AtomicOrdering
+static llvm::AtomicOrdering
+convertAtomicOrdering(ptr::AtomicOrdering ordering) {
+ switch (ordering) {
+ case ptr::AtomicOrdering::not_atomic:
+ return llvm::AtomicOrdering::NotAtomic;
+ case ptr::AtomicOrdering::unordered:
+ return llvm::AtomicOrdering::Unordered;
+ case ptr::AtomicOrdering::monotonic:
+ return llvm::AtomicOrdering::Monotonic;
+ case ptr::AtomicOrdering::acquire:
+ return llvm::AtomicOrdering::Acquire;
+ case ptr::AtomicOrdering::release:
+ return llvm::AtomicOrdering::Release;
+ case ptr::AtomicOrdering::acq_rel:
+ return llvm::AtomicOrdering::AcquireRelease;
+ case ptr::AtomicOrdering::seq_cst:
+ return llvm::AtomicOrdering::SequentiallyConsistent;
+ }
+ llvm_unreachable("Unknown atomic ordering");
+}
+
+/// Convert ptr.ptr_add operation
+static LogicalResult
+convertPtrAddOp(PtrAddOp ptrAddOp, llvm::IRBuilderBase &builder,
+ LLVM::ModuleTranslation &moduleTranslation) {
+ llvm::Value *basePtr = moduleTranslation.lookupValue(ptrAddOp.getBase());
+ llvm::Value *offset = moduleTranslation.lookupValue(ptrAddOp.getOffset());
+
+ if (!basePtr || !offset)
+ return ptrAddOp.emitError("Failed to lookup operands");
+
+ // Create GEP instruction for pointer arithmetic
+ auto *gep = cast<llvm::GetElementPtrInst>(
+ builder.CreateGEP(builder.getInt8Ty(), basePtr, {offset}));
----------------
Dinistro wrote:
This can fail, due to `builder.CreateGEP` returning a constant instead of a `GetElementPtrInst`. You probably need a case-distinction on this cast being successful or not.
https://github.com/llvm/llvm-project/pull/156355
More information about the llvm-branch-commits
mailing list