diff options
author | Naveen Saini <naveen.kumar.saini@intel.com> | 2021-04-08 11:02:31 +0800 |
---|---|---|
committer | Anuj Mittal <anuj.mittal@intel.com> | 2021-04-08 10:56:20 +0800 |
commit | bdae07eceb51a038115f45a3aee2dd27323dd7b4 (patch) | |
tree | e4571fc8fee50d3eb59c1a00d7259d9798e059d3 /dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch | |
parent | 01cfc99a8f960917433a8a46b41bb4febb5b1993 (diff) | |
download | meta-intel-bdae07eceb51a038115f45a3aee2dd27323dd7b4.tar.gz |
llvm-project-source: backport OpenCL recommended patches
Updating SPIRV-LLVM-Translator srcrev to latest commits for
* llvm_releae_100
* llvm_release_110
Backport opencl-clang recommended llvm/clang patches.
llvm-10:
https://github.com/intel/opencl-clang/tree/ocl-open-100/patches
llvm-11:
https://github.com/intel/opencl-clang/tree/ocl-open-110/patches
Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Diffstat (limited to 'dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch')
-rw-r--r-- | dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch b/dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch new file mode 100644 index 00000000..923b871f --- /dev/null +++ b/dynamic-layers/clang-layer/recipes-devtools/clang/files/0001-Fix-debug-info-of-work-item-builtin-translation-745.patch | |||
@@ -0,0 +1,119 @@ | |||
1 | From 200c200eb19602ffd7c8f29d0b2df9df1fd311bf Mon Sep 17 00:00:00 2001 | ||
2 | From: Naveen Saini <naveen.kumar.saini@intel.com> | ||
3 | Date: Wed, 7 Apr 2021 17:44:20 +0800 | ||
4 | Subject: [PATCH] Fix debug info of work-item builtin translation (#745) | ||
5 | |||
6 | debug info of work-item builtins are lost in both llvm IR -> spirv and | ||
7 | spirv -> llvm IR translations. See #744 | ||
8 | |||
9 | Upstream-Status: Backport [https://github.com/KhronosGroup/SPIRV-LLVM-Translator/commit/c734c5c8bbd3012a09c610e4be68e90cc603c580] | ||
10 | Signed-off-by: Wenju He <wenju.he@intel.com> | ||
11 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
12 | --- | ||
13 | lib/SPIRV/OCL20ToSPIRV.cpp | 5 ++- | ||
14 | lib/SPIRV/SPIRVReader.cpp | 1 + | ||
15 | test/DebugInfo/builtin-get-global-id.ll | 60 +++++++++++++++++++++++++ | ||
16 | 3 files changed, 65 insertions(+), 1 deletion(-) | ||
17 | create mode 100644 test/DebugInfo/builtin-get-global-id.ll | ||
18 | |||
19 | diff --git a/lib/SPIRV/OCL20ToSPIRV.cpp b/lib/SPIRV/OCL20ToSPIRV.cpp | ||
20 | index 1262c48c..a742c8cf 100644 | ||
21 | --- a/lib/SPIRV/OCL20ToSPIRV.cpp | ||
22 | +++ b/lib/SPIRV/OCL20ToSPIRV.cpp | ||
23 | @@ -1297,11 +1297,14 @@ void OCL20ToSPIRV::transWorkItemBuiltinsToVariables() { | ||
24 | for (auto UI = I.user_begin(), UE = I.user_end(); UI != UE; ++UI) { | ||
25 | auto CI = dyn_cast<CallInst>(*UI); | ||
26 | assert(CI && "invalid instruction"); | ||
27 | - Value *NewValue = new LoadInst(BV, "", CI); | ||
28 | + const DebugLoc &DLoc = CI->getDebugLoc(); | ||
29 | + Instruction *NewValue = new LoadInst(BV, "", CI); | ||
30 | + NewValue->setDebugLoc(DLoc); | ||
31 | LLVM_DEBUG(dbgs() << "Transform: " << *CI << " => " << *NewValue << '\n'); | ||
32 | if (IsVec) { | ||
33 | NewValue = | ||
34 | ExtractElementInst::Create(NewValue, CI->getArgOperand(0), "", CI); | ||
35 | + NewValue->setDebugLoc(DLoc); | ||
36 | LLVM_DEBUG(dbgs() << *NewValue << '\n'); | ||
37 | } | ||
38 | NewValue->takeName(CI); | ||
39 | diff --git a/lib/SPIRV/SPIRVReader.cpp b/lib/SPIRV/SPIRVReader.cpp | ||
40 | index 16a3dd38..528f6663 100644 | ||
41 | --- a/lib/SPIRV/SPIRVReader.cpp | ||
42 | +++ b/lib/SPIRV/SPIRVReader.cpp | ||
43 | @@ -307,6 +307,7 @@ bool SPIRVToLLVM::transOCLBuiltinFromVariable(GlobalVariable *GV, | ||
44 | auto Replace = [&](std::vector<Value *> Arg, Instruction *I) { | ||
45 | auto Call = CallInst::Create(Func, Arg, "", I); | ||
46 | Call->takeName(I); | ||
47 | + Call->setDebugLoc(I->getDebugLoc()); | ||
48 | setAttrByCalledFunc(Call); | ||
49 | SPIRVDBG(dbgs() << "[transOCLBuiltinFromVariable] " << *I << " -> " << *Call | ||
50 | << '\n';) | ||
51 | diff --git a/test/DebugInfo/builtin-get-global-id.ll b/test/DebugInfo/builtin-get-global-id.ll | ||
52 | new file mode 100644 | ||
53 | index 00000000..a4a00e63 | ||
54 | --- /dev/null | ||
55 | +++ b/test/DebugInfo/builtin-get-global-id.ll | ||
56 | @@ -0,0 +1,60 @@ | ||
57 | +; Check debug info of builtin get_global_id is preserved from LLVM IR to spirv | ||
58 | +; and spirv to LLVM IR translation. | ||
59 | + | ||
60 | +; Original .cl source: | ||
61 | +; kernel void test() { | ||
62 | +; size_t gid = get_global_id(0); | ||
63 | +; } | ||
64 | + | ||
65 | +; Command line: | ||
66 | +; ./clang -cc1 1.cl -triple spir64 -cl-std=cl2.0 -emit-llvm -finclude-default-header -debug-info-kind=line-tables-only -O0 | ||
67 | + | ||
68 | +; RUN: llvm-as %s -o %t.bc | ||
69 | +; RUN: llvm-spirv %t.bc -spirv-text -o - | FileCheck %s --check-prefix CHECK-SPIRV | ||
70 | +; RUN: llvm-spirv %t.bc -o %t.spv | ||
71 | +; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o - | FileCheck %s | ||
72 | + | ||
73 | +target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" | ||
74 | +target triple = "spir64" | ||
75 | + | ||
76 | +; CHECK-SPIRV: ExtInst {{.*}} DebugScope | ||
77 | +; CHECK-SPIRV-NEXT: Line {{[0-9]+}} 2 16 | ||
78 | +; CHECK-SPIRV-NEXT: Load {{[0-9]+}} [[LoadRes:[0-9]+]] | ||
79 | +; CHECK-SPIRV-NEXT: CompositeExtract {{[0-9]+}} {{[0-9]+}} [[LoadRes]] 0 | ||
80 | + | ||
81 | +; Function Attrs: convergent noinline norecurse nounwind optnone | ||
82 | +define spir_kernel void @test() #0 !dbg !7 !kernel_arg_addr_space !2 !kernel_arg_access_qual !2 !kernel_arg_type !2 !kernel_arg_base_type !2 !kernel_arg_type_qual !2 { | ||
83 | +entry: | ||
84 | + %gid = alloca i64, align 8 | ||
85 | + %call = call spir_func i64 @_Z13get_global_idj(i32 0) #2, !dbg !10 | ||
86 | +; CHECK: %call = call spir_func i64 @_Z13get_global_idj(i32 0) #1, !dbg [[DBG:![0-9]+]] | ||
87 | + store i64 %call, i64* %gid, align 8, !dbg !11 | ||
88 | + ret void, !dbg !12 | ||
89 | +} | ||
90 | + | ||
91 | +; Function Attrs: convergent nounwind readnone | ||
92 | +declare spir_func i64 @_Z13get_global_idj(i32) #1 | ||
93 | + | ||
94 | +attributes #0 = { convergent noinline norecurse nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "uniform-work-group-size"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | ||
95 | +attributes #1 = { convergent nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | ||
96 | +attributes #2 = { convergent nounwind readnone } | ||
97 | + | ||
98 | +!llvm.dbg.cu = !{!0} | ||
99 | +!llvm.module.flags = !{!3, !4} | ||
100 | +!opencl.ocl.version = !{!5} | ||
101 | +!opencl.spir.version = !{!5} | ||
102 | +!llvm.ident = !{!6} | ||
103 | + | ||
104 | +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 12.0.0 (https://github.com/llvm/llvm-project.git b5bc56da8aa23dc57db9d286b0591dbcf9b1bdd3)", isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !2, nameTableKind: None) | ||
105 | +!1 = !DIFile(filename: "<stdin>", directory: "") | ||
106 | +!2 = !{} | ||
107 | +!3 = !{i32 2, !"Debug Info Version", i32 3} | ||
108 | +!4 = !{i32 1, !"wchar_size", i32 4} | ||
109 | +!5 = !{i32 2, i32 0} | ||
110 | +!6 = !{!"clang version 12.0.0 (https://github.com/llvm/llvm-project.git b5bc56da8aa23dc57db9d286b0591dbcf9b1bdd3)"} | ||
111 | +!7 = distinct !DISubprogram(name: "test", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2) | ||
112 | +!8 = !DIFile(filename: "1.cl", directory: "") | ||
113 | +!9 = !DISubroutineType(types: !2) | ||
114 | +!10 = !DILocation(line: 2, column: 16, scope: !7) | ||
115 | +!11 = !DILocation(line: 2, column: 10, scope: !7) | ||
116 | +!12 = !DILocation(line: 3, column: 1, scope: !7) | ||
117 | -- | ||
118 | 2.17.1 | ||
119 | |||