gcc.dg/autopar test regressions
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro GCC |
Won't Fix
|
Low
|
Unassigned |
Bug Description
Linaro GCC has some test regressions vs. FSF:
armel only:
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
+FAIL: gcc.dg/
[CodeSourcery internal ID: #6663]
Changed in gcc-linaro: | |
importance: | Undecided → Low |
tags: | added: testsuite |
Changed in gcc-linaro: | |
status: | New → Confirmed |
tags: | added: regression |
This problem is caused by 'cunroll pass unrolls the loops so that parloops pass has no loop to parallelize'.
Tree dump of cunroll show the difference, linux-gnueabi) ,
on FSF GCC 4.4 trunk (built as arm-unknown-
Loop 1 iterates 15 times.
Loop size: 7
Estimated size after unrolling: 32
Not unrolling loop 1. <<----
on linaro GCC (build as arm-unknown- linux-gnueabi)
Loop 1 iterates 15 times.
Loop size: 7
Estimated size after unrolling: 32
Removing basic block 48 <<---
The flag of cunroll is set in tree-ssa- loop.c: tree_complete_ unroll( ),
return tree_unroll_ loops_completel y (flag_unroll_loops
|| flag_peel_loops
|| optimize >= 3, true);
on FSF GCC 4.4, flag_unroll_loops is 0, however in linaro gcc, flag_unroll_loops != 0. flag_unroll_loops is set to a non-zero value in gcc/config/ arm/arm. c: arm_optimizatio n_options( ) and arm_override_ options( ).
That is reason why there is no such problem when linaro gcc is built natively on x86. Looks like root cause is found, but have to figure out how to fix it in a reasonable way.