Author: Yaxun (Sam) Liu Date: 2020-09-23T11:20:29-04:00 New Revision: e6d50b4f22dc6bbf0b0b40cfdab172bf5c1694e1
URL: https://github.com/llvm/llvm-project/commit/e6d50b4f22dc6bbf0b0b40cfdab172bf5c1694e1 DIFF: https://github.com/llvm/llvm-project/commit/e6d50b4f22dc6bbf0b0b40cfdab172bf5c1694e1.diff LOG: recommit [HIP] Fix -gsplit-dwarf option recommit e50465ecefc964e5700df26fc7e02a673eed085a with fix for regression in lldb tests. Two issues: 1. the directory part of original .dwo file was dropped 2. if the stem of the .dwo file contains '.', the last dot and strings after that were removed This recommit fixes those two issues. Added: clang/test/Driver/hip-gsplit-dwarf-options.hip Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Driver/ToolChains/CommonArgs.h clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/MinGW.cpp Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 0518dc21db73..12b3c8615e91 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4810,7 +4810,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (isa<AssembleJobAction>(JA) || isa<CompileJobAction>(JA) || isa<BackendJobAction>(JA)); if (SplitDWARF) { - const char *SplitDWARFOut = SplitDebugName(Args, Input, Output); + const char *SplitDWARFOut = SplitDebugName(JA, Args, Input, Output); CmdArgs.push_back("-split-dwarf-file"); CmdArgs.push_back(SplitDWARFOut); if (DwarfFission == DwarfFissionKind::Split) { @@ -7047,7 +7047,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, if (getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split && T.isOSBinFormatELF()) { CmdArgs.push_back("-split-dwarf-output"); - CmdArgs.push_back(SplitDebugName(Args, Input, Output)); + CmdArgs.push_back(SplitDebugName(JA, Args, Input, Output)); } assert(Input.isFilename() && "Invalid input."); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 5dc5d834136e..f0ab0ef5c10f 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -902,8 +902,14 @@ bool tools::areOptimizationsEnabled(const ArgList &Args) { return false; } -const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input, +const char *tools::SplitDebugName(const JobAction &JA, const ArgList &Args, + const InputInfo &Input, const InputInfo &Output) { + auto AddPostfix = [JA](auto &F) { + if (JA.getOffloadingDeviceKind() == Action::OFK_HIP) + F += (Twine("_") + JA.getOffloadingArch()).str(); + F += ".dwo"; + }; if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) if (StringRef(A->getValue()) == "single") return Args.MakeArgString(Output.getFilename()); @@ -911,14 +917,16 @@ const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input, Arg *FinalOutput = Args.getLastArg(options::OPT_o); if (FinalOutput && Args.hasArg(options::OPT_c)) { SmallString<128> T(FinalOutput->getValue()); - llvm::sys::path::replace_extension(T, "dwo"); + llvm::sys::path::remove_filename(T); + T += llvm::sys::path::stem(FinalOutput->getValue()); + AddPostfix(T); return Args.MakeArgString(T); } else { // Use the compilation dir. SmallString<128> T( Args.getLastArgValue(options::OPT_fdebug_compilation_dir)); SmallString<128> F(llvm::sys::path::stem(Input.getBaseInput())); - llvm::sys::path::replace_extension(F, "dwo"); + AddPostfix(F); T += F; return Args.MakeArgString(F); } diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 0028ea0ca337..4947c33b6224 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -49,7 +49,7 @@ void AddRunTimeLibs(const ToolChain &TC, const Driver &D, llvm::opt::ArgStringList &CmdArgs, const llvm::opt::ArgList &Args); -const char *SplitDebugName(const llvm::opt::ArgList &Args, +const char *SplitDebugName(const JobAction &JA, const llvm::opt::ArgList &Args, const InputInfo &Input, const InputInfo &Output); void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 7f7a3956781a..68a75db0b92a 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -939,7 +939,7 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C, if (Args.hasArg(options::OPT_gsplit_dwarf) && getToolChain().getTriple().isOSLinux()) SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, - SplitDebugName(Args, Inputs[0], Output)); + SplitDebugName(JA, Args, Inputs[0], Output)); } namespace { diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index ea9d29a1f831..4267af60bf03 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -55,7 +55,7 @@ void tools::MinGW::Assembler::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_gsplit_dwarf)) SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, - SplitDebugName(Args, Inputs[0], Output)); + SplitDebugName(JA, Args, Inputs[0], Output)); } void tools::MinGW::Linker::AddLibGCC(const ArgList &Args, diff --git a/clang/test/Driver/hip-gsplit-dwarf-options.hip b/clang/test/Driver/hip-gsplit-dwarf-options.hip new file mode 100644 index 000000000000..9f735c048cee --- /dev/null +++ b/clang/test/Driver/hip-gsplit-dwarf-options.hip @@ -0,0 +1,25 @@ +// REQUIRES: zlib, clang-driver, amdgpu-registered-target + +// RUN: %clang -### -target x86_64-unknown-linux-gnu -c \ +// RUN: --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \ +// RUN: --offload-arch=gfx900 \ +// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s + +// RUN: %clang -### -target x86_64-unknown-linux-gnu -c \ +// RUN: -fgpu-rdc --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \ +// RUN: --offload-arch=gfx900 \ +// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s + +// RUN: %clang -### -target x86_64-unknown-linux-gnu \ +// RUN: --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \ +// RUN: --offload-arch=gfx900 \ +// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s + +// RUN: %clang -### -target x86_64-unknown-linux-gnu \ +// RUN: -fgpu-rdc --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \ +// RUN: --offload-arch=gfx900 \ +// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s + +// CHECK-DAG: {{".*clang.*".* "-target-cpu" "gfx906".* "-split-dwarf-output" "hip-gsplit-dwarf-options_gfx906:xnack\+.dwo"}} +// CHECK-DAG: {{".*clang.*".* "-target-cpu" "gfx900".* "-split-dwarf-output" "hip-gsplit-dwarf-options_gfx900.dwo"}} +// CHECK-DAG: {{".*clang.*".* "-target-cpu" "x86-64".* "-split-dwarf-output" "hip-gsplit-dwarf-options.dwo"}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits