Se Jong Oh via llvm-dev
2018-Mar-14 19:55 UTC
[llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred
Hi Jonas, Thanks for taking a look! It makes linear-dbg-value.ll pass for my target by producing DEBUG_VALUEs correctly. I also tried a simple function with few operations and confirmed DEBUG_VALUEs which are not produced without trasferDbgValues in SetPromotedInteger. Thanks, Sejong From: jdevlieghere at apple.com <jdevlieghere at apple.com> Sent: Wednesday, March 14, 2018 4:07 AM To: Se Jong Oh <sejooh at microsoft.com> Cc: Vedant Kumar <vsk at apple.com>; llvm-dev at lists.llvm.org; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred Hi Sejong, Indeed, I think you are right and we should call transferDbgValues in SetPromotedInteger. I couldn’t immediately find a suitable in-tree test to verify this though. Can you check and let me know whether this works for your target? Thanks, Jonas On Mar 13, 2018, at 7:45 PM, Se Jong Oh <sejooh at microsoft.com<mailto:sejooh at microsoft.com>> wrote: Thanks for help! I think that sign extension is not involved here. PromoteIntegerResult is called since i32 is not a legal type in my target and the legalizer promotes operations with i32 result type to i64 operations. I think that SetPromotedInteger seems to be a common place for all promotions like SetExpandedInteger. Jonas, I would appreciate it if you can guide me about whether my understanding is correct or not. Thanks, Sejong From: vsk at apple.com<mailto:vsk at apple.com> <vsk at apple.com<mailto:vsk at apple.com>> Sent: Friday, March 9, 2018 3:19 PM To: Se Jong Oh <sejooh at microsoft.com<mailto:sejooh at microsoft.com>> Cc: llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>; Jonas Devlieghere <jdevlieghere at apple.com<mailto:jdevlieghere at apple.com>>; Adrian Prantl <aprantl at apple.com<mailto:aprantl at apple.com>>; pidgeot18 at gmail.com<mailto:pidgeot18 at gmail.com> Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred + Adrian, Joshua + Jonas, since he contributed the transferDbgValues change in DAGTypeLegalizer::SetExpandedInteger On Mar 8, 2018, at 5:44 PM, Se Jong Oh via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote: Hi, I have a problem that dbg_value nodes are not transferred when integer DAG nodes are promoted. For example, an i32 add node is promoted to a i64 add node by DAGTypeLegalizer::PromoteIntegerResult and its dbg_value node is not transferred to the new node. t9: i32 = add nsw t5, t8 --> t31: i64 = add t30, t7 ; the dbg_value node is not transferred to the new i64 add node. For expansion, DAGTypeLegalizer::SetExpandedInteger calls transferDbgValues() but I couldn’t find any place to call trasnferDbgValues() for integer type promotion in DAGTypeLegalizer ::SetPromotedInteger and other places. Maybe the right place to do this is within the PromoteIntRes_ helper for sign extensions? best, vedant I am wondering If I miss anything or the legalization needs to call transferDbgValues() for this case. I found this problem because a recently added unittest, DebugInfo/X86/linear-dbg-value.ll fails for my project, and the x86 and aarch64 backends don’t have this problem since they don’t promote i32 add nodes. Thanks, Sejong _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-dev&data=04%7C01%7Csejooh%40microsoft.com%7Cf8d9536de7c74f3a20ce08d586141eb2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636562343324953221%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwifQ%3D%3D%7C-2&sdata=S9HQs6h1fxCU2LhD0zPjI%2BO4BBSVgTnn6a8Cz9ji7iA%3D&reserved=0> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180314/0bd9458c/attachment.html>
Jonas Devlieghere via llvm-dev
2018-Mar-15 15:42 UTC
[llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred
> On Mar 14, 2018, at 7:55 PM, Se Jong Oh <sejooh at microsoft.com> wrote: > > Hi Jonas, > > Thanks for taking a look! It makes linear-dbg-value.ll pass for my target by producing DEBUG_VALUEs correctly. I also tried a simple function with few operations and confirmed DEBUG_VALUEs which are not produced without trasferDbgValues in SetPromotedInteger.That’s great news! Do you plan on creating a patch for this upstream?> > Thanks, > Sejong > > From: jdevlieghere at apple.com <jdevlieghere at apple.com> > Sent: Wednesday, March 14, 2018 4:07 AM > To: Se Jong Oh <sejooh at microsoft.com> > Cc: Vedant Kumar <vsk at apple.com>; llvm-dev at lists.llvm.org; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com > Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred > > Hi Sejong, > > Indeed, I think you are right and we should call transferDbgValues in SetPromotedInteger. > > I couldn’t immediately find a suitable in-tree test to verify this though. Can you check and let me know whether this works for your target? > > Thanks, > Jonas > > > On Mar 13, 2018, at 7:45 PM, Se Jong Oh <sejooh at microsoft.com> wrote: > > Thanks for help! I think that sign extension is not involved here. PromoteIntegerResult is called since i32 is not a legal type in my target and the legalizer promotes operations with i32 result type to i64 operations. I think that SetPromotedInteger seems to be a common place for all promotions like SetExpandedInteger. > > Jonas, I would appreciate it if you can guide me about whether my understanding is correct or not. > > Thanks, > Sejong > > > > From: vsk at apple.com <vsk at apple.com> > Sent: Friday, March 9, 2018 3:19 PM > To: Se Jong Oh <sejooh at microsoft.com> > Cc: llvm-dev at lists.llvm.org; Jonas Devlieghere <jdevlieghere at apple.com>; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com > Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred > > + Adrian, Joshua > + Jonas, since he contributed the transferDbgValues change in DAGTypeLegalizer::SetExpandedInteger > > On Mar 8, 2018, at 5:44 PM, Se Jong Oh via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hi, > > I have a problem that dbg_value nodes are not transferred when integer DAG nodes are promoted. For example, an i32 add node is promoted to a i64 add node by DAGTypeLegalizer::PromoteIntegerResult and its dbg_value node is not transferred to the new node. > > t9: i32 = add nsw t5, t8 à t31: i64 = add t30, t7 ; the dbg_value node is not transferred to the new i64 add node. > > For expansion, DAGTypeLegalizer::SetExpandedInteger calls transferDbgValues() but I couldn’t find any place to call trasnferDbgValues() for integer type promotion in DAGTypeLegalizer ::SetPromotedInteger and other places. > > Maybe the right place to do this is within the PromoteIntRes_ helper for sign extensions? > > best, > vedant > > > > I am wondering If I miss anything or the legalization needs to call transferDbgValues() for this case. > > I found this problem because a recently added unittest, DebugInfo/X86/linear-dbg-value.ll fails for my project, and the x86 and aarch64 backends don’t have this problem since they don’t promote i32 add nodes. > > Thanks, > Sejong > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Se Jong Oh via llvm-dev
2018-Apr-30 20:49 UTC
[llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred
Hi Jonas, I have another case that DBG_VALUE is not produced. I would appreciate it if you could take a quick look at the testcase below. test code: llc -mtriple=aarch64 -stop-after=livedebugvalues -o - test.ll ; Function Attrs: nounwind ssp uwtable define void @f() #0 !dbg !4 { entry: tail call void @h(i16 0) #2, !dbg !14 %call = tail call i16 (...) @g() #2, !dbg !15 tail call void @llvm.dbg.value(metadata i16 %call, metadata !8, metadata !16), !dbg !17 tail call void @h(i16 %call) #2, !dbg !18 ret void, !dbg !19 } For the second call, the AArch64 ISel lowering produces a 32-bit CopyFromReg from w0. t18: ch,glue = AArch64ISD::CALL t15, TargetGlobalAddress:i64<i16 (...)* @g> 0, RegisterMask:Untyped, test.c:5:11 t19: ch,glue = callseq_end t18, TargetConstant:i64<0>, TargetConstant:i64<0>, t18:1, test.c:5:11 t20: i32,ch,glue = CopyFromReg t19, Register:i32 $w0, t19:1, test.c:5:11 Then, TargetLowering::LowerCallTo adds a truncate node since the function return type is i16. t21: i16 = truncate t20, test.c:5:11 When lowering the dbg.value intrinsic, a SDDbgValue node is attached to the truncate since it is the final result of the call. Lowering the third call constructs any_extend(t21) for the 32-bit register type but optimizes out the truncate node by the following code, and it seems that the DbgValue node on the truncate is also lost. SelectionDAG::getNode(...) ... // (ext (trunx x)) -> x if (OpOpcode == ISD::TRUNCATE) { SDValue OpOp = Operand.getOperand(0); if (OpOp.getValueType() == VT) return OpOp; } I am wondering if we can just transfer the dbg node here or we can have a better solution. The entire test file is here: ; ModuleID = 'test.ll' target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx" ; Function Attrs: nounwind ssp uwtable define void @f() #0 !dbg !4 { entry: tail call void @h(i16 0) #2, !dbg !14 %call = tail call i16 (...) @g() #2, !dbg !15 tail call void @llvm.dbg.value(metadata i16 %call, metadata !8, metadata !16), !dbg !17 tail call void @h(i16 %call) #2, !dbg !18 ret void, !dbg !19 } declare void @h(i16) declare i16 @g(...) ; Function Attrs: nounwind readnone declare void @llvm.dbg.value(metadata, metadata, metadata) #1 attributes #0 = { nounwind ssp uwtable "no-frame-pointer-elim"="true" } attributes #1 = { nounwind readnone } attributes #2 = { nounwind } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!10, !11, !12} !llvm.ident = !{!13} !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) !1 = !DIFile(filename: "test.c", directory: "/Volumes/Data/llvm") !2 = !{} !4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !5, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: true, unit: !0, variables: !7) !5 = !DISubroutineType(types: !6) !6 = !{null} !7 = !{!8} !8 = !DILocalVariable(name: "a", scope: !4, file: !1, line: 5, type: !9) !9 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) !10 = !{i32 2, !"Dwarf Version", i32 2} !11 = !{i32 2, !"Debug Info Version", i32 3} !12 = !{i32 1, !"PIC Level", i32 2} !13 = !{!"clang version 3.9.0 "} !14 = !DILocation(line: 4, column: 3, scope: !4) !15 = !DILocation(line: 5, column: 11, scope: !4) !16 = !DIExpression() !17 = !DILocation(line: 5, column: 7, scope: !4) !18 = !DILocation(line: 6, column: 3, scope: !4) !19 = !DILocation(line: 7, column: 1, scope: !4) Thanks, Sejong -----Original Message----- From: jdevlieghere at apple.com <jdevlieghere at apple.com> Sent: Thursday, March 15, 2018 8:43 AM To: Se Jong Oh <sejooh at microsoft.com> Cc: Vedant Kumar <vsk at apple.com>; llvm-dev at lists.llvm.org; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred> On Mar 14, 2018, at 7:55 PM, Se Jong Oh <sejooh at microsoft.com> wrote: > > Hi Jonas, > > Thanks for taking a look! It makes linear-dbg-value.ll pass for my target by producing DEBUG_VALUEs correctly. I also tried a simple function with few operations and confirmed DEBUG_VALUEs which are not produced without trasferDbgValues in SetPromotedInteger.That’s great news! Do you plan on creating a patch for this upstream?> > Thanks, > Sejong > > From: jdevlieghere at apple.com <jdevlieghere at apple.com> > Sent: Wednesday, March 14, 2018 4:07 AM > To: Se Jong Oh <sejooh at microsoft.com> > Cc: Vedant Kumar <vsk at apple.com>; llvm-dev at lists.llvm.org; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com > Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred > > Hi Sejong, > > Indeed, I think you are right and we should call transferDbgValues in SetPromotedInteger. > > I couldn’t immediately find a suitable in-tree test to verify this though. Can you check and let me know whether this works for your target? > > Thanks, > Jonas > > > On Mar 13, 2018, at 7:45 PM, Se Jong Oh <sejooh at microsoft.com> wrote: > > Thanks for help! I think that sign extension is not involved here. PromoteIntegerResult is called since i32 is not a legal type in my target and the legalizer promotes operations with i32 result type to i64 operations. I think that SetPromotedInteger seems to be a common place for all promotions like SetExpandedInteger. > > Jonas, I would appreciate it if you can guide me about whether my understanding is correct or not. > > Thanks, > Sejong > > > > From: vsk at apple.com <vsk at apple.com> > Sent: Friday, March 9, 2018 3:19 PM > To: Se Jong Oh <sejooh at microsoft.com> > Cc: llvm-dev at lists.llvm.org; Jonas Devlieghere <jdevlieghere at apple.com>; Adrian Prantl <aprantl at apple.com>; pidgeot18 at gmail.com > Subject: Re: [llvm-dev] [SelectionDAG] DbgValue nodes aren't transferred > > + Adrian, Joshua > + Jonas, since he contributed the transferDbgValues change in DAGTypeLegalizer::SetExpandedInteger > > On Mar 8, 2018, at 5:44 PM, Se Jong Oh via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > Hi, > > I have a problem that dbg_value nodes are not transferred when integer DAG nodes are promoted. For example, an i32 add node is promoted to a i64 add node by DAGTypeLegalizer::PromoteIntegerResult and its dbg_value node is not transferred to the new node. > > t9: i32 = add nsw t5, t8 à t31: i64 = add t30, t7 ; the dbg_value node is not transferred to the new i64 add node. > > For expansion, DAGTypeLegalizer::SetExpandedInteger calls transferDbgValues() but I couldn’t find any place to call trasnferDbgValues() for integer type promotion in DAGTypeLegalizer ::SetPromotedInteger and other places. > > Maybe the right place to do this is within the PromoteIntRes_ helper for sign extensions? > > best, > vedant > > > > I am wondering If I miss anything or the legalization needs to call transferDbgValues() for this case. > > I found this problem because a recently added unittest, DebugInfo/X86/linear-dbg-value.ll fails for my project, and the x86 and aarch64 backends don’t have this problem since they don’t promote i32 add nodes. > > Thanks, > Sejong > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-dev&data=04%7C01%7Csejooh%40microsoft.com%7C1334821c889d440e50ae08d58a8b6a62%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636567253755049370%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwifQ%3D%3D%7C-1&sdata=dmkgOHDLY6YWx1SISIdOg8a%2BC5hpT3mITrZZGwV715E%3D&reserved=0