46 : module(module), dl(dl), aliasAnalysis(module) {
51 assert(pendingParamSlots.empty() &&
52 "finalizeParameterSlots must run before the rewrite context dies");
57 const mlir::abi::FunctionClassification &fc,
58 mlir::OpBuilder &builder)
override;
62 const mlir::abi::FunctionClassification &fc,
63 mlir::OpBuilder &builder)
override;
67 mlir::LogicalResult
rewriteVAArg(mlir::Operation *vaArgOp,
68 const mlir::abi::ArgClassification &ac,
69 mlir::OpBuilder &builder)
override;
77 mlir::OpBuilder &builder);
102 const mlir::abi::FunctionClassification &fc);
115 mlir::ModuleOp module;
116 const mlir::DataLayout &dl;
121 mlir::AliasAnalysis aliasAnalysis;
void rewriteFunctionAddress(cir::GetGlobalOp addrOp, cir::FuncOp funcOp, mlir::OpBuilder &builder)
Retype addrOp, which holds the address of funcOp, to the signature funcOp was rewritten to,...
mlir::LogicalResult rewriteFunctionDefinition(mlir::FunctionOpInterface funcOp, const mlir::abi::FunctionClassification &fc, mlir::OpBuilder &builder) override
void finalizeParameterSlots()
Replace each non-byval indirect parameter's spill slot with the incoming pointer, so the body operate...
mlir::StringRef getDialectNamespace() const override
mlir::LogicalResult prepareNonByvalParameters(cir::FuncOp funcOp, const mlir::abi::FunctionClassification &fc)
Bring each non-byval indirect parameter of funcOp into the shape the rest of the rewrite assumes: the...
CIRABIRewriteContext(mlir::ModuleOp module, const mlir::DataLayout &dl)
mlir::LogicalResult rewriteVAArg(mlir::Operation *vaArgOp, const mlir::abi::ArgClassification &ac, mlir::OpBuilder &builder) override
Expand a cir.va_arg into the x86-64 SysV register-save-area / overflow-area sequence.
mlir::LogicalResult rewriteCallSite(mlir::Operation *callOp, const mlir::abi::FunctionClassification &fc, mlir::OpBuilder &builder) override
void registerCIRAliasAnalyses(mlir::AliasAnalysis &aa, mlir::Operation *op)
Register all CIR alias analysis implementations with aa, which answers queries about values within op...