diff options
author | J"orn Rennecke <joern.rennecke@st.com> | 2009-05-20 19:34:50 +0000 |
---|---|---|
committer | J"orn Rennecke <joern.rennecke@st.com> | 2009-05-20 19:34:50 +0000 |
commit | 135c3f6808f3cddaf9d5e3ccfdcc949ca6db23ce (patch) | |
tree | 3c591e06f93472b0c1dbb43769e98a845e1b68bb | |
parent | 3e43db42c917af78158ef7a2819c9a149d148761 (diff) |
* config/rs6000/rs6000.md (doloop_end): Accept extra operand.
* opt-gen.awk: For all variables with an Init clause, set var_seen.
* config/rs6000/rs6000.c (rs6000_builtin_conversion): Adjust to
target.h declaration.
(rs6000_init_hard_regno_mode_ok): Add enum cast(s).
(rs6000_override_options): Likewise.
(bdesc_altivec_preds): Add enum casts.
(altivec_expand_vec_set_builtin): Use EXPAND_NORMAL instead of 0.
(rs6000_init_dwarf_reg_sizes_extra): Likewise.
(emit_unlikely_jump, rs6000_emit_allocate_stack): Use alloc_reg_note.
(rs6000_frame_related, rs6000_emit_prologue): Likewise.
(output_toc): Use INSERT as last argument to htab_find_slot.
(output_profile_hook): Use LCT_NORMAL Instead of 0.
(rs6000_initialize_trampoline): Likewise.
* config/rs6000/rs6000.c (rs6000_va_start): Use INCOMING_ARGS_INFO.
(compute_vrsave_mask): Likewise.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/arc-milepost-branch@147746 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.ARC | 2 | ||||
-rw-r--r-- | gcc/ChangeLog.cxx | 14 | ||||
-rw-r--r-- | gcc/ChangeLog.multi-target | 3 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 74 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 3 | ||||
-rw-r--r-- | gcc/optc-gen.awk | 11 |
6 files changed, 70 insertions, 37 deletions
diff --git a/gcc/ChangeLog.ARC b/gcc/ChangeLog.ARC index ca1c85aa4f9..057208b32bb 100644 --- a/gcc/ChangeLog.ARC +++ b/gcc/ChangeLog.ARC @@ -1,5 +1,7 @@ 2009-05-20 J"orn Rennecke <joern.rennecke@arc.com> + * config/rs6000/rs6000.md (doloop_end): Accept extra operand. + * config/spu/spu.md (doloop_end): Accept extra operand. 2009-05-13 J"orn Rennecke <joern.rennecke@arc.com> diff --git a/gcc/ChangeLog.cxx b/gcc/ChangeLog.cxx index 8c399a6b5fb..c86764441a0 100644 --- a/gcc/ChangeLog.cxx +++ b/gcc/ChangeLog.cxx @@ -1,5 +1,19 @@ 2009-05-20 J"orn Rennecke <joern.rennecke@arc.com> + * opt-gen.awk: For all variables with an Init clause, set var_seen. + * config/rs6000/rs6000.c (rs6000_builtin_conversion): Adjust to + target.h declaration. + (rs6000_init_hard_regno_mode_ok): Add enum cast(s). + (rs6000_override_options): Likewise. + (bdesc_altivec_preds): Add enum casts. + (altivec_expand_vec_set_builtin): Use EXPAND_NORMAL instead of 0. + (rs6000_init_dwarf_reg_sizes_extra): Likewise. + (emit_unlikely_jump, rs6000_emit_allocate_stack): Use alloc_reg_note. + (rs6000_frame_related, rs6000_emit_prologue): Likewise. + (output_toc): Use INSERT as last argument to htab_find_slot. + (output_profile_hook): Use LCT_NORMAL Instead of 0. + (rs6000_initialize_trampoline): Likewise. + * config.gcc (spu-*-elf*): Use spu-cxx.o for cxx_target_objs. * config/spu/spu-protos.h (struct cpp_reader): Forward declaration. (spu_expand_epilogue) Use bool. diff --git a/gcc/ChangeLog.multi-target b/gcc/ChangeLog.multi-target index 98ea71fb5ed..0636d567c79 100644 --- a/gcc/ChangeLog.multi-target +++ b/gcc/ChangeLog.multi-target @@ -1,5 +1,8 @@ 2009-05-20 J"orn Rennecke <joern.rennecke@arc.com> + * config/rs6000/rs6000.c (rs6000_va_start): Use INCOMING_ARGS_INFO. + (compute_vrsave_mask): Likewise. + * config/spu/spu.c: Include multi-target.h. Add START_TARGET_SPECIFIC / END_TARGET_SPECIFIC markers. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 17622c26f00..01eb79746c7 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -862,7 +862,7 @@ static tree rs6000_builtin_reciprocal (unsigned int, bool, bool); static tree rs6000_builtin_mask_for_load (void); static tree rs6000_builtin_mul_widen_even (tree); static tree rs6000_builtin_mul_widen_odd (tree); -static tree rs6000_builtin_conversion (enum tree_code, tree); +static tree rs6000_builtin_conversion (unsigned /* enum tree_code */, tree); static tree rs6000_builtin_vec_perm (tree, tree *); static void def_builtin (int, const char *, tree, int); @@ -1351,7 +1351,7 @@ rs6000_init_hard_regno_mode_ok (void) for (r = 0; r < FIRST_PSEUDO_REGISTER; ++r) for (m = 0; m < NUM_MACHINE_MODES; ++m) - if (rs6000_hard_regno_mode_ok (r, m)) + if (rs6000_hard_regno_mode_ok (r, (enum machine_mode) m)) rs6000_hard_regno_mode_ok_p[m][r] = true; } @@ -1776,7 +1776,8 @@ rs6000_override_options (const char *default_cpu) else if (! strcmp (rs6000_sched_costly_dep_str, "store_to_load")) rs6000_sched_costly_dep = store_to_load_dep_costly; else - rs6000_sched_costly_dep = atoi (rs6000_sched_costly_dep_str); + rs6000_sched_costly_dep + = (rs6000_dependence_cost) atoi (rs6000_sched_costly_dep_str); } /* Handle -minsert-sched-nops option. */ @@ -1792,7 +1793,8 @@ rs6000_override_options (const char *default_cpu) else if (! strcmp (rs6000_sched_insert_nops_str, "regroup_exact")) rs6000_sched_insert_nops = sched_finish_regroup_exact; else - rs6000_sched_insert_nops = atoi (rs6000_sched_insert_nops_str); + rs6000_sched_insert_nops + = (rs6000_nop_insertion) atoi (rs6000_sched_insert_nops_str); } #ifdef TARGET_REGNAMES @@ -2013,8 +2015,9 @@ rs6000_builtin_mask_for_load (void) side of the conversion. Return NULL_TREE if it is not available. */ static tree -rs6000_builtin_conversion (enum tree_code code, tree type) +rs6000_builtin_conversion (unsigned /* enum tree_code */ code_in, tree type) { + enum tree_code code = (enum tree_code) code_in; if (!TARGET_ALTIVEC) return NULL_TREE; @@ -6905,10 +6908,10 @@ rs6000_va_start (tree valist, rtx nextarg) f_sav, NULL_TREE); /* Count number of gp and fp argument registers used. */ - words = crtl->args.info.words; - n_gpr = MIN (crtl->args.info.sysv_gregno - GP_ARG_MIN_REG, + words = INCOMING_ARGS_INFO (crtl->args).words; + n_gpr = MIN (INCOMING_ARGS_INFO (crtl->args).sysv_gregno - GP_ARG_MIN_REG, GP_ARG_NUM_REG); - n_fpr = MIN (crtl->args.info.fregno - FP_ARG_MIN_REG, + n_fpr = MIN (INCOMING_ARGS_INFO (crtl->args).fregno - FP_ARG_MIN_REG, FP_ARG_NUM_REG); if (TARGET_DEBUG_ARG) @@ -7690,9 +7693,9 @@ static const struct builtin_description_predicates bdesc_altivec_preds[] = { MASK_ALTIVEC, CODE_FOR_altivec_predicate_v16qi, "*vcmpgtsb.", "__builtin_altivec_vcmpgtsb_p", ALTIVEC_BUILTIN_VCMPGTSB_P }, { MASK_ALTIVEC, CODE_FOR_altivec_predicate_v16qi, "*vcmpgtub.", "__builtin_altivec_vcmpgtub_p", ALTIVEC_BUILTIN_VCMPGTUB_P }, - { MASK_ALTIVEC, 0, NULL, "__builtin_vec_vcmpeq_p", ALTIVEC_BUILTIN_VCMPEQ_P }, - { MASK_ALTIVEC, 0, NULL, "__builtin_vec_vcmpgt_p", ALTIVEC_BUILTIN_VCMPGT_P }, - { MASK_ALTIVEC, 0, NULL, "__builtin_vec_vcmpge_p", ALTIVEC_BUILTIN_VCMPGE_P } + { MASK_ALTIVEC, (enum insn_code) 0, NULL, "__builtin_vec_vcmpeq_p", ALTIVEC_BUILTIN_VCMPEQ_P }, + { MASK_ALTIVEC, (enum insn_code) 0, NULL, "__builtin_vec_vcmpgt_p", ALTIVEC_BUILTIN_VCMPGT_P }, + { MASK_ALTIVEC, (enum insn_code) 0, NULL, "__builtin_vec_vcmpge_p", ALTIVEC_BUILTIN_VCMPGE_P } }; /* SPE predicates. */ @@ -8561,8 +8564,8 @@ altivec_expand_vec_set_builtin (tree exp) mode1 = TYPE_MODE (TREE_TYPE (TREE_TYPE (arg0))); gcc_assert (VECTOR_MODE_P (tmode)); - op0 = expand_expr (arg0, NULL_RTX, tmode, 0); - op1 = expand_expr (arg1, NULL_RTX, mode1, 0); + op0 = expand_expr (arg0, NULL_RTX, tmode, EXPAND_NORMAL); + op1 = expand_expr (arg1, NULL_RTX, mode1, EXPAND_NORMAL); elt = get_element_number (TREE_TYPE (arg0), arg2); if (GET_MODE (op1) != mode1 && GET_MODE (op1) != VOIDmode) @@ -14028,7 +14031,7 @@ emit_unlikely_jump (rtx cond, rtx label) x = gen_rtx_IF_THEN_ELSE (VOIDmode, cond, label, pc_rtx); x = emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, x)); - REG_NOTES (x) = gen_rtx_EXPR_LIST (REG_BR_PROB, very_unlikely, NULL_RTX); + REG_NOTES (x) = alloc_reg_note (REG_BR_PROB, very_unlikely, NULL_RTX); } /* A subroutine of the atomic operation splitters. Emit a load-locked @@ -14508,7 +14511,8 @@ compute_vrsave_mask (void) them in again. More importantly, the mask we compute here is used to generate CLOBBERs in the set_vrsave insn, and we do not wish the argument registers to die. */ - for (i = crtl->args.info.vregno - 1; i >= ALTIVEC_ARG_MIN_REG; --i) + for (i = INCOMING_ARGS_INFO (crtl->args).vregno - 1; + i >= ALTIVEC_ARG_MIN_REG; --i) mask &= ~ALTIVEC_REG_BIT (i); /* Similarly, remove the return value from the set. */ @@ -15622,11 +15626,11 @@ rs6000_emit_allocate_stack (HOST_WIDE_INT size, int copy_r12, int copy_r11) RTX_FRAME_RELATED_P (insn) = 1; REG_NOTES (insn) = - gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - gen_rtx_SET (VOIDmode, stack_reg, - gen_rtx_PLUS (Pmode, stack_reg, - GEN_INT (-size))), - REG_NOTES (insn)); + alloc_reg_note (REG_FRAME_RELATED_EXPR, + gen_rtx_SET (VOIDmode, stack_reg, + gen_rtx_PLUS (Pmode, stack_reg, + GEN_INT (-size))), + REG_NOTES (insn)); } /* Add to 'insn' a note which is PATTERN (INSN) but with REG replaced @@ -15707,9 +15711,8 @@ rs6000_frame_related (rtx insn, rtx reg, HOST_WIDE_INT val, } RTX_FRAME_RELATED_P (insn) = 1; - REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - real, - REG_NOTES (insn)); + REG_NOTES (insn) + = alloc_reg_note (REG_FRAME_RELATED_EXPR, real, REG_NOTES (insn)); } /* Returns an insn that has a vrsave set operation with the @@ -16335,9 +16338,8 @@ rs6000_emit_prologue (void) We use CR2_REGNO (70) to be compatible with gcc-2.95 on Linux. */ set = gen_rtx_SET (VOIDmode, cr_save_rtx, gen_rtx_REG (SImode, CR2_REGNO)); - REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - set, - REG_NOTES (insn)); + REG_NOTES (insn) + = alloc_reg_note (REG_FRAME_RELATED_EXPR, set, REG_NOTES (insn)); } /* Do any required saving of fpr's. If only one or two to save, do @@ -16593,9 +16595,8 @@ rs6000_emit_prologue (void) insn = emit_insn (gen_movesi_from_cr (cr_save_rtx)); RTX_FRAME_RELATED_P (insn) = 1; set = gen_rtx_SET (VOIDmode, cr_save_rtx, magic_eh_cr_reg); - REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - set, - REG_NOTES (insn)); + REG_NOTES (insn) + = alloc_reg_note (REG_FRAME_RELATED_EXPR, set, REG_NOTES (insn)); } insn = emit_move_insn (mem, cr_save_rtx); @@ -18126,7 +18127,7 @@ output_toc (FILE *file, rtx x, int labelno, enum machine_mode mode) h->key_mode = mode; h->labelno = labelno; - found = htab_find_slot (toc_hash_table, h, 1); + found = htab_find_slot (toc_hash_table, h, INSERT); if (*found == NULL) *found = h; else /* This is indeed a duplicate. @@ -18547,7 +18548,8 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED) # define NO_PROFILE_COUNTERS 0 #endif if (NO_PROFILE_COUNTERS) - emit_library_call (init_one_libfunc (RS6000_MCOUNT), 0, VOIDmode, 0); + emit_library_call (init_one_libfunc (RS6000_MCOUNT), LCT_NORMAL, + VOIDmode, 0); else { char buf[30]; @@ -18558,8 +18560,8 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED) label_name = (*targetm.strip_name_encoding) (ggc_strdup (buf)); fun = gen_rtx_SYMBOL_REF (Pmode, label_name); - emit_library_call (init_one_libfunc (RS6000_MCOUNT), 0, VOIDmode, 1, - fun, Pmode); + emit_library_call (init_one_libfunc (RS6000_MCOUNT), LCT_NORMAL, + VOIDmode, 1, fun, Pmode); } } else if (DEFAULT_ABI == ABI_DARWIN) @@ -18578,7 +18580,7 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED) caller_addr_regno = 0; #endif emit_library_call (gen_rtx_SYMBOL_REF (Pmode, mcount_name), - 0, VOIDmode, 1, + LCT_NORMAL, VOIDmode, 1, gen_rtx_REG (Pmode, caller_addr_regno), Pmode); } } @@ -20481,7 +20483,7 @@ rs6000_initialize_trampoline (rtx addr, rtx fnaddr, rtx cxt) case ABI_DARWIN: case ABI_V4: emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__trampoline_setup"), - FALSE, VOIDmode, 4, + LCT_NORMAL, VOIDmode, 4, addr, Pmode, GEN_INT (rs6000_trampoline_size ()), SImode, fnaddr, Pmode, @@ -22721,7 +22723,7 @@ rs6000_init_dwarf_reg_sizes_extra (tree address) { int i; enum machine_mode mode = TYPE_MODE (char_type_node); - rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0); + rtx addr = expand_expr (address, NULL_RTX, VOIDmode, EXPAND_NORMAL); rtx mem = gen_rtx_MEM (BLKmode, addr); rtx value = gen_int_mode (4, mode); diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index e0d40a95854..448863b9725 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -14428,7 +14428,8 @@ (use (match_operand 1 "" "")) ; iterations; zero if unknown (use (match_operand 2 "" "")) ; max iterations (use (match_operand 3 "" "")) ; loop level - (use (match_operand 4 "" ""))] ; label + (use (match_operand 4 "" "")) ; label + (match_operand 5 "" "")] "" " { diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk index ec611f50be2..17427d657e6 100644 --- a/gcc/optc-gen.awk +++ b/gcc/optc-gen.awk @@ -81,6 +81,17 @@ print "#endif /* GCC_DRIVER */" print "" have_save = 0; +# After sorting, a VarExists can end up earlier than an Init. So look for +# all variables with Init first, lest we get double definitions for GCC_DRIVER. +for (i = 0; i < n_opts; i++) { + name = var_name(flags[i]); + if (name == "") + continue; + init = opt_args("Init", flags[i]) + if (init == "") + continue; + var_seen[name] = 1; +} for (i = 0; i < n_opts; i++) { if (flag_set_p("Save", flags[i])) have_save = 1; |