public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "bonzini at gnu dot org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/27827] [4.0/4.1/4.2 Regression] gcc 4 produces worse x87 code on all platforms than gcc 3 Date: Fri, 04 Aug 2006 07:46:00 -0000 [thread overview] Message-ID: <20060804074600.20776.qmail@sourceware.org> (raw) In-Reply-To: <bug-27827-12761@http.gcc.gnu.org/bugzilla/> ------- Comment #30 from bonzini at gnu dot org 2006-08-04 07:45 ------- Can you try this patch? My only i686 machine is neutral to this problem. I'm a bit worried about the Core Duo thing, but my hope is that other changes between GCC 3 and GCC 4 improved performance on all machines, and Core Duo is the only processor that does not see the performance loss introduced by "fld %st". I'm currently bootstrapping and regtesting the patch; a minimal testcase is here: /* { dg-do compile } */ /* { dg-options "-O2" } */ double a, b; double f(double c) { double x = a * b; return x + c * a; } /* { dg-final { scan-assembler-not "fld\[ \t\]*%st" } } */ /* { dg-final { scan-assembler "fmul\[ \t\]*%st" } } */ Without patch: fldl a fld %st(0) fmull b fxch %st(1) fmull 4(%esp) faddp %st, %st(1) ret With patch: fldl a fldl 4(%esp) fmul %st(1), %st fxch %st(1) fmull b faddp %st, %st(1) ret Index: i386.md =================================================================== --- i386.md (revision 115412) +++ i386.md (working copy) @@ -18757,6 +18757,32 @@ [(set_attr "type" "sseadd") (set_attr "mode" "DF")]) +;; Make two stack loads independent: +;; fld aa fld aa +;; fld %st(0) -> fld bb +;; fmul bb fmul %st(1), %st +;; +;; Actually we only match the last two instructions for simplicity. +(define_peephole2 + [(set (match_operand 0 "fp_register_operand" "") + (match_operand 1 "fp_register_operand" "")) + (set (match_dup 0) + (match_operator 2 "binary_fp_operator" + [(match_dup 0) + (match_operand 3 "memory_operand" "")]))] + "REGNO (operands[0]) != REGNO (operands[1])" + [(set (match_dup 0) (match_dup 3)) + (set (match_dup 0) (match_dup 4))] + + ;; The % modifier is not operational anymore in peephole2's, so we have to + ;; swap the operands manually in the case of addition and multiplication. + "if (COMMUTATIVE_ARITH_P (operands[2])) + operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]), + operands[0], operands[1]); + else + operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[2]), GET_MODE (operands[2]), + operands[1], operands[0]);") + ;; Conditional addition patterns (define_expand "addqicc" [(match_operand:QI 0 "register_operand" "") -- bonzini at gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bonzini at gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27827
next prev parent reply other threads:[~2006-08-04 7:46 UTC|newest] Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top 2006-05-31 0:33 [Bug rtl-optimization/27827] New: " hiclint at gmail dot com 2006-05-31 0:35 ` [Bug rtl-optimization/27827] " pinskia at gcc dot gnu dot org 2006-05-31 0:36 ` hiclint at gmail dot com 2006-05-31 0:42 ` [Bug target/27827] " pinskia at gcc dot gnu dot org 2006-05-31 0:50 ` hiclint at gmail dot com 2006-05-31 0:55 ` pinskia at gcc dot gnu dot org 2006-05-31 1:09 ` whaley at cs dot utsa dot edu 2006-05-31 10:57 ` uros at kss-loka dot si 2006-05-31 14:13 ` whaley at cs dot utsa dot edu 2006-06-01 8:43 ` uros at kss-loka dot si 2006-06-01 16:03 ` whaley at cs dot utsa dot edu 2006-06-01 16:26 ` whaley at cs dot utsa dot edu 2006-06-01 18:43 ` whaley at cs dot utsa dot edu 2006-06-07 22:39 ` whaley at cs dot utsa dot edu 2006-06-14 3:04 ` whaley at cs dot utsa dot edu 2006-06-24 18:11 ` whaley at cs dot utsa dot edu 2006-06-24 19:13 ` rguenth at gcc dot gnu dot org 2006-06-25 13:35 ` whaley at cs dot utsa dot edu 2006-06-25 23:05 ` rguenth at gcc dot gnu dot org 2006-06-26 1:12 ` whaley at cs dot utsa dot edu 2006-06-26 7:53 ` uros at kss-loka dot si 2006-06-26 16:02 ` whaley at cs dot utsa dot edu 2006-06-27 6:05 ` uros at kss-loka dot si 2006-06-27 14:37 ` whaley at cs dot utsa dot edu 2006-06-27 17:47 ` whaley at cs dot utsa dot edu 2006-06-28 17:37 ` [Bug target/27827] [4.0/4.1/4.2 Regression] " steven at gcc dot gnu dot org 2006-06-28 20:18 ` whaley at cs dot utsa dot edu 2006-06-29 4:18 ` hjl at lucon dot org 2006-06-29 6:43 ` whaley at cs dot utsa dot edu 2006-07-04 13:15 ` whaley at cs dot utsa dot edu 2006-07-05 17:55 ` mmitchel at gcc dot gnu dot org 2006-08-04 7:46 ` bonzini at gnu dot org [this message] 2006-08-04 16:24 ` whaley at cs dot utsa dot edu 2006-08-05 7:21 ` bonzini at gnu dot org 2006-08-05 14:24 ` whaley at cs dot utsa dot edu 2006-08-05 17:16 ` bonzini at gnu dot org 2006-08-05 18:26 ` whaley at cs dot utsa dot edu 2006-08-06 15:03 ` [Bug target/27827] [4.0/4.1 " whaley at cs dot utsa dot edu 2006-08-07 6:19 ` bonzini at gnu dot org 2006-08-07 15:32 ` whaley at cs dot utsa dot edu 2006-08-07 16:47 ` whaley at cs dot utsa dot edu 2006-08-07 16:58 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-07 17:19 ` whaley at cs dot utsa dot edu 2006-08-07 18:19 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-07 20:35 ` dorit at il dot ibm dot com 2006-08-07 21:57 ` whaley at cs dot utsa dot edu 2006-08-08 2:59 ` whaley at cs dot utsa dot edu 2006-08-08 6:15 ` hubicka at gcc dot gnu dot org 2006-08-08 6:28 ` Jan Hubicka 2006-08-08 6:29 ` hubicka at ucw dot cz 2006-08-08 7:05 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-08 16:44 ` whaley at cs dot utsa dot edu 2006-08-08 18:36 ` whaley at cs dot utsa dot edu 2006-08-09 4:34 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-09 14:33 ` whaley at cs dot utsa dot edu 2006-08-09 15:52 ` whaley at cs dot utsa dot edu 2006-08-09 16:08 ` whaley at cs dot utsa dot edu 2006-08-09 19:10 ` Dorit Nuzman 2006-08-09 19:10 ` dorit at il dot ibm dot com 2006-08-09 21:33 ` whaley at cs dot utsa dot edu 2006-08-09 21:46 ` Andrew Pinski 2006-08-09 21:46 ` pinskia at physics dot uc dot edu 2006-08-09 23:02 ` whaley at cs dot utsa dot edu 2006-08-10 6:52 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-10 14:08 ` whaley at cs dot utsa dot edu 2006-08-10 14:29 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-10 15:16 ` whaley at cs dot utsa dot edu 2006-08-10 15:22 ` paolo dot bonzini at lu dot unisi dot ch 2006-08-11 9:19 ` uros at kss-loka dot si 2006-08-11 13:26 ` bonzini at gcc dot gnu dot org 2006-08-11 14:10 ` [Bug target/27827] [4.0 " bonzini at gnu dot org 2006-08-11 15:22 ` whaley at cs dot utsa dot edu 2006-08-23 10:36 ` oliver dot jennrich at googlemail dot com 2006-10-07 10:06 ` steven at gcc dot gnu dot org 2007-02-13 2:59 ` pinskia at gcc dot gnu dot org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20060804074600.20776.qmail@sourceware.org \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).