Skip to content

Commit

Permalink
[fir] Update fir.call op
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
3 people committed Sep 29, 2021
1 parent 67a3d1e commit 576301d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 17 deletions.
26 changes: 9 additions & 17 deletions flang/include/flang/Optimizer/Dialect/FIROps.td
Original file line number Diff line number Diff line change
Expand Up @@ -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()};
}
Expand All @@ -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);
}
Expand Down
16 changes: 16 additions & 0 deletions flang/lib/Optimizer/Dialect/FIROps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
//===----------------------------------------------------------------------===//
Expand Down

0 comments on commit 576301d

Please sign in to comment.