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.