diff options
author | Sergei Azovskov <lastg@fb.com> | 2018-09-14 14:56:37 +0100 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2018-09-14 15:08:41 +0100 |
commit | 64c54fff2d6534e1229359a8d357ec1dc6c21b73 (patch) | |
tree | 09ddba477cadfcfe027289510bc191b176f48bfd /compiler/cmm | |
parent | ecbe26b6966a3a64f4e22e862370536b1dd4440f (diff) | |
download | haskell-64c54fff2d6534e1229359a8d357ec1dc6c21b73.tar.gz |
Mark system and internal symbols as private symbols in asm
Summary:
This marks system and internal symbols as private in asm output so those
random generated sysmbols won't appear in .symtab
Reasoning:
* internal symbols don't help to debug because names are just random
* the symbols style breaks perf logic
* internal symbols can take ~75% of the .symtab. In the same time
.symtab can take about 20% of the binary file size
Notice:
This diff mostly makes sense on top of the D4713 (or similar)
Test Plan:
tests
Perf from D4713
```
7.97% FibbSlow FibbSlow [.] c3rM_info
6.75% FibbSlow FibbSlow [.] 0x000000000032cfa8
6.63% FibbSlow FibbSlow [.] cifA_info
4.98% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_eqIntegerzh_info
4.55% FibbSlow FibbSlow [.] chXn_info
4.52% FibbSlow FibbSlow [.] c3rH_info
4.45% FibbSlow FibbSlow [.] chZB_info
4.04% FibbSlow FibbSlow [.] Main_fibbzuslow_info
4.03% FibbSlow FibbSlow [.] stg_ap_0_fast
3.76% FibbSlow FibbSlow [.] chXA_info
3.67% FibbSlow FibbSlow [.] cifu_info
3.25% FibbSlow FibbSlow [.] ci4r_info
2.64% FibbSlow FibbSlow [.] s3rf_info
2.42% FibbSlow FibbSlow [.] s3rg_info
2.39% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_eqInteger_info
2.25% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_minusInteger_info
2.17% FibbSlow FibbSlow [.] ghczmprim_GHCziClasses_zeze_info
2.09% FibbSlow FibbSlow [.] cicc_info
2.03% FibbSlow FibbSlow [.] 0x0000000000331e15
2.02% FibbSlow FibbSlow [.] s3ri_info
1.91% FibbSlow FibbSlow [.] 0x0000000000331bb8
1.89% FibbSlow FibbSlow [.] ci4N_info
...
```
Perf from this patch:
```
15.37% FibbSlow FibbSlow [.] Main_fibbzuslow_info
15.33% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_minusInteger_info
13.34% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_eqIntegerzh_info
9.24% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_plusInteger_info
9.08% FibbSlow FibbSlow [.] frame_dummy
8.25% FibbSlow FibbSlow [.] integerzmgmp_GHCziIntegerziType_eqInteger_info
4.29% FibbSlow FibbSlow [.] 0x0000000000321ab0
3.84% FibbSlow FibbSlow [.] stg_ap_0_fast
3.07% FibbSlow FibbSlow [.] ghczmprim_GHCziClasses_zeze_info
2.39% FibbSlow FibbSlow [.] 0x0000000000321ab7
1.90% FibbSlow FibbSlow [.] 0x00000000003266b8
1.88% FibbSlow FibbSlow [.] base_GHCziNum_zm_info
1.83% FibbSlow FibbSlow [.] 0x0000000000326915
1.34% FibbSlow FibbSlow [.] 0x00000000003248cc
1.07% FibbSlow FibbSlow [.] base_GHCziNum_zp_info
0.98% FibbSlow FibbSlow [.] 0x00000000003247c8
0.80% FibbSlow FibbSlow [.] 0x0000000000121498
0.79% FibbSlow FibbSlow [.] stg_gc_noregs
0.75% FibbSlow FibbSlow [.] 0x0000000000321ad6
0.67% FibbSlow FibbSlow [.] 0x0000000000321aca
0.64% FibbSlow FibbSlow [.] 0x0000000000321b4a
0.61% FibbSlow FibbSlow [.] 0x00000000002ff633
```
Reviewers: simonmar, niteria, bgamari
Reviewed By: simonmar
Subscribers: lelf, angerman, olsner, rwbarton, thomie, carter
Differential Revision: https://phabricator.haskell.org/D4722
Diffstat (limited to 'compiler/cmm')
-rw-r--r-- | compiler/cmm/CLabel.hs | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/compiler/cmm/CLabel.hs b/compiler/cmm/CLabel.hs index 1a9bc73add..1ba0d89c37 100644 --- a/compiler/cmm/CLabel.hs +++ b/compiler/cmm/CLabel.hs @@ -1135,20 +1135,12 @@ instance Outputable CLabel where pprCLabel :: Platform -> CLabel -> SDoc -pprCLabel platform (LocalBlockLabel u) - = getPprStyle $ \ sty -> - if asmStyle sty then - ptext (asmTempLabelPrefix platform) <> pprUniqueAlways u - else - char '_' <> pprUniqueAlways u +pprCLabel _ (LocalBlockLabel u) + = tempLabelPrefixOrUnderscore <> pprUniqueAlways u pprCLabel platform (AsmTempLabel u) | not (platformUnregisterised platform) - = getPprStyle $ \ sty -> - if asmStyle sty then - ptext (asmTempLabelPrefix platform) <> pprUniqueAlways u - else - char '_' <> pprUniqueAlways u + = tempLabelPrefixOrUnderscore <> pprUniqueAlways u pprCLabel platform (AsmTempDerivedLabel l suf) | cGhcWithNativeCodeGen == "YES" @@ -1168,7 +1160,15 @@ pprCLabel _ PicBaseLabel pprCLabel platform (DeadStripPreventer lbl) | cGhcWithNativeCodeGen == "YES" - = pprCLabel platform lbl <> text "_dsp" + = + {- + `lbl` can be temp one but we need to ensure that dsp label will stay + in the final binary so we prepend non-temp prefix ("dsp_") and + optional `_` (underscore) because this is how you mark non-temp symbols + on some platforms (Darwin) + -} + maybe_underscore $ text "dsp_" + <> pprCLabel platform lbl <> text "_dsp" pprCLabel _ (StringLitLabel u) | cGhcWithNativeCodeGen == "YES" @@ -1199,9 +1199,11 @@ pprCLbl (StringLitLabel u) = pprUniqueAlways u <> text "_str" pprCLbl (SRTLabel u) - = pprUniqueAlways u <> pp_cSEP <> text "srt" + = tempLabelPrefixOrUnderscore <> pprUniqueAlways u <> pp_cSEP <> text "srt" -pprCLbl (LargeBitmapLabel u) = text "b" <> pprUniqueAlways u <> pp_cSEP <> text "btm" +pprCLbl (LargeBitmapLabel u) = + tempLabelPrefixOrUnderscore + <> char 'b' <> pprUniqueAlways u <> pp_cSEP <> text "btm" -- Some bitsmaps for tuple constructors have a numeric tag (e.g. '7') -- until that gets resolved we'll just force them to start -- with a letter so the label will be legal assembly code. @@ -1211,7 +1213,8 @@ pprCLbl (CmmLabel _ str CmmCode) = ftext str pprCLbl (CmmLabel _ str CmmData) = ftext str pprCLbl (CmmLabel _ str CmmPrimCall) = ftext str -pprCLbl (LocalBlockLabel u) = text "blk_" <> pprUniqueAlways u +pprCLbl (LocalBlockLabel u) = + tempLabelPrefixOrUnderscore <> text "blk_" <> pprUniqueAlways u pprCLbl (RtsLabel (RtsApFast str)) = ftext str <> text "_fast" @@ -1275,7 +1278,8 @@ pprCLbl (RtsLabel (RtsSlowFastTickyCtr pat)) pprCLbl (ForeignLabel str _ _ _) = ftext str -pprCLbl (IdLabel name _cafs flavor) = ppr name <> ppIdFlavor flavor +pprCLbl (IdLabel name _cafs flavor) = + internalNamePrefix name <> ppr name <> ppIdFlavor flavor pprCLbl (CC_Label cc) = ppr cc pprCLbl (CCS_Label ccs) = ppr ccs @@ -1318,6 +1322,24 @@ instance Outputable ForeignLabelSource where ForeignLabelInThisPackage -> parens $ text "this package" ForeignLabelInExternalPackage -> parens $ text "external package" +internalNamePrefix :: Name -> SDoc +internalNamePrefix name = getPprStyle $ \ sty -> + if codeStyle sty && isRandomGenerated then + sdocWithPlatform $ \platform -> + ptext (asmTempLabelPrefix platform) + else + empty + where + isRandomGenerated = not $ isExternalName name + +tempLabelPrefixOrUnderscore :: SDoc +tempLabelPrefixOrUnderscore = sdocWithPlatform $ \platform -> + getPprStyle $ \ sty -> + if asmStyle sty then + ptext (asmTempLabelPrefix platform) + else + char '_' + -- ----------------------------------------------------------------------------- -- Machine-dependent knowledge about labels. @@ -1390,4 +1412,3 @@ pprDynamicLinkerAsmLabel platform dllInfo lbl = SymbolPtr -> text ".LC_" <> ppr lbl GotSymbolPtr -> ppr lbl <> text "@got" GotSymbolOffset -> ppr lbl <> text "@gotoff" - |