aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
AgeCommit message (Collapse)AuthorFilesLines
2003-02-01[multiple changes]Richard Henderson1-0/+28
2003-02-01 Richard Henderson <rth@redhat.com> * optabs.c (expand_unop): Use word_mode for outmode of bit scaners. * libgcc2.c (__ffsdi2, __clzsi2, __clzdi2, __ctzsi2, __ctzdi2, __popcountsi2, __popcountdi2, __paritysi2 __paritydi2): Change return type to Wtype. * libgcc-std.ver (GCC_3.4): Fix inheritance. * config/i386/i386.md (ffssi2): Use nonimmediate_operand for expander input constraint. 2003-02-01 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de> * optabs.h (optab_index): Add OTI_clz, OTI_ctz, OTI_popcount and OTI_parity. (clz_optab, ctz_optab, popcount_optab, parity_optab): New. * optabs.c (widen_clz, expand_parity): New. (expand_unop): Handle clz and parity. Hardcode SImode as outmode for libcalls to clz, ctz, popcount, and parity. (init_optabs): Init clz_optab, ctz_optab, popcount_optab and parity_optab, and set up libfunc handlers. * libgcc2.c (__clzsi2, __clzdi2, __ctzsi2, __ctzdi2, __popcountsi2, __popcountdi2, __paritysi2 __paritydi2, __popcount_tab): New. * libgcc2.h: Declare them. * libgcc-std.ver (GCC_3.4): Add new functions from libgcc2.c. * genopinit.c (optabs): Add clz_optab, ctz_optab, popcount_optab and parity_optab. * builtin-types.def (BT_FN_INT_LONG, BT_FN_INT_LONGLONG): New. * builtins.def (BUILT_IN_CLZ, BUILT_IN_CTZ, BUILT_IN_POPCOUNT, BUILT_IN_PARITY, BUILT_IN_FFSL, BUILT_IN_CLZL, BUILT_IN_CTZL, BUILT_IN_POPCOUNTL, BUILT_IN_PARITYL, BUILT_IN_FFSLL, BUILT_IN_CLZLL, BUILT_IN_CTZLL, BUILT_IN_POPCOUNTLL, BUILT_IN_PARITYLL): New. * builtins.c (expand_builtin_unop): Rename from expand_builtin_ffs and add optab argument. (expand_builtin): Expand BUILT_IN_{FFS,CLZ,POPCOUNT,PARITY}*. * tree.def (CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR, PARITY_EXPR): New. * expr.c (expand_expr): Handle them. * fold-const.c (tree_expr_nonnegative_p): Likewise. * rtl.def (CLZ, CTZ, POPCOUNT, PARITY): New. * reload1.c (eliminate_regs): Handle them. (elimination_effects): Likewise. * function.c (instantiate_virtual_regs_1): Likewise * genattrtab.c (check_attr_value): Likewise. * simplify-rtx.c (simplify_unary_operation): Likewise. * c-common.c (c_common_truthvalue_conversion): Handle POPCOUNT_EXPR. * combine.c (combine_simplify_rtx): Handle POPCOUNT and PARITY. (nonzero_bits): Handle CLZ, CTZ, POPCOUNT and PARITY. * config/alpha/alpha.md (clzdi2, ctzdi2, popcountdi2): New. * config/arm/arm.c (arm_init_builtins): Rename __builtin_clz to __builtin_arm_clz. * Makefile.in (LIB2FUNCS_1, LIB2FUNCS_2): Move... * mklibgcc.in (lib2funcs): ...here and merge. Add new members. * doc/extend.texi (Other Builtins): Add new builtins. * doc/md.texi (Standard Names): Add new patterns. From-SVN: r62252
2003-01-30* expr.c (store_expr): Promote all MEM intermediates to regs.Richard Henderson1-6/+6
From-SVN: r62173
2003-01-26expr.c (emit_group_store): Initialize dst with CONST0_RTX for the ↵Alexandre Oliva1-1/+1
appropriate mode. * expr.c (emit_group_store): Initialize dst with CONST0_RTX for the appropriate mode. From-SVN: r61828
2003-01-17et-forest.c: Fix comment typos.Kazu Hirata1-1/+1
* et-forest.c: Fix comment typos. * et-forest.h: Likewise. * except.c: Likewise. * expr.c: Likewise. * flags.h: Likewise. * flow.c: Likewise. * gcc.c: Likewise. * gcse.c: Likewise. * genattrtab.c: Likewise. * genautomata.c: Likewise. * gengtype.c: Likewise. * genrecog.c: Likewise. * global.c: Likewise. * gthr-rtems.h: Likewise. From-SVN: r61443
2003-01-12* expr.c (expand_expr <RDIV_EXPR>): Correct recursive call args.Alan Modra1-2/+2
From-SVN: r61215
2002-12-23expr.c (expand_assignment): Apply special treatment to ARRAY_TYPE.David Edelsohn1-1/+2
* expr.c (expand_assignment): Apply special treatment to ARRAY_TYPE. From-SVN: r60437
2002-12-16Merge basic-improvements-branch to trunkZack Weinberg1-17/+19
From-SVN: r60174
2002-12-13c-decl.c: Fix a comment typo.Kazu Hirata1-1/+1
* c-decl.c: Fix a comment typo. * cfg.c: Likewise. * cfgcleanup.c: Likewise. * cfglayout.c: Likewise. * cfgrtl.c: Likewise. * c-typeck.c: Likewise. * dominance.c: Likewise. * dwarf2asm.c: Likewise. * dwarfout.c: Likewise. * expmed.c: Likewise. * expr.c: Likewise. * final.c: Likewise. * flow.c: Likewise. * function.c: Likewise. * gcc.c: Likewise. * genautomata.c: Likewise. * integrate.c: Likewise. * loop.c: Likewise. * loop.h: Likewise. * output.h: Likewise. * profile.c: Likewise. * ra.h: Likewise. * reload1.c: Likewise. * reload.c: Likewise. * sched-rgn.c: Likewise. * stmt.c: Likewise. * tree.h: Likewise. * vmsdbgout.c: Likewise. From-SVN: r60085
2002-12-09target.h (gcc_target): Add cannot_force_const_mem.Richard Henderson1-0/+6
* target.h (gcc_target): Add cannot_force_const_mem. * target-def.h (TARGET_CANNOT_FORCE_CONST_MEM): New. (TARGET_INITIALIZER): Add it. * varasm.c (force_const_mem): Fail if cannot_force_const_mem. * expr.c (emit_move_insn): Be prepared for force_const_mem to fail. * reload1.c (reload): Likewise. * hooks.c (hook_bool_rtx_false): New. * hooks.h: Declare it. * config/i386/i386.c (ix86_cannot_force_const_mem): New. (TARGET_CANNOT_FORCE_CONST_MEM): New. (ix86_expand_move): Remove de-const-pooling hack. * gcc.dg/tls/opt-4.c: New. From-SVN: r59971
2002-12-09tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.Steve Ellcey1-16/+4
* doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition. * defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition. * calls.c (store_unaligned_arguments_into_pseudos) Remove FUNCTION_ARG_REG_LITTLE_ENDIAN. * stmt.c (expand_return): Ditto. * expr.c (move_block_from_reg): Ditto. (copy_blkmode_from_reg): Ditto. * expmed.c (store_bit_field): Ditto. From-SVN: r59962
2002-12-06expr.c (expand_expr): Never modify exp in place.Jakub Jelinek1-15/+7
* expr.c (expand_expr) <case COND_EXPR>: Never modify exp in place. * gcc.c-torture/execute/20021204-1.c: New test. From-SVN: r59881
2002-11-27expr.c (gen_group_rtx, [...]): New functions.John David Anglin1-0/+56
* expr.c (gen_group_rtx, emit_group_move): New functions. * expr.h (gen_group_rtx, emit_group_move): Prototype. * function.c (expand_function_start): Use gen_group_rtx to create a PARALLEL rtx to hold the return value when the real return rtx is a PARALLEL. (expand_function_end): Use emit_group_move to move the return value from a PARALLEL to the real return registers. * rtl.h (REG_FUNCTION_VALUE_P): Allow function values to be returned in PARALLELs. From-SVN: r59554
2002-11-20emit-rtl.c (gen_reg_rtx): Simplify mapping of Complex type to component type ↵Steve Ellcey1-5/+1
using GET_MODE_INNER. * emit-rtl.c (gen_reg_rtx): Simplify mapping of Complex type to component type using GET_MODE_INNER. * expr.c (emit_move_insn_1): Ditto. * optabs.c (expand_binop): Ditto. (expand_unop): Ditto. (expand_complex_abs): Ditto. From-SVN: r59317
2002-11-10calls.c (PUSH_ARGS_REVERSED): Define only if not defined.H.J. Lu1-0/+2
2002-11-10 H.J. Lu <hjl@gnu.org> * calls.c (PUSH_ARGS_REVERSED): Define only if not defined. * expr.c (PUSH_ARGS_REVERSED): Likewise. * config/i386/i386.h (PUSH_ARGS_REVERSED): Set to 1. From-SVN: r59002
2002-11-01expr.c (emit_move_insn): Use SCALAR_FLOAT_MODE_PJan Hubicka1-1/+1
* expr.c (emit_move_insn): Use SCALAR_FLOAT_MODE_P * machmode.h (SCALAR_FLOAT_MODE_P): New macro. From-SVN: r58712
2002-10-29expr.c (expand_expr): Don't use simplify_binary_operation; check for zero ↵Eric Botcazou1-3/+4
operands explicitly. * expr.c (expand_expr) [PLUS]: Don't use simplify_binary_operation; check for zero operands explicitly. From-SVN: r58623
2002-10-24expr.c (convert_move): If unsignedp is less then zero there is no equivalent ↵Steve Ellcey1-1/+2
code. * expr.c (convert_move): If unsignedp is less then zero there is no equivalent code. From-SVN: r58502
2002-10-15* expr.c (do_tablejump): Fix typo in my previous commit.Jan Hubicka1-2/+2
From-SVN: r58179
2002-10-15re PR c/7344 (performance regression on huge case statements)Jan Hubicka1-1/+4
* i386.md (movv2di_internal): New pattern. (movv2df_internal, movv8hi_internal, movv16qi_internal): Fix predicate. (movv2di): New expander. * i386.c (ix86_preferred_reload_class): Return NO_REGS for vector operands. * i386.c (ix86_expand_timode_binop_builtin): Delete. (builtin_description): Add SSE1 logicals; rename SSE2 logicals. (ix86_init_mmx_sse_builtins): Kill SSE1 logicals. (ix86_expand_builtin): Likewise. * i386.h (sse_andti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2, sse_andti3, sse_andnti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2, sse_andnti3, sse_orti4_df_1, sse_orti3_df_2, sse_orti3_sf_1, sse_orti3_sf_2, sse_orti3, sse_xorti4_df_1, sse_xorti3_df_2, sse_xorti3_sf_1, sse_xorti3_sf_2, sse_xorti3): Kill. (sse_andv4sf3, sse_andnv4sf3, sse_orv2df3, sse_xorv2df3, sse_andv2df3, sse_andnv2df3, sse_orv2df3, sse_xorv2df3): New expanders. (*sse_andv4sf3, *sse_andnv2df3, *sse_orv4sf3, *sse_xorv4sf3, *sse_andv2df3, *sse_andnv2df3, *sse_orv2df3, *sse_xorv2df3): New patterns. (*sse_andsf3, *sse_andndf3, *sse_ordf3, *sse_xordf3, *sse_anddf3, *sse_andndf3, *sse_orv2df3, *sse_xorv2df3): New patterns. * xmmintrin.h (__m128i): Define as __v2di. PR c/7344 * predict.c (can_predict_insn_p): New function. (estimate_probability): Avoid unnecesary work. (process_note_prediction): Likewise. * toplev.c (rest_of_compilation): Account early branch prediction pass as TV_BRANCH_PROB. PR c++/6419 (expand_expr): Use DECL_RTL_SET_P. From-SVN: r58156
2002-10-07re PR c/7411 (cistore.c:392: Internal compiler error in ↵Eric Botcazou1-4/+11
instantiate_virtual_regs_1, at function.c:3974) PR c/7411 * expr.c (expand_expr) [PLUS]: Simplify after the operands have been expanded in EXPAND_NORMAL mode. Co-Authored-By: Volker Reichelt <reichelt@igpm.rwth-aachen.de> From-SVN: r57882
2002-09-26expr.c (expand_expr): Convert A - const to A + (-const) on RTX level, even ↵Ulrich Weigand1-20/+25
for unsigned types. * expr.c (expand_expr) [MINUS_EXPR]: Convert A - const to A + (-const) on RTX level, even for unsigned types. From-SVN: r57543
2002-09-22dbxout.c: Follow spelling conventions.Kazu Hirata1-6/+6
* dbxout.c: Follow spelling conventions. * defaults.h: Likewise. * df.c: Likewise. * diagnostic.h: Likewise. * doloop.c: Likewise. * dwarf2out.c: Likewise. * dwarfout.c: Likewise. * emit-rtl.c: Likewise. * except.c: Likewise. * explow.c: Likewise. * expmed.c: Likewise. * expr.c: Likewise. * expr.h: Likewise. * flags.h: Likewise. * flow.c: Likewise. * fold-const.c: Likewise. * function.c: Likewise. * function.h: Likewise. * gcc.c: Likewise. * gcov-io.h: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. * genattrtab.c: Likewise. * genconfig.c: Likewise. * genrecog.c: Likewise. * ggc-page.c: Likewise. * ggc.h: Likewise. * global.c: Likewise. * gthr-win32.h: Likewise. * integrate.c: Likewise. * jump.c: Likewise. * langhooks.c: Likewise. * langhooks.h: Likewise. * line-map.h: Likewise. * local-alloc.c: Likewise. * longlong.h: Likewise. * loop.c: Likewise. * loop.h: Likewise. From-SVN: r57406
2002-09-16expr.c (emit_block_move): Set memory block size as appropriate for the copy.Richard Henderson1-0/+10
* expr.c (emit_block_move): Set memory block size as appropriate for the copy. From-SVN: r57233
2002-09-04expr.c (emit_group_load): Revise to allow splitting TCmode source into ↵John David Anglin1-8/+13
DImode pieces. * expr.c (emit_group_load): Revise to allow splitting TCmode source into DImode pieces. * pa-64.h (LONG_DOUBLE_TYPE_SIZE): Define to 128. * pa64-regs.h (CLASS_CANNOT_CHANGE_MODE_P): Inhibit changes from SImode for floating-point register class. * pa.c (function_arg): Fix handling of modes wider than one word for TARGET_64BIT. From-SVN: r56805
2002-09-03* expr.c (expand_expr): Remove extraneous comment and code.Graham Stott1-3/+0
From-SVN: r56744
2002-08-31* expr.c (block_move_libcall_safe_for_call_parm): Fix thinko.Richard Henderson1-2/+1
From-SVN: r56710
2002-08-29expr.h (enum block_op_methods): New.Richard Henderson1-19/+166
* expr.h (enum block_op_methods): New. (emit_block_move): Update prototype. * expr.c (block_move_libcall_safe_for_call_parm): New. (emit_block_move_via_loop): New. (emit_block_move): Use them. New argument METHOD. (emit_push_insn): Always respect the given alignment. (expand_assignment): Update call to emit_block_move. (store_expr, store_field, expand_expr): Likewise. * builtins.c (expand_builtin_apply): Likewise. (expand_builtin_memcpy, expand_builtin_va_copy): Likewise. * function.c (expand_function_end): Likewise. * config/sh/sh.c (sh_initialize_trampoline): Likewise. * config/sparc/sparc.c (sparc_va_arg): Likewise. * calls.c (expand_call, emit_library_call_value_1): Likewise. (save_fixed_argument_area): Use emit_block_move with BLOCK_OP_CALL_PARM instead of move_by_pieces. (restore_fixed_argument_area): Likewise. (store_one_arg): Fix alignment parameter to emit_push_insn. From-SVN: r56661
2002-08-20expr.c (TARGET_MEM_FUNCTIONS): Transform to boolean.Richard Henderson1-391/+422
* expr.c (TARGET_MEM_FUNCTIONS): Transform to boolean. (emit_block_move): Split out subroutines. (emit_block_move_via_movstr): New. (emit_block_move_via_libcall): New. Emit bcopy via normal call also. (emit_block_move_libcall_fn): New. Construct function prototype for bcopy as well. (clear_storage): Split out subroutines. (clear_storage_via_clrstr): New. (clear_storage_via_libcall): New. Emit bzero as a normal call also. (clear_storage_libcall_fn): New. Construct function prototype for bzero as well. (emit_push_insn): Use emit_block_move. (expand_assignment): Booleanize TARGET_MEM_FUNCTIONS. (store_constructor): Likewise. From-SVN: r56464
2002-08-12expr.c (store_expr): In condition for checking if value is generated in ↵Hans-Peter Nilsson1-3/+6
TARGET... * expr.c (store_expr): In condition for checking if value is generated in TARGET, move call to expr_size last. From-SVN: r56217
2002-08-04Index: ChangeLogGeoffrey Keating1-3/+0
2002-08-04 Geoffrey Keating <geoffk@redhat.com> * Makefile.in (sdbout.o): Doesn't need $(OBSTACK_H). * collect2.h (permanent_obstack): Delete declaration. * collect2.c (permanent_obstack): Delete definition. (main): Don't initialise permanent_obstack. Use xstrdup instead. * expr.c: Don't include obstack.h. (permanent_obstack): Delete declaration. * function.c: Don't include obstack.h. (permanent_obstack): Delete declaration. * integrate.c: Don't include obstack.h. (function_maybepermanent_obstack): Delete declaration. * print-tree.c (debug_tree): Use x*alloc not permalloc. * sdbout.c (gen_fake_label): Use x*alloc not permalloc. * tlink.c (pfgets): Use xstrdup not permanent_obstack. * toplev.c (lang_independent_init): Rename init_obstacks to init_ttree. * tree.h: Rename init_obstacks to init_ttree. Remove declarations of permalloc, expralloc, perm_calloc. * tree.c (permanent_obstack): Delete definition. (init_ttree): Rename from init_obstacks. (permalloc): Delete. (perm_calloc): Delete. (dump_tree_statistics): Don't print information about permanent_obstack. * varasm.c (assemble_start_function): Use xstrdup instead of permalloc/strcpy. (assemble_variable): Likewise. * config/alpha/alpha.c (unicosmk_need_dex): Use xmalloc instead of permalloc. (unicosmk_add_extern): Likewise. * config/c4x/c4x.c (c4x_external_ref): Likewise. (c4x_global_label): Likewise. * config/frv/frv.c (frv_encode_section_info): Likewise. * config/i386/winnt.c (i386_pe_record_external_function): Likewise. (i386_pe_record_exported_symbol): Likewise. * config/mips/mips.c (mips_output_external): Likewise. (mips_output_external_libcall): Likewise. * config/pa/pa.c: (permanent_obstack): Delete declaration. (output_call): Use ggc_strdup instead of allocating on permanent_obstack. * config/romp/romp.c: Include ggc.h. (get_symref): Don't declare permanent_obstack, use ggc_strdup intead of permanent_obstack. * config/rs6000/aix31.h (ASM_OUTPUT_EXTERNAL): Use concat instead of permalloc. * config/rs6000/rs6000.c (rs6000_gen_section_name): Use xmalloc instead of permalloc * config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Use concat instead of permalloc. * config/vax/vax.c (vms_check_external): Use xmalloc instead of permalloc. Index: cp/ChangeLog 2002-08-04 Geoffrey Keating <geoffk@redhat.com> * cvt.c (ocp_convert): Delete obsolete code. * parse.y (permanent_obstack): Delete declaration. * pt.c (permanent_obstack): Delete declaration. * repo.c (permanent_obstack): Delete declaration. (open_repo_file): Use xmalloc instead of permanent_obstack. (init_repo): Use xstrdup instead of permanent_obstack. Index: java/ChangeLog 2002-08-04 Geoffrey Keating <geoffk@redhat.com> * class.c: (permanent_obstack): Delete declaration. * constants.c: (permanent_obstack): Delete declaration. * except.c: (permanent_obstack): Delete declaration. * expr.c: (permanent_obstack): Delete declaration. * jcf-parse.c: (permanent_obstack): Delete declaration. (saveable_obstack): Delete declaration. * parse.h: (permanent_obstack): Delete declaration. * typeck.c: (permanent_obstack): Delete declaration. From-SVN: r56035
2002-08-03explow.c (int_expr_size): New fn.Jason Merrill1-1/+1
* explow.c (int_expr_size): New fn. * expr.c (expand_expr) [CONSTRUCTOR]: Use it. * expr.h: Declare it. From-SVN: r56009
2002-08-02langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro.Jason Merrill1-2/+3
* langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro. * langhooks.c (lhd_expr_size): Define default. * langhooks.h (struct lang_hooks): Add expr_size. * explow.c (expr_size): Call it. * expr.c (store_expr): Don't copy an expression of size zero. (expand_expr) [CONSTRUCTOR]: Use expr_size to calculate how much to store. * Makefile.in (builtins.o): Depend on langhooks.h. * cp-lang.c (LANG_HOOKS_EXPR_SIZE): Define. (cp_expr_size): New fn. * call.c (build_over_call): Lose empty class hackery. (convert_arg_to_ellipsis): Promote non-POD warning to error. * typeck.c (build_modify_expr): Don't use save_expr on an lvalue. From-SVN: r55983
2002-08-01* expr.c (expand_assignment): Delete unused variable.Kaveh R. Ghazi1-2/+0
From-SVN: r55933
2002-07-29emit-rtl.c (set_mem_attributes_minus_bitpos): Rename from set_mem_attributes ↵Richard Henderson1-11/+1
and add BITPOS argument. * emit-rtl.c (set_mem_attributes_minus_bitpos): Rename from set_mem_attributes and add BITPOS argument. Subtract it from OFFSET when same is adjusted. (set_mem_attributes): New wrapper function. * expr.c (expand_assignment): Use set_mem_attributes_minus_bitpos; remove offset adjustment hack. * expr.h (set_mem_attributes_minus_bitpos): Declare. From-SVN: r55846
2002-07-24expr.c (expand_expr): Use GOTO_SUBROUTINE_EXPR form when not optimizing.Richard Henderson1-1/+7
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR form when not optimizing. From-SVN: r55723
2002-07-21expr.c (expand_expr): Don't use GOTO_SUBROUTINE_EXPR when finally_block can ↵Richard Henderson1-19/+39
be re-expanded. * expr.c (expand_expr) [TRY_FINALLY_EXPR]: Don't use GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded. * lang.c (java_unsafe_for_reeval): New. (LANG_HOOKS_UNSAFE_FOR_REEVAL): New. From-SVN: r55636
2002-07-16expr.c (emit_move_insn_1): Handle arbitrary moves that are the same size as ↵J"orn Rennecke1-3/+3
a word. * expr.c (emit_move_insn_1): Handle arbitrary moves that are the same size as a word. * regrename.c (find_oldest_value_reg): Take WORDS_BIG_ENDIAN / BYTES_BIG_ENDIAN into account. From-SVN: r55482
2002-07-13expr.c [...]: New macro defining the maximum number of move instructions to ↵Roger Sayle1-1/+20
use when... * expr.c [CLEAR_RATIO]: New macro defining the maximum number of move instructions to use when clearing memory, c.f. MOVE_RATIO. [CLEAR_BY_PIECES]: New macro, using CLEAR_RATIO, to determine whether clear_by_pieces should be used to clear storage. (clear_storage): Use CLEAR_BY_PIECES instead of MOVE_BY_PIECES. * doc/tm.texi: Document these two new target macros. From-SVN: r55429
2002-06-18simd-1.c: New.Aldy Hernandez1-0/+30
2002-06-16 Aldy Hernandez <aldyh@redhat.com> * gcc.c-torture/execute/simd-1.c: New. * gcc.dg/simd-1.c: New. * doc/extend.texi (Vector Extensions): Document that we can specify simd types not specifically supported by the hardware. Document that simd types can be used as function arguments. Document that signness does make a difference in SIMD types. Misc cleanups and revisions to the "vector extensions" section. * simplify-rtx.c (simplify_subreg): Simplify subregs of vector constants. * expr.c (vector_mode_valid_p): New. * expr.h: Add vector_mode_valid_p. * defaults.h (VECTOR_MODE_SUPPORTED_P): Set default. * emit-rtl.c (immed_double_const): Do not abort on vectors. * c-common.c (type_for_mode): Always build vector nodes regardless of VECTOR_MODE_SUPPORTED_P. (handle_mode_attribute): Error if we can't emulate a nonexisting vector mode. (handle_vector_size_attribute): Same. * optabs.c (expand_binop): Open-code vector operations. (expand_unop): Open-code vector unops. (expand_vector_binop): New. (expand_vector_unop): New. * c-typeck.c (build_binary_op): Allow vectors in binops. Allow vectors in conditional operatiors. (build_unary_op): Allow vectors in unary minus. * config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Conditionalize on TARGET_ALTIVEC. From-SVN: r54727
2002-06-15expr.c (compare_from_rtx): Call simplify_relational_operation on all ↵Roger Sayle1-4/+6
comparisons... * expr.c (compare_from_rtx): Call simplify_relational_operation on all comparisons, not just those between integer constants, with the correct (possibly unsigned) comparison code. (do_compare_rtx_and_jump): Likewise. From-SVN: r54657
2002-06-11Delete SEQUENCE rtl usage outside of reorg and ssa passes.David S. Miller1-10/+26
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
2002-06-10alias.c (static_reg_base_value): New to hold RTL for items allocated once ↵Jeff Law1-2/+7
per function for the aliasing code. * alias.c (static_reg_base_value): New to hold RTL for items allocated once per function for the aliasing code. (init_alias_once_per_function): Initialize static_reg_base_value. (init_alias_analysis): Avoid throw-away allocations of RTL by using pre-computed values in static_reg_base_value. * function.c (prepare_function_start): Call init_alias_once_per_function appropriately. * rtl.h (init_alias_once_per_function): Declare. * caller-save (init_caller_save): Restructure slightly to avoid lots of silly RTL generation. * expr.c (init_expr_once): Likewise. * reload1.c (reload_cse_regs_1): Allocate throw-away register RTL object here. Pass it into children. (reload_cse_simplify_operands): Use passed-in register RTL object. (reload_cse_simplify): Pass through throw-away register RTL object. From-SVN: r54442
2002-06-07emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx.Jeff Law1-1/+1
* emit-rtl.c (init_emit): Add hard registers to regno_reg_rtx. * combine.c (move_deaths): Use regno_reg_rtx for hard regs rather than creating a new register. (distribute_notes): Likewise. * df.c (df_reg_use_gen): Likewise. (df_reg_clobber_gen): Likewise. (df_ref_record): Likewise. * expr.c (use_regs): Likewise. * flow.c (propagate_one_insn): Likewise. (mark_set_1): Likewise. (mark_used_reg): Likewise. * reload.c (emit_reload_insns): Likewise. From-SVN: r54358
2002-06-04Merge from pch-branch up to tag pch-commit-20020603.Geoffrey Keating1-47/+31
From-SVN: r54232
2002-06-03emit-rtl.c: Likewise.Kazu Hirata1-44/+44
* emit-rtl.c: Likewise. * errors.h: Likewise. * except.c: Likewise. * explow.c: Likewise. * expmed.c: Likewise. * expr.c: Likewise. * expr.h: Likewise. From-SVN: r54197
2002-05-31expr.c (compare_from_rtx): Generate comparison between op0 and op1 rather ↵Igor Shevlyakov1-0/+4
than cc0 and 0 in a case when... * expr.c (compare_from_rtx): Generate comparison between op0 and op1 rather than cc0 and 0 in a case when HAVE_cc0 is not defined. From-SVN: r54122
2002-05-31expr.c (expand_expr): Output partially zeroed out vectors with ↵Aldy Hernandez1-2/+10
output_constant_def. 2002-05-31 Aldy Hernandez <aldyh@redhat.com> * expr.c (expand_expr): Output partially zeroed out vectors with output_constant_def. From-SVN: r54080
2002-05-28tree.h: Forward-declare struct realvaluetype.Zack Weinberg1-0/+1
* tree.h: Forward-declare struct realvaluetype. (struct tree_real_cst): Point to the REAL_VALUE_TYPE, do not contain it. (TREE_REAL_CST_PTR): New accessor. (TREE_REAL_CST): Update. * real.h: Include machmode.h. (realvaluetype): Make it struct realvaluetype, not a typedef. (build_real): Prototype here. * tree.c: Include real.h. (build_real): Allocate the REAL_VALUE_TYPE as a separate object in GC memory, set TREE_REAL_CST_PTR to point to it. (build_real_from_int_cst): Use build_real. * ggc-common.c (ggc_mark_trees): Mark TREE_REAL_CST_PTR of a REAL_CST. * builtins.c, c-common.c, c-lex.c, dwarf2out.c, expr.c, fold-const.c, print-tree.c, real.c, cp/mangle.c, cp/tree.c, f/bld.c, f/com.c, f/expr.c, f/target.c, java/decl.c, java/jcf-parse.c, java/parse.y, java/typeck.c: Include real.h. * Makefile.in, cp/Make-lang.in, f/Make-lang.in, java/Make-lang.in: Update dependency lists. From-SVN: r53959
2002-05-21re PR middle-end/6600 (i960 toolchain hits abort in c_readstr)Roger Sayle1-2/+15
PR middle-end/6600 * expr.c (STORE_MAX_PIECES): New macro to avoid immediate constants larger than INTEGER_CST. (store_by_pieces_1): Use it here... (can_store_by_pieces): ... and here to limit the largest mode used. Add a comment to document this function. From-SVN: r53706
2002-05-17expr.c (init_expr_once): Don't use start/end_sequence.Richard Henderson1-6/+3
* expr.c (init_expr_once): Don't use start/end_sequence. Use rtx_alloc instead of emit_insn. * toplev.c (lang_dependent_init): Run init_expr_once here ... (lang_independent_init): ... not here. From-SVN: r53572