| /* 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) |