Cross-compile bug in sparc64
Eduardo E. Horvath
eeh@one-o.com
Wed Nov 25 23:04:00 GMT 1998
On Thu, 10 Sep 1998, David S. Miller wrote:
> Date: Fri, 4 Sep 1998 09:19:37 -0700 (PDT)
> From: "Eduardo E. Horvath" <eeh@one-o.com>
>
> Here you go. It seems to break cc1 with any optimization, although
> without optimization it seems to work fine. This is from a
> HOST=sparc-sun-netbsd to a TARGET=sparc64-sun-elf. The interesting
> thing is that the diff I sent out seems to make the problem go
> away.
>
> The gzip'd data contained within is corrupt in some way. Please try
> to regenerate it as the corruption occurs right in the middle of the
> critial file, if_loop.cpp
I have managed to isolate this problem down to a half dozen lines. Here's
a shar of the problem including a sample source file. If you try to
compile this with a v9 compiler and -O2 optimization egcs should abort.
=========================================================================
Eduardo Horvath eeh@one-o.com
"I need to find a pithy new quote." -- me
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# foo.c
# foo.c.addressof
# foo.c.bp
# foo.c.combine
# foo.c.cse
# foo.c.cse2
# foo.c.dbr
# foo.c.flow
# foo.c.gcse
# foo.c.greg
# foo.c.jump
# foo.c.jump2
# foo.c.loop
# foo.c.lreg
# foo.c.regmove
# foo.c.rtl
# foo.c.sched
# foo.c.sched2
#
echo x - foo.c
sed 's/^X//' >foo.c << 'END-of-foo.c'
X
Xstruct ifnet { short if_flags; };
X
Xvoid
Xloopattach(n)
X int n;
X{
X register int i;
X register struct ifnet *ifp;
X
X for (i = 0; i < 5; i++) {
X ifp->if_flags = 0x8000 | 0x8;
X }
X}
END-of-foo.c
echo x - foo.c.addressof
sed 's/^X//' >foo.c.addressof << 'END-of-foo.c.addressof'
X
X;; Function loopattach
X
X(note 2 0 5 "" NOTE_INSN_DELETED)
X
X(note 5 2 6 "" NOTE_INSN_FUNCTION_BEG)
X
X(note 6 5 8 "" NOTE_INSN_DELETED)
X
X(note 8 6 11 0 NOTE_INSN_BLOCK_BEG)
X
X(insn 11 8 45 (set (reg/v:DI 107)
X (const_int 0)) 115 {*movdi_sp64_dbl} (nil)
X (expr_list:REG_EQUAL (const_int 0)
X (nil)))
X
X(insn 45 11 46 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(note 46 45 12 "" NOTE_INSN_DELETED)
X
X(note 12 46 18 "" NOTE_INSN_LOOP_BEG)
X
X(code_label 18 12 20 5 "")
X
X(note 20 18 21 "" NOTE_INSN_DELETED)
X
X(insn 21 20 22 (set (reg:HI 110)
X (const_double (const_int 0) -32768 0 0 2818052 2182888)) 99 {*movhi_const64_special} (nil)
X (expr_list:REG_EQUAL (const_double (const_int 0) -32768 0 0 2818052 2182888)
X (nil)))
X
X(insn 22 21 23 (set (reg:HI 109)
X (ior:HI (reg:HI 110)
X (const_int 8))) 101 {*movhi_lo_sum} (nil)
X (expr_list:REG_EQUAL (const_int 32776)
X (nil)))
X
X(insn 23 22 26 (set (mem/s:HI (reg/v:DI 108) 0)
X (reg:HI 109)) 100 {*movhi_insn} (nil)
X (nil))
X
X(note 26 23 29 "" NOTE_INSN_LOOP_CONT)
X
X(insn 29 26 30 (set (reg:SI 111)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))) 270 {*addsi3} (nil)
X (nil))
X
X(insn 30 29 49 (set (reg/v:DI 107)
X (sign_extend:DI (reg:SI 111))) 233 {*sign_extendsidi2_insn} (nil)
X (nil))
X
X(note 49 30 14 "" NOTE_INSN_LOOP_VTOP)
X
X(insn 14 49 15 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(jump_insn 15 14 38 (set (pc)
X (if_then_else (le (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 18)
X (pc))) 87 {*normal_branch} (nil)
X (nil))
X
X(note 38 15 41 "" NOTE_INSN_LOOP_END)
X
X(note 41 38 0 0 NOTE_INSN_BLOCK_END)
END-of-foo.c.addressof
echo x - foo.c.bp
sed 's/^X//' >foo.c.bp << 'END-of-foo.c.bp'
END-of-foo.c.bp
echo x - foo.c.combine
sed 's/^X//' >foo.c.combine << 'END-of-foo.c.combine'
END-of-foo.c.combine
echo x - foo.c.cse
sed 's/^X//' >foo.c.cse << 'END-of-foo.c.cse'
X
X;; Function loopattach
X
X;; Processing block from 2 to 18, 3 sets.
X;; Processing block from 2 to 18, 2 sets.
X;; Processing block from 20 to 38, 8 sets.
X(note 2 0 5 "" NOTE_INSN_DELETED)
X
X(note 5 2 6 "" NOTE_INSN_FUNCTION_BEG)
X
X(note 6 5 8 "" NOTE_INSN_DELETED)
X
X(note 8 6 11 0 NOTE_INSN_BLOCK_BEG)
X
X(insn 11 8 45 (set (reg/v:DI 107)
X (const_int 0)) 115 {*movdi_sp64_dbl} (nil)
X (expr_list:REG_EQUAL (const_int 0)
X (nil)))
X
X(insn 45 11 46 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(note 46 45 12 "" NOTE_INSN_DELETED)
X
X(note 12 46 18 "" NOTE_INSN_LOOP_BEG)
X
X(code_label 18 12 20 5 "")
X
X(note 20 18 21 "" NOTE_INSN_DELETED)
X
X(insn 21 20 22 (set (reg:HI 110)
X (const_double (const_int 0) -32768 0 0 2818052 2182888)) 99 {*movhi_const64_special} (nil)
X (expr_list:REG_EQUAL (const_double (const_int 0) -32768 0 0 2818052 2182888)
X (nil)))
X
X(insn 22 21 23 (set (reg:HI 109)
X (ior:HI (reg:HI 110)
X (const_int 8))) 101 {*movhi_lo_sum} (nil)
X (expr_list:REG_EQUAL (const_int 32776)
X (nil)))
X
X(insn 23 22 26 (set (mem/s:HI (reg/v:DI 108) 0)
X (reg:HI 109)) 100 {*movhi_insn} (nil)
X (nil))
X
X(note 26 23 29 "" NOTE_INSN_LOOP_CONT)
X
X(insn 29 26 30 (set (reg:SI 111)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))) 270 {*addsi3} (nil)
X (nil))
X
X(insn 30 29 49 (set (reg/v:DI 107)
X (sign_extend:DI (reg:SI 111))) 233 {*sign_extendsidi2_insn} (nil)
X (nil))
X
X(note 49 30 14 "" NOTE_INSN_LOOP_VTOP)
X
X(insn 14 49 15 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(jump_insn 15 14 38 (set (pc)
X (if_then_else (le (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 18)
X (pc))) 87 {*normal_branch} (nil)
X (nil))
X
X(note 38 15 41 "" NOTE_INSN_LOOP_END)
X
X(note 41 38 0 0 NOTE_INSN_BLOCK_END)
END-of-foo.c.cse
echo x - foo.c.cse2
sed 's/^X//' >foo.c.cse2 << 'END-of-foo.c.cse2'
END-of-foo.c.cse2
echo x - foo.c.dbr
sed 's/^X//' >foo.c.dbr << 'END-of-foo.c.dbr'
END-of-foo.c.dbr
echo x - foo.c.flow
sed 's/^X//' >foo.c.flow << 'END-of-foo.c.flow'
END-of-foo.c.flow
echo x - foo.c.gcse
sed 's/^X//' >foo.c.gcse << 'END-of-foo.c.gcse'
X
X;; Function loopattach
X
XBB data
X
XBB 0, start 11, end 45
X preds: entry
X succs: 1
XBB 1, start 18, end 15
X preds: 1 0
X succs: exit 1
X
XGCSE pass 1
X
XSET hash table (11 buckets, 1 entries)
XIndex 0 (hash value 8)
X (set (reg/v:DI 107)
X (const_int 0))
X
Xcprop avail expr computation: 2 passes
X
XCPROP of loopattach, pass 1: 2178 bytes needed, 0 const props, 0 copy props
X
XExpression hash table (11 buckets, 3 entries)
XIndex 0 (hash value 7)
X (ior:HI (reg:HI 110)
X (const_int 8))
XIndex 1 (hash value 8)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))
XIndex 2 (hash value 8)
X (sign_extend:DI (reg:SI 111))
X
Xavail expr computation: 2 passes
Xantic expr computation: 2 passes
Xpartially avail expr computation: 2 passes
Xplacement possible computation: 2 passes
X
X
XPRE GCSE of loopattach, pass 1: 3234 bytes needed, 0 substs, 0 insns created
X
XSET hash table (11 buckets, 1 entries)
XIndex 0 (hash value 8)
X (set (reg/v:DI 107)
X (const_int 0))
X
Xcprop avail expr computation: 2 passes
X
XCPROP of loopattach, pass 2: 4488 bytes needed, 0 const props, 0 copy props
X
XGCSE of loopattach: 2 basic blocks, 1 pass, 3234 bytes
X
X(note 2 0 5 "" NOTE_INSN_DELETED)
X
X(note 5 2 6 "" NOTE_INSN_FUNCTION_BEG)
X
X(note 6 5 8 "" NOTE_INSN_DELETED)
X
X(note 8 6 11 0 NOTE_INSN_BLOCK_BEG)
X
X(insn 11 8 45 (set (reg/v:DI 107)
X (const_int 0)) 115 {*movdi_sp64_dbl} (nil)
X (expr_list:REG_EQUAL (const_int 0)
X (nil)))
X
X(insn 45 11 46 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(note 46 45 12 "" NOTE_INSN_DELETED)
X
X(note 12 46 18 "" NOTE_INSN_LOOP_BEG)
X
X(code_label 18 12 20 5 "")
X
X(note 20 18 21 "" NOTE_INSN_DELETED)
X
X(insn 21 20 22 (set (reg:HI 110)
X (const_double (const_int 0) -32768 0 0 2818052 2182888)) 99 {*movhi_const64_special} (nil)
X (expr_list:REG_EQUAL (const_double (const_int 0) -32768 0 0 2818052 2182888)
X (nil)))
X
X(insn 22 21 23 (set (reg:HI 109)
X (ior:HI (reg:HI 110)
X (const_int 8))) 101 {*movhi_lo_sum} (nil)
X (expr_list:REG_EQUAL (const_int 32776)
X (nil)))
X
X(insn 23 22 26 (set (mem/s:HI (reg/v:DI 108) 0)
X (reg:HI 109)) 100 {*movhi_insn} (nil)
X (nil))
X
X(note 26 23 29 "" NOTE_INSN_LOOP_CONT)
X
X(insn 29 26 30 (set (reg:SI 111)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))) 270 {*addsi3} (nil)
X (nil))
X
X(insn 30 29 49 (set (reg/v:DI 107)
X (sign_extend:DI (reg:SI 111))) 233 {*sign_extendsidi2_insn} (nil)
X (nil))
X
X(note 49 30 14 "" NOTE_INSN_LOOP_VTOP)
X
X(insn 14 49 15 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) 5 {*cmpsi_insn} (nil)
X (nil))
X
X(jump_insn 15 14 38 (set (pc)
X (if_then_else (le (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 18)
X (pc))) 87 {*normal_branch} (nil)
X (nil))
X
X(note 38 15 41 "" NOTE_INSN_LOOP_END)
X
X(note 41 38 0 0 NOTE_INSN_BLOCK_END)
END-of-foo.c.gcse
echo x - foo.c.greg
sed 's/^X//' >foo.c.greg << 'END-of-foo.c.greg'
END-of-foo.c.greg
echo x - foo.c.jump
sed 's/^X//' >foo.c.jump << 'END-of-foo.c.jump'
X
X;; Function loopattach
X
X(note 2 0 5 "" NOTE_INSN_DELETED)
X
X(note 5 2 6 "" NOTE_INSN_FUNCTION_BEG)
X
X(note 6 5 8 "" NOTE_INSN_DELETED)
X
X(note 8 6 11 0 NOTE_INSN_BLOCK_BEG)
X
X(insn 11 8 45 (set (reg/v:DI 107)
X (const_int 0)) -1 (nil)
X (nil))
X
X(insn 45 11 46 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) -1 (nil)
X (nil))
X
X(jump_insn 46 45 12 (set (pc)
X (if_then_else (gt (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 39)
X (pc))) 87 {*normal_branch} (nil)
X (nil))
X
X(note 12 46 18 "" NOTE_INSN_LOOP_BEG)
X
X(code_label 18 12 20 5 "")
X
X(note 20 18 21 "" NOTE_INSN_DELETED)
X
X(insn 21 20 22 (set (reg:HI 110)
X (const_double (const_int 0) -32768 0 0 2818052 2182888)) -1 (nil)
X (nil))
X
X(insn 22 21 23 (set (reg:HI 109)
X (ior:HI (reg:HI 110)
X (const_int 8))) -1 (nil)
X (expr_list:REG_EQUAL (const_int -32760)
X (nil)))
X
X(insn 23 22 26 (set (mem/s:HI (reg/v:DI 108) 0)
X (reg:HI 109)) -1 (nil)
X (nil))
X
X(note 26 23 29 "" NOTE_INSN_LOOP_CONT)
X
X(insn 29 26 30 (set (reg:SI 111)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))) -1 (nil)
X (nil))
X
X(insn 30 29 32 (set (reg:DI 112)
X (sign_extend:DI (reg:SI 111))) -1 (nil)
X (nil))
X
X(insn 32 30 49 (set (reg/v:DI 107)
X (reg:DI 112)) -1 (nil)
X (nil))
X
X(note 49 32 14 "" NOTE_INSN_LOOP_VTOP)
X
X(insn 14 49 15 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) -1 (nil)
X (nil))
X
X(jump_insn 15 14 38 (set (pc)
X (if_then_else (le (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 18)
X (pc))) -1 (nil)
X (nil))
X
X(note 38 15 39 "" NOTE_INSN_LOOP_END)
X
X(code_label 39 38 41 3 "")
X
X(note 41 39 0 0 NOTE_INSN_BLOCK_END)
END-of-foo.c.jump
echo x - foo.c.jump2
sed 's/^X//' >foo.c.jump2 << 'END-of-foo.c.jump2'
END-of-foo.c.jump2
echo x - foo.c.loop
sed 's/^X//' >foo.c.loop << 'END-of-foo.c.loop'
X
X;; Function loopattach
X
X
XLoop from 12 to 38: 7 real insns.
XContinue at insn 26.
XInsn 21: regno 110 (life 2), move-insn savings 2 END-of-foo.c.loop
echo x - foo.c.lreg
sed 's/^X//' >foo.c.lreg << 'END-of-foo.c.lreg'
END-of-foo.c.lreg
echo x - foo.c.regmove
sed 's/^X//' >foo.c.regmove << 'END-of-foo.c.regmove'
END-of-foo.c.regmove
echo x - foo.c.rtl
sed 's/^X//' >foo.c.rtl << 'END-of-foo.c.rtl'
X
X;; Function loopattach
X
X(note 2 0 4 "" NOTE_INSN_DELETED)
X
X(insn 4 2 5 (set (reg/v:DI 106)
X (reg:DI 24 %i0)) -1 (nil)
X (expr_list:REG_EQUIV (mem:DI (reg:DI 101) 0)
X (nil)))
X
X(note 5 4 6 "" NOTE_INSN_FUNCTION_BEG)
X
X(note 6 5 8 "" NOTE_INSN_DELETED)
X
X(note 8 6 11 0 NOTE_INSN_BLOCK_BEG)
X
X(insn 11 8 12 (set (reg/v:DI 107)
X (const_int 0)) -1 (nil)
X (nil))
X
X(note 12 11 34 "" NOTE_INSN_LOOP_BEG)
X
X(jump_insn 34 12 35 (set (pc)
X (label_ref 13)) -1 (nil)
X (nil))
X
X(barrier 35 34 33)
X
X(code_label 33 35 18 6 "")
X
X(code_label 18 33 20 5 "")
X
X(note 20 18 21 "" NOTE_INSN_DELETED)
X
X(insn 21 20 22 (set (reg:HI 110)
X (const_double (const_int 0) -32768 0 0 2818048 2182888)) -1 (nil)
X (nil))
X
X(insn 22 21 23 (set (reg:HI 109)
X (ior:HI (reg:HI 110)
X (const_int 8))) -1 (nil)
X (expr_list:REG_EQUAL (const_int -32760)
X (nil)))
X
X(insn 23 22 26 (set (mem/s:HI (reg/v:DI 108) 0)
X (reg:HI 109)) -1 (nil)
X (nil))
X
X(note 26 23 27 "" NOTE_INSN_LOOP_CONT)
X
X(code_label 27 26 29 4 "")
X
X(insn 29 27 30 (set (reg:SI 111)
X (plus:SI (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 1))) -1 (nil)
X (nil))
X
X(insn 30 29 32 (set (reg:DI 112)
X (sign_extend:DI (reg:SI 111))) -1 (nil)
X (nil))
X
X(insn 32 30 13 (set (reg/v:DI 107)
X (reg:DI 112)) -1 (nil)
X (nil))
X
X(code_label 13 32 14 2 "")
X
X(insn 14 13 15 (set (reg:CC 100 %icc)
X (compare:CC (subreg/s:SI (reg/v:DI 107) 0)
X (const_int 4))) -1 (nil)
X (nil))
X
X(jump_insn 15 14 16 (set (pc)
X (if_then_else (le (reg:CC 100 %icc)
X (const_int 0))
X (label_ref 18)
X (pc))) -1 (nil)
X (nil))
X
X(jump_insn 16 15 17 (set (pc)
X (label_ref 39)) -1 (nil)
X (nil))
X
X(barrier 17 16 36)
X
X(jump_insn 36 17 37 (set (pc)
X (label_ref 33)) -1 (nil)
X (nil))
X
X(barrier 37 36 38)
X
X(note 38 37 39 "" NOTE_INSN_LOOP_END)
X
X(code_label 39 38 41 3 "")
X
X(note 41 39 42 0 NOTE_INSN_BLOCK_END)
X
X(note 42 41 44 "" NOTE_INSN_FUNCTION_END)
X
X(code_label 44 42 0 1 "")
END-of-foo.c.rtl
echo x - foo.c.sched
sed 's/^X//' >foo.c.sched << 'END-of-foo.c.sched'
END-of-foo.c.sched
echo x - foo.c.sched2
sed 's/^X//' >foo.c.sched2 << 'END-of-foo.c.sched2'
END-of-foo.c.sched2
exit
More information about the Gcc-bugs
mailing list