From: Jon Beniston Date: Sun, 2 Mar 2014 19:58:24 +0000 (+0000) Subject: re PR bootstrap/48230 (bootstrapping gcc-4.6.0-RC-20110321 fails for lm32-rtems*) X-Git-Tag: releases/gcc-4.9.0~612 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b0af790b789de605f6f7d818b375e50cf0c2904;p=thirdparty%2Fgcc.git re PR bootstrap/48230 (bootstrapping gcc-4.6.0-RC-20110321 fails for lm32-rtems*) PR bootstrap/48230 PR bootstrap/50927 PR bootstrap/52466 PR target/46898 * config/lm32/lm32.c (lm32_legitimate_constant_p): Remove, as incorrect. (TARGET_LEGITIMATE_CONSTANT_P): Undefine, as not needed. * config/lm32/lm32.md (movsi_insn): Add 32-bit immediate support. (simple_return, *simple_return): New patterns * config/lm32/predicates.md (movsi_rhs_operand): Remove as obsolete. * configure.ac (force_sjlj_exceptions): Force sjlj exceptions for lm32. From-SVN: r208260 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f9a644a2d9b0..4224c014c21f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2014-03-02 Jon Beniston + + PR bootstrap/48230 + PR bootstrap/50927 + PR bootstrap/52466 + PR target/46898 + * config/lm32/lm32.c (lm32_legitimate_constant_p): Remove, as incorrect. + (TARGET_LEGITIMATE_CONSTANT_P): Undefine, as not needed. + * config/lm32/lm32.md (movsi_insn): Add 32-bit immediate support. + (simple_return, *simple_return): New patterns + * config/lm32/predicates.md (movsi_rhs_operand): Remove as obsolete. + * configure.ac (force_sjlj_exceptions): Force sjlj exceptions for lm32. + 2014-03-01 Paolo Carlini * dwarf2out.c (gen_subprogram_die): Tidy. diff --git a/gcc/config/lm32/lm32.c b/gcc/config/lm32/lm32.c index ab0c7f71ca6a..4f6aba1e7645 100644 --- a/gcc/config/lm32/lm32.c +++ b/gcc/config/lm32/lm32.c @@ -82,7 +82,6 @@ static rtx lm32_function_arg (cumulative_args_t cum, static void lm32_function_arg_advance (cumulative_args_t cum, enum machine_mode mode, const_tree type, bool named); -static bool lm32_legitimate_constant_p (enum machine_mode, rtx); #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE lm32_option_override @@ -110,8 +109,6 @@ static bool lm32_legitimate_constant_p (enum machine_mode, rtx); #define TARGET_CAN_ELIMINATE lm32_can_eliminate #undef TARGET_LEGITIMATE_ADDRESS_P #define TARGET_LEGITIMATE_ADDRESS_P lm32_legitimate_address_p -#undef TARGET_LEGITIMATE_CONSTANT_P -#define TARGET_LEGITIMATE_CONSTANT_P lm32_legitimate_constant_p struct gcc_target targetm = TARGET_INITIALIZER; @@ -1228,15 +1225,3 @@ lm32_move_ok (enum machine_mode mode, rtx operands[2]) { return register_or_zero_operand (operands[1], mode); return true; } - -/* Implement TARGET_LEGITIMATE_CONSTANT_P. */ - -static bool -lm32_legitimate_constant_p (enum machine_mode mode, rtx x) -{ - /* 32-bit addresses require multiple instructions. */ - if (!flag_pic && reloc_operand (x, mode)) - return false; - - return true; -} diff --git a/gcc/config/lm32/lm32.md b/gcc/config/lm32/lm32.md index 8b687cfbbe8b..26d16823c1a9 100644 --- a/gcc/config/lm32/lm32.md +++ b/gcc/config/lm32/lm32.md @@ -293,8 +293,8 @@ ) (define_insn "movsi_insn" - [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,m,r,r,r,r,r") - (match_operand:SI 1 "movsi_rhs_operand" "m,r,r,J,K,L,U,S,Y"))] + [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,m,r,r,r,r,r,r") + (match_operand:SI 1 "general_operand" "m,r,r,J,K,L,U,S,Y,n"))] "lm32_move_ok (SImode, operands)" "@ lw %0, %1 @@ -305,8 +305,9 @@ ori %0, r0, %1 orhi %0, r0, hi(%1) mva %0, gp(%1) - orhi %0, r0, hi(%1)" - [(set_attr "type" "load,arith,store,store,arith,arith,arith,arith,arith")] + orhi %0, r0, hi(%1) + ori %0, r0, lo(%1); orhi %0, %0, hi(%1)" + [(set_attr "type" "load,arith,store,store,arith,arith,arith,arith,arith,arith")] ) ;; --------------------------------- @@ -636,9 +637,28 @@ [(set_attr "type" "uibranch")] ) -(define_insn "return" +(define_expand "return" [(return)] "lm32_can_use_return ()" + "" +) + +(define_expand "simple_return" + [(simple_return)] + "" + "" +) + +(define_insn "*return" + [(return)] + "reload_completed" + "ret" + [(set_attr "type" "uibranch")] +) + +(define_insn "*simple_return" + [(simple_return)] + "" "ret" [(set_attr "type" "uibranch")] ) diff --git a/gcc/config/lm32/predicates.md b/gcc/config/lm32/predicates.md index a1a4cb061918..ad2e462db5e8 100644 --- a/gcc/config/lm32/predicates.md +++ b/gcc/config/lm32/predicates.md @@ -70,8 +70,3 @@ (ior (match_code "symbol_ref") (match_operand 0 "register_operand"))) -(define_predicate "movsi_rhs_operand" - (ior (match_operand 0 "nonimmediate_operand") - (ior (match_code "const_int") - (ior (match_test "satisfies_constraint_S (op)") - (match_test "satisfies_constraint_Y (op)"))))) diff --git a/gcc/configure.ac b/gcc/configure.ac index 969a8a628c8f..3d7a5c871d65 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1249,6 +1249,10 @@ force_sjlj_exceptions=yes], force_sjlj_exceptions=yes enableval=yes ;; + lm32*-*-*) + force_sjlj_exceptions=yes + enableval=yes + ;; *) force_sjlj_exceptions=no ;;