[PATCH] D53717: [AST] Only store the needed data in ForStmt.
Richard Smith - zygoloid via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 25 12:48:54 PDT 2018
rsmith added a comment.
In https://reviews.llvm.org/D53717#1276245, @rsmith wrote:
> Do you have evidence that this complexity is worthwhile? (I wouldn't imagine we have very many `ForStmt`s per translation unit, so saving 16 bytes for each of them seems unlikely to matter.)
Strikes me that some data would be useful here, to help prioritize. Here's a histogram of occurrence counts for a libc++ module:
Count # Bits b/Rec % Abv Record Kind
43731 5471391 125.1 87.46 EXPR_DECL_REF
35751 822273 23.0 DECL_OMP_DECLARE_REDUCTION
29734 3431612 115.4 TYPE_TEMPLATE_SPECIALIZATION
25750 7472591 290.2 55.89 DECL_PARM_VAR
14986 651081 43.4 98.81 EXPR_IMPLICIT_CAST
14847 1620549 109.1 EXPR_CALL
13153 1968371 149.7 TYPE_FUNCTION_PROTO
12605 3797017 301.2 100.00 DECL_CONTEXT_LEXICAL
12515 715141 57.1 TYPE_TEMPLATE_TYPE_PARM
12480 2608644 209.0 DECL_TEMPLATE_TYPE_PARM
10571 1200811 113.6 EXPR_BINARY_OPERATOR
10300 955610 92.8 STMT_COMPOUND
10254 9421030 918.8 17.66 DECL_CXX_METHOD
10220 2252926 220.4 EXPR_CXX_DEPENDENT_SCOPE_MEMBER
10083 231909 23.0 STMT_NULL_PTR
9731 5196865 534.1 EXPR_CXX_UNRESOLVED_LOOKUP
8015 580911 72.5 87.16 EXPR_INTEGER_LITERAL
7935 3298497 415.7 EXPR_CXX_DEPENDENT_SCOPE_DECL_REF
7934 3379054 425.9 DECL_CXX_RECORD
7790 946360 121.5 EXPR_CXX_THIS
7508 350806 46.7 LOCAL_REDECLARATIONS
7155 1239819 173.3 EXPR_MEMBER
6754 1264508 187.2 EXPR_CXX_OPERATOR_CALL
6607 5819360 880.8 100.00 DECL_CONTEXT_VISIBLE
6461 736861 114.0 EXPR_UNARY_OPERATOR
6117 284391 46.5 TYPE_LVALUE_REFERENCE
6081 372753 61.3 STMT_RETURN
6066 1964810 323.9 99.64 DECL_TYPEDEF
5659 249455 44.1 TYPE_RECORD
5252 4884856 930.1 DECL_CLASS_TEMPLATE_SPECIALIZATION
5196 313722 60.4 TYPE_SUBST_TEMPLATE_TYPE_PARM
5189 532009 102.5 TYPE_DEPENDENT_NAME
5083 2145083 422.0 1.65 DECL_VAR
4886 296440 60.7 TYPE_TYPEDEF
4340 473950 109.2 STMT_DECL
4314 4078644 945.4 DECL_FUNCTION
4150 1436618 346.2 DECL_FUNCTION_TEMPLATE
3686 343246 93.1 TYPE_ELABORATED
3629 144649 39.9 TYPE_POINTER
3435 2907387 846.4 DECL_CXX_CONSTRUCTOR
3341 896701 268.4 DECL_CXX_BASE_SPECIFIERS
2847 376713 132.3 EXPR_PAREN
2684 271156 101.0 EXPR_CXX_BOOL_LITERAL
2651 208771 78.8 STMT_IF
2053 550511 268.1 EXPR_CXX_UNRESOLVED_CONSTRUCT
1938 268044 138.3 DECL_ACCESS_SPEC
1725 472401 273.9 DECL_NON_TYPE_TEMPLATE_PARM
1647 224673 136.4 EXPR_PAREN_LIST
1610 64624 40.1 TYPE_RVALUE_REFERENCE
1542 380997 247.1 48.57 DECL_FIELD
1446 392676 271.6 EXPR_CXX_UNRESOLVED_MEMBER
1411 283553 201.0 DECL_USING_SHADOW
1411 87833 62.2 TYPE_INJECTED_CLASS_NAME
1339 164195 122.6 EXPR_SUBST_NON_TYPE_TEMPLATE_PARM
1226 311278 253.9 DECL_CXX_CTOR_INITIALIZERS
1110 215604 194.2 EXPR_SIZEOF_PACK
1054 476456 452.0 DECL_CLASS_TEMPLATE
987 112161 113.6 EXPR_CXX_MEMBER_CALL
943 195005 206.8 EXPR_CXX_CONSTRUCT
941 271069 288.1 EXPR_CXX_STATIC_CAST
879 171231 194.8 EXPR_TYPE_TRAIT
771 40707 52.8 TYPE_PACK_EXPANSION
727 106103 145.9 DECL_IMPORT
696 146286 210.2 DECL_FRIEND
678 136788 201.8 EXPR_CSTYLE_CAST
664 70292 105.9 EXPR_ARRAY_SUBSCRIPT
628 67550 107.6 EXPR_PACK_EXPANSION
601 84473 140.6 EXPR_COMPOUND_ASSIGN_OPERATOR
564 71760 127.2 STMT_FOR
557 57643 103.5 EXPR_CXX_NULL_PTR_LITERAL
545 350959 644.0 DECL_CXX_DESTRUCTOR
523 867947 1659.6 DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION
495 120219 242.9 DECL_USING
476 87196 183.2 EXPR_SIZEOF_ALIGN_OF
447 292917 655.3 EXPR_STRING_LITERAL
434 32634 75.2 100.00 EXPR_CHARACTER_LITERAL
432 57714 133.6 EXPR_CONDITIONAL_OPERATOR
428 79870 186.6 DECL_ENUM_CONSTANT
418 38972 93.2 EXPR_MATERIALIZE_TEMPORARY
372 13302 35.8 TYPE_DECLTYPE
358 82004 229.1 EXPR_CXX_FUNCTIONAL_CAST
352 31172 88.6 EXPR_EXPR_WITH_CLEANUPS
342 49746 145.5 DECL_STATIC_ASSERT
334 168164 503.5 DECL_TYPEALIAS
315 76503 242.9 DECL_NAMESPACE
277 15299 55.2 STMT_BREAK
263 26857 102.1 STMT_CASE
234 75990 324.7 DECL_TYPE_ALIAS_TEMPLATE
225 13455 59.8 STMT_WHILE
217 21383 98.5 EXPR_CXX_BIND_TEMPORARY
217 34247 157.8 EXPR_INIT_LIST
191 68275 357.5 EXPR_CXX_TEMPORARY_OBJECT
172 22736 132.2 EXPR_CXX_NOEXCEPT
156 10176 65.2 TYPE_CONSTANT_ARRAY
153 7167 46.8 TYPE_PAREN
142 50666 356.8 EXPR_CXX_NEW
137 18637 136.0 EXPR_CXX_DEFAULT_ARG
116 6952 59.9 STMT_CXX_TRY
116 6952 59.9 STMT_CXX_CATCH
115 20981 182.4 EXPR_FLOATING_LITERAL
112 18062 161.3 DECL_LINKAGE_SPEC
108 6792 62.9 TYPE_MEMBER_POINTER
So, this patch would save about 8KB of memory when parsing all of libc++. That's not completely irrelevant as part of a patch series applying this more broadly, but it does suggest that your time might be better spent if you prioritize more common AST nodes for your improvements.
Repository:
rC Clang
https://reviews.llvm.org/D53717
More information about the cfe-commits
mailing list