From 233a46c83456d0be35fd0e0ef826c8d87d97c3cc Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Thu, 21 Oct 2010 22:42:09 +0200 Subject: [PATCH] re PR target/45946 (ICE: in extract_insn, at recog.c:2127 when using _Decimal128 with -Os -fno-omit-frame-pointer) PR target/45946 * config/i386/i386.md (*pushti2): New insn pattern. (pushti2 splitter): New insn splitter. (*push2): Macroize insn pattern from *push{di,ti}2 using DWI mode iterator. testsuite/ChangeLog: PR target/45946 * gcc.target/i386/pr45946.c: New test. From-SVN: r165787 --- gcc/ChangeLog | 63 ++++++++++++++----------- gcc/config/i386/i386.md | 20 +++++--- gcc/testsuite/gcc.target/i386/pr45946.c | 14 ++++++ 3 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr45946.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c1b8c54220..72be43d6366 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-10-21 Uros Bizjak + + PR target/45946 + * config/i386/i386.md (*pushti2): New insn pattern. + (pushti2 splitter): New insn splitter. + (*push2): Macroize insn pattern from *push{di,ti}2 using + DWI mode iterator. + 2010-10-21 Paul Koning * config/pdp11/pdp11-protos.md (arith_operand, @@ -15,9 +23,9 @@ 2010-10-21 Bingfeng Mei PR c/45834 - * alias.c (true_dependence_1): Remove obsolete check for QImode. - (may_alias_p): Ditto. - + * alias.c (true_dependence_1): Remove obsolete check for QImode. + (may_alias_p): Ditto. + 2010-10-21 Martin Jambor PR tree-optimization/45875 @@ -32,8 +40,8 @@ 2010-10-21 Nick Clifton * config/mn10300/mn10300.c: Fold code to 80-character width. - Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for - MEM, CONST_INT and CONST_DOUBLE. + Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for + MEM, CONST_INT and CONST_DOUBLE. (targetm): Move initialization to end of file. (print_operand): Rename to mn10300_print_operand. (print_operand_address): Rename to mn10300_print_operand_address. @@ -48,20 +56,19 @@ (legitimate_pic_operand_p): Rename to mn10300_legitimate_pic_operand_p. * config/mn10300/mn10300-protos.h: Update prototypes. * config/mn10300/mn10300.h: Fold code to 80-character width. - Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for - MEM, CONST_INT and CONST_DOUBLE. - (CPP_SPEC): Move to... - (TARGET_CPU_CPP_BUILTINS): ... here. + Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for + MEM, CONST_INT and CONST_DOUBLE. + (CPP_SPEC): Move to... + (TARGET_CPU_CPP_BUILTINS): ... here. * config/mn10300/mn10300.md: Fold code to 80-character width. - Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for - MEM, CONST_INT and CONST_DOUBLE. + Replace GET_CODE (foo) == REG with REG_P (foo). Likewise for + MEM, CONST_INT and CONST_DOUBLE. 2010-10-21 Ira Rosen PR tree-optimization/46049 PR tree-optimization/46052 - * tree-vectorizer.h (enum stmt_vec_info_type): Add new value for - shift. + * tree-vectorizer.h (enum stmt_vec_info_type): Add new value for shift. (vect_get_slp_defs): Add arguments. * tree-vect-loop.c (vect_create_epilog_for_reduction): Pass scalar operands to vect_get_slp_defs. @@ -147,7 +154,7 @@ * config/i386/sse.md (ssescalarmodesuffix): Add V8SI and V4DI. 2010-10-21 Richard Guenther - Michael Matz + Michael Matz PR tree-optimization/45764 * tree-vect-data-refs.c (vect_compute_data_ref_alignment): @@ -224,7 +231,7 @@ (c_parser_objc_methodproto): Do not call objc_set_method_type. Updated calls to c_parser_objc_method_type, c_parser_objc_method_decl and objc_add_method_declaration. - + 2010-10-20 Jakub Jelinek PR tree-optimization/45919 @@ -346,14 +353,14 @@ (default_jump_align_max_skip): New. (compute_alignments): Use the new hooks. (shorten_branches): Likewise. - + 2010-10-19 Richard Henderson * config/i386/i386.c (bdesc_multi_arg): Use fma4i_fmadd_. * config/i386/sse.md (fma4): Enable for FMA & SSE_MATH. (fma4i_fmadd_): New. (*split_fma, *split_fms, *split_fnma, *split_fnms): Rename from - fma4_fm*_ and adjust to be pre-reload splitters to the + fma4_fm*_ and adjust to be pre-reload splitters to the standard fma patterns. (fmaddsub_): Rename from fma4i_fmaddsub_ and enable for FMA. @@ -374,7 +381,7 @@ 2010-10-19 Michael Eager - * config/microblaze/microblaze.c (TARGET_EXCEPT_UNWIND_INFO): + * config/microblaze/microblaze.c (TARGET_EXCEPT_UNWIND_INFO): Use sjlj unwind info for exceptions. 2010-10-19 Francois-Xavier Coudert @@ -386,7 +393,7 @@ 2010-10-19 Nick Clifton * config/rx/rx.c (rx_function_value): Small integer types are - promotes to SImode. + promoted to SImode. (rx_promote_function_mode): New function. (TARGET_PROMOTE_FUNCTION_MODE): Define. @@ -397,12 +404,12 @@ (mep_output_aligned_common): Likewise. 2010-10-19 Basile Starynkevitch - * gengtype.c (new_structure): Remove ad-hoc "location_s" - processing. + + * gengtype.c (new_structure): Remove ad-hoc "location_s" processing. 2010-10-18 Richard Henderson - * simplify-rtx.c (simplify_ternary_operation) [FMA]: Simplify + * simplify-rtx.c (simplify_ternary_operation) [FMA]: Simplify (fma (neg a) (neg b) c) and (fma a (neg b) c). 2010-10-18 Richard Henderson @@ -470,10 +477,10 @@ (c_parser_objc_at_dynamic_declaration): New. 2010-10-18 Nicola Pero - + * c-parser.c (c_parser_objc_class_declaration): After finding an error, parse the whole declaration then reset parser->error. - + 2010-10-18 Michael Meissner PR target/46041 @@ -496,7 +503,7 @@ 2010-10-18 Nicola Pero - Merge from 'apple/trunk' branch on FSF servers. + Merge from 'apple/trunk' branch on FSF servers. * c-parser.c (c_parser_objc_type_name): Adapted to new parser the following Objective-C change: @@ -613,13 +620,13 @@ 2010-10-17 Nicola Pero Merge from 'apple/trunk' branch on FSF servers. - + 2006-03-27 Fariborz Jahanian - Radar 4133425 + Radar 4133425 * c-decl.c (undeclared_variable): Issue diagnostic on private 'ivar' access. - + 2010-10-17 Uros Bizjak PR target/46051 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index ae527466b5a..d97e96f53e8 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1602,6 +1602,20 @@ ;; Push/pop instructions. +(define_insn "*push2" + [(set (match_operand:DWI 0 "push_operand" "=<") + (match_operand:DWI 1 "general_no_elim_operand" "riF*m"))] + "" + "#") + +(define_split + [(set (match_operand:TI 0 "push_operand" "") + (match_operand:TI 1 "general_operand" ""))] + "TARGET_64BIT && reload_completed + && !SSE_REG_P (operands[1])" + [(const_int 0)] + "ix86_split_long_move (operands); DONE;") + (define_insn "*pushdi2_rex64" [(set (match_operand:DI 0 "push_operand" "=<,!<") (match_operand:DI 1 "general_no_elim_operand" "re*m,n"))] @@ -1660,12 +1674,6 @@ GEN_INT (4))); }) -(define_insn "*pushdi2" - [(set (match_operand:DI 0 "push_operand" "=<") - (match_operand:DI 1 "general_no_elim_operand" "riF*m"))] - "!TARGET_64BIT" - "#") - (define_split [(set (match_operand:DI 0 "push_operand" "") (match_operand:DI 1 "general_operand" ""))] diff --git a/gcc/testsuite/gcc.target/i386/pr45946.c b/gcc/testsuite/gcc.target/i386/pr45946.c new file mode 100644 index 00000000000..81cd36026ad --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr45946.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target dfp } */ +/* { dg-options "-std=gnu99 -Os -fno-omit-frame-pointer" } */ + +void +__attribute__((noinline)) +bar (_Decimal128, _Decimal128, _Decimal128, _Decimal128, _Decimal128, + _Decimal128, _Decimal128, _Decimal128, _Decimal128); + +void +foo (void) +{ + bar (0, 0, 0, 0, 0, 0, 0, 0, 0); +} -- 2.30.2