Mercurial > hg > CbC > CbC_gcc
diff gcc/stmt.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/stmt.c Thu Oct 25 08:08:40 2018 +0900 +++ b/gcc/stmt.c Thu Oct 25 10:21:07 2018 +0900 @@ -1,5 +1,5 @@ /* Expands front end tree to back end RTL for GCC - Copyright (C) 1987-2017 Free Software Foundation, Inc. + Copyright (C) 1987-2018 Free Software Foundation, Inc. This file is part of GCC. @@ -81,8 +81,6 @@ /* Label to jump to when node matches. */ tree m_code_label; }; - -extern basic_block label_to_block_fn (struct function *, tree); static bool check_unique_operand_names (tree, tree, tree); static char *resolve_operand_name_1 (char *, tree, tree, tree); @@ -247,62 +245,68 @@ } /* Loop through the constraint string. */ - for (p = constraint + 1; *p; p += CONSTRAINT_LEN (*p, p)) - switch (*p) - { - case '+': - case '=': - error ("operand constraint contains incorrectly positioned " - "%<+%> or %<=%>"); - return false; + for (p = constraint + 1; *p; ) + { + switch (*p) + { + case '+': + case '=': + error ("operand constraint contains incorrectly positioned " + "%<+%> or %<=%>"); + return false; - case '%': - if (operand_num + 1 == ninputs + noutputs) - { - error ("%<%%%> constraint used with last operand"); - return false; - } - break; + case '%': + if (operand_num + 1 == ninputs + noutputs) + { + error ("%<%%%> constraint used with last operand"); + return false; + } + break; - case '?': case '!': case '*': case '&': case '#': - case '$': case '^': - case 'E': case 'F': case 'G': case 'H': - case 's': case 'i': case 'n': - case 'I': case 'J': case 'K': case 'L': case 'M': - case 'N': case 'O': case 'P': case ',': - break; + case '?': case '!': case '*': case '&': case '#': + case '$': case '^': + case 'E': case 'F': case 'G': case 'H': + case 's': case 'i': case 'n': + case 'I': case 'J': case 'K': case 'L': case 'M': + case 'N': case 'O': case 'P': case ',': + break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case '[': - error ("matching constraint not valid in output operand"); - return false; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '[': + error ("matching constraint not valid in output operand"); + return false; - case '<': case '>': - /* ??? Before flow, auto inc/dec insns are not supposed to exist, - excepting those that expand_call created. So match memory - and hope. */ - *allows_mem = true; - break; + case '<': case '>': + /* ??? Before flow, auto inc/dec insns are not supposed to exist, + excepting those that expand_call created. So match memory + and hope. */ + *allows_mem = true; + break; + + case 'g': case 'X': + *allows_reg = true; + *allows_mem = true; + break; - case 'g': case 'X': - *allows_reg = true; - *allows_mem = true; - break; - - default: - if (!ISALPHA (*p)) + default: + if (!ISALPHA (*p)) + break; + enum constraint_num cn = lookup_constraint (p); + if (reg_class_for_constraint (cn) != NO_REGS + || insn_extra_address_constraint (cn)) + *allows_reg = true; + else if (insn_extra_memory_constraint (cn)) + *allows_mem = true; + else + insn_extra_constraint_allows_reg_mem (cn, allows_reg, allows_mem); break; - enum constraint_num cn = lookup_constraint (p); - if (reg_class_for_constraint (cn) != NO_REGS - || insn_extra_address_constraint (cn)) - *allows_reg = true; - else if (insn_extra_memory_constraint (cn)) - *allows_mem = true; - else - insn_extra_constraint_allows_reg_mem (cn, allows_reg, allows_mem); - break; - } + } + + for (size_t len = CONSTRAINT_LEN (*p, p); len; len--, p++) + if (*p == '\0') + break; + } return true; } @@ -847,7 +851,8 @@ /* Output the table. */ emit_label (table_label); - if (CASE_VECTOR_PC_RELATIVE || flag_pic) + if (CASE_VECTOR_PC_RELATIVE + || (flag_pic && targetm.asm_out.generate_pic_addr_diff_vec ())) emit_jump_table_data (gen_rtx_ADDR_DIFF_VEC (CASE_VECTOR_MODE, gen_rtx_LABEL_REF (Pmode, table_label), @@ -900,7 +905,7 @@ /* Find the default case target label. */ tree default_lab = CASE_LABEL (gimple_switch_default_label (stmt)); default_label = jump_target_rtx (default_lab); - basic_block default_bb = label_to_block_fn (cfun, default_lab); + basic_block default_bb = label_to_block (cfun, default_lab); edge default_edge = find_edge (bb, default_bb); /* Get upper and lower bounds of case values. */