Skip to content

Commit 2113e3c

Browse files
authored
Merge pull request #399 from Xilinx/jose.fix_pass
Make EliminateLibm work on EmitC::FuncOp
2 parents 213d2b0 + 1fc2b98 commit 2113e3c

File tree

4 files changed

+28
-22
lines changed

4 files changed

+28
-22
lines changed

mlir/include/mlir/Dialect/EmitC/IR/EmitC.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,12 @@ def EmitC_FuncOp : EmitC_Op<"func", [
752752

753753
/// Returns the result types of this function.
754754
ArrayRef<Type> getResultTypes() { return getFunctionType().getResults(); }
755+
756+
//===------------------------------------------------------------------===//
757+
// SymbolOpInterface Methods
758+
//===------------------------------------------------------------------===//
759+
760+
bool isDeclaration() { return isExternal(); }
755761
}];
756762
let hasCustomAssemblyFormat = 1;
757763
let hasVerifier = 1;

mlir/lib/Dialect/EmitC/Transforms/EliminateLibm.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ namespace {
3737

3838
/// Replace all Libm calls (where callee has `libm` attribute + no definition)
3939
/// by opaque calls
40-
struct OpacifyLibmCall : public OpRewritePattern<func::CallOp> {
41-
using OpRewritePattern<func::CallOp>::OpRewritePattern;
42-
LogicalResult matchAndRewrite(func::CallOp callOp,
40+
struct OpacifyLibmCall : public OpRewritePattern<emitc::CallOp> {
41+
using OpRewritePattern<emitc::CallOp>::OpRewritePattern;
42+
LogicalResult matchAndRewrite(emitc::CallOp callOp,
4343
PatternRewriter &rewriter) const override {
4444

4545
auto *st = SymbolTable::getNearestSymbolTable(callOp);
@@ -65,8 +65,8 @@ struct EliminateLibmPass : public impl::EliminateLibmBase<EliminateLibmPass> {
6565
MLIRContext *context = module->getContext();
6666

6767
// Find the first math.h inclusion
68-
SmallVector<func::FuncOp> libmPrototypes;
69-
module.walk([&libmPrototypes](func::FuncOp funcOp) {
68+
SmallVector<emitc::FuncOp> libmPrototypes;
69+
module.walk([&libmPrototypes](emitc::FuncOp funcOp) {
7070
if (funcOp->hasAttr("libm") && funcOp.isDeclaration())
7171
libmPrototypes.push_back(funcOp);
7272
});
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
// RUN: mlir-opt %s --eliminate-libm --verify-diagnostics --split-input-file | FileCheck %s
22

33
// CHECK: emitc.include <"cmath">
4-
// CHECK-NOT: func.func private @expm1
5-
// CHECK-DAG: func.func @call_expm1(%[[IN:.*]]: f64) -> f64
4+
// CHECK-NOT: emitc.func private @expm1
5+
// CHECK-DAG: emitc.func @call_expm1(%[[IN:.*]]: f64) -> f64
66
// CHECK-DAG: %[[RESULT:.*]] = emitc.call_opaque "expm1"(%[[IN]]) : (f64) -> f64
77
// CHECK-DAG: return %[[RESULT]]
88
module {
9-
func.func private @expm1(f64) -> f64 attributes {libm, llvm.readnone}
10-
func.func @call_expm1(%in : f64) -> f64 {
11-
%e1 = func.call @expm1(%in) : (f64) -> f64
12-
return %e1 : f64
9+
emitc.func private @expm1(f64) -> f64 attributes {libm, llvm.readnone, specifiers = ["extern"]}
10+
emitc.func @call_expm1(%in : f64) -> f64 {
11+
%e1 = emitc.call @expm1(%in) : (f64) -> f64
12+
emitc.return %e1 : f64
1313
}
1414
}
1515

1616
// -----
1717

1818
// CHECK-NOT: emitc.include <"cmath">
19-
// CHECK: func.func private @expm1
20-
// CHECK: func.func @call_expm1(%[[IN:.*]]: f64) -> f64
21-
// CHECK-NEXT: %[[RESULT:.*]] = call @expm1(%[[IN]]) : (f64) -> f64
19+
// CHECK: emitc.func private @expm1
20+
// CHECK: emitc.func @call_expm1(%[[IN:.*]]: f64) -> f64
21+
// CHECK-NEXT: %[[RESULT:.*]] = emitc.call @expm1(%[[IN]]) : (f64) -> f64
2222
// CHECK-NEXT: return %[[RESULT]]
2323
module {
24-
func.func private @expm1(f64) -> f64 attributes {llvm.readnone}
25-
func.func @call_expm1(%in : f64) -> f64 {
26-
%e1 = func.call @expm1(%in) : (f64) -> f64
27-
return %e1 : f64
24+
emitc.func private @expm1(f64) -> f64 attributes {llvm.readnone}
25+
emitc.func @call_expm1(%in : f64) -> f64 {
26+
%e1 = emitc.call @expm1(%in) : (f64) -> f64
27+
emitc.return %e1 : f64
2828
}
2929
}

mlir/test/Dialect/EmitC/func.mlir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ emitc.func @f(%x: i32 ref) {
1616

1717
// -----
1818

19-
// CHECK: emitc.func @f
19+
// CHECK: emitc.func private @f
2020
// CHECK-SAME: i32 ref
21-
emitc.func @f(i32 ref)
21+
emitc.func private @f(i32 ref)
2222

2323
// -----
2424

25-
// CHECK: emitc.func @f
25+
// CHECK: emitc.func private @f
2626
// CHECK-SAME: i32 ref
27-
emitc.func @f(i32 {emitc.reference})
27+
emitc.func private @f(i32 {emitc.reference})

0 commit comments

Comments
 (0)