================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits