-/**
- * Returns non-zero if a value of a given mode can be stored in GP registers.
- */
-static INLINE int mode_needs_gp_reg(ir_mode *mode) {
- if(mode == mode_fpcw)
- return 0;
- if(get_mode_size_bits(mode) > 32)
- return 0;
- return mode_is_int(mode) || mode_is_reference(mode) || mode == mode_b;
-}
-
-/**
- * Check, if a given done is a Down-Conv, ie a integer Conv
- * from a mode with mode to a mode with lesser bits.
- * Moreover, we return only true if the node has not more than 1 user.
- */
-static int is_downconv(const ir_node *node)
-{
- ir_mode *src_mode;
- ir_mode *dest_mode;
-
- if(!is_Conv(node))
- return 0;
-
- /* we only want to skip the conv when we're the only user
- * (not optimal but for now...)
- */
- if(get_irn_n_edges(node) > 1)
- return 0;
-
- src_mode = get_irn_mode(get_Conv_op(node));
- dest_mode = get_irn_mode(node);
- return mode_needs_gp_reg(src_mode)
- && mode_needs_gp_reg(dest_mode)
- && get_mode_size_bits(dest_mode) < get_mode_size_bits(src_mode);
-}
-
-/**
- * Skip all Donw-Conv's on a given node.
- */
-static ir_node *skip_downconv(ir_node *node)
-{
- while(is_downconv(node))
- node = get_Conv_op(node);
-
- return node;
-}
-