From 95b12c811594d1201a624994fb6207116c81d536 Mon Sep 17 00:00:00 2001 From: Diego Novillo Date: Wed, 11 Nov 2015 17:54:37 +0000 Subject: [PATCH] SamplePGO - Fix PR 25482 - Do not rely on llvm.dbg.cu for discriminators The discriminators pass relied on the presence of llvm.dbg.cu to decide whether to add discriminators, but this fails in the case where debug info is only enabled partially when -fprofile-sample-use is active. The reason llvm.dbg.cu is not present in these cases is to prevent codegen from emitting debug info (as it is only used for the sample profile pass). This changes the discriminators pass to also emit discriminators even when debug info is not being emitted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252763 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/AddDiscriminators.cpp | 4 ++-- test/Transforms/AddDiscriminators/basic.ll | 6 +++++- test/Transforms/AddDiscriminators/call.ll | 6 +++++- test/Transforms/AddDiscriminators/first-only.ll | 6 +++++- test/Transforms/AddDiscriminators/multiple.ll | 6 +++++- test/Transforms/AddDiscriminators/no-discriminators.ll | 4 ++++ test/Transforms/AddDiscriminators/oneline.ll | 6 +++++- 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Utils/AddDiscriminators.cpp b/lib/Transforms/Utils/AddDiscriminators.cpp index c8a8b6bd2c0..9125b583212 100644 --- a/lib/Transforms/Utils/AddDiscriminators.cpp +++ b/lib/Transforms/Utils/AddDiscriminators.cpp @@ -98,8 +98,8 @@ FunctionPass *llvm::createAddDiscriminatorsPass() { } static bool hasDebugInfo(const Function &F) { - NamedMDNode *CUNodes = F.getParent()->getNamedMetadata("llvm.dbg.cu"); - return CUNodes != nullptr; + DISubprogram *S = getDISubprogram(&F); + return S != nullptr; } /// \brief Assign DWARF discriminators. diff --git a/test/Transforms/AddDiscriminators/basic.ll b/test/Transforms/AddDiscriminators/basic.ll index cd7455b0a1d..0588562c737 100644 --- a/test/Transforms/AddDiscriminators/basic.ll +++ b/test/Transforms/AddDiscriminators/basic.ll @@ -37,7 +37,11 @@ if.end: ; preds = %if.then, %entry attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -!llvm.dbg.cu = !{!0} +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. +; !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!7, !8} !llvm.ident = !{!9} diff --git a/test/Transforms/AddDiscriminators/call.ll b/test/Transforms/AddDiscriminators/call.ll index c76ee0f15b2..b123b25f2af 100644 --- a/test/Transforms/AddDiscriminators/call.ll +++ b/test/Transforms/AddDiscriminators/call.ll @@ -23,7 +23,11 @@ declare void @_Z3barv() #1 attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } -!llvm.dbg.cu = !{!0} +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. +; !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!7, !8} !llvm.ident = !{!9} diff --git a/test/Transforms/AddDiscriminators/first-only.ll b/test/Transforms/AddDiscriminators/first-only.ll index f9ea7cb8541..20d88b55e96 100644 --- a/test/Transforms/AddDiscriminators/first-only.ll +++ b/test/Transforms/AddDiscriminators/first-only.ll @@ -46,7 +46,11 @@ if.end: ; preds = %if.then, %entry attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -!llvm.dbg.cu = !{!0} +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. +; !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!7, !8} !llvm.ident = !{!9} diff --git a/test/Transforms/AddDiscriminators/multiple.ll b/test/Transforms/AddDiscriminators/multiple.ll index 949ae5c4093..9a05fcd8686 100644 --- a/test/Transforms/AddDiscriminators/multiple.ll +++ b/test/Transforms/AddDiscriminators/multiple.ll @@ -47,7 +47,11 @@ if.end: ; preds = %if.else, %if.then attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } -!llvm.dbg.cu = !{!0} +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. +; !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!7, !8} !llvm.ident = !{!9} diff --git a/test/Transforms/AddDiscriminators/no-discriminators.ll b/test/Transforms/AddDiscriminators/no-discriminators.ll index bbf931360a5..bbba9dc62c4 100644 --- a/test/Transforms/AddDiscriminators/no-discriminators.ll +++ b/test/Transforms/AddDiscriminators/no-discriminators.ll @@ -44,6 +44,10 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { nounwind readnone } +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!10, !11} !llvm.ident = !{!12} diff --git a/test/Transforms/AddDiscriminators/oneline.ll b/test/Transforms/AddDiscriminators/oneline.ll index a5deff4a549..9cb9e1dc61e 100644 --- a/test/Transforms/AddDiscriminators/oneline.ll +++ b/test/Transforms/AddDiscriminators/oneline.ll @@ -54,7 +54,11 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } attributes #1 = { nounwind readnone } -!llvm.dbg.cu = !{!0} +; We should be able to add discriminators even in the absence of llvm.dbg.cu. +; When using sample profiles, the front end will generate line tables but it +; does not generate llvm.dbg.cu to prevent codegen from emitting debug info +; to the final binary. +; !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!10, !11} !llvm.ident = !{!12} -- 2.34.1