This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33498] [4.2/4.3 Regression] Optimizer (-O2) may convert a normal loop to infinite
- From: "rask at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 Sep 2007 16:12:41 -0000
- Subject: [Bug tree-optimization/33498] [4.2/4.3 Regression] Optimizer (-O2) may convert a normal loop to infinite
- References: <bug-33498-15115@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #3 from rask at gcc dot gnu dot org 2007-09-19 16:12 -------
Technically, the code is undefined (overflow of signed integer val). Using -O2
-fno-strict-overflow results in a loop test, but the code looks dubious:
table_init:
pushl %ebp # 51 *pushsi2 [length = 1]
movl $117835012, %eax # 20 *movsi_1/1 [length = 5]
movl %esp, %ebp # 52 *movsi_1/1 [length = 2]
movl $2, %edx # 21 *movsi_1/1 [length = 5]
movl 8(%ebp), %ecx # 14 *movsi_1/1 [length = 3]
movl $50462976, (%ecx) # 19 *movsi_1/2 [length = 6]
.p2align 4,,7
.L2:
movl %eax, -4(%ecx,%edx,4) # 24 *movsi_1/2 [length = 4]
addl $67372036, %eax # 26 *addsi_1/1 [length = 6]
addl $1, %edx # 27 *addsi_1/1 [length = 3]
cmpl $67305984, %eax # 29 *cmpsi_1_insn/1 [length = 6]
jne .L2 # 30 *jcc_1 [length = 2]
popl %ebp # 55 popsi1 [length = 1]
ret # 56 return_internal [length = 1]
-O2 -fno-tree-loop-optimize produces code which looks like it might even loop
the intended number of times:
table_init:
pushl %ebp # 43 *pushsi2 [length = 1]
movl $1, %eax # 12 *movsi_1/1 [length = 5]
movl %esp, %ebp # 44 *movsi_1/1 [length = 2]
movl $117835012, %edx # 13 *movsi_1/1 [length = 5]
movl 8(%ebp), %ecx # 6 *movsi_1/1 [length = 3]
movl $50462976, (%ecx) # 11 *movsi_1/2 [length = 6]
.p2align 4,,7
.L2:
movl %edx, (%ecx,%eax,4) # 16 *movsi_1/2 [length = 3]
addl $1, %eax # 20 *addsi_1/1 [length = 3]
addl $67372036, %edx # 18 *addsi_1/1 [length = 6]
cmpl $63, %eax # 21 *cmpsi_1_insn/1 [length = 3]
jle .L2 # 22 *jcc_1 [length = 2]
popl %ebp # 47 popsi1 [length = 1]
ret # 48 return_internal [length = 1]
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33498