Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions include/NeuraDialect/NeuraOps.td
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ def Neura_ConstantOp : Op<NeuraDialect, "constant"> {
def Neura_AddOp : Op<NeuraDialect, "add"> {
let summary = "Integer addition operation";
let opName = "add";
let arguments = (ins AnyType:$lhs, AnyType:$rhs, Optional<AnyType>:$predicate);
let arguments = (ins AnyType:$lhs, Optional<AnyType>:$rhs);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $predicate attr-dict `:` type($result)";
let traits = [SameOperandsAndResultElementType];
}

def Neura_SubOp : Op<NeuraDialect, "sub"> {
let summary = "Integer substraction operation";
let arguments = (ins AnyType:$lhs, AnyType:$rhs, Optional<AnyType>:$predicate);
let arguments = (ins AnyType:$lhs, Optional<AnyType>:$rhs);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $predicate attr-dict `:` type($result)";
let traits = [SameOperandsAndResultElementType];
Expand All @@ -35,7 +35,7 @@ def Neura_SubOp : Op<NeuraDialect, "sub"> {
def Neura_MulOp : Op<NeuraDialect, "mul"> {
let summary = "Integer multiplication operation";
let opName = "mul";
let arguments = (ins AnyType:$lhs, AnyType:$rhs, Optional<AnyType>:$predicate);
let arguments = (ins AnyType:$lhs, Optional<AnyType>:$rhs);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $predicate attr-dict `:` type($result)";
let traits = [SameOperandsAndResultElementType];
Expand All @@ -53,10 +53,10 @@ def Neura_DivOp : Op<NeuraDialect, "div"> {
def Neura_FAddOp : Op<NeuraDialect, "fadd"> {
let summary = "Floating addition operation";
let opName = "fadd";
let arguments = (ins AnyType:$lhs, AnyType:$rhs, Optional<AnyType>:$predicate);
let arguments = (ins AnyType:$lhs, Optional<AnyType>:$rhs);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $predicate attr-dict `:` type($result)";
// let traits = [SameOperandsAndResultElementType];
let traits = [SameOperandsAndResultElementType];
}

// Defines a floating-point substraction operation.
Expand Down Expand Up @@ -99,7 +99,7 @@ def Neura_OrOp : Op<NeuraDialect, "or"> {
def Neura_ICmpOp : Op<NeuraDialect, "icmp"> {
let summary = "Integer compare operation";
let opName = "icmp";
let arguments = (ins AnyType:$lhs, AnyType:$rhs, Optional<AnyType>:$predicate,
let arguments = (ins AnyType:$lhs, Optional<AnyType>:$rhs,
StrAttr:$cmpType);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $cmpTypeAttr `,` $cmp_type attr-dict `:` type($result)";
Expand All @@ -111,8 +111,7 @@ def Neura_FCmpOp : Op<NeuraDialect, "fcmp"> {
let summary = "Floating-point compare operation";
let opName = "fcmp";
let arguments = (ins AnyType:$lhs,
AnyType:$rhs,
Optional<AnyType>:$predicate,
Optional<AnyType>:$rhs,
StrAttr:$cmpType);
let results = (outs AnyType:$result);
// let assemblyFormat = "$lhs `,` $rhs `,` $cmpType attr-dict `:` type($result)";
Expand Down
14 changes: 11 additions & 3 deletions include/NeuraDialect/NeuraPasses.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,24 @@ void registerNeuraConversionPassPipeline();
#include "NeuraDialect/NeuraPasses.h.inc"
std::unique_ptr<mlir::Pass> createInsertDataMovPass();
std::unique_ptr<mlir::Pass> createInsertCtrlMovPass();
std::unique_ptr<mlir::Pass> createFusePatternPass();
std::unique_ptr<mlir::Pass> createAssignAcceleratorPass();
std::unique_ptr<mlir::Pass> createTransformCtrlToDataFlowPass();
std::unique_ptr<mlir::Pass> createLeveragePredicatedValuePass();
std::unique_ptr<mlir::Pass> createMapToAcceleratorPass();
std::unique_ptr<mlir::Pass> createGenerateCodePass();
std::unique_ptr<mlir::Pass> createFuseControlFlowPass();
std::unique_ptr<mlir::Pass> createCanonicalizeLiveInPass();
std::unique_ptr<mlir::Pass> createCanonicalizeCastPass();
std::unique_ptr<mlir::Pass> createPromoteFuncArgToConstPass();

// ====================================
// Optimization Passes
// ====================================
// Hardware specific optimization passes
std::unique_ptr<mlir::Pass> createFuseLoopControlPass();
std::unique_ptr<mlir::Pass> createFusePatternPass();

// Hardware agnostic optimization passes
std::unique_ptr<mlir::Pass> createFoldConstantPass();
std::unique_ptr<mlir::Pass> createCanonicalizeCastPass();

#define GEN_PASS_REGISTRATION
#include "NeuraDialect/NeuraPasses.h.inc"
Expand Down
16 changes: 12 additions & 4 deletions include/NeuraDialect/NeuraPasses.td
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,12 @@ def GenerateCode : Pass<"generate-code", "ModuleOp"> {
let constructor = "neura::createGenerateCodePass()";
}

def FuseControlFlow: Pass<"fuse-control-flow", "ModuleOp">{
let summary = "Fuses control flow operations in the Neura dialect";
def FuseLoopControl: Pass<"fuse-loop-control", "ModuleOp">{
let summary = "Fuses loop control operations in the Neura dialect";
let description = [{
This pass fuses control flow operations.
This pass fuses loop control operations.
}];
let constructor = "neura::createFuseControlFlowPass()";
let constructor = "neura::createFuseLoopControlPass()";
}

def CanonicalizeLiveIn : Pass<"canonicalize-live-in", "ModuleOp"> {
Expand All @@ -86,6 +86,14 @@ def CanonicalizeLiveIn : Pass<"canonicalize-live-in", "ModuleOp"> {
let constructor = "neura::createCanonicalizeLiveInPass()";
}

def PromoteFuncArgToConst : Pass<"promote-func-arg-to-const", "ModuleOp"> {
let summary = "Promotes function arguments to neura constant operations";
let description = [{
This pass promotes function arguments to neura constant operations.
}];
let constructor = "neura::createPromoteFuncArgToConstPass()";
}

def CanonicalizeCast : Pass<"canonicalize-cast", "ModuleOp"> {
let summary = "Canonicalizes cast operations in the Neura dialect";
let description = [{
Expand Down
20 changes: 7 additions & 13 deletions lib/Conversion/ArithToNeura/ArithToNeuraPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ struct ArithAddIToNeuraAdd : public OpRewritePattern<mlir::arith::AddIOp> {
Type result_type = op.getType();

// Optional predicate: default to null.
rewriter.replaceOpWithNewOp<neura::AddOp>(op, result_type, lhs, rhs,
nullptr);
rewriter.replaceOpWithNewOp<neura::AddOp>(op, result_type, lhs, rhs);
return success();
}
};
Expand All @@ -69,8 +68,7 @@ struct ArithFAddToNeuraFAdd : public OpRewritePattern<mlir::arith::AddFOp> {
Type result_type = op.getType();

// Optional predicate: default to null.
rewriter.replaceOpWithNewOp<neura::FAddOp>(op, result_type, lhs, rhs,
nullptr);
rewriter.replaceOpWithNewOp<neura::FAddOp>(op, result_type, lhs, rhs);
return success();
}
};
Expand All @@ -85,8 +83,7 @@ struct ArithSubIToNeuraSub : public OpRewritePattern<mlir::arith::SubIOp> {
Type result_type = op.getType();

// Optional predicate: default to null.
rewriter.replaceOpWithNewOp<neura::SubOp>(op, result_type, lhs, rhs,
nullptr);
rewriter.replaceOpWithNewOp<neura::SubOp>(op, result_type, lhs, rhs);
return success();
}
};
Expand Down Expand Up @@ -117,8 +114,7 @@ struct ArithMulIToNeuraMul : public OpRewritePattern<mlir::arith::MulIOp> {
Type result_type = op.getType();

// Optional predicate: default to null.
rewriter.replaceOpWithNewOp<neura::MulOp>(op, result_type, lhs, rhs,
nullptr);
rewriter.replaceOpWithNewOp<neura::MulOp>(op, result_type, lhs, rhs);
return success();
}
};
Expand Down Expand Up @@ -183,10 +179,8 @@ struct ArithRemSIToNeuraOp : public OpRewritePattern<mlir::arith::RemSIOp> {
// Optional predicate: default to null.
Value div =
rewriter.create<neura::DivOp>(loc, result_type, lhs, rhs, nullptr);
Value mul =
rewriter.create<neura::MulOp>(loc, result_type, rhs, div, nullptr);
Value rem =
rewriter.create<neura::SubOp>(loc, result_type, lhs, mul, nullptr);
Value mul = rewriter.create<neura::MulOp>(loc, result_type, rhs, div);
Value rem = rewriter.create<neura::SubOp>(loc, result_type, lhs, mul);

rewriter.replaceOp(op, rem);
return success();
Expand Down Expand Up @@ -241,7 +235,7 @@ struct ArithCmpiToNeuraICmp : public OpRewritePattern<mlir::arith::CmpIOp> {
// Converts arith CmpIOp to Neura ICmpOp.
// Optional predicate: default to null.
rewriter.replaceOpWithNewOp<neura::ICmpOp>(
op, result_type, lhs, rhs, nullptr, rewriter.getStringAttr(cmp_type));
op, result_type, lhs, rhs, rewriter.getStringAttr(cmp_type));
return success();
}
};
Expand Down
9 changes: 4 additions & 5 deletions lib/Conversion/LlvmToNeura/LlvmToNeuraPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ struct LlvmAddToNeuraAdd : public OpRewritePattern<mlir::LLVM::AddOp> {
LogicalResult matchAndRewrite(mlir::LLVM::AddOp op,
PatternRewriter &rewriter) const override {
rewriter.replaceOpWithNewOp<neura::AddOp>(op, op.getType(), op.getLhs(),
op.getRhs(), Value());
op.getRhs());
return success();
}
};
Expand All @@ -53,8 +53,7 @@ struct LlvmFAddToNeuraFAdd : public OpRewritePattern<mlir::LLVM::FAddOp> {
return failure();

// Optional predicate: default to 'none'
rewriter.replaceOpWithNewOp<neura::FAddOp>(op, result_type, lhs, rhs,
Value());
rewriter.replaceOpWithNewOp<neura::FAddOp>(op, result_type, lhs, rhs);
return success();
}
};
Expand Down Expand Up @@ -141,7 +140,7 @@ struct LlvmICmpToNeuraICmp : public OpRewritePattern<LLVM::ICmpOp> {
auto resultType = op.getType();

rewriter.replaceOpWithNewOp<neura::ICmpOp>(
op, resultType, lhs, rhs, Value(),
op, resultType, lhs, rhs,
rewriter.getStringAttr(LLVM::stringifyICmpPredicate(pred)));
return success();
}
Expand All @@ -158,7 +157,7 @@ struct LlvmFCmpToNeuraFCmp : public OpRewritePattern<LLVM::FCmpOp> {
auto resultType = op.getType();

rewriter.replaceOpWithNewOp<neura::FCmpOp>(
op, resultType, lhs, rhs, Value(),
op, resultType, lhs, rhs,
rewriter.getStringAttr(LLVM::stringifyFCmpPredicate(pred)));
return success();
}
Expand Down
7 changes: 4 additions & 3 deletions lib/NeuraDialect/Transforms/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ add_mlir_library(
LeveragePredicatedValuePass.cpp
MapToAcceleratorPass.cpp
GenerateCodePass.cpp
FuseControlFlowPass.cpp
CanonicalizeLiveInPass.cpp
CanonicalizeCastPass.cpp
FoldConstantPass.cpp
PromoteFuncArgToConstPass.cpp

DEPENDS
MLIRNeuraTransformsIncGen
Expand All @@ -26,4 +25,6 @@ add_mlir_library(
MLIRNeura
${dialect_libs}
LLVMSupport
)
)

add_subdirectory(Optimizations)
3 changes: 3 additions & 0 deletions lib/NeuraDialect/Transforms/CanonicalizeCastPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@

using namespace mlir;

#define GEN_PASS_DEF_CANONICALIZECAST
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {

LogicalResult canonicalizeCast(Region &region) {
Expand Down
2 changes: 1 addition & 1 deletion lib/NeuraDialect/Transforms/CanonicalizeLiveInPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

using namespace mlir;

#define GEN_PASS_DEF_NEURACANONICALIZE
#define GEN_PASS_DEF_CANONICALIZELIVEIN
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {
Expand Down
91 changes: 0 additions & 91 deletions lib/NeuraDialect/Transforms/FoldConstantPass.cpp

This file was deleted.

2 changes: 1 addition & 1 deletion lib/NeuraDialect/Transforms/InsertCtrlMovPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

using namespace mlir;

#define GEN_PASS_DEF_InsertCtrlMov
#define GEN_PASS_DEF_INSERTCTRLMOV
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {
Expand Down
2 changes: 1 addition & 1 deletion lib/NeuraDialect/Transforms/InsertDataMovPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

using namespace mlir;

#define GEN_PASS_DEF_InsertDataMov
#define GEN_PASS_DEF_INSERTDATAMOV
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

using namespace mlir;

#define GEN_PASS_DEF_LeveragePredicatedValue
#define GEN_PASS_DEF_LEVERAGEPREDICATEDVALUE
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {
Expand Down
2 changes: 1 addition & 1 deletion lib/NeuraDialect/Transforms/MapToAcceleratorPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
using namespace mlir;
using namespace mlir::neura;

#define GEN_PASS_DEF_MapToAccelerator
#define GEN_PASS_DEF_MAPTOACCELERATOR
#include "NeuraDialect/NeuraPasses.h.inc"

namespace {
Expand Down
Loading