Skip to content

Commit c65331b

Browse files
committed
[clang][Driver] Default to DIOp-based DIExpressions in SPIRV
1 parent 21f46a5 commit c65331b

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4954,10 +4954,16 @@ renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T,
49544954
renderDwarfFormat(D, T, Args, CmdArgs, EffectiveDWARFVersion);
49554955
RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC);
49564956

4957-
bool EmitDwarfForAMDGCN = EmitDwarf && T.isAMDGCN();
4957+
bool EmitDwarfForAMDGCN =
4958+
EmitDwarf &&
4959+
(T.isAMDGCN() || (T.isSPIRV() && T.getVendor() == llvm::Triple::AMD));
49584960
if (EmitDwarfForAMDGCN)
49594961
CmdArgs.append({"-mllvm", "-amdgpu-spill-cfi-saved-regs"});
49604962
if (Arg *A = Args.getLastArg(options::OPT_gheterogeneous_dwarf_EQ)) {
4963+
if (StringRef(A->getValue()) == "diexpr" && T.isSPIRV() &&
4964+
T.getVendor() == llvm::Triple::AMD)
4965+
D.Diag(clang::diag::err_drv_unsupported_opt_with_suggestion)
4966+
<< A->getAsString(Args) << "-gheterogeneous-dwarf=diexpression";
49614967
A->render(Args, CmdArgs);
49624968
} else if (EmitDwarfForAMDGCN) {
49634969
#ifndef NDEBUG

clang/test/Driver/amdgpu-debug.cl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,14 @@
4646
// Check that -gheterogeneous-dwarf= fails for unknown option
4747
// RUN: not %clang -target amdgcn-amd-amdhsa -x cl -c -nogpuinc -nogpulib -emit-llvm -g -gheterogeneous-dwarf=unknown %s 2>&1 | FileCheck -check-prefix=CHECK-UNKNOWN %s
4848
// CHECK-UNKNOWN: error: invalid value
49+
50+
// Check that =diexpression is implied by -g + spirv
51+
// RUN: %clang -### -target spirv64-amd-amdhsa -x cl -c -nogpuinc -nogpulib -emit-llvm -g %s 2>&1 | FileCheck -check-prefix=CHECK-SPIRV %s
52+
// CHECK-SPIRV: "-cc1"
53+
// CHECK-SPIRV-DAG: "-mllvm" "-amdgpu-spill-cfi-saved-regs"
54+
// CHECK-SPIRV-DAG: "-gheterogeneous-dwarf=diexpression"
55+
// CHECK-SPIRV-DAG: "-debugger-tuning=gdb"
56+
57+
// Check that =diexpr produces an error on spirv.
58+
// RUN: not %clang -### -target spirv64-amd-amdhsa -x cl -c -nogpuinc -nogpulib -emit-llvm -g -gheterogeneous-dwarf=diexpr %s 2>&1 | FileCheck -check-prefix=CHECK-SPIRV-ERR %s
59+
// CHECK-SPIRV-ERR: error: unsupported option '-gheterogeneous-dwarf=diexpr'; did you mean '-gheterogeneous-dwarf=diexpression'?

0 commit comments

Comments
 (0)