This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/23302] [4.1 Regression] extra move generated on x86
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Aug 2005 00:05:59 -0000
- Subject: [Bug target/23302] [4.1 Regression] extra move generated on x86
- References: <20050809220454.23302.dann@godzilla.ics.uci.edu>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-08-10 00:05 -------
Confirmed, the rtl dumps at .combinea are almost the same except for:
-(insn 45 44 46 3 (set (reg:SI 70 [ <variable>.savelines ])
- (mem/s:SI (plus:SI (reg/v/f:SI 59 [ screen ])
- (const_int 4012 [0xfac])) [5 <variable>.savelines+0 S4 A32])) 35 {*movsi_1} (nil)
- (nil))
+(insn 39 38 40 3 (set (reg:SI 65 [ <variable>.num_ptrs ])
+ (mem/s:SI (plus:SI (reg/f:SI 63 [ term ])
+ (const_int 4028 [0xfbc])) [4 <variable>.num_ptrs+0 S4 A32])) 34 {*movsi_1} (insn_list:
REG_DEP_TRUE 38 (nil))
+ (expr_list:REG_DEAD (reg/f:SI 63 [ term ])
+ (nil)))
-(insn 46 45 47 3 (parallel [
- (set (reg:SI 71)
- (mult:SI (mem/s:SI (plus:SI (reg/f:SI 68 [ term ])
- (const_int 4028 [0xfbc])) [5 <variable>.num_ptrs+0 S4 A32])
- (reg:SI 70 [ <variable>.savelines ])))
+(insn 40 39 41 3 (parallel [
+ (set (reg:SI 64)
+ (mult:SI (reg:SI 65 [ <variable>.num_ptrs ])
+ (mem/s:SI (plus:SI (reg/v/f:SI 59 [ screen ])
+ (const_int 4012 [0xfac])) [4 <variable>.savelines+0 S4 A32])))
(clobber (reg:CC 17 flags))
- ]) 173 {*mulsi3_1} (insn_list:REG_DEP_TRUE 43 (insn_list:REG_DEP_TRUE 45 (nil)))
- (expr_list:REG_DEAD (reg/f:SI 68 [ term ])
+ ]) 182 {*mulsi3_1} (insn_list:REG_DEP_TRUE 39 (nil))
+ (expr_list:REG_DEAD (reg:SI 65 [ <variable>.num_ptrs ])
(expr_list:REG_UNUSED (reg:CC 17 flags)
- (expr_list:REG_DEAD (reg:SI 70 [ <variable>.savelines ])
- (nil)))))
+ (nil))))
Which is because we expand the multiply (from tree to rtl) as:
(insn 38 36 39 (set (reg/f:SI 63)
(mem/f/i:SI (symbol_ref:SI ("term") [flags 0x40] <var_decl 0xb7cf60b0 term>) [9 term+0 S4 A32]))
-1 (nil)
(nil))
(insn 39 38 40 (set (reg:SI 65)
(mem/s:SI (plus:SI (reg/f:SI 63)
(const_int 4028 [0xfbc])) [4 <variable>.num_ptrs+0 S4 A32])) -1 (nil)
(nil))
(insn 40 39 41 (parallel [
(set (reg:SI 64)
(mult:SI (reg:SI 65)
(mem/s:SI (plus:SI (reg/v/f:SI 59 [ screen ])
(const_int 4012 [0xfac])) [4 <variable>.savelines+0 S4 A32])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
before we actually expanded the load of the screen->savelines seperately:
(insn 43 41 44 (set (reg/f:SI 68)
(mem/f/i:SI (symbol_ref:SI ("term") [flags 0x40] <var_decl 0xb7cc8a8c term>) [9 term+0 S4 A32]))
-1 (nil)
(nil))
(insn 44 43 45 (set (reg:SI 69)
(mem/s:SI (plus:SI (reg/f:SI 68)
(const_int 4028 [0xfbc])) [5 <variable>.num_ptrs+0 S4 A32])) -1 (nil)
(nil))
(insn 45 44 46 (set (reg:SI 70)
(mem/s:SI (plus:SI (reg/v/f:SI 59 [ screen ])
(const_int 4012 [0xfac])) [5 <variable>.savelines+0 S4 A32])) -1 (nil)
(nil))
(insn 46 45 47 (parallel [
(set (reg:SI 71)
(mult:SI (reg:SI 69)
(reg:SI 70)))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
This is either a target problem for the expansion or a middle-end problem while expand, I am going to
say a target issue.
I think this was caused by:
2005-07-30 Jan Hubicka <jh@suse.cz>
* expr.c (expand_expr_real_1): Do not load mem targets into register.
* i386.c (ix86_fixup_binary_operands): Likewise.
(ix86_expand_unary_operator): Likewise.
(ix86_expand_fp_absneg_operator): Likewise.
* optabs.c (expand_vec_cond_expr): Validate dest.
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at gcc dot gnu dot
| |org
Status|UNCONFIRMED |NEW
Component|rtl-optimization |target
Ever Confirmed| |1
GCC build triplet|i686-pc-linux-gnu |
GCC host triplet|i686-pc-linux-gnu |
Keywords| |missed-optimization
Last reconfirmed|0000-00-00 00:00:00 |2005-08-10 00:05:55
date| |
Summary|extra move generated on x86 |[4.1 Regression] extra move
| |generated on x86
Target Milestone|--- |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23302