forked from OSchip/llvm-project
[fir] Update fir.call op
Move builders to .cpp file and update accordingly. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D110698 Co-authored-by: Jean Perier <jperier@nvidia.com> Co-authored-by: Valentin Clement <clementval@gmail.com>
This commit is contained in:
parent
67a3d1e275
commit
576301d922
|
@ -2649,36 +2649,27 @@ def fir_CallOp : fir_Op<"call", [CallOpInterface]> {
|
|||
|
||||
let builders = [
|
||||
OpBuilder<(ins "mlir::FuncOp":$callee,
|
||||
CArg<"mlir::ValueRange", "{}">:$operands),
|
||||
[{
|
||||
$_state.addOperands(operands);
|
||||
$_state.addAttribute(calleeAttrName($_state.name),
|
||||
SymbolRefAttr::get(callee));
|
||||
$_state.addTypes(callee.getType().getResults());
|
||||
}]>,
|
||||
CArg<"mlir::ValueRange", "{}">:$operands)>,
|
||||
OpBuilder<(ins "mlir::SymbolRefAttr":$callee,
|
||||
"llvm::ArrayRef<mlir::Type>":$results,
|
||||
CArg<"mlir::ValueRange", "{}">:$operands),
|
||||
[{
|
||||
$_state.addOperands(operands);
|
||||
$_state.addAttribute(calleeAttrName($_state.name), callee);
|
||||
$_state.addTypes(results);
|
||||
}]>,
|
||||
CArg<"mlir::ValueRange", "{}">:$operands)>,
|
||||
OpBuilder<(ins "llvm::StringRef":$callee,
|
||||
"llvm::ArrayRef<mlir::Type>":$results,
|
||||
CArg<"mlir::ValueRange", "{}">:$operands),
|
||||
[{
|
||||
build($_builder, $_state,
|
||||
SymbolRefAttr::get($_builder.getContext(), callee), results,
|
||||
operands);
|
||||
SymbolRefAttr::get($_builder.getContext(), callee), results,
|
||||
operands);
|
||||
}]>];
|
||||
|
||||
let extraClassDeclaration = [{
|
||||
static constexpr StringRef getCalleeAttrName() { return "callee"; }
|
||||
|
||||
mlir::FunctionType getFunctionType();
|
||||
|
||||
/// Get the argument operands to the called function.
|
||||
operand_range getArgOperands() {
|
||||
if (calleeAttr())
|
||||
if ((*this)->getAttrOfType<SymbolRefAttr>(getCalleeAttrName()))
|
||||
return {arg_operand_begin(), arg_operand_end()};
|
||||
return {arg_operand_begin() + 1, arg_operand_end()};
|
||||
}
|
||||
|
@ -2688,7 +2679,8 @@ def fir_CallOp : fir_Op<"call", [CallOpInterface]> {
|
|||
|
||||
/// Return the callee of this operation.
|
||||
CallInterfaceCallable getCallableForCallee() {
|
||||
if (auto calling = calleeAttr())
|
||||
if (auto calling =
|
||||
(*this)->getAttrOfType<SymbolRefAttr>(getCalleeAttrName()))
|
||||
return calling;
|
||||
return getOperand(0);
|
||||
}
|
||||
|
|
|
@ -298,6 +298,22 @@ static mlir::ParseResult parseCallOp(mlir::OpAsmParser &parser,
|
|||
return mlir::success();
|
||||
}
|
||||
|
||||
void fir::CallOp::build(mlir::OpBuilder &builder, mlir::OperationState &result,
|
||||
mlir::FuncOp callee, mlir::ValueRange operands) {
|
||||
result.addOperands(operands);
|
||||
result.addAttribute(getCalleeAttrName(), SymbolRefAttr::get(callee));
|
||||
result.addTypes(callee.getType().getResults());
|
||||
}
|
||||
|
||||
void fir::CallOp::build(mlir::OpBuilder &builder, mlir::OperationState &result,
|
||||
mlir::SymbolRefAttr callee,
|
||||
llvm::ArrayRef<mlir::Type> results,
|
||||
mlir::ValueRange operands) {
|
||||
result.addOperands(operands);
|
||||
result.addAttribute(getCalleeAttrName(), callee);
|
||||
result.addTypes(results);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// CmpOp
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue