diff options
Diffstat (limited to 'gcc/gimple-expr.c')
-rw-r--r-- | gcc/gimple-expr.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c index b0c9f9b..4082828 100644 --- a/gcc/gimple-expr.c +++ b/gcc/gimple-expr.c @@ -528,37 +528,40 @@ void extract_ops_from_tree (tree expr, enum tree_code *subcode_p, tree *op1_p, tree *op2_p, tree *op3_p) { - enum gimple_rhs_class grhs_class; - *subcode_p = TREE_CODE (expr); - grhs_class = get_gimple_rhs_class (*subcode_p); - - if (grhs_class == GIMPLE_TERNARY_RHS) - { - *op1_p = TREE_OPERAND (expr, 0); - *op2_p = TREE_OPERAND (expr, 1); - *op3_p = TREE_OPERAND (expr, 2); - } - else if (grhs_class == GIMPLE_BINARY_RHS) - { - *op1_p = TREE_OPERAND (expr, 0); - *op2_p = TREE_OPERAND (expr, 1); - *op3_p = NULL_TREE; - } - else if (grhs_class == GIMPLE_UNARY_RHS) - { - *op1_p = TREE_OPERAND (expr, 0); - *op2_p = NULL_TREE; - *op3_p = NULL_TREE; - } - else if (grhs_class == GIMPLE_SINGLE_RHS) + switch (get_gimple_rhs_class (*subcode_p)) { - *op1_p = expr; - *op2_p = NULL_TREE; - *op3_p = NULL_TREE; + case GIMPLE_TERNARY_RHS: + { + *op1_p = TREE_OPERAND (expr, 0); + *op2_p = TREE_OPERAND (expr, 1); + *op3_p = TREE_OPERAND (expr, 2); + break; + } + case GIMPLE_BINARY_RHS: + { + *op1_p = TREE_OPERAND (expr, 0); + *op2_p = TREE_OPERAND (expr, 1); + *op3_p = NULL_TREE; + break; + } + case GIMPLE_UNARY_RHS: + { + *op1_p = TREE_OPERAND (expr, 0); + *op2_p = NULL_TREE; + *op3_p = NULL_TREE; + break; + } + case GIMPLE_SINGLE_RHS: + { + *op1_p = expr; + *op2_p = NULL_TREE; + *op3_p = NULL_TREE; + break; + } + default: + gcc_unreachable (); } - else - gcc_unreachable (); } /* Extract operands for a GIMPLE_COND statement out of COND_EXPR tree COND. */ |