[Bug target/50176] New: [4.6/4.7 Regression] 4.7 generates spill-fill dealing with char->int conversion
izamyatin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Aug 24 14:56:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50176
Bug #: 50176
Summary: [4.6/4.7 Regression] 4.7 generates spill-fill dealing
with char->int conversion
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: izamyatin@gmail.com
Created attachment 25088
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25088
testcase for the problem
I observe that for attached testcase (made from one of tests from EEMBC 2.0
suite) 4.7 generates spill-fill pair when (I suspect) dealing with char->int
conversion while 4.6 doesn't generate them.
Asm for 4.7 for lines 42-47 from the testcase:
.LVL7:
# test_4_6.c:42
.loc 1 42 0 discriminator 2
movl 8(%esp), %edx
# test_4_6.c:45
.loc 1 45 0 discriminator 2
movl 0(,%edi,4), %esi
# test_4_6.c:42
.loc 1 42 0 discriminator 2
movzbl (%edx,%eax), %edx <---- edx contains cb frome line 42
# test_4_6.c:40
.loc 1 40 0 discriminator 2
addl $1, %eax
# test_4_6.c:45
.loc 1 45 0 discriminator 2
addl %ebx, %esi
# test_4_6.c:42
.loc 1 42 0 discriminator 2
movb %dl, 3(%esp) <----- spill, line 42
.LVL8:
# test_4_6.c:45
.loc 1 45 0 discriminator 2
movzbl (%esi), %edx
# test_4_6.c:47
.loc 1 47 0 discriminator 2
movzbl 3(%esp), %esi <----- fill, line 47
# test_4_6.c:45
.loc 1 45 0 discriminator 2
movb %dl, (%ecx)
# test_4_6.c:47
.loc 1 47 0 discriminator 2
movl 0(,%esi,4), %edx <------- using cb, line 47
addl 0(,%edi,4), %edx
sarl $16, %edx
# test_4_6.c:46
.loc 1 46 0 discriminator 2
movzbl (%ebx,%edx), %edx
# test_4_6.c:49
.loc 1 49 0 discriminator 2
addl 0(,%esi,4), %ebx <----- using cb, line 49
Meanwhile, 4.6 does not have such problem:
.LVL7:
# test_4_6.c:42
.loc 1 42 0 discriminator 2
movl 4(%esp), %edx
movzbl (%edx,%eax), %esi <-- esi=cb and is used later without spills
.LVL8:
# test_4_6.c:40
.loc 1 40 0 discriminator 2
addl $1, %eax
# test_4_6.c:45
.loc 1 45 0 discriminator 2
movl 0(,%edi,4), %edx
addl %ebx, %edx
movzbl (%edx), %edx
movb %dl, (%ecx)
# test_4_6.c:47
.loc 1 47 0 discriminator 2
movl 0(,%esi,4), %edx <---- using cb, line 47
addl 0(,%edi,4), %edx
sarl $16, %edx
# test_4_6.c:46
.loc 1 46 0 discriminator 2
movzbl (%ebx,%edx), %edx
# test_4_6.c:49
.loc 1 49 0 discriminator 2
addl 0(,%esi,4), %ebx <---- using cb, line 49
After expanding 4.7 contains:
(insn 52 51 53 6 (set (reg:QI 83 [ D.2723 ])
(mem:QI (plus:SI (reg/v/f:SI 75 [ inptr1 ])
(reg/v:SI 117 [ col ])) [0 MEM[base: inptr1_19, index: col_90,
offset: 0B]+0 S1 A8])) test_4_6.c:42 -1
(nil))
and 4.6 contains
(insn 52 51 53 6 (parallel [
(set (reg/v:SI 86 [ cb ])
(zero_extend:SI (mem:QI (plus:SI (reg/v/f:SI 76 [ inptr1 ])
(reg/v:SI 78 [ col ])) [0 MEM[base: inptr1_19,
index: col_22, offset: 0B]+0 S1 A8])))
(clobber (reg:CC 17 flags))
]) test_4_6.c:42 -1
(nil))
Options are: -c -g -m32 -O2 test.c
GCC 4.6 is
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure --prefix=/export/users/izamyati/prefix
Thread model: posix
gcc version 4.6.0 20110215 (experimental) (GCC)
GCC 4.7 is
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --disable-bootstrap --enable-languages=c,c++
--prefix=/export/users/izamyati/prefix_4_7
Thread model: posix
gcc version 4.7.0 20110824 (experimental) (GCC)
More information about the Gcc-bugs
mailing list