|
MLIR 22.0.0git
|
#include "mlir/Dialect/LLVMIR/BasicPtxBuilderInterface.h"#include "mlir/IR/BuiltinTypes.h"#include "mlir/IR/Diagnostics.h"#include "mlir/IR/Location.h"#include "mlir/IR/MLIRContext.h"#include "mlir/Support/LLVM.h"#include "llvm/ADT/StringExtras.h"#include "llvm/ADT/TypeSwitch.h"#include "llvm/Support/DebugLog.h"#include "llvm/Support/FormatVariadic.h"#include "llvm/Support/LogicalResult.h"#include "llvm/Support/Regex.h"#include "mlir/Dialect/LLVMIR/BasicPtxBuilderInterface.cpp.inc"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "ptx-builder" |
Functions | |
| static FailureOr< char > | getRegisterType (Type type, Location loc) |
| static FailureOr< char > | getRegisterType (Value v, Location loc) |
| static SmallVector< Value > | extractStructElements (PatternRewriter &rewriter, Location loc, Value structVal) |
| Extract every element of a struct value. | |
| static bool | needsPackUnpack (BasicPtxBuilderInterface interfaceOp, bool needsManualRegisterMapping, SmallVectorImpl< PTXRegisterMod > ®isterModifiers) |
| Check if the operation needs to pack and unpack results. | |
| static SmallVector< Type > | packResultTypes (BasicPtxBuilderInterface interfaceOp, bool needsManualRegisterMapping, SmallVectorImpl< PTXRegisterMod > ®isterModifiers, SmallVectorImpl< Value > &ptxOperands) |
| Pack the result types of the interface operation. | |
| static std::string | canonicalizeRegisterConstraints (llvm::StringRef csv) |
| Canonicalize the register constraints: | |
| static llvm::Regex | getPredicateMappingRegex () |
| Returns a regex that matches {$rwN}, {$wN}, {$rN}. | |
| static std::string | rewriteAsmPlaceholders (llvm::StringRef ptxCode) |
| Rewrites {$rwN}, {$wN}, and {$rN} placeholders in ptxCode into compact $K indices: | |
Variables | |
| static constexpr int64_t | kSharedMemorySpace = 3 |
| constexpr llvm::StringLiteral | kReadWritePrefix {"rw"} |
| constexpr llvm::StringLiteral | kWriteOnlyPrefix {"w"} |
| constexpr llvm::StringLiteral | kReadOnlyPrefix {"r"} |
| #define DEBUG_TYPE "ptx-builder" |
Definition at line 28 of file BasicPtxBuilderInterface.cpp.
|
static |
Canonicalize the register constraints:
Definition at line 258 of file BasicPtxBuilderInterface.cpp.
References result.
Referenced by mlir::NVVM::PtxBuilder::build().
|
static |
Extract every element of a struct value.
Definition at line 126 of file BasicPtxBuilderInterface.cpp.
References mlir::Value::getType().
Referenced by mlir::NVVM::PtxBuilder::buildAndReplaceOp().
|
static |
Returns a regex that matches {$rwN}, {$wN}, {$rN}.
Definition at line 297 of file BasicPtxBuilderInterface.cpp.
References kReadOnlyPrefix, kReadWritePrefix, and kWriteOnlyPrefix.
Referenced by rewriteAsmPlaceholders().
Definition at line 41 of file BasicPtxBuilderInterface.cpp.
References mlir::emitError(), mlir::Type::getContext(), mlir::Type::isBF16(), mlir::Type::isF16(), mlir::Type::isF32(), mlir::Type::isF64(), mlir::Type::isFloat(), mlir::Type::isInteger(), and kSharedMemorySpace.
Referenced by getRegisterType(), and mlir::NVVM::PtxBuilder::insertValue().
Definition at line 119 of file BasicPtxBuilderInterface.cpp.
References mlir::Value::getDefiningOp(), getRegisterType(), and mlir::Value::getType().
|
static |
Check if the operation needs to pack and unpack results.
Definition at line 202 of file BasicPtxBuilderInterface.cpp.
References mlir::NVVM::ReadWrite.
Referenced by mlir::NVVM::PtxBuilder::buildAndReplaceOp(), and packResultTypes().
|
static |
Pack the result types of the interface operation.
If the operation has multiple results, it packs them into a struct type. Otherwise, it returns the original result types.
Definition at line 219 of file BasicPtxBuilderInterface.cpp.
References needsPackUnpack(), and mlir::NVVM::ReadWrite.
Referenced by mlir::NVVM::PtxBuilder::build().
|
static |
Rewrites {$rwN}, {$wN}, and {$rN} placeholders in ptxCode into compact $K indices:
Example Input: "{
reg .pred p;
setp.ge.s32 p, {$r0}, {$r1};" selp.s32 {$rw0}, {$r0}, {$r1}, p; selp.s32 {$rw1}, {$r0}, {$r1}, p; selp.s32 {$w0}, {$r0}, {$r1}, p; selp.s32 {$w1}, {$r0}, {$r1}, p; }
"
Example Output:
"{ reg .pred p; setp.ge.s32 p, $4, $5;"
selp.s32 $0, $4, $5, p;
selp.s32 $1, $4, $5, p;
selp.s32 $2, $4, $5, p;
selp.s32 $3, $4, $5, p;
}\n"
Definition at line 363 of file BasicPtxBuilderInterface.cpp.
References mlir::NVVM::countPlaceholderNumbers(), getPredicateMappingRegex(), kReadWritePrefix, and kWriteOnlyPrefix.
Referenced by mlir::NVVM::PtxBuilder::build().
|
constexpr |
Definition at line 294 of file BasicPtxBuilderInterface.cpp.
Referenced by getPredicateMappingRegex().
|
constexpr |
Definition at line 292 of file BasicPtxBuilderInterface.cpp.
Referenced by getPredicateMappingRegex(), and rewriteAsmPlaceholders().
|
staticconstexpr |
Definition at line 39 of file BasicPtxBuilderInterface.cpp.
Referenced by getRegisterType().
|
constexpr |
Definition at line 293 of file BasicPtxBuilderInterface.cpp.
Referenced by getPredicateMappingRegex(), and rewriteAsmPlaceholders().