On Thu, May 04, 2006 at 03:25:22PM +0200, Mircea Namolaru wrote:
> The patches for SEE have been committed today.
> 
> The minor style corrections requested by you in the 
> final review approval will be in a follow-up patch
> to be submitted the next week.
> 

I didn't see you have addressed the issuses I raised in my previous
emails. When I used

export BOOT_CFLAGS="-g -O2 -fsee" CXXFLAGS="-g -O2 -fsee" FCFLAGS="-g -O2 
-fsee" GCJFLAGS="-g -O2 -fsee" SYSROOT_CFLAGS_FOR_TARGET="-g -O2 -fsee"
# ..../configure
# make BOOT_CFLAGS="-g -O2 -fsee" CXXFLAGS="-g -O2 -fsee" FCFLAGS="-g -O2 
-fsee" GCJFLAGS="-g -O2 -fsee" SYSROOT_CFLAGS_FOR_TARGET="-g -O2 -fsee"

to configure and build gcc on Linux/x86 and Linux/x86-64. They both
failed to bootstrap. There are at least 2 problems:

1. SEE uses NEXT_INSN/PREV_INSN to find adjacent insns. But with
-g, NEXT_INSN/PREV_INSN may point to a NOTE. So adjacent insns checks
with NEXT_INSN/PREV_INSN aren't sufficient.
2. Not all zero_extend patterns are available for x86/x86-64. For
example:

(insn 137 0 0 (set (reg:SI 60 [ prephitmp.115 ])
        (zero_extend:SI (subreg:QI (reg:SI 60 [ prephitmp.115 ]) 0)))
-1 (nil)
    (nil))

may not be used on x86/x86-64. i386.md has

(define_expand "zero_extendqisi2"
  [(parallel
    [(set (match_operand:SI 0 "register_operand" "")
       (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))
     (clobber (reg:CC FLAGS_REG))])]
  ""
  "")

This is case for all extensions for i386.  For x86-64, only
zero_extendsidi2 won't clobber CC.
3. When the original insns were

set (dest_extension_reg1) (sign_extend (source_extension_reg1))
set (dest_extension_reg2) (sign_extend (dest_extension_reg1))

We created

ref: set (dest_extension_reg1) (sign_extend (source_extension_reg1))
def_se: set (dest_extension_reg2) (sign_extend (dest_extension_reg1))

and

use_se: set (dest_extension_reg1) (sign_extend (dest_extension_reg1))
ref: set (dest_extension_reg2) (sign_extend (dest_extension_reg1))

When def merge failed, def_se was deleted. Now use_se had a deleted
ref.

Basically, SEE doesn't handle

(set (reg/v:SI 70 [ j ])
  (sign_extend:SI (subreg:HI (reg:SI 72 [ start ]) 0)))
(set (reg:DI 73 [ j ])
  (sign_extend:DI (reg/v:SI 70 [ j ])))

correctly.

4. SEE also failed to handle

set (dest_extension_reg1) (zero_extend (source_extension_reg1))
set (reg) (..dest_extension_reg1..)
set (dest_extension_reg2) (sign_extend (source_extension_reg1))

(insn:HI 28 26 30 2 x.c:1201 (set (reg:DI 534 [ mode ])
        (zero_extend:DI (reg/v:SI 264 [ mode ]))) 111
{zero_extendsidi2_rex64}
(insn_list:REG_DEP_TRUE 11 (nil))
    (nil))

(insn:HI 30 28 269 2 x.c:1201 (set (reg:QI 261 [ D.24257 ])
        (mem/s/u:QI (plus:DI (reg:DI 534 [ mode ])
                (symbol_ref:DI ("mode_class") [flags 0x40] <var_decl
0x2a98a42630 mode_class>)) [0 mode_class S1 A8])) 55 {*movqi_1}
(insn_list:REG_DEP_TRUE 28 (nil))
    (nil))

(insn:HI 269 30 270 2 x.c:1273 (set (reg:DI 546)
        (sign_extend:DI (reg/v:SI 264 [ mode ]))) 115
{extendsidi2_rex64} (nil)
    (nil))

If I don't use -fsee for bootstrap, I will get some extra "make check"
failures on Linux/x86-64 for -O3, which turns on SEE.


H.J.

Reply via email to