22 #include <llvm/IR/LLVMContext.h>
23 #include <llvm/IR/Module.h>
24 #include <llvm/IRReader/IRReader.h>
25 #include <llvm/Support/raw_os_ostream.h>
26 #include <llvm/Support/SourceMgr.h>
31 std::ofstream outputFile;
32 outputFile.open(fileName.
to_str());
40 llvm::LLVMContext ctx;
45 llvm::raw_fd_ostream os(fileName.
to_str(), EC);
46 lm->print(os,
nullptr);
50 main(
int argc,
char ** argv)
54 llvm::LLVMContext ctx;
55 llvm::SMDiagnostic err;
56 auto llvmModule = llvm::parseIRFile(commandLineOptions.InputFile_.to_str(), err, ctx);
57 llvmModule->setSourceFileName(commandLineOptions.OutputFiles_.Dirname().Join(
"jlm_hls").to_str());
60 err.print(argv[0], llvm::errs());
65 auto moduleName = commandLineOptions.InputFile_.base();
79 if (commandLineOptions.ExtractHlsFunction_)
83 llvmToFile(*rvsdgModule, commandLineOptions.OutputFiles_.WithSuffix(
".rest.ll"));
84 llvmToFile(*hlsFunction, commandLineOptions.OutputFiles_.WithSuffix(
".function.ll"));
88 if (commandLineOptions.OutputFormat_
94 auto transformationSequence =
96 transformationSequence->Run(*rvsdgModule, collector);
102 auto output = hls.
ToString(*rvsdgModule);
104 const auto firrtlFile = commandLineOptions.OutputFiles_.WithSuffix(
".fir");
107 const auto outputVerilogFile = commandLineOptions.OutputFiles_.WithSuffix(
".v");
110 std::cerr <<
"The FIRRTL to Verilog conversion failed.\n" << std::endl;
116 vhls.
run(*rvsdgModule),
117 commandLineOptions.OutputFiles_.WithSuffix(
".harness.cpp"));
121 ahls.
run(*rvsdgModule),
122 commandLineOptions.OutputFiles_.WithSuffix(
".harness_axi.cpp"));
126 stringToFile(jhls.
run(*rvsdgModule), commandLineOptions.OutputFiles_.WithSuffix(
".json"));
132 auto transformationSequence =
134 transformationSequence->Run(*rvsdgModule, collector);
138 dhls.
run(*rvsdgModule),
139 commandLineOptions.OutputFiles_.Dirname().Join(
"jlm_hls.dot"));
146 collector.PrintStatistics();
std::string run(llvm::LlvmRvsdgModule &rm)
static bool Convert(const util::FilePath inputFirrtlFile, const util::FilePath outputVerilogFile)
std::string ToString(llvm::LlvmRvsdgModule &rvsdgModule)
static std::unique_ptr<::llvm::Module > CreateAndConvertModule(InterProceduralGraphModule &ipGraphModule, ::llvm::LLVMContext &ctx)
static std::unique_ptr< InterProceduralGraphModule > CreateAndConvertModule(LlvmRvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
static FilePath TempDirectoryPath()
const std::string & to_str() const noexcept
#define JLM_UNREACHABLE(msg)
int main(int argc, char **argv)
static void llvmToFile(jlm::llvm::LlvmRvsdgModule &module, const jlm::util::FilePath &fileName)
static void stringToFile(const std::string &output, const jlm::util::FilePath &fileName)
std::unique_ptr< rvsdg::TransformationSequence > createTransformationSequence(rvsdg::DotWriter &dotWriter, const bool dumpRvsdgDotGraphs)
void setMemoryLatency(size_t memoryLatency)
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > split_hls_function(llvm::LlvmRvsdgModule &rm, const std::string &function_name)
void rvsdg2ref(llvm::LlvmRvsdgModule &rhls, const util::FilePath &path)
std::unique_ptr< InterProceduralGraphModule > ConvertLlvmModule(::llvm::Module &llvmModule)
static std::unique_ptr< LlvmRvsdgModule > ConvertInterProceduralGraphModule(InterProceduralGraphModule &interProceduralGraphModule, InterProceduralGraphToRvsdgStatisticsCollector &statisticsCollector)