================
@@ -721,13 +721,78 @@ Expected<StringRef> compileModule(Module &M, OffloadKind
Kind) {
return *TempFileOrErr;
}
+/// Performs the wrapping stage with individual tool invocations for verbose
+/// printing.
+Expected<StringRef>
+wrapDeviceImagesVerbose(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers,
+ const ArgList &Args, OffloadKind Kind) {
+ Expected<std::string> WrapperPath = findProgram(
+ "llvm-offload-wrapper", {getExecutableDir("llvm-offload-wrapper")});
+ if (!WrapperPath)
+ return WrapperPath.takeError();
+
+ llvm::Triple Triple(
+ Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple()));
+
+ // Generate the runtime registration bitcode from the bundled images.
+ auto BitcodeOrErr = createOutputFile(
+ ExecutableName + "." + getOffloadKindName(Kind) + ".image.wrapper",
"bc");
+ if (!BitcodeOrErr)
+ return BitcodeOrErr.takeError();
+
+ SmallVector<StringRef> WrapperArgs = {
+ *WrapperPath,
+ Args.MakeArgString("--kind=" + getOffloadKindName(Kind)),
+ Args.MakeArgString("--triple=" + Triple.getTriple()),
+ "-o",
+ *BitcodeOrErr,
+ };
+ if (Kind == OFK_OpenMP && Args.hasArg(OPT_relocatable))
+ WrapperArgs.push_back("--relocatable");
+ for (const auto &Buffer : Buffers)
+ WrapperArgs.push_back(Buffer->getBufferIdentifier());
+
+ if (Error Err = executeCommands(*WrapperPath, WrapperArgs))
+ return std::move(Err);
+
+ // Compile the generated registration bitcode into a host object.
+ Expected<std::string> ClangPath =
+ findProgram("clang", {getExecutableDir("clang")});
+ if (!ClangPath)
+ return ClangPath.takeError();
+
+ auto ObjectOrErr = createOutputFile(
+ ExecutableName + "." + getOffloadKindName(Kind) + ".image.wrapper", "o");
+ if (!ObjectOrErr)
+ return ObjectOrErr.takeError();
+
+ StringRef ClangArgs[] = {
+ *ClangPath,
+ "--no-default-config",
+ Args.MakeArgString("--target=" + Triple.getTriple()),
+ "-c",
+ "-fPIC",
+ "-o",
+ *ObjectOrErr,
+ *BitcodeOrErr,
+ };
+ if (Error Err = executeCommands(*ClangPath, ClangArgs))
+ return std::move(Err);
+
+ return *ObjectOrErr;
+}
+
/// Creates the object file containing the device image and runtime
/// registration code from the device images stored in \p Images.
Expected<StringRef>
wrapDeviceImages(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers,
const ArgList &Args, OffloadKind Kind) {
llvm::TimeTraceScope TimeScope("Wrap bundled images");
+ // We use the discrete tools if we are in verbose mode.
----------------
Artem-B wrote:
`-v` changing behavior may not be the best idea. I think `-v` should only
change what we show, not how we do things.
e.g, `-v` passed to clang does not switch to separate compilation steps, one
would need explicit --save-temps for that. Perhaps we should do the same here.
https://github.com/llvm/llvm-project/pull/204186
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits