This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/66873] fortran variant of outer-1.c not parallelized by autopar
- From: "vries at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 14 Jul 2015 23:02:39 +0000
- Subject: [Bug tree-optimization/66873] fortran variant of outer-1.c not parallelized by autopar
- Auto-submitted: auto-generated
- References: <bug-66873-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66873
--- Comment #2 from vries at gcc dot gnu.org ---
Another obvious difference is that the fortran 2-dimensional array access is
rewritten into a single dimension array access:
...
<bb 3>:
# ii_7 = PHI <0(2), ii_16(7)>
pretmp_52 = (integer(kind=8)) ii_7;
pretmp_53 = pretmp_52 * 500;
<bb 4>:
# jj_10 = PHI <0(3), jj_15(5)>
_11 = (integer(kind=8)) jj_10;
_12 = _11 + pretmp_53;
_13 = ii_7 + jj_10;
_14 = _13 + 3;
x[_12] = _14;
jj_15 = jj_10 + 1;
if (jj_10 == 499)
goto <bb 6>;
else
goto <bb 5>;
...
While the outer-1.c 2-dimensional array access is still 2-dimensional:
...
<bb 9>:
# i_34 = PHI <0(3), i_15(8)>
goto <bb 5>;
<bb 5>:
# j_36 = PHI <0(9), j_14(4)>
_11 = i_34 + j_36;
_12 = _11 + 3;
x[i_34][j_36] = _12;
j_14 = j_36 + 1;
if (N_9(D) > j_14)
goto <bb 4>;
else
goto <bb 6>;
...
Which results in different access functions, and the dependence analysis
succeeds:
...
(Data Dep:
#(Data Ref:
# bb: 5
# stmt: x[i_34][j_36] = _12;
# ref: x[i_34][j_36];
# base_object: x;
# Access function 0: {0, +, 1}_4
# Access function 1: {0, +, 1}_1
#)
#(Data Ref:
# bb: 5
# stmt: x[i_34][j_36] = _12;
# ref: x[i_34][j_36];
# base_object: x;
# Access function 0: {0, +, 1}_4
# Access function 1: {0, +, 1}_1
#)
access_fn_A: {0, +, 1}_4
access_fn_B: {0, +, 1}_4
(subscript
iterations_that_access_an_element_twice_in_A: [0]
last_conflict: scev_not_known
iterations_that_access_an_element_twice_in_B: [0]
last_conflict: scev_not_known
(Subscript distance: 0 ))
access_fn_A: {0, +, 1}_1
access_fn_B: {0, +, 1}_1
(subscript
iterations_that_access_an_element_twice_in_A: [0]
last_conflict: scev_not_known
iterations_that_access_an_element_twice_in_B: [0]
last_conflict: scev_not_known
(Subscript distance: 0 ))
inner loop index: 0
loop nest: (1 4 )
distance_vector: 0 0
direction_vector: = =
)
SUCCESS: may be parallelized
...