|
Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
|
#include <MLIRCodeBuilder.h>


Classes | |
| struct | Impl |
Public Member Functions | |
| MLIRCodeBuilder (TargetModelType TM=TargetModelType::HOST) | |
| ~MLIRCodeBuilder () override | |
| MLIRCodeBuilder (const MLIRCodeBuilder &)=delete | |
| MLIRCodeBuilder & | operator= (const MLIRCodeBuilder &)=delete |
| TargetModelType | getTargetModel () const override |
| CodeBuilderKind | getBackendKind () const override |
| void | print () |
| Dump the MLIR module to llvm::outs(). | |
| void | printLLVMIR (llvm::raw_ostream &OS) |
| std::unique_ptr< llvm::LLVMContext > | takeContext () |
| std::unique_ptr< llvm::Module > | takeModule () |
| void | setDeviceArch (const std::string &Arch) |
| IRFunction * | addFunction (const std::string &Name, IRType RetTy, const std::vector< IRType > &ArgTys, bool IsKernel=false) override |
| void | setFunctionName (IRFunction *F, const std::string &Name) override |
Rename the function identified by F. | |
| IRValue * | getArg (IRFunction *F, size_t Idx) override |
Return the Nth argument of F as an IRValue. | |
| void | beginFunction (IRFunction *F, const char *File, int Line) override |
Set F as the active function and begin IR emission. | |
| void | endFunction () override |
| void | setInsertPointAtEntry () override |
| void | clearInsertPoint () override |
| void | createRetVoid () override |
| void | createRet (IRValue *V) override |
| IRValue * | createArith (ArithOp Op, IRValue *LHS, IRValue *RHS, IRType Ty) override |
| IRValue * | createCast (IRValue *V, IRType FromTy, IRType ToTy) override |
| IRValue * | getConstantInt (IRType Ty, uint64_t Val) override |
| IRValue * | getConstantFP (IRType Ty, double Val) override |
| IRValue * | loadScalar (IRValue *Slot, IRType ValueTy) override |
Load the value stored directly in Slot (scalar alloca). | |
| void | storeScalar (IRValue *Slot, IRValue *Val) override |
Store Val directly into Slot (scalar alloca). | |
| VarAlloc | allocScalar (const std::string &Name, IRType ValueTy) override |
| void | beginIf (IRValue *Cond, const char *File, int Line) override |
| void | endIf () override |
| void | beginFor (IRValue *IterSlot, IRType IterTy, IRValue *InitVal, IRValue *UpperBoundVal, IRValue *IncVal, bool IsSigned, const char *File, int Line, LoopHints Hints={}) override |
| void | endFor () override |
| void | beginWhile (std::function< IRValue *()> CondFn, const char *File, int Line) override |
| void | endWhile () override |
| IRValue * | createAtomicAdd (IRValue *Addr, IRValue *Val) override |
| IRValue * | createAtomicSub (IRValue *Addr, IRValue *Val) override |
| IRValue * | createAtomicMax (IRValue *Addr, IRValue *Val) override |
| IRValue * | createAtomicMin (IRValue *Addr, IRValue *Val) override |
| IRValue * | createCmp (CmpOp Op, IRValue *LHS, IRValue *RHS, IRType Ty) override |
| IRValue * | createAnd (IRValue *LHS, IRValue *RHS) override |
| IRValue * | createOr (IRValue *LHS, IRValue *RHS) override |
| IRValue * | createXor (IRValue *LHS, IRValue *RHS) override |
| IRValue * | createNot (IRValue *Val) override |
| IRValue * | createLoad (IRType Ty, IRValue *Ptr, const std::string &Name="") override |
| void | createStore (IRValue *Val, IRValue *Ptr) override |
| IRValue * | createBitCast (IRValue *V, IRType DestTy) override |
| IRValue * | createZExt (IRValue *V, IRType DestTy) override |
| VarAlloc | getElementPtr (IRValue *Base, IRType BaseTy, IRValue *Index, IRType ElemTy) override |
| VarAlloc | getElementPtr (IRValue *Base, IRType BaseTy, size_t Index, IRType ElemTy) override |
| IRValue * | createCall (const std::string &FName, IRType RetTy, const std::vector< IRType > &ArgTys, const std::vector< IRValue * > &Args) override |
| IRValue * | createCall (const std::string &FName, IRType RetTy) override |
| IRValue * | emitIntrinsic (const std::string &Name, IRType RetTy, const std::vector< IRValue * > &Args) override |
| Lower a frontend intrinsic name to backend IR. | |
| IRValue * | emitBuiltin (const std::string &Name, IRType RetTy, const std::vector< IRValue * > &Args) override |
| IRValue * | loadAddress (IRValue *Slot, IRType AllocTy) override |
Load the pointer stored in Slot (pointer alloca). | |
| void | storeAddress (IRValue *Slot, IRValue *Addr) override |
Store Addr into Slot (pointer alloca). | |
| IRValue * | loadFromPointee (IRValue *Slot, IRType AllocTy, IRType ValueTy) override |
Dereference the pointer stored in Slot, then load the pointee. | |
| void | storeToPointee (IRValue *Slot, IRType AllocTy, IRValue *Val) override |
Dereference the pointer stored in Slot, then store Val to it. | |
| VarAlloc | allocPointer (const std::string &Name, IRType ElemTy, unsigned AddrSpace=0) override |
| VarAlloc | allocArray (const std::string &Name, AddressSpace AS, IRType ElemTy, size_t NElem) override |
Public Member Functions inherited from proteus::CodeBuilder | |
| virtual | ~CodeBuilder ()=default |
MLIRCodeBuilder implements the CodeBuilder interface using MLIR dialects. Host mode emits func/arith/memref, while CUDA/HIP mode emits gpu.module with gpu.func kernels.
|
explicit |
|
overridedefault |
|
delete |
|
overridevirtual |
Create a function with the given name and signature. Kernel intent is explicit so backends can select the correct IR container up front. Returns an opaque IRFunction handle owned by this builder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
IterSlot : alloca holding the loop iterator. IterTy : value type of the iterator (must be an integer type). InitVal : initial value to store into IterSlot. UpperBoundVal : exclusive upper bound for the loop condition. IncVal : increment added to the iterator on each iteration. IsSigned : true → ICmpSLT, false → ICmpULT.
Implements proteus::CodeBuilder.
|
overridevirtual |
Set F as the active function and begin IR emission.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
CondFn : callable that emits the condition IR at the current insert point and returns the resulting i1 Value (true → continue loop).
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Lower a frontend GPU builtin name to backend IR. Returns nullptr for void builtins (e.g. syncThreads).
Implements proteus::CodeBuilder.
|
overridevirtual |
Lower a frontend intrinsic name to backend IR.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Return the Nth argument of F as an IRValue.
Implements proteus::CodeBuilder.
|
inlineoverridevirtual |
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
|
inlineoverridevirtual |
Implements proteus::CodeBuilder.
Load the pointer stored in Slot (pointer alloca).
Implements proteus::CodeBuilder.
|
overridevirtual |
Dereference the pointer stored in Slot, then load the pointee.
Implements proteus::CodeBuilder.
Load the value stored directly in Slot (scalar alloca).
Implements proteus::CodeBuilder.
|
delete |
| void proteus::MLIRCodeBuilder::print | ( | ) |
Dump the MLIR module to llvm::outs().
| void proteus::MLIRCodeBuilder::printLLVMIR | ( | llvm::raw_ostream & | OS | ) |
Print the lowered LLVM IR. Useful for debugging the MLIR->LLVM lowering.
| void proteus::MLIRCodeBuilder::setDeviceArch | ( | const std::string & | Arch | ) |
Device-only lowering configuration. For HIP this is the target chipset (e.g. gfx90a) used by ROCDL lowering. For CUDA it is currently unused.
|
overridevirtual |
Rename the function identified by F.
Implements proteus::CodeBuilder.
|
overridevirtual |
Implements proteus::CodeBuilder.
Store Addr into Slot (pointer alloca).
Implements proteus::CodeBuilder.
Store Val directly into Slot (scalar alloca).
Implements proteus::CodeBuilder.
|
overridevirtual |
Dereference the pointer stored in Slot, then store Val to it.
Implements proteus::CodeBuilder.
| std::unique_ptr< llvm::LLVMContext > proteus::MLIRCodeBuilder::takeContext | ( | ) |
Transfers ownership of the lowered LLVM context/module. These trigger lowering if it has not yet been performed. Calling order is flexible: takeContext() and takeModule() are safe in either order.
| std::unique_ptr< llvm::Module > proteus::MLIRCodeBuilder::takeModule | ( | ) |