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.
--- /dev/null
+! { 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
&& 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,