diff options
author | David S. Miller <davem@redhat.com> | 2002-06-11 05:22:48 -0700 |
---|---|---|
committer | David S. Miller <davem@gcc.gnu.org> | 2002-06-11 05:22:48 -0700 |
commit | 2f937369fa50dfd2f5af11b18d30c5489451072c (patch) | |
tree | 5f5a5da6b9ff25b136d9c1acd1a495af48658efb /gcc/builtins.c | |
parent | 43cf10b56ceb4bb309c6aac698845eebf734d351 (diff) | |
download | gcc-2f937369fa50dfd2f5af11b18d30c5489451072c.zip gcc-2f937369fa50dfd2f5af11b18d30c5489451072c.tar.gz gcc-2f937369fa50dfd2f5af11b18d30c5489451072c.tar.bz2 |
Delete SEQUENCE rtl usage outside of reorg and ssa passes.
2002-06-05 David S. Miller <davem@redhat.com>
Delete SEQUENCE rtl usage outside of reorg and ssa passes.
* rtl.h (gen_sequence, emit_insns, emit_insns_before,
emit_insns_before_scope, emit_insns_after,
emit_insns_after_scope): Delete declaration.
* ada/misc.c (insert_code_for): Use emit_insn* instead of
emit_insns_foo.
* config/alpha/alpha.c (alpha_set_memflags_1): Abort on SEQUENCE.
(alpha_set_memflags): Fix comment.
(set_frame_related_p): Use get_insns instead of gen_sequence.
* config/alpha/alpha.md (setjmp receiver splitter): Avoid
emitting no insns.
* config/arm/arm.c (arm_finalize_pic): Use get_insns instead of
gen_sequence.
(arm_gen_load_multiple, arm_gen_store_multiple): Likewise.
* config/fr30/fr30.c (fr30_move_double): Likewise.
* config/i386/i386.c (ix86_expand_int_movcc, ix86_expand_movstr):
Likewise.
* config/ia64/ia64.c (spill_restore_mem): Likewise.
* config/ia64/ia64.md (conditional move spliiter): Avoid emitting
no insns.
* config/m32r/m32r.c (gen_split_move_double): Use get_insns
instead of gen_sequence.
* config/mips/mips.c (embedded_pic_fnaddr_reg): Likewise.
(mips_expand_prologue, mips16_gp_pseudo_reg): Likewise.
* config/sh/sh.c (sh_need_epilogue): Likewise.
* config/sparc/sparc.md (current_function_calls_alloca, flat): New
attributes.
(setjmp pattern and split): Use them to avoid splitter which emits
no RTL.
* genattrtab.c (main): Emit include of function.h
* config/stormy16/stormy16.c (xstormy16_split_cbranch): Use
get_insns instead of gen_sequence.
* config/cris/cris.c (cris_split_movdx): Likewise.
* emit-rtl.c (emit_insns*): Kill.
(try_split): Expect insn list instead of SEQUENCE.
(make_jump_insn_raw, make_call_insn_raw): Fix comments.
(emit_*insn*): Reimplement to work with INSN lists and PATTERNs.
Make them abort if a SEQUENCE is given and RTL checking is
enabled.
(emit_*_scope): Don't forget to set scope on final insn.
(gen_sequence): Move from here...
* ssa.c (gen_sequence): To here as private function.
* builtins.c (expand_builtin_apply_args): Use emit_insn_foo, fix
comments.
(expand_builtin_return, expand_builtin_mathfn): Likewise.
(expand_builtin_strlen): Use get_insns instead of gen_sequence.
(expand_builtin_saveregs): Use emit_insn_foo, fix comments.
(expand_builtin_expect_jump): Use get_insns and fix comments.
* calls.c (try_to_integrate): Use emit_insn_foo.
(expand_call, emit_library_call_value_1): Likewise.
* expr.c (emit_queue): Handle insn lists instead of SEQUENCE.
(emit_move_insn_1): Use get_insns instead of gen_sequence.
(expand_expr): Use emit_insn_foo.
* cfgrtl.c (commit_one_edge_insertion): Use emit_insn_foo.
* except.c (build_post_landing_pads): Likewise.
* flow.c (attempt_auto_inc): Likewise.
* stmt.c (expand_fixup, fixup_gotos, expand_nl_handler_label,
expand_nl_goto_receivers, expand_decl_cleanup): Likewise.
* function.c (fixup_var_refs_insn): Use get_insns instead of
gen_sequence.
(fixup_var_refs_1): Likewise and expect insn list from gen_foo.
(fixup_memory_subreg): Use get_insns instead of gen_sequence.
(fixup_stack_1, purge_addressof_1, expand_main_function,
get_arg_pointer_save_area): Likewise.
(optimize_bit_field, instantiate_virtual_regs_1, assign_parms,
expand_function_end): Use emit_insn_foo.
(record_insns, keep_stack_depressed): Work with insn list instead
of SEQUENCE, fix comments.
* ifcvt.c (noce_emit_store_flag, noce_try_store_flag,
noce_try_store_flag_constants, noce_try_store_flag_inc,
noce_try_store_flag_mask, noce_emit_cmove, noce_try_cmove_arith,
noce_try_minmax, noce_try_abs): Use emit_insn_foo.
(noce_process_if_block): Use get_insns instead of gen_sequence.
* optabs.c (add_equal_note): Work with insn list, fix comments.
(expand_binop): Expect insn list from GEN_FCN(), use emit_insn_foo.
(expand_unop, expand_complex_abs, expand_unop_insn,
expand_no_conflict_block): Likewise.
(gen_move_insn): Use get_insns instead of gen_sequence.
(gen_cond_trap): Likewise.
* integrate.c (copy_rtx_and_substitute): Likewise.
(emit_initial_value_sets): Use emit_insn_foo.
* reload1.c (emit_output_reload_insns, emit_reload_insns): Likewise.
(fixup_abnormal_edges): Avoid losing REG_NOTES more intelligently
now that RTL generators give insn lists.
* sibcall.c (replace_call_placeholder): Use emit_insn_foo.
* doloop.c (doloop_modify, doloop_modify_runtime): Use get_insns
instead of gen_sequence.
(doloop_optimize): Work with insn lists instead of SEQUENCE rtl.
* explow.c (emit_stack_save, emit_stack_restore): Use get_insns
instead of gen_sequence.
* loop.c (move_movables, emit_prefetch_instructions,
gen_add_mult, check_dbra_loop, gen_load_of_final_value):
Likewise.
(loop_regs_update): Work with insn list instead of SEQUENCE rtl.
(product_cheap_p): Likewise, and add commentary about RTL wastage
here.
* lcm.c (optimize_mode_switching): Use get_insns instead of
gen_sequence.
* profile.c (gen_edge_profiler): Likewise.
* regmove.c (copy_src_to_dest): Likewise.
* reg-stack.c (compensate_edge): Likewise and fix comment.
* gcse.c (process_insert_insn): Likewise.
(insert_insn_end_bb): Work with insn list instead of SEQUENCE rtl.
* jump.c (delete_prior_computation): Update comment.
* genemit.c (gen_expand, gen_split, main): Use get_insns instead
of gen_sequence, update comments to match.
* recog.c (peephole2_optimize): Work with insn lists instead of
SEQUENCE rtl.
* sched-vis.c (print_pattern): Abort on SEQUENCE.
* unroll.c (unroll_loop, find_splittable_givs, final_giv_value):
Use get_insns instead of gen_sequence.
(copy_loop_body): Likewise and don't emit dummy NOTE.
* genrecog.c: Don't mention SEQUENCE rtl in comments.
* combine.c (try_combine): Expect insn lists from split generator.
* reorg.c (relax_delay_slots): Emit SEQUENCE into insn list by
hand.
From-SVN: r54497
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index a686c8d..bcf1118 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -1159,12 +1159,12 @@ expand_builtin_apply_args () apply_args_value = temp; - /* Put the sequence after the NOTE that starts the function. - If this is inside a SEQUENCE, make the outer-level insn + /* Put the insns after the NOTE that starts the function. + If this is inside a start_sequence, make the outer-level insn chain current, so the code is placed at the start of the function. */ push_topmost_sequence (); - emit_insns_before (seq, NEXT_INSN (get_insns ())); + emit_insn_before (seq, NEXT_INSN (get_insns ())); pop_topmost_sequence (); return temp; } @@ -1393,7 +1393,7 @@ expand_builtin_return (result) } /* Put the USE insns before the return. */ - emit_insns (call_fusage); + emit_insn (call_fusage); /* Return whatever values was restored by jumping directly to the end of the function. */ @@ -1581,7 +1581,7 @@ expand_builtin_mathfn (exp, target, subtarget) /* Output the entire sequence. */ insns = get_insns (); end_sequence (); - emit_insns (insns); + emit_insn (insns); return target; } @@ -1663,7 +1663,7 @@ expand_builtin_strlen (exp, target) expand_expr (src, src_reg, ptr_mode, EXPAND_SUM)); if (pat != src_reg) emit_move_insn (src_reg, pat); - pat = gen_sequence (); + pat = get_insns (); end_sequence (); if (before_strlen) @@ -2828,11 +2828,11 @@ expand_builtin_saveregs () saveregs_value = val; - /* Put the sequence after the NOTE that starts the function. If this - is inside a SEQUENCE, make the outer-level insn chain current, so + /* Put the insns after the NOTE that starts the function. If this + is inside a start_sequence, make the outer-level insn chain current, so the code is placed at the start of the function. */ push_topmost_sequence (); - emit_insns_after (seq, get_insns ()); + emit_insn_after (seq, get_insns ()); pop_topmost_sequence (); return val; @@ -3513,7 +3513,7 @@ expand_builtin_expect (arglist, target) /* Like expand_builtin_expect, except do this in a jump context. This is called from do_jump if the conditional is a __builtin_expect. Return either - a SEQUENCE of insns to emit the jump or NULL if we cannot optimize + a list of insns to emit the jump or NULL if we cannot optimize __builtin_expect. We need to optimize this at jump time so that machines like the PowerPC don't turn the test into a SCC operation, and then jump based on the test being 0/1. */ @@ -3534,8 +3534,8 @@ expand_builtin_expect_jump (exp, if_false_label, if_true_label) if (TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE && (integer_zerop (arg1) || integer_onep (arg1))) { - int j; int num_jumps = 0; + rtx insn; /* If we fail to locate an appropriate conditional jump, we'll fall back to normal evaluation. Ensure that the expression @@ -3556,16 +3556,17 @@ expand_builtin_expect_jump (exp, if_false_label, if_true_label) /* Expand the jump insns. */ start_sequence (); do_jump (arg0, if_false_label, if_true_label); - ret = gen_sequence (); + ret = get_insns (); end_sequence (); /* Now that the __builtin_expect has been validated, go through and add the expect's to each of the conditional jumps. If we run into an error, just give up and generate the 'safe' code of doing a SCC operation and then doing a branch on that. */ - for (j = 0; j < XVECLEN (ret, 0); j++) + insn = ret; + while (insn != NULL_RTX) { - rtx insn = XVECEXP (ret, 0, j); + rtx next = NEXT_INSN (insn); rtx pattern; if (GET_CODE (insn) == JUMP_INSN && any_condjump_p (insn) @@ -3576,7 +3577,7 @@ expand_builtin_expect_jump (exp, if_false_label, if_true_label) int taken; if (GET_CODE (ifelse) != IF_THEN_ELSE) - continue; + goto do_next_insn; if (GET_CODE (XEXP (ifelse, 1)) == LABEL_REF) { @@ -3603,7 +3604,7 @@ expand_builtin_expect_jump (exp, if_false_label, if_true_label) label = NULL_RTX; } else - continue; + goto do_next_insn; /* If the test is expected to fail, reverse the probabilities. */ @@ -3617,11 +3618,14 @@ expand_builtin_expect_jump (exp, if_false_label, if_true_label) else if (label == if_false_label) taken = 1 - taken; else if (label != if_true_label) - continue; + goto do_next_insn; num_jumps++; predict_insn_def (insn, PRED_BUILTIN_EXPECT, taken); } + + do_next_insn: + insn = next; } /* If no jumps were modified, fail and do __builtin_expect the normal |