Skip to content

Commit 28d6079

Browse files
authored
[clang][Driver] Default to DIOp-based DIExpressions in SPIRV (llvm#1278)
2 parents 0e8c729 + c65331b commit 28d6079

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
@@ -4965,10 +4965,16 @@ renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T,
49654965
renderDwarfFormat(D, T, Args, CmdArgs, EffectiveDWARFVersion);
49664966
RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC);
49674967

4968-
bool EmitDwarfForAMDGCN = EmitDwarf && T.isAMDGCN();
4968+
bool EmitDwarfForAMDGCN =
4969+
EmitDwarf &&
4970+
(T.isAMDGCN() || (T.isSPIRV() && T.getVendor() == llvm::Triple::AMD));
49694971
if (EmitDwarfForAMDGCN)
49704972
CmdArgs.append({"-mllvm", "-amdgpu-spill-cfi-saved-regs"});
49714973
if (Arg *A = Args.getLastArg(options::OPT_gheterogeneous_dwarf_EQ)) {
4974+
if (StringRef(A->getValue()) == "diexpr" && T.isSPIRV() &&
4975+
T.getVendor() == llvm::Triple::AMD)
4976+
D.Diag(clang::diag::err_drv_unsupported_opt_with_suggestion)
4977+
<< A->getAsString(Args) << "-gheterogeneous-dwarf=diexpression";
49724978
A->render(Args, CmdArgs);
49734979
} else if (EmitDwarfForAMDGCN) {
49744980
#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)