tree-optimization/117060 - fix oversight in vect_build_slp_tree_1
We are failing to match call vs. non-call when dealing with matching loads or stores. PR tree-optimization/117060 * tree-vect-slp.cc (vect_build_slp_tree_1): When comparing calls also fail if the first isn't a call. * gfortran.dg/pr117060.f90: New testcase.
This commit is contained in:
parent
a2e06b7f08
commit
7ce2229d54
2 changed files with 24 additions and 2 deletions
21
gcc/testsuite/gfortran.dg/pr117060.f90
Normal file
21
gcc/testsuite/gfortran.dg/pr117060.f90
Normal file
|
@ -0,0 +1,21 @@
|
|||
! { dg-do compile }
|
||||
! { dg-options "-O2" }
|
||||
|
||||
subroutine foo (out)
|
||||
|
||||
implicit none
|
||||
|
||||
real :: out(*)
|
||||
integer :: i,k
|
||||
real :: a(100)
|
||||
real :: b(100)
|
||||
|
||||
k = 0
|
||||
do i = 1, 10
|
||||
k = k + 1
|
||||
out(k) = a(i)
|
||||
k = k + 1
|
||||
out(k) = sqrt((a(3*i)-b(4))**2 + (a(3*i+1)-b(4+1))**2)
|
||||
end do
|
||||
|
||||
end subroutine
|
|
@ -1367,8 +1367,9 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
|
|||
&& first_stmt_code != CFN_MASK_LOAD
|
||||
&& first_stmt_code != CFN_MASK_STORE)
|
||||
{
|
||||
if (!compatible_calls_p (as_a <gcall *> (stmts[0]->stmt),
|
||||
call_stmt))
|
||||
if (!is_a <gcall *> (stmts[0]->stmt)
|
||||
|| !compatible_calls_p (as_a <gcall *> (stmts[0]->stmt),
|
||||
call_stmt))
|
||||
{
|
||||
if (dump_enabled_p ())
|
||||
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
|
||||
|
|
Loading…
Add table
Reference in a new issue