This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
optimization/7120: Run once loop should *always* be unrolled
- From: rusty at rustcorp dot com dot au
- To: gcc-gnats at gcc dot gnu dot org
- Cc: rth at twiddle dot net
- Date: 25 Jun 2002 16:15:15 -0000
- Subject: optimization/7120: Run once loop should *always* be unrolled
- Reply-to: rusty at rustcorp dot com dot au
>Number: 7120
>Category: optimization
>Synopsis: Run once loop should *always* be unrolled
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: pessimizes-code
>Submitter-Id: net
>Arrival-Date: Tue Jun 25 09:16:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Rusty Russell
>Release: gcc 3.0.4, gcc 2.95.4
>Organization:
>Environment:
ppc-linux, i386-linux
>Description:
Run-once loop should *always* be unrolled, and isn't:
/* gcc -S -dL -O2 */
#define NR_CPUS 1
extern void some_func(void);
void func(void)
{
unsigned int cpu;
for (cpu = 0; cpu < NR_CPUS; cpu++)
some_func();
}
foo.s: .file "foo.c"
gcc2_compiled.:
.section ".text"
.align 2
.globl func
.type func,@function
func:
stwu 1,-16(1)
mflr 0
stw 31,12(1)
stw 0,20(1)
li 31,0
.L6:
bl some_func
addic. 31,31,1
bc 12,2,.L6
lwz 0,20(1)
mtlr 0
lwz 31,12(1)
la 1,16(1)
blr
.Lfe1:
.size func,.Lfe1-func
.ident "GCC: (GNU) 2.95.4 20011002 (Debian prerelease)"
>How-To-Repeat:
Compile, browse source & .loop file.
RTH says the (< 1) test becomes (== 0), and breaks the unroll.
>Fix:
Please 8)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="foo.c.loop"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="foo.c.loop"
Cjs7IEZ1bmN0aW9uIGZ1bmMKCgpMb29wIGZyb20gMTAgdG8gMzA6IDQgcmVhbCBpbnNucy4KQ29u
dGludWUgYXQgaW5zbiAyMS4KSW5zbiAyNDogcG9zc2libGUgYml2LCByZWcgODIsIGNvbnN0ID0x
ClJlZyA4MjogYml2IHZlcmlmaWVkCkJpdiA4MiBpbml0aWFsaXplZCBhdCBpbnNuIDk6IGluaXRp
YWwgdmFsdWUgMApMb29wIGl0ZXJhdGlvbnM6IEVRIGNvbXBhcmlzb24gbG9vcC4KQ2FuIHJldmVy
c2UgbG9vcApDYW5ub3QgZWxpbWluYXRlIGJpdiA4MjogYml2IHVzZWQgaW4gaW5zbiAxMi4KU29y
dGVkIGNvbWJpbmUgc3RhdGlzdGljczoKCgoKTG9vcCBmcm9tIDEwIHRvIDMwOiA0IHJlYWwgaW5z
bnMuCkNvbnRpbnVlIGF0IGluc24gMjEuCkluc24gMjQ6IHBvc3NpYmxlIGJpdiwgcmVnIDgyLCBj
b25zdCA9MQpSZWcgODI6IGJpdiB2ZXJpZmllZApCaXYgODIgaW5pdGlhbGl6ZWQgYXQgaW5zbiA5
OiBpbml0aWFsIHZhbHVlIDAKTG9vcCBpdGVyYXRpb25zOiBFUSBjb21wYXJpc29uIGxvb3AuCkNh
biByZXZlcnNlIGxvb3AKQ2Fubm90IGVsaW1pbmF0ZSBiaXYgODI6IGJpdiB1c2VkIGluIGluc24g
MTIuClNvcnRlZCBjb21iaW5lIHN0YXRpc3RpY3M6CgppbnNlcnRfYmN0IDA6IEJDVCBpbnN0cnVt
ZW50YXRpb24gZmFpbGVkOiBmdW5jdGlvbiBjYWxsIGluIGxvb3AKCihub3RlIDIgMCAzICIiIE5P
VEVfSU5TTl9ERUxFVEVEKQoKKG5vdGUgMyAyIDQgIiIgTk9URV9JTlNOX0ZVTkNUSU9OX0JFRykK
Cihub3RlIDQgMyA2ICIiIE5PVEVfSU5TTl9ERUxFVEVEKQoKKG5vdGUgNiA0IDQyIDAgTk9URV9J
TlNOX0JMT0NLX0JFRykKCihub3RlIDQyIDYgOSBbYmIgMF0gTk9URV9JTlNOX0JBU0lDX0JMT0NL
KQoKKGluc24gOSA0MiAzOCAoc2V0IChyZWcvdjpTSSA4MikKICAgICAgICAoY29uc3RfaW50IDAg
WzB4MF0pKSA0MjMge21vdnNpKzF9IChuaWwpCiAgICAoZXhwcl9saXN0OlJFR19FUVVBTCAoY29u
c3RfaW50IDAgWzB4MF0pCiAgICAgICAgKG5pbCkpKQoKKG5vdGUgMzggOSAxMCAiIiBOT1RFX0lO
U05fREVMRVRFRCkKCihub3RlIDEwIDM4IDE2ICIiIE5PVEVfSU5TTl9MT09QX0JFRykKCihjb2Rl
X2xhYmVsIDE2IDEwIDQzIDYgIiIgW251bSB1c2VzOiAxXSkKCihub3RlIDQzIDE2IDE5IFtiYiAx
XSBOT1RFX0lOU05fQkFTSUNfQkxPQ0spCgooY2FsbF9pbnNuIDE5IDQzIDIxIChwYXJhbGxlbFsg
CiAgICAgICAgICAgIChjYWxsIChtZW06U0kgKHN5bWJvbF9yZWY6U0kgKCJzb21lX2Z1bmMiKSkg
MCkKICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCBbMHgwXSkpCiAgICAgICAgICAgICh1c2Ug
KGNvbnN0X2ludCAwIFsweDBdKSkKICAgICAgICAgICAgKGNsb2JiZXIgKHNjcmF0Y2g6U0kpKQog
ICAgICAgIF0gKSAtMSAobmlsKQogICAgKG5pbCkKICAgIChuaWwpKQoKKG5vdGUgMjEgMTkgMjQg
IiIgTk9URV9JTlNOX0xPT1BfQ09OVCkKCihpbnNuIDI0IDIxIDQxIChzZXQgKHJlZy92OlNJIDgy
KQogICAgICAgIChwbHVzOlNJIChyZWcvdjpTSSA4MikKICAgICAgICAgICAgKGNvbnN0X2ludCAx
IFsweDFdKSkpIC0xIChuaWwpCiAgICAobmlsKSkKCihub3RlIDQxIDI0IDEyICIiIE5PVEVfSU5T
Tl9MT09QX1ZUT1ApCgooaW5zbiAxMiA0MSAxMyAoc2V0IChyZWcvczpDQyA4MykKICAgICAgICAo
Y29tcGFyZTpDQyAocmVnL3Y6U0kgODIpCiAgICAgICAgICAgIChjb25zdF9pbnQgMCBbMHgwXSkp
KSAtMSAobmlsKQogICAgKG5pbCkpCgooanVtcF9pbnNuIDEzIDEyIDMwIChzZXQgKHBjKQogICAg
ICAgIChpZl90aGVuX2Vsc2UgKGVxIChyZWcvczpDQyA4MykKICAgICAgICAgICAgICAgIChjb25z
dF9pbnQgMCBbMHgwXSkpCiAgICAgICAgICAgIChsYWJlbF9yZWYgMTYpCiAgICAgICAgICAgIChw
YykpKSAtMSAobmlsKQogICAgKG5pbCkpCgoobm90ZSAzMCAxMyAzMyAiIiBOT1RFX0lOU05fTE9P
UF9FTkQpCgoobm90ZSAzMyAzMCAwIDAgTk9URV9JTlNOX0JMT0NLX0VORCkK