diff --git a/gcc/gimple-range.h b/gcc/gimple-range.h index dde41e9e743..92bb5305c18 100644 --- a/gcc/gimple-range.h +++ b/gcc/gimple-range.h @@ -97,12 +97,12 @@ extern bool gimple_range_calc_op2 (irange &r, const gimple *s, static inline range_operator * gimple_range_handler (const gimple *s) { - if (gimple_code (s) == GIMPLE_ASSIGN) - return range_op_handler (gimple_assign_rhs_code (s), - TREE_TYPE (gimple_assign_lhs (s))); - if (gimple_code (s) == GIMPLE_COND) - return range_op_handler (gimple_cond_code (s), - TREE_TYPE (gimple_cond_lhs (s))); + if (const gassign *ass = dyn_cast (s)) + return range_op_handler (gimple_assign_rhs_code (ass), + TREE_TYPE (gimple_assign_lhs (ass))); + if (const gcond *cond = dyn_cast (s)) + return range_op_handler (gimple_cond_code (cond), + TREE_TYPE (gimple_cond_lhs (cond))); return NULL; } diff --git a/gcc/gimple.h b/gcc/gimple.h index d359f7827b1..b935ad4f761 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -2229,26 +2229,6 @@ gimple_set_modified (gimple *s, bool modifiedp) } -/* Return the tree code for the expression computed by STMT. This is - only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN. For - GIMPLE_CALL, return CALL_EXPR as the expression code for - consistency. This is useful when the caller needs to deal with the - three kinds of computation that GIMPLE supports. */ - -static inline enum tree_code -gimple_expr_code (const gimple *stmt) -{ - enum gimple_code code = gimple_code (stmt); - if (code == GIMPLE_ASSIGN || code == GIMPLE_COND) - return (enum tree_code) stmt->subcode; - else - { - gcc_gimple_checking_assert (code == GIMPLE_CALL); - return CALL_EXPR; - } -} - - /* Return true if statement STMT contains volatile operands. */ static inline bool @@ -3793,6 +3773,28 @@ gimple_cond_set_condition (gcond *stmt, enum tree_code code, tree lhs, gimple_cond_set_rhs (stmt, rhs); } + +/* Return the tree code for the expression computed by STMT. This is + only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN. For + GIMPLE_CALL, return CALL_EXPR as the expression code for + consistency. This is useful when the caller needs to deal with the + three kinds of computation that GIMPLE supports. */ + +static inline enum tree_code +gimple_expr_code (const gimple *stmt) +{ + if (const gassign *ass = dyn_cast (stmt)) + return gimple_assign_rhs_code (ass); + if (const gcond *cond = dyn_cast (stmt)) + return gimple_cond_code (cond); + else + { + gcc_gimple_checking_assert (gimple_code (stmt) == GIMPLE_CALL); + return CALL_EXPR; + } +} + + /* Return the LABEL_DECL node used by GIMPLE_LABEL statement GS. */ static inline tree