blob: 3acc4bb20e25614f993cdbf890e7860ea3dfb60d [file] [log] [blame]
/* 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)