+++ /dev/null
-//===- Tester.h -------------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the Tester class used in the MLIR Reduce tool.
-//
-// A Tester object is passed as an argument to the reduction passes and it is
-// used to keep track of the state of the reduction throughout the multiple
-// passes.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_REDUCER_TESTER_H
-#define MLIR_REDUCER_TESTER_H
-
-#include <vector>
-
-#include "mlir/IR/Module.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/Program.h"
-
-namespace mlir {
-
-/// This class is used to keep track of the state of the reduction. It contains
-/// a method to run the interestingness testing script on MLIR test case files
-/// and provides functionality to track the most reduced test case.
-class Tester {
-public:
- Tester(StringRef testScript, ArrayRef<std::string> testScriptArgs);
-
- /// Runs the interestingness testing script on a MLIR test case file. Returns
- /// true if the interesting behavior is present in the test case or false
- /// otherwise.
- bool isInteresting(StringRef testCase);
-
- /// Returns the most reduced MLIR test case module.
- ModuleOp getMostReduced() const { return mostReduced; }
-
- /// Updates the most reduced MLIR test case module. If a
- /// generated variant is found to be successful and shorter than the
- /// mostReduced module, the mostReduced module must be updated with the new
- /// variant.
- void setMostReduced(ModuleOp t) { mostReduced = t; }
-
-private:
- StringRef testScript;
- ArrayRef<std::string> testScriptArgs;
- ModuleOp mostReduced;
-};
-
-} // end namespace mlir
-
-#endif
\ No newline at end of file
add_subdirectory(Interfaces)
add_subdirectory(Parser)
add_subdirectory(Pass)
-add_subdirectory(Reducer)
add_subdirectory(Support)
add_subdirectory(TableGen)
add_subdirectory(Target)
add_subdirectory(Transforms)
-add_subdirectory(Translation)
\ No newline at end of file
+add_subdirectory(Translation)
+++ /dev/null
-add_mlir_library(MLIRReduce
- Tester.cpp
- DEPENDS
- MLIRIR
- )
-
- mlir_check_all_link_libraries(MLIRReduce)
\ No newline at end of file
+++ /dev/null
-//===- Tester.cpp ---------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the Tester class used in the MLIR Reduce tool.
-//
-// A Tester object is passed as an argument to the reduction passes and it is
-// used to keep track of the state of the reduction throughout the multiple
-// passes.
-//
-//===----------------------------------------------------------------------===//
-
-#include "mlir/Reducer/Tester.h"
-
-using namespace mlir;
-
-Tester::Tester(StringRef scriptName, ArrayRef<std::string> scriptArgs)
- : testScript(scriptName), testScriptArgs(scriptArgs) {}
-
-/// Runs the interestingness testing script on a MLIR test case file. Returns
-/// true if the interesting behavior is present in the test case or false
-/// otherwise.
-bool Tester::isInteresting(StringRef testCase) {
-
- std::vector<StringRef> testerArgs;
- testerArgs.push_back(testCase);
-
- for (const std::string &arg : testScriptArgs)
- testerArgs.push_back(arg);
-
- std::string errMsg;
- int result = llvm::sys::ExecuteAndWait(
- testScript, testerArgs, /*Env=*/None, /*Redirects=*/None,
- /*SecondsToWait=*/0, /*MemoryLimit=*/0, &errMsg);
-
- if (result < 0)
- llvm::report_fatal_error("Error running interestingness test: " + errMsg,
- false);
-
- if (!result)
- return false;
-
- return true;
-}
mlir-edsc-builder-api-test
mlir-linalg-ods-gen
mlir-opt
- mlir-reduce
mlir-sdbm-api-test
mlir-tblgen
mlir-translate
+++ /dev/null
-::Replicate bug
-
-::Interesting behavior
-exit 1
\ No newline at end of file
+++ /dev/null
-#!/bin/bash
-
-#Replicate bug
-
-#Interesting behavior
-exit 1
\ No newline at end of file
+++ /dev/null
-// UNSUPPORTED: -windows-
-// RUN: mlir-reduce %s -test %S/test.sh
-
-func @simple1(%arg0: i1, %arg1: memref<2xf32>, %arg2: memref<2xf32>) {
- cond_br %arg0, ^bb1, ^bb2
-^bb1:
- br ^bb3(%arg1 : memref<2xf32>)
-^bb2:
- %0 = alloc() : memref<2xf32>
- br ^bb3(%0 : memref<2xf32>)
-^bb3(%1: memref<2xf32>):
- return
-}
\ No newline at end of file
+++ /dev/null
-// UNSUPPORTED: -linux-
-// RUN: mlir-reduce %s -test %S/test.bat
-
-func @simple1(%arg0: i1, %arg1: memref<2xf32>, %arg2: memref<2xf32>) {
- cond_br %arg0, ^bb1, ^bb2
-^bb1:
- br ^bb3(%arg1 : memref<2xf32>)
-^bb2:
- %0 = alloc() : memref<2xf32>
- br ^bb3(%0 : memref<2xf32>)
-^bb3(%1: memref<2xf32>):
- return
-}
\ No newline at end of file
add_subdirectory(mlir-cpu-runner)
add_subdirectory(mlir-linalg-ods-gen)
add_subdirectory(mlir-opt)
-add_subdirectory(mlir-reduce)
add_subdirectory(mlir-rocm-runner)
-add_subdirectory(mlir-shlib)
add_subdirectory(mlir-translate)
-add_subdirectory(mlir-vulkan-runner)
\ No newline at end of file
+add_subdirectory(mlir-vulkan-runner)
+add_subdirectory(mlir-shlib)
+++ /dev/null
-get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
-get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS)
-set(LLVM_LINK_COMPONENTS
- AllTargetsAsmParsers
- AllTargetsCodeGens
- AllTargetsDescs
- AllTargetsInfos
- AsmParser
- Core
- IRReader
- Support
- Target
- TransformUtils
- )
-
-set(LIBS
- ${dialect_libs}
- ${conversion_libs}
- ${test_libs}
- MLIRAnalysis
- MLIRDialect
- MLIREDSC
- MLIRIR
- MLIRLoopAnalysis
- MLIROptLib
- MLIRParser
- MLIRPass
- MLIRReduce
- MLIRSupport
- MLIRTransforms
- MLIRTransformUtils
- )
-
-add_llvm_tool(mlir-reduce
- mlir-reduce.cpp
- )
-
-target_link_libraries(mlir-reduce PRIVATE ${LIBS})
-llvm_update_compile_flags(mlir-reduce)
-
-mlir_check_all_link_libraries(mlir-reduce)
\ No newline at end of file
+++ /dev/null
-//===- mlir-reduce.cpp - The MLIR reducer ---------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the general framework of the MLIR reducer tool. It
-// parses the command line arguments, parses the initial MLIR test case and sets
-// up the testing environment. It outputs the most reduced test case variant
-// after executing the reduction passes.
-//
-//===----------------------------------------------------------------------===//
-
-#include <vector>
-
-#include "mlir/InitAllDialects.h"
-#include "mlir/Parser.h"
-#include "mlir/Pass/Pass.h"
-#include "mlir/Pass/PassManager.h"
-#include "mlir/Reducer/Tester.h"
-#include "mlir/Support/FileUtilities.h"
-#include "mlir/Support/LogicalResult.h"
-#include "mlir/Transforms/Passes.h"
-#include "llvm/Support/InitLLVM.h"
-#include "llvm/Support/ToolOutputFile.h"
-
-using namespace mlir;
-
-static llvm::cl::opt<std::string> inputFilename(llvm::cl::Positional,
- llvm::cl::Required,
- llvm::cl::desc("<input file>"));
-
-static llvm::cl::opt<std::string>
- testFilename("test", llvm::cl::Required, llvm::cl::desc("Testing script"));
-
-static llvm::cl::list<std::string>
- testArguments("test-args", llvm::cl::ZeroOrMore,
- llvm::cl::desc("Testing script arguments"));
-
-static llvm::cl::opt<std::string>
- outputFilename("o",
- llvm::cl::desc("Output filename for the reduced test case"),
- llvm::cl::init("-"));
-
-// Parse and verify the input MLIR file.
-static LogicalResult loadModule(MLIRContext &context, OwningModuleRef &module,
- StringRef inputFilename) {
- module = parseSourceFile(inputFilename, &context);
- if (!module)
- return failure();
-
- return success();
-}
-
-int main(int argc, char **argv) {
-
- llvm::InitLLVM y(argc, argv);
-
- registerAllDialects();
- registerMLIRContextCLOptions();
- registerPassManagerCLOptions();
-
- llvm::cl::ParseCommandLineOptions(argc, argv,
- "MLIR test case reduction tool.\n");
-
- std::string errorMessage;
-
- auto testscript = openInputFile(testFilename, &errorMessage);
- if (!testscript)
- llvm::report_fatal_error(errorMessage);
-
- auto output = openOutputFile(outputFilename, &errorMessage);
- if (!output)
- llvm::report_fatal_error(errorMessage);
-
- mlir::MLIRContext context;
- mlir::OwningModuleRef moduleRef;
- context.allowUnregisteredDialects(true);
-
- if (failed(loadModule(context, moduleRef, inputFilename)))
- llvm::report_fatal_error("Input test case can't be parsed");
-
- // Initialize test environment.
- Tester test(testFilename, testArguments);
- test.setMostReduced(moduleRef.get());
-
- if (!test.isInteresting(inputFilename))
- llvm::report_fatal_error(
- "Input test case does not exhibit interesting behavior");
-
- test.getMostReduced().print(output->os());
- output->keep();
-
- return 0;
-}
\ No newline at end of file