[PATCH] D110698: [fir] Update fir.call op
Valentin Clement via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 29 05:03:57 PDT 2021
clementval created this revision.
clementval added reviewers: jeanPerier, svedanayagam, sscalpone, kiranchandramohan, jdoerfert, schweitz, pmccormick, mehdi_amini.
Herald added a project: Flang.
clementval requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Move builders to .cpp file and update accordingly.
This patch is part of the upstreaming effort from fir-dev branch.
Co-authored-by: Jean Perier <jperier at nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz at nvidia.com>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D110698
Files:
flang/include/flang/Optimizer/Dialect/FIROps.td
flang/lib/Optimizer/Dialect/FIROps.cpp
Index: flang/lib/Optimizer/Dialect/FIROps.cpp
===================================================================
--- flang/lib/Optimizer/Dialect/FIROps.cpp
+++ flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -298,6 +298,22 @@
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
//===----------------------------------------------------------------------===//
Index: flang/include/flang/Optimizer/Dialect/FIROps.td
===================================================================
--- flang/include/flang/Optimizer/Dialect/FIROps.td
+++ flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -2646,36 +2646,28 @@
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);
+ build($_builder, $_state,
+ 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 (auto calling =
+ (*this)->getAttrOfType<SymbolRefAttr>(getCalleeAttrName()))
return {arg_operand_begin(), arg_operand_end()};
return {arg_operand_begin() + 1, arg_operand_end()};
}
@@ -2685,7 +2677,8 @@
/// Return the callee of this operation.
CallInterfaceCallable getCallableForCallee() {
- if (auto calling = calleeAttr())
+ if (auto calling =
+ (*this)->getAttrOfType<SymbolRefAttr>(getCalleeAttrName()))
return calling;
return getOperand(0);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110698.375836.patch
Type: text/x-patch
Size: 3369 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210929/98a6306a/attachment-0001.bin>
More information about the llvm-commits
mailing list