treecode-num-insns.def   [plain text]


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