diff options
Diffstat (limited to 'patches/gcc/3.3.3/pr13260-fix-3.3.3.patch')
-rw-r--r-- | patches/gcc/3.3.3/pr13260-fix-3.3.3.patch | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/patches/gcc/3.3.3/pr13260-fix-3.3.3.patch b/patches/gcc/3.3.3/pr13260-fix-3.3.3.patch deleted file mode 100644 index 7587ad8..0000000 --- a/patches/gcc/3.3.3/pr13260-fix-3.3.3.patch +++ /dev/null @@ -1,246 +0,0 @@ -Date: Fri, 06 Feb 2004 12:35:58 +0900 -From: SUGIOKA Toshinobu <sugioka@itonet.co.jp> -Subject: [linux-sh:03150] Re: gcc 3.3 optimisation problem -To: linux-sh@m17n.org -Message-Id: <4.2.0.58.J.20040206122503.04fe3058@router.itonet.co.jp> -List-Help: <mailto:linux-sh-ctl@m17n.org?body=help> -List-Id: linux-sh.m17n.org - -At 19:40 03/12/01 +0000, Stuart Menefy <stuart.menefy@st.com> wrote: ->On Sat, 29 Nov 2003 20:19:08 +0900 kkojima@rr.iij4u.or.jp wrote: -> ->> Dan Kegel <dank@kegel.com> wrote: ->> > Stuart Menefy wrote: ->> >> I've just been trying to put together a gcc 3.3.2 based toolchain, and ->> >> appear to be hitting a gcc optimisation bug. I was just wondering if ->> >> anyone else had seen anything similar. ->> >> ->> >> The problem is seen when building the kernel, in the function ->> >> root_nfs_parse_addr(). I've extracted this into a small stand alone ->> >> program which demonstrates the problem. ->> > ->> > Excellent work. I haven't seen anything like this (doesn't mean much) ->> > and the sh-specific optimization bugs in the gcc bug database don't look ->> > similar. I think you should submit this as a bug report at ->> > http://gcc.gnu.org/bugzilla/ ->> > It would be good if you could make your test case call abort() if ->> > the problem is present, so the test case can be automated. ->> ->> Indeed. It'd be very nice to create a gcc PR for this issue. -> ->OK, I've done that. PR 13260. - -PR 13260 was fixed by amylaar@gcc.gnu.org at 2003-12-04 20:10:29 on mainline(gcc-3.4). -I have back-ported that patch to gcc-3.3.3 and seems fine for me. - - * sh-protos.h (sh_expand_t_scc): Declare. - * sh.h (PREDICATE_CODES): Add cmpsi_operand. - * sh.c (cmpsi_operand, sh_expand_t_scc): New functions. - * sh.md (cmpsi): Use cmpsi_operand. If T_REG is compared to - something that is not a CONST_INT, copy it into a pseudo register. - (subc): Fix description of new T value. - (slt, sgt, sge, sgtu): Don't clobber T after rtl generation is over. - (sltu, sleu, sgeu): Likewise. - (seq, sne): Likewise. Use sh_expand_t_scc. - -diff -ru gcc-3.3-20040126-1/gcc/config/sh/sh-protos.h gcc-3.3-20040126/gcc/config/sh/sh-protos.h ---- gcc-3.3-20040126-1/gcc/config/sh/sh-protos.h Tue Jan 13 02:03:24 2004 -+++ gcc-3.3-20040126/gcc/config/sh/sh-protos.h Fri Jan 30 17:54:04 2004 -@@ -102,6 +102,7 @@ - extern int sh_can_redirect_branch PARAMS ((rtx, rtx)); - extern void sh_expand_unop_v2sf PARAMS ((enum rtx_code, rtx, rtx)); - extern void sh_expand_binop_v2sf PARAMS ((enum rtx_code, rtx, rtx, rtx)); -+extern int sh_expand_t_scc (enum rtx_code code, rtx target); - #ifdef TREE_CODE - extern void sh_va_start PARAMS ((tree, rtx)); - extern rtx sh_va_arg PARAMS ((tree, tree)); -diff -ru gcc-3.3-20040126-1/gcc/config/sh/sh.c gcc-3.3-20040126/gcc/config/sh/sh.c ---- gcc-3.3-20040126-1/gcc/config/sh/sh.c Thu Jan 15 03:11:36 2004 -+++ gcc-3.3-20040126/gcc/config/sh/sh.c Fri Jan 30 17:53:58 2004 -@@ -7870,6 +7870,15 @@ - return register_operand (op, mode); - } - -+int -+cmpsi_operand (rtx op, enum machine_mode mode) -+{ -+ if (GET_CODE (op) == REG && REGNO (op) == T_REG -+ && GET_MODE (op) == SImode) -+ return 1; -+ return arith_operand (op, mode); -+} -+ - /* INSN is an sfunc; return the rtx that describes the address used. */ - static rtx - extract_sfunc_addr (rtx insn) -@@ -7917,4 +7926,33 @@ - abort (); - } - -+int -+sh_expand_t_scc (enum rtx_code code, rtx target) -+{ -+ rtx result = target; -+ HOST_WIDE_INT val; -+ -+ if (GET_CODE (sh_compare_op0) != REG || REGNO (sh_compare_op0) != T_REG -+ || GET_CODE (sh_compare_op1) != CONST_INT) -+ return 0; -+ if (GET_CODE (result) != REG) -+ result = gen_reg_rtx (SImode); -+ val = INTVAL (sh_compare_op1); -+ if ((code == EQ && val == 1) || (code == NE && val == 0)) -+ emit_insn (gen_movt (result)); -+ else if ((code == EQ && val == 0) || (code == NE && val == 1)) -+ { -+ emit_insn (gen_rtx_CLOBBER (VOIDmode, result)); -+ emit_insn (gen_subc (result, result, result)); -+ emit_insn (gen_addsi3 (result, result, GEN_INT (1))); -+ } -+ else if (code == EQ || code == NE) -+ emit_insn (gen_move_insn (result, GEN_INT (code == NE))); -+ else -+ return 0; -+ if (result != target) -+ emit_move_insn (target, result); -+ return 1; -+} -+ - #include "gt-sh.h" -diff -ru gcc-3.3-20040126-1/gcc/config/sh/sh.h gcc-3.3-20040126/gcc/config/sh/sh.h ---- gcc-3.3-20040126-1/gcc/config/sh/sh.h Wed Apr 16 02:06:09 2003 -+++ gcc-3.3-20040126/gcc/config/sh/sh.h Fri Jan 30 17:53:51 2004 -@@ -3231,6 +3231,7 @@ - {"arith_reg_or_0_operand", {SUBREG, REG, CONST_INT, CONST_VECTOR}}, \ - {"binary_float_operator", {PLUS, MINUS, MULT, DIV}}, \ - {"binary_logical_operator", {AND, IOR, XOR}}, \ -+ {"cmpsi_operand", {SUBREG, REG, CONST_INT}}, \ - {"commutative_float_operator", {PLUS, MULT}}, \ - {"equality_comparison_operator", {EQ,NE}}, \ - {"extend_reg_operand", {SUBREG, REG, TRUNCATE}}, \ -diff -ru gcc-3.3-20040126-1/gcc/config/sh/sh.md gcc-3.3-20040126/gcc/config/sh/sh.md ---- gcc-3.3-20040126-1/gcc/config/sh/sh.md Tue Jan 13 02:03:25 2004 -+++ gcc-3.3-20040126/gcc/config/sh/sh.md Fri Jan 30 17:54:20 2004 -@@ -685,11 +685,14 @@ - - (define_expand "cmpsi" - [(set (reg:SI T_REG) -- (compare (match_operand:SI 0 "arith_operand" "") -+ (compare (match_operand:SI 0 "cmpsi_operand" "") - (match_operand:SI 1 "arith_operand" "")))] - "TARGET_SH1" - " - { -+ if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) == T_REG -+ && GET_CODE (operands[1]) != CONST_INT) -+ operands[0] = copy_to_mode_reg (SImode, operands[0]); - sh_compare_op0 = operands[0]; - sh_compare_op1 = operands[1]; - DONE; -@@ -1147,7 +1150,9 @@ - (match_operand:SI 2 "arith_reg_operand" "r")) - (reg:SI T_REG))) - (set (reg:SI T_REG) -- (gtu:SI (minus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))] -+ (gtu:SI (minus:SI (minus:SI (match_dup 1) (match_dup 2)) -+ (reg:SI T_REG)) -+ (match_dup 1)))] - "TARGET_SH1" - "subc %2,%0" - [(set_attr "type" "arith")]) -@@ -7223,6 +7228,10 @@ - } - DONE; - } -+ if (sh_expand_t_scc (EQ, operands[0])) -+ DONE; -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (EQ); - }") - -@@ -7269,6 +7278,8 @@ - } - DONE; - } -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (LT); - }") - -@@ -7371,6 +7382,8 @@ - } - DONE; - } -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (GT); - }") - -@@ -7423,6 +7436,8 @@ - DONE; - } - -+ if (! rtx_equal_function_value_matters) -+ FAIL; - if (GET_MODE_CLASS (GET_MODE (sh_compare_op0)) == MODE_FLOAT) - { - if (TARGET_IEEE) -@@ -7462,6 +7477,8 @@ - sh_compare_op0, sh_compare_op1)); - DONE; - } -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (GTU); - }") - -@@ -7486,6 +7503,8 @@ - sh_compare_op1, sh_compare_op0)); - DONE; - } -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (LTU); - }") - -@@ -7515,6 +7534,8 @@ - - DONE; - } -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (LEU); - }") - -@@ -7545,6 +7566,8 @@ - DONE; - } - -+ if (! rtx_equal_function_value_matters) -+ FAIL; - operands[1] = prepare_scc_operands (GEU); - }") - -@@ -7592,8 +7615,12 @@ - DONE; - } - -- operands[1] = prepare_scc_operands (EQ); -- operands[2] = gen_reg_rtx (SImode); -+ if (sh_expand_t_scc (NE, operands[0])) -+ DONE; -+ if (! rtx_equal_function_value_matters) -+ FAIL; -+ operands[1] = prepare_scc_operands (EQ); -+ operands[2] = gen_reg_rtx (SImode); - }") - - (define_expand "sunordered" - ----- -SUGIOKA Toshinobu - - - - |