On Tue, 19 Sep 2017, Jakub Jelinek wrote: > On Tue, Sep 19, 2017 at 04:11:52PM +0200, Jakub Jelinek wrote: > > Will try now following plus testcase, the rest of constants I believe end up > > being DW_FORM_block encoded and so is pretty much what we emit even for the > > initializer_constant_valid_p tree fallback case. > > I've bootstrapped/regtested this on x86_64-linux and i686-linux, ok for > trunk? Most of the testcase changes are then to make sure newlines don't > match where they shouldn't, because this regression would be actually caught > by the testsuite otherwise. > > .debug_info is ~ 28KB smaller. > On previous bootstrap from earlier today I saw: > readelf -wa obj96/gcc/cc1plus | grep DW_AT_const_value | sort | uniq -c | > sort -n > 1 DW_AT_const_value DW_FORM_block2 > 3 DW_AT_const_value DW_FORM_data8 > 71 DW_AT_const_value DW_FORM_string > 311 DW_AT_const_value DW_FORM_strp > 472 DW_AT_const_value DW_FORM_sdata > 656 DW_AT_const_value DW_FORM_data4 > 787 DW_AT_const_value DW_FORM_data2 > 2182 DW_AT_const_value DW_FORM_block1 > 2598 DW_AT_const_value DW_FORM_data1 > and with this patch: > readelf -wa obj98/gcc/cc1plus | grep DW_AT_const_value | sort | uniq -c | > sort -n > 1 DW_AT_const_value DW_FORM_block2 > 71 DW_AT_const_value DW_FORM_string > 311 DW_AT_const_value DW_FORM_strp > 346 DW_AT_const_value DW_FORM_data8 > 478 DW_AT_const_value DW_FORM_block1 > 495 DW_AT_const_value DW_FORM_sdata > 1123 DW_AT_const_value DW_FORM_data2 > 1362 DW_AT_const_value DW_FORM_data4 > 4089 DW_AT_const_value DW_FORM_data1 > so the number of these attributes with constant class significantly increased > over block class and the number of attributes increased too.
Ok. Thanks, Richard. > 2017-09-19 Jakub Jelinek <ja...@redhat.com> > > * dwarf2out.c (tree_add_const_value_attribute): For INTEGER_CST > that fits into uhwi or shwi, add DW_AT_const_value regardless > of early_dwarf without going through RTL, using add_AT_unsigned > or add_AT_int. > > * g++.dg/debug/dwarf2/template-params-13.C: New test. > * g++.dg/debug/dwarf2/template-params-5.C: Adjust regexps so that > it doesn't match newlines. > * g++.dg/debug/dwarf2/template-params-3.C: Likewise. > * g++.dg/debug/dwarf2/template-func-params-3.C: Likewise. > * g++.dg/debug/dwarf2/lang-cpp98.C: Likewise. > * g++.dg/debug/dwarf2/template-func-params-2.C: Likewise. > * g++.dg/debug/dwarf2/template-func-params-1.C: Likewise. > * g++.dg/debug/dwarf2/template-func-params-5.C: Likewise. > * g++.dg/debug/dwarf2/template-params-1.C: Likewise. > * g++.dg/debug/dwarf2/template-params-2.C: Likewise. > * g++.dg/debug/dwarf2/lang-cpp14.C: Likewise. > * g++.dg/debug/dwarf2/lang-cpp11.C: Likewise. > > --- gcc/dwarf2out.c.jj 2017-09-15 18:11:03.000000000 +0200 > +++ gcc/dwarf2out.c 2017-09-19 16:03:27.678337475 +0200 > @@ -19440,6 +19440,19 @@ tree_add_const_value_attribute (dw_die_r > init = t; > gcc_assert (!DECL_P (init)); > > + if (TREE_CODE (init) == INTEGER_CST) > + { > + if (tree_fits_uhwi_p (init)) > + { > + add_AT_unsigned (die, DW_AT_const_value, tree_to_uhwi (init)); > + return true; > + } > + if (tree_fits_shwi_p (init)) > + { > + add_AT_int (die, DW_AT_const_value, tree_to_shwi (init)); > + return true; > + } > + } > if (! early_dwarf) > { > rtl = rtl_for_decl_init (init, type); > --- gcc/testsuite/g++.dg/debug/dwarf2/template-params-5.C.jj 2015-07-09 > 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-params-5.C 2017-09-19 > 16:29:48.828668182 +0200 > @@ -2,7 +2,7 @@ > // Origin PR debug/30161 > // { dg-options "-gdwarf-2 -dA" } > // { dg-final { scan-assembler "DW_TAG_template_type_param" } } > -// { dg-final { scan-assembler "T.*DW_AT_name" } } > +// { dg-final { scan-assembler "T\[^\n\r]* DW_AT_name" } } > > template <class T> > struct vector > --- gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C.jj 2015-07-09 > 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C 2017-09-19 > 16:29:33.812855410 +0200 > @@ -2,7 +2,7 @@ > // Origin PR debug/30161 > // { dg-options "-gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } > // { dg-final { scan-assembler "DW_TAG_template_value_param" } } > -// { dg-final { scan-assembler "f.*DW_AT_name" } } > +// { dg-final { scan-assembler "f\[^\n\r]* DW_AT_name" } } > // { dg-final { scan-assembler > "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" > } } */ > > typedef void (*func_ptr) (); > --- gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C.jj > 2015-07-09 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C > 2017-09-19 16:27:59.886026562 +0200 > @@ -2,7 +2,7 @@ > // Origin PR debug/30161 > // { dg-options "-gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } > // { dg-final { scan-assembler "DW_TAG_template_value_param" } } > -// { dg-final { scan-assembler "f.*DW_AT_name" } } > +// { dg-final { scan-assembler "f\[^\n\r]* DW_AT_name" } } > // { dg-final { scan-assembler > "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" > } } */ > > typedef void (*func_ptr)(); > --- gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp98.C.jj 2015-07-09 > 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp98.C 2017-09-19 > 16:26:57.169808555 +0200 > @@ -1,6 +1,6 @@ > // { dg-do compile } > // { dg-options "-O -std=c++98 -gdwarf-2 -dA" } > // DW_LANG_C_plus_plus = 0x0004 > -// { dg-final { scan-assembler "0x4.*DW_AT_language" } } */ > +// { dg-final { scan-assembler "0x4\[^\n\r]* DW_AT_language" } } */ > > int version; > --- gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C.jj > 2015-07-09 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-2.C > 2017-09-19 16:27:40.141272754 +0200 > @@ -3,8 +3,8 @@ > // { dg-options "-gdwarf-2 -dA" } > // { dg-do compile } > // { dg-final { scan-assembler "DW_TAG_template_value_param" } } > -// { dg-final { scan-assembler "i.*DW_AT_name" } } > -// { dg-final { scan-assembler "3.*DW_AT_const_value" } } > +// { dg-final { scan-assembler "i\[^\n\r]* DW_AT_name" } } > +// { dg-final { scan-assembler "3\[^\n\r]* DW_AT_const_value" } } > > > template <int i> > --- gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C.jj > 2015-07-09 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-1.C > 2017-09-19 16:27:29.347407340 +0200 > @@ -3,7 +3,7 @@ > // { dg-options "-gdwarf-2 -dA" } > // { dg-do compile } > // { dg-final { scan-assembler "DW_TAG_template_type_param" } } > -// { dg-final { scan-assembler "U.*DW_AT_name" } } > +// { dg-final { scan-assembler "U\[^\n\r]* DW_AT_name" } } > > template <class U> > U > --- gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C.jj > 2015-07-09 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-5.C > 2017-09-19 16:28:17.138811441 +0200 > @@ -2,7 +2,7 @@ > // Origin PR debug/30161 > // { dg-options "-gdwarf-2 -dA" } > // { dg-final { scan-assembler "DW_TAG_template_type_param" } } > -// { dg-final { scan-assembler "T.*DW_AT_name" } } > +// { dg-final { scan-assembler "T\[^\n\r]* DW_AT_name" } } > > template <class T> > struct vector > --- gcc/testsuite/g++.dg/debug/dwarf2/template-params-1.C.jj 2015-07-09 > 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-params-1.C 2017-09-19 > 16:28:40.967514326 +0200 > @@ -3,7 +3,7 @@ > // { dg-options "-gdwarf-2 -dA" } > // { dg-do compile } > // { dg-final { scan-assembler "DW_TAG_template_type_param" } } > -// { dg-final { scan-assembler "U.*DW_AT_name" } } > +// { dg-final { scan-assembler "U\[^\n\r]* DW_AT_name" } } > > template <class U> > class A > --- gcc/testsuite/g++.dg/debug/dwarf2/template-params-2.C.jj 2015-07-09 > 11:07:21.000000000 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-params-2.C 2017-09-19 > 16:29:21.326011106 +0200 > @@ -3,8 +3,8 @@ > // { dg-options "-gdwarf-2 -dA" } > // { dg-do compile } > // { dg-final { scan-assembler "DW_TAG_template_value_param" } } > -// { dg-final { scan-assembler "i.*DW_AT_name" } } > -// { dg-final { scan-assembler "3.*DW_AT_const_value" } } > +// { dg-final { scan-assembler "i\[^\n\r]* DW_AT_name" } } > +// { dg-final { scan-assembler "3\[^\n\r]* DW_AT_const_value" } } > > template <int i> > struct A > --- gcc/testsuite/g++.dg/debug/dwarf2/template-params-13.C.jj 2017-09-19 > 16:21:47.069675119 +0200 > +++ gcc/testsuite/g++.dg/debug/dwarf2/template-params-13.C 2017-09-19 > 16:24:54.425339027 +0200 > @@ -0,0 +1,10 @@ > +// { dg-options "-gdwarf-2 -dA" } > +// { dg-do compile } > +// { dg-final { scan-assembler "DW_TAG_template_value_param" } } > +// { dg-final { scan-assembler "N\[^\n\r]* DW_AT_name" } } > +// { dg-final { scan-assembler "9\[^\n\r]* DW_AT_const_value" } } > + > +template <int N> class C {}; > +template <typename T> struct E {}; > +E<struct A> f; > +struct A { C<9> g; }; > --- gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp14.C.jj 2014-11-26 > 20:35:03.000000000 +0100 > +++ gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp14.C 2017-09-19 > 16:26:49.329906309 +0200 > @@ -1,6 +1,6 @@ > // { dg-do compile } > // { dg-options "-O -std=c++14 -gdwarf-5 -dA" } > // DW_LANG_C_plus_plus_14 = 0x0021 > -// { dg-final { scan-assembler "0x21.*DW_AT_language" } } */ > +// { dg-final { scan-assembler "0x21\[^\n\r]* DW_AT_language" } } */ > > int version; > --- gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp11.C.jj 2014-11-26 > 20:35:03.000000000 +0100 > +++ gcc/testsuite/g++.dg/debug/dwarf2/lang-cpp11.C 2017-09-19 > 16:26:40.939010933 +0200 > @@ -1,6 +1,6 @@ > // { dg-do compile } > // { dg-options "-O -std=c++11 -gdwarf-5 -dA" } > // DW_LANG_C_plus_plus_11 = 0x001a > -// { dg-final { scan-assembler "0x1a.*DW_AT_language" } } */ > +// { dg-final { scan-assembler "0x1a\[^\n\r]* DW_AT_language" } } */ > > int version; > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)