From 6400f2f96770e659e8782dff9e5229121fbc2bc4 Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Sun, 8 Dec 2019 15:13:28 +0300 Subject: [PATCH] [HIPIFY] Add cleanupHipifyOptions functionality Needed for sorting input files to avoid clang errors on unsupported options [ROCm/clr commit: 486ec185e76add51e3cd15fc8f370a9e38b5f718] --- projects/clr/hipamd/hipify-clang/src/main.cpp | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/projects/clr/hipamd/hipify-clang/src/main.cpp b/projects/clr/hipamd/hipify-clang/src/main.cpp index 91ff9c36d4..65376df22c 100644 --- a/projects/clr/hipamd/hipify-clang/src/main.cpp +++ b/projects/clr/hipamd/hipify-clang/src/main.cpp @@ -50,13 +50,46 @@ constexpr auto DEBUG_TYPE = "cuda2hip"; namespace ct = clang::tooling; +void cleanupHipifyOptions(std::vector &args) { + std::vector hipifyOptions = {"-perl", "-python", "-roc", "-inplace", + "-no-backup", "-no-output", "-print-stats", + "-print-stats-csv", "-examine", "-save-temps", + "-skip-excluded-preprocessor-conditional-blocks"}; + for (const auto &a : hipifyOptions) { + args.erase(std::remove(args.begin(), args.end(), a), args.end()); + args.erase(std::remove(args.begin(), args.end(), "-" + a), args.end()); + } + std::vector hipifyDirOptions = {"-o-dir", "-o-hipify-perl-dir", "-o-stats", + "-o-python-map-dir", "-temp-dir"}; + for (const auto &a : hipifyDirOptions) { + // remove all pairs of arguments "-option value" + auto it = args.erase(std::remove(args.begin(), args.end(), a), args.end()); + if (it != args.end()) { + args.erase(it); + } + // remove all pairs of arguments "--option value" + it = args.erase(std::remove(args.begin(), args.end(), "-" + a), args.end()); + if (it != args.end()) { + args.erase(it); + } + // remove all "-option=value" and "--option=value" + args.erase( + std::remove_if(args.begin(), args.end(), + [a](const std::string &s) { return s.find(a + "=") == 0 || s.find("-" + a + "=") == 0; } + ), + args.end() + ); + } +} + void sortInputFiles(int argc, const char **argv, std::vector &files) { if (files.size() < 2) return; IntrusiveRefCntPtr diagOpts(new clang::DiagnosticOptions()); clang::TextDiagnosticPrinter diagClient(llvm::errs(), &*diagOpts); clang::DiagnosticsEngine Diagnostics(IntrusiveRefCntPtr(new clang::DiagnosticIDs()), &*diagOpts, &diagClient, false); std::unique_ptr driver(new clang::driver::Driver("", "nvptx64-nvidia-cuda", Diagnostics)); - SmallVector Args(argv, argv + argc); + std::vector Args(argv, argv + argc); + cleanupHipifyOptions(Args); std::unique_ptr C(driver->BuildCompilation(Args)); std::vector sortedFiles; for (const auto &J : C->getJobs()) {