There are two options to fix this issue,
1. Change 2 -> 3 in line 1891: set_param_value ("max-unroll-times", 3);
2. Define macro DRIVER_SELF_SPECS in gcc/config/arm/arm.h like this,
#define DRIVER_SELF_SPECS "%{!fno-unroll-loops:%{!funroll-loops: \
-funroll-loops --param max-unroll-times=3}}
I've tested these two options separately, and see failures go away. Let me know which one do you prefer? or other thoughts to fix this bug are welcome also.
This bug is caused by this piece of code, which restricts unroll times. However, in these failed cases, unroll number should be at least 3.
config/arm/arm.c: MAX_UNROLL_ TIMES)) times", 2); MAX_UNROLL_ TIMES)) times", 4);
1885 if (flag_unroll_loops == 2)
1886 {
1887 if (optimize == 2)
1888 {
1889 flag_unroll_loops = 1;
1890 if (!PARAM_SET_P (PARAM_
1891 set_param_value ("max-unroll-
1892 }
1893 else if (optimize > 2)
1894 {
1895 flag_unroll_loops = 1;
1896 if (!PARAM_SET_P (PARAM_
1897 set_param_value ("max-unroll-
1898 }
1899 else
1900 flag_unroll_loops = 0;
1901 }
There are two options to fix this issue, times", 3); arm/arm. h like this, unroll- loops:% {!funroll- loops: \ times=3} }
1. Change 2 -> 3 in line 1891: set_param_value ("max-unroll-
2. Define macro DRIVER_SELF_SPECS in gcc/config/
#define DRIVER_SELF_SPECS "%{!fno-
-funroll-loops --param max-unroll-
I've tested these two options separately, and see failures go away. Let me know which one do you prefer? or other thoughts to fix this bug are welcome also.