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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits