[RFC] Kill gen_sequence
law@redhat.com
law@redhat.com
Thu Jun 6 12:58:00 GMT 2002
In message <20020606.023343.112819990.davem@redhat.com>, "David S. Miller"
writes:
> Any comments or suggestions before I check this in? Also, if anyone
> has other kinds of ideas of stuff like this to do (goal being
> lessening the amount of wasted RTL or optimizing RTL usage in some
> other way) please speak up and I'll put the good ideas into my "GCC go
> faster" todo list :-)
>
> This patch is fully bootstrap+regtested on sparc-linux and i686-linux.
> I would be really interested in hearing about any breakage I've
> introduced on other platforms. Because of the scope of these changes,
> that is entirely possible.
>
> 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_after): 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): Delete
> optimization which would cause splitter to emit 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): Do not match
> when no RTL would be emitted.
> * 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.
> (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.
FWIW I "quickly" tested this on my PAs.
I have a bunch (162) of .i files lying around. I compiled cc1, then timed how
long it took the resulting cc1 to build all those .i files. Then I applied the
patch, rebuilt cc1 (with the same compiler/options of course) and re-timed.
The net result is about a .4% improvement in compile time. I realize the
point behind this patch wasn't to improve compile-times, but it's nice to
see it happen as a side effect.
jeff
More information about the Gcc-patches
mailing list