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

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 10 09:50:38 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)
----------------
bwlodarcz wrote:

Done

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


More information about the llvm-commits mailing list