[llvm] [SPIRV] Emitting DebugSource, DebugCompileUnit (PR #97558)

Michal Paszkowski via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 9 15:56:51 PDT 2024


================
@@ -0,0 +1,129 @@
+; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+
+source_filename = "example.c"
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1"
+target triple = "spir"
+
+%struct.A = type { i32, float }
+
+; CHECK-SPIRV: [[ext_inst_non_semantic:%[0-9]+]] = OpExtInstImport "NonSemantic.Shader.DebugInfo.100"
+; CHECK-SPIRV: [[filename_str:%[0-9]+]] = OpString "/AAAAAAAAAA/BBBBBBBB/CCCCCCCCC/example.c" 
+; CHECK-SPIRV-DAG: [[type_void:%[0-9]+]] = OpTypeVoid
+; CHECK-SPIRV-DAG: [[type_i32:%[0-9]+]] = OpTypeInt 32 0
+; CHECK-SPIRV-DAG: [[dwarf_version:%[0-9]+]] = OpConstant [[type_i32]] 5 
+; CHECK-SPIRV-DAG: [[debug_info_version:%[0-9]+]] = OpConstant [[type_i32]] 21 
+; CHECK-SPIRV-DAG: [[source_language:%[0-9]+]] = OpConstant [[type_i32]] 3 
+; CHECK-SPIRV: [[debug_source:%[0-9]+]] = OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugSource [[filename_str]]
+; CHECK-SPIRV: [[debug_compiation_unit:%[0-9]+]] = OpExtInst [[type_void]] [[ext_inst_non_semantic]] DebugCompilationUnit [[source_language]] [[dwarf_version]] [[debug_source]] [[debug_info_version]]
+
+; Function Attrs: convergent noinline norecurse nounwind optnone
+define dso_local spir_func i32 @bar(i32 noundef %n) #0 !dbg !8 {
+entry:
+  %n.addr = alloca i32, align 4
+  store i32 %n, ptr %n.addr, align 4
+    #dbg_declare(ptr %n.addr, !13, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !14)
+  %0 = load i32, ptr %n.addr, align 4, !dbg !15
+  %1 = load i32, ptr %n.addr, align 4, !dbg !16
+  %mul = mul nsw i32 %0, %1, !dbg !17
+  %2 = load i32, ptr %n.addr, align 4, !dbg !18
+  %add = add nsw i32 %mul, %2, !dbg !19
+  ret i32 %add, !dbg !20
+}
+
+; Function Attrs: convergent noinline norecurse nounwind optnone
+define dso_local spir_func i32 @foo(i32 noundef %num, ptr addrspace(4) noundef %a) #0 !dbg !21 {
+entry:
+  %num.addr = alloca i32, align 4
+  %a.addr = alloca ptr addrspace(4), align 4
+  store i32 %num, ptr %num.addr, align 4
+    #dbg_declare(ptr %num.addr, !30, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !31)
+  store ptr addrspace(4) %a, ptr %a.addr, align 4
+    #dbg_declare(ptr %a.addr, !32, !DIExpression(DW_OP_constu, 0, DW_OP_swap, DW_OP_xderef), !33)
+  %0 = load i32, ptr %num.addr, align 4, !dbg !34
+  %1 = load i32, ptr %num.addr, align 4, !dbg !35
+  %mul = mul nsw i32 %0, %1, !dbg !36
+  %2 = load ptr addrspace(4), ptr %a.addr, align 4, !dbg !37
+  %a1 = getelementptr inbounds %struct.A, ptr addrspace(4) %2, i32 0, i32 0, !dbg !38
+  %3 = load i32, ptr addrspace(4) %a1, align 4, !dbg !38
+  %mul2 = mul nsw i32 %mul, %3, !dbg !39
+  %conv = sitofp i32 %mul2 to float, !dbg !34
+  %4 = load ptr addrspace(4), ptr %a.addr, align 4, !dbg !40
+  %b = getelementptr inbounds %struct.A, ptr addrspace(4) %4, i32 0, i32 1, !dbg !41
+  %5 = load float, ptr addrspace(4) %b, align 4, !dbg !41
+  %6 = load i32, ptr %num.addr, align 4, !dbg !42
+  %call = call spir_func i32 @bar(i32 noundef %6) #2, !dbg !43
+  %conv4 = sitofp i32 %call to float, !dbg !43
+  %7 = call float @llvm.fmuladd.f32(float %conv, float %5, float %conv4), !dbg !44
+  %conv5 = fptosi float %7 to i32, !dbg !34
+  ret i32 %conv5, !dbg !45
+}
+
+; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
----------------
michalpaszkowski wrote:

Please remove all attributes and metadata which are not relevant to this one specific test case. This will make debugging much easier for people who do not know much about the particular area later,

https://github.com/llvm/llvm-project/pull/97558


More information about the llvm-commits mailing list