mathic 0.2.0

A compiler with builtin support of symbolic operations, built with LLVM/MLIR
#include <mlir-c/IR.h>
#include <mlir/CAPI/IR.h>
#include <mlir/CAPI/Pass.h>
#include <mlir/CAPI/Registration.h>
#include <mlir/IR/BuiltinTypes.h>
#include <mlir/IR/DialectRegistry.h>

#include "Dialect/Symbolic/Conversions/SymbolicToArith/SymbolicToArith.h"
#include "Dialect/Symbolic/IR/SymbolicDialect.h"
#include "Dialect/Symbolic/IR/SymbolicTypes.h"
#include "Dialect/Symbolic/Transforms/Passes.h"
#include "Dialect/capi.h"

MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Symbolic, symbolic, mlir::symbolic::SymbolicDialect)

extern "C" void mlirInsertSymbolicDialect(MlirDialectRegistry registry)
{
    mlirDialectHandleInsertDialect(mlirGetDialectHandle__symbolic__(), registry);
}

MlirType getSymExprType(MlirContext ctx, MlirType innerType, bool isSigned)
{
    return wrap(
        mlir::symbolic::SymExprType::get(unwrap(ctx), llvm::cast<mlir::IntegerType>(unwrap(innerType)), isSigned));
}

using namespace mlir;

extern "C"
{

    MlirPass mlirCreateSymbolicExtractEval()
    {
        return wrap(mlir::symbolic::createSymbolicExtractEval().release());
    }

    void mlirRegisterSymbolicExtractEval()
    {
        mlir::symbolic::registerSymbolicExtractEval();
    }

    MlirPass mlirCreateSymbolicToArith()
    {
        return wrap(mlir::symbolic::createSymbolicToArith().release());
    }

    void mlirRegisterSymbolicToArith()
    {
        mlir::symbolic::registerSymbolicToArith();
    }
}