/* APPLE LOCAL file 6013597 */ /* These values represent the "overhead" cost in instructions (x1000) of each expression type, i.e. the cost of the tree without the costs of its subexpressions. The first set of costs was generated by adding annotations indicating the beginning and end of each GIMPLE tree to the assembler output of the cpu2000 and cpu2006 benchmark suites. The remaining expression types were not present in these benchmarks, so the costs that were previously used in tree-inline.c are used here. Each cost is 1000 times the true estimated cost in instructions. This is done to avoid the use of floating point arithmetic. tree-inline.c:estimate_num_insns compensates for this by dividing the number of instructions returned by tree-inline.c:estimate_num_insns_1 by 1000. */ /* Instruction counts generated by analyzing cpu2000 and cpu2006 benchmark builds. */ NUM_INSNS_CASE(COMPLEX_CST,125) NUM_INSNS_CASE(STRING_CST,400) NUM_INSNS_CASE(VAR_DECL,17) NUM_INSNS_CASE(COMPONENT_REF,24) NUM_INSNS_CASE(INDIRECT_REF,425) NUM_INSNS_CASE(ARRAY_REF,182) NUM_INSNS_CASE(PLUS_EXPR,898) NUM_INSNS_CASE(MINUS_EXPR,1641) NUM_INSNS_CASE(MULT_EXPR,885) NUM_INSNS_CASE(TRUNC_DIV_EXPR,3814) NUM_INSNS_CASE(TRUNC_MOD_EXPR,5253) NUM_INSNS_CASE(RDIV_EXPR,1909) NUM_INSNS_CASE(EXACT_DIV_EXPR,823) NUM_INSNS_CASE(FIX_TRUNC_EXPR,1506) NUM_INSNS_CASE(FLOAT_EXPR,1746) NUM_INSNS_CASE(NEGATE_EXPR,1702) NUM_INSNS_CASE(MIN_EXPR,3220) NUM_INSNS_CASE(MAX_EXPR,2706) NUM_INSNS_CASE(ABS_EXPR,4032) NUM_INSNS_CASE(LSHIFT_EXPR,1711) NUM_INSNS_CASE(RSHIFT_EXPR,2617) NUM_INSNS_CASE(RROTATE_EXPR,1272) NUM_INSNS_CASE(BIT_IOR_EXPR,3469) NUM_INSNS_CASE(BIT_XOR_EXPR,3597) NUM_INSNS_CASE(BIT_AND_EXPR,2428) NUM_INSNS_CASE(BIT_NOT_EXPR,2488) NUM_INSNS_CASE(TRUTH_AND_EXPR,90) NUM_INSNS_CASE(TRUTH_OR_EXPR,505) NUM_INSNS_CASE(TRUTH_NOT_EXPR,864) NUM_INSNS_CASE(LT_EXPR,1280) NUM_INSNS_CASE(LE_EXPR,1441) NUM_INSNS_CASE(GT_EXPR,2382) NUM_INSNS_CASE(GE_EXPR,1250) NUM_INSNS_CASE(EQ_EXPR,1776) NUM_INSNS_CASE(NE_EXPR,1596) NUM_INSNS_CASE(CONVERT_EXPR,172) NUM_INSNS_CASE(NOP_EXPR,269) NUM_INSNS_CASE(SAVE_EXPR,769) NUM_INSNS_CASE(ADDR_EXPR,400) NUM_INSNS_CASE(COMPLEX_EXPR,3411) NUM_INSNS_CASE(TARGET_MEM_REF,50) NUM_INSNS_CASE(SWITCH_EXPR,3839) /* Instruction counts left over from the older version of tree-inline.c. */ /* Containers have no cost. */ NUM_INSNS_CASE(TREE_LIST,0) NUM_INSNS_CASE(TREE_VEC,0) NUM_INSNS_CASE(BLOCK,0) NUM_INSNS_CASE(BIT_FIELD_REF,0) NUM_INSNS_CASE(ALIGN_INDIRECT_REF,0) NUM_INSNS_CASE(MISALIGNED_INDIRECT_REF,0) NUM_INSNS_CASE(ARRAY_RANGE_REF,0) NUM_INSNS_CASE(OBJ_TYPE_REF,0) NUM_INSNS_CASE(EXC_PTR_EXPR,0) NUM_INSNS_CASE(FILTER_EXPR,0) NUM_INSNS_CASE(COMPOUND_EXPR,0) NUM_INSNS_CASE(BIND_EXPR,0) NUM_INSNS_CASE(WITH_CLEANUP_EXPR,0) NUM_INSNS_CASE(VIEW_CONVERT_EXPR,0) NUM_INSNS_CASE(RANGE_EXPR,0) NUM_INSNS_CASE(CASE_LABEL_EXPR,0) NUM_INSNS_CASE(SSA_NAME,0) NUM_INSNS_CASE(CATCH_EXPR,0) NUM_INSNS_CASE(EH_FILTER_EXPR,0) NUM_INSNS_CASE(STATEMENT_LIST,0) NUM_INSNS_CASE(ERROR_MARK,0) NUM_INSNS_CASE(NON_LVALUE_EXPR,0) NUM_INSNS_CASE(FDESC_EXPR,0) NUM_INSNS_CASE(VA_ARG_EXPR,0) NUM_INSNS_CASE(TRY_CATCH_EXPR,0) NUM_INSNS_CASE(TRY_FINALLY_EXPR,0) NUM_INSNS_CASE(LABEL_EXPR,0) NUM_INSNS_CASE(GOTO_EXPR,0) NUM_INSNS_CASE(RETURN_EXPR,0) NUM_INSNS_CASE(EXIT_EXPR,0) NUM_INSNS_CASE(LOOP_EXPR,0) NUM_INSNS_CASE(PHI_NODE,0) NUM_INSNS_CASE(WITH_SIZE_EXPR,0) NUM_INSNS_CASE(OMP_CLAUSE,0) NUM_INSNS_CASE(OMP_RETURN,0) NUM_INSNS_CASE(OMP_CONTINUE,0) /* Assign a cost of 0 to certain rare tree codes of type tcc_reference. */ NUM_INSNS_CASE(REALPART_EXPR,0) NUM_INSNS_CASE(IMAGPART_EXPR,0) /* Assign cost of 1 to usual operations. */ NUM_INSNS_CASE(COND_EXPR,1000) NUM_INSNS_CASE(VEC_COND_EXPR,1000) NUM_INSNS_CASE(FIX_CEIL_EXPR,1000) NUM_INSNS_CASE(FIX_FLOOR_EXPR,1000) NUM_INSNS_CASE(FIX_ROUND_EXPR,1000) NUM_INSNS_CASE(LROTATE_EXPR,1000) NUM_INSNS_CASE(VEC_LSHIFT_EXPR,1000) NUM_INSNS_CASE(VEC_RSHIFT_EXPR,1000) NUM_INSNS_CASE(TRUTH_ANDIF_EXPR,1000) NUM_INSNS_CASE(TRUTH_ORIF_EXPR,1000) NUM_INSNS_CASE(TRUTH_XOR_EXPR,1000) NUM_INSNS_CASE(ORDERED_EXPR,1000) NUM_INSNS_CASE(UNORDERED_EXPR,1000) NUM_INSNS_CASE(UNLT_EXPR,1000) NUM_INSNS_CASE(UNLE_EXPR,1000) NUM_INSNS_CASE(UNGT_EXPR,1000) NUM_INSNS_CASE(UNGE_EXPR,1000) NUM_INSNS_CASE(UNEQ_EXPR,1000) NUM_INSNS_CASE(LTGT_EXPR,1000) NUM_INSNS_CASE(CONJ_EXPR,1000) NUM_INSNS_CASE(PREDECREMENT_EXPR,1000) NUM_INSNS_CASE(PREINCREMENT_EXPR,1000) NUM_INSNS_CASE(POSTDECREMENT_EXPR,1000) NUM_INSNS_CASE(POSTINCREMENT_EXPR,1000) NUM_INSNS_CASE(ASM_EXPR,1000) NUM_INSNS_CASE(REALIGN_LOAD_EXPR,1000) NUM_INSNS_CASE(REDUC_MAX_EXPR,1000) NUM_INSNS_CASE(REDUC_MIN_EXPR,1000) NUM_INSNS_CASE(REDUC_PLUS_EXPR,1000) NUM_INSNS_CASE(WIDEN_SUM_EXPR,1000) NUM_INSNS_CASE(DOT_PROD_EXPR,1000) NUM_INSNS_CASE(WIDEN_MULT_EXPR,1000) NUM_INSNS_CASE(RESX_EXPR,1000) /* Few special cases of expensive operations. This is useful to avoid inlining on functions having too many of these. */ NUM_INSNS_CASE(CEIL_DIV_EXPR,10000) NUM_INSNS_CASE(FLOOR_DIV_EXPR,10000) NUM_INSNS_CASE(ROUND_DIV_EXPR,10000) NUM_INSNS_CASE(CEIL_MOD_EXPR,10000) NUM_INSNS_CASE(FLOOR_MOD_EXPR,10000) NUM_INSNS_CASE(ROUND_MOD_EXPR,10000) /* OpenMP directives are generally very expensive. */ NUM_INSNS_CASE(OMP_PARALLEL,40000) NUM_INSNS_CASE(OMP_FOR,40000) NUM_INSNS_CASE(OMP_SECTIONS,40000) NUM_INSNS_CASE(OMP_SINGLE,40000) NUM_INSNS_CASE(OMP_SECTION,40000) NUM_INSNS_CASE(OMP_MASTER,40000) NUM_INSNS_CASE(OMP_ORDERED,40000) NUM_INSNS_CASE(OMP_CRITICAL,40000) NUM_INSNS_CASE(OMP_ATOMIC,40000)