This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG9f89769cd775: [Clang] Add offload kind to embedded offload object (authored by jhuber6).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120271/new/ https://reviews.llvm.org/D120271 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/openmp-offload-gpu.c clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
Index: clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp =================================================================== --- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -151,9 +151,11 @@ /// Information for a device offloading file extracted from the host. struct DeviceFile { - DeviceFile(StringRef TheTriple, StringRef Arch, StringRef Filename) - : TheTriple(TheTriple), Arch(Arch), Filename(Filename) {} + DeviceFile(StringRef Kind, StringRef TheTriple, StringRef Arch, + StringRef Filename) + : Kind(Kind), TheTriple(TheTriple), Arch(Arch), Filename(Filename) {} + std::string Kind; std::string TheTriple; std::string Arch; std::string Filename; @@ -164,11 +166,13 @@ template <> struct DenseMapInfo<DeviceFile> { static DeviceFile getEmptyKey() { return {DenseMapInfo<StringRef>::getEmptyKey(), + DenseMapInfo<StringRef>::getEmptyKey(), DenseMapInfo<StringRef>::getEmptyKey(), DenseMapInfo<StringRef>::getEmptyKey()}; } static DeviceFile getTombstoneKey() { return {DenseMapInfo<StringRef>::getTombstoneKey(), + DenseMapInfo<StringRef>::getTombstoneKey(), DenseMapInfo<StringRef>::getTombstoneKey(), DenseMapInfo<StringRef>::getTombstoneKey()}; } @@ -213,12 +217,13 @@ return sys::path::parent_path(COWPath).str(); } -/// Extract the device file from the string '<triple>-<arch>=<library>.bc'. +/// Extract the device file from the string '<kind>-<triple>-<arch>=<library>'. DeviceFile getBitcodeLibrary(StringRef LibraryStr) { auto DeviceAndPath = StringRef(LibraryStr).split('='); - auto TripleAndArch = DeviceAndPath.first.rsplit('-'); - return DeviceFile(TripleAndArch.first, TripleAndArch.second, - DeviceAndPath.second); + auto StringAndArch = DeviceAndPath.first.rsplit('-'); + auto KindAndTriple = StringAndArch.first.split('-'); + return DeviceFile(KindAndTriple.first, KindAndTriple.second, + StringAndArch.second, DeviceAndPath.second); } /// Get a temporary filename suitable for output. @@ -299,16 +304,17 @@ SmallVector<StringRef, 4> SectionFields; Name->split(SectionFields, '.'); - StringRef DeviceTriple = SectionFields[3]; - StringRef Arch = SectionFields[4]; + StringRef Kind = SectionFields[3]; + StringRef DeviceTriple = SectionFields[4]; + StringRef Arch = SectionFields[5]; if (Expected<StringRef> Contents = Sec.getContents()) { SmallString<128> TempFile; StringRef DeviceExtension = getDeviceFileExtension( DeviceTriple, identify_magic(*Contents) == file_magic::bitcode); - if (Error Err = - createOutputFile(Prefix + "-device-" + DeviceTriple + "-" + Arch, - DeviceExtension, TempFile)) + if (Error Err = createOutputFile(Prefix + "-" + Kind + "-" + + DeviceTriple + "-" + Arch, + DeviceExtension, TempFile)) return std::move(Err); Expected<std::unique_ptr<FileOutputBuffer>> OutputOrErr = @@ -320,7 +326,7 @@ if (Error E = Output->commit()) return std::move(E); - DeviceFiles.emplace_back(DeviceTriple, Arch, TempFile); + DeviceFiles.emplace_back(Kind, DeviceTriple, Arch, TempFile); ToBeStripped.push_back(*Name); } } @@ -412,16 +418,17 @@ SmallVector<StringRef, 4> SectionFields; GV.getSection().split(SectionFields, '.'); - StringRef DeviceTriple = SectionFields[3]; - StringRef Arch = SectionFields[4]; + StringRef Kind = SectionFields[3]; + StringRef DeviceTriple = SectionFields[4]; + StringRef Arch = SectionFields[5]; StringRef Contents = CDS->getAsString(); SmallString<128> TempFile; StringRef DeviceExtension = getDeviceFileExtension( DeviceTriple, identify_magic(Contents) == file_magic::bitcode); - if (Error Err = - createOutputFile(Prefix + "-device-" + DeviceTriple + "-" + Arch, - DeviceExtension, TempFile)) + if (Error Err = createOutputFile(Prefix + "-" + Kind + "-" + DeviceTriple + + "-" + Arch, + DeviceExtension, TempFile)) return std::move(Err); Expected<std::unique_ptr<FileOutputBuffer>> OutputOrErr = @@ -433,7 +440,7 @@ if (Error E = Output->commit()) return std::move(E); - DeviceFiles.emplace_back(DeviceTriple, Arch, TempFile); + DeviceFiles.emplace_back(Kind, DeviceTriple, Arch, TempFile); ToBeDeleted.push_back(&GV); } Index: clang/test/Driver/openmp-offload-gpu.c =================================================================== --- clang/test/Driver/openmp-offload-gpu.c +++ clang/test/Driver/openmp-offload-gpu.c @@ -345,4 +345,4 @@ // RUN: -fopenmp-new-driver -no-canonical-prefixes -nogpulib %s -o openmp-offload-gpu 2>&1 \ // RUN: | FileCheck -check-prefix=NEW_DRIVER_EMBEDDING %s -// NEW_DRIVER_EMBEDDING: -fembed-offload-object=[[CUBIN:.*\.cubin]],nvptx64-nvidia-cuda.sm_70 +// NEW_DRIVER_EMBEDDING: -fembed-offload-object=[[CUBIN:.*\.cubin]],openmp.nvptx64-nvidia-cuda.sm_70 Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -6977,7 +6977,9 @@ StringRef InputName = Clang::getBaseInputStem(Args, Inputs); CmdArgs.push_back(Args.MakeArgString( - "-fembed-offload-object=" + File + "," + TC->getTripleString() + "." + + "-fembed-offload-object=" + File + "," + + Action::GetOffloadKindName(Action::OFK_OpenMP) + "." + + TC->getTripleString() + "." + TCArgs.getLastArgValue(options::OPT_march_EQ) + "." + InputName)); } } @@ -8297,9 +8299,10 @@ TC->getTriple()); if (!BitcodeLibrary.empty()) - CmdArgs.push_back( - Args.MakeArgString("-target-library=" + TC->getTripleString() + - "-" + Arch + "=" + BitcodeLibrary.back())); + CmdArgs.push_back(Args.MakeArgString( + "-target-library=" + + Action::GetOffloadKindName(Action::OFK_OpenMP) + "-" + + TC->getTripleString() + "-" + Arch + "=" + BitcodeLibrary.back())); } // Pass in the optimization level to use for LTO.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits