Skip to content

Commit

Permalink
[mlir] Make the ml_program dialect allow all of its operations to be …
Browse files Browse the repository at this point in the history
…inlined. (llvm#85479)
  • Loading branch information
stellaraccident authored Mar 16, 2024
1 parent 426bf0c commit dbbdee2
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
1 change: 1 addition & 0 deletions mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ add_mlir_dialect_library(MLIRMLProgramDialect
MLIRControlFlowInterfaces
MLIRFunctionInterfaces
MLIRInferTypeOpInterface
MLIRTransforms
MLIRIR
)
15 changes: 14 additions & 1 deletion mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include "mlir/Dialect/MLProgram/IR/MLProgram.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/TypeSwitch.h"

using namespace mlir;
Expand All @@ -24,6 +25,18 @@ using namespace mlir::ml_program;
#include "mlir/Dialect/MLProgram/IR/MLProgramTypes.cpp.inc"

namespace {

struct MLProgramInlinerInterface : public DialectInlinerInterface {
using DialectInlinerInterface::DialectInlinerInterface;

bool isLegalToInline(Operation *, Region *, bool,
IRMapping &) const override {
// We have no specific opinion on whether ops defined in this dialect should
// be inlined.
return true;
}
};

struct MLProgramOpAsmDialectInterface : public OpAsmDialectInterface {
using OpAsmDialectInterface::OpAsmDialectInterface;

Expand Down Expand Up @@ -53,5 +66,5 @@ void ml_program::MLProgramDialect::initialize() {
#include "mlir/Dialect/MLProgram/IR/MLProgramOps.cpp.inc"
>();

addInterfaces<MLProgramOpAsmDialectInterface>();
addInterfaces<MLProgramInlinerInterface, MLProgramOpAsmDialectInterface>();
}
19 changes: 19 additions & 0 deletions mlir/test/Dialect/MLProgram/inlining.mlir
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// RUN: mlir-opt %s -inline | FileCheck %s

// Verifies that regions with operations from the ml_program dialect can
// be inlined.

ml_program.global private @global(dense<4> : tensor<4xi32>) : tensor<4xi32>

// CHECK: @inline_into
func.func @inline_into() -> tensor<4xi32> {
// CHECK-NOT: @inline_from
// CHECK: ml_program.global_load_const
%0 = call @inline_from() : () -> tensor<4xi32>
return %0 : tensor<4xi32>
}

func.func @inline_from() -> tensor<4xi32> {
%0 = ml_program.global_load_const @global : tensor<4xi32>
return %0 : tensor<4xi32>
}

0 comments on commit dbbdee2

Please sign in to comment.