From patchwork Thu Oct 24 15:00:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 1183163 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-511684-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="WVeMix6L"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46zVnf4FfTz9sPZ for ; Fri, 25 Oct 2019 02:01:40 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; q=dns; s= default; b=TsvA3r6HXQPeot4OBbE3raW3TZEZFVxvvRaSl9kYMGzWSVyC3SGTe w2rLVzCAQ5mETgTglxi3aVS9wePFTgf8+dO/q0f6clcgDILbcvkQSRrPs7ZnYwaE G+cczOe3wCzqbb2pydExnATre6HnKVaywaLeXINMIba/6n2Vo8FPaA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:subject:message-id:mime-version:content-type; s= default; bh=rA4VQ9B27jTwP58pe2y4HuoIVbs=; b=WVeMix6LoaIvNuGeiG94 2MWOvxqf6nacrdiq74ZI+f2oCVnLuALscedxJAn9PbxDAfW0fS9oosxwb3giOvAO ig8nuONbjM2aZ3IrP+VcRyFbSziQo326/CkdU4GBUBU24pABDZfCk3jNZcK8R+bd BVM60c0yeys7ygR+lqI9YRA= Received: (qmail 62760 invoked by alias); 24 Oct 2019 15:01:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 62318 invoked by uid 89); 24 Oct 2019 15:00:48 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-10.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, SPF_PASS autolearn=ham version=3.3.1 spammy=sk:vect_bu, UD:quick_push, sk:!stmt_v, sk:vect_co X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 24 Oct 2019 15:00:24 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 2329BC10B for ; Thu, 24 Oct 2019 15:00:22 +0000 (UTC) Date: Thu, 24 Oct 2019 17:00:21 +0200 (CEST) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Change SLP representation of reduction chains Message-ID: User-Agent: Alpine 2.21 (LSU 202 2017-01-01) MIME-Version: 1.0 Instead of t.c:4:3: note: node 0x3751bf0 (max_nunits=1) t.c:4:3: note: stmt 0 sum_24 = _5 + sum_30; t.c:4:3: note: stmt 1 sum_25 = _10 + sum_24; t.c:4:3: note: stmt 2 sum_26 = _14 + sum_25; t.c:4:3: note: stmt 3 sum_27 = _18 + sum_26; t.c:4:3: note: children 0x38eb4d0 0x374acb0 t.c:4:3: note: node 0x38eb4d0 (max_nunits=1) t.c:4:3: note: stmt 0 _5 = *_4; t.c:4:3: note: stmt 1 _10 = *_9; t.c:4:3: note: stmt 2 _14 = *_13; t.c:4:3: note: stmt 3 _18 = *_17; t.c:4:3: note: node 0x374acb0 (max_nunits=1) t.c:4:3: note: stmt 0 sum_30 = PHI <0(5), sum_27(6)> t.c:4:3: note: stmt 1 sum_24 = _5 + sum_30; t.c:4:3: note: stmt 2 sum_25 = _10 + sum_24; t.c:4:3: note: stmt 3 sum_26 = _14 + sum_25; we want t.c:4:3: note: node 0x3d9d110 (max_nunits=1) t.c:4:3: note: stmt 0 sum_24 = _5 + sum_30; t.c:4:3: note: stmt 1 sum_25 = _10 + sum_24; t.c:4:3: note: stmt 2 sum_26 = _14 + sum_25; t.c:4:3: note: stmt 3 sum_27 = _18 + sum_26; t.c:4:3: note: children 0x3d9d070 0x3d9d0c0 t.c:4:3: note: node 0x3d9d070 (max_nunits=1) t.c:4:3: note: stmt 0 _5 = *_4; t.c:4:3: note: stmt 1 _10 = *_9; t.c:4:3: note: stmt 2 _14 = *_13; t.c:4:3: note: stmt 3 _18 = *_17; t.c:4:3: note: node 0x3d9d0c0 (max_nunits=1) t.c:4:3: note: stmt 0 sum_30 = PHI <0(5), sum_27(6)> t.c:4:3: note: stmt 1 sum_30 = PHI <0(5), sum_27(6)> t.c:4:3: note: stmt 2 sum_30 = PHI <0(5), sum_27(6)> t.c:4:3: note: stmt 3 sum_30 = PHI <0(5), sum_27(6)> where we correctly represent the reduction chain as re-associated. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2019-10-24 Richard Biener * tree-vect-slp.c (vect_get_and_check_slp_defs): For reduction chains try harder with operand swapping and instead of putting a shifted chain into the reduction operands put a repetition of the final reduction op there as if we'd reassociate the expression. * gcc.dg/vect/slp-reduc-10a.c: New testcase. * gcc.dg/vect/slp-reduc-10b.c: Likewise. * gcc.dg/vect/slp-reduc-10c.c: Likewise. * gcc.dg/vect/slp-reduc-10d.c: Likewise. * gcc.dg/vect/slp-reduc-10e.c: Likewise. Index: gcc/tree-vect-slp.c =================================================================== --- gcc/tree-vect-slp.c (revision 277372) +++ gcc/tree-vect-slp.c (working copy) @@ -433,20 +433,35 @@ again: the def-stmt/s of the first stmt. Allow different definition types for reduction chains: the first stmt must be a vect_reduction_def (a phi node), and the rest - vect_internal_def. */ + end in the reduction chain. */ tree type = TREE_TYPE (oprnd); if ((oprnd_info->first_dt != dt && !(oprnd_info->first_dt == vect_reduction_def - && dt == vect_internal_def) + && !STMT_VINFO_DATA_REF (stmt_info) + && REDUC_GROUP_FIRST_ELEMENT (stmt_info) + && def_stmt_info + && !STMT_VINFO_DATA_REF (def_stmt_info) + && (REDUC_GROUP_FIRST_ELEMENT (def_stmt_info) + == REDUC_GROUP_FIRST_ELEMENT (stmt_info))) && !((oprnd_info->first_dt == vect_external_def || oprnd_info->first_dt == vect_constant_def) && (dt == vect_external_def || dt == vect_constant_def))) - || !types_compatible_p (oprnd_info->first_op_type, type)) + || !types_compatible_p (oprnd_info->first_op_type, type) + || (!STMT_VINFO_DATA_REF (stmt_info) + && REDUC_GROUP_FIRST_ELEMENT (stmt_info) + && ((!def_stmt_info + || STMT_VINFO_DATA_REF (def_stmt_info) + || (REDUC_GROUP_FIRST_ELEMENT (def_stmt_info) + != REDUC_GROUP_FIRST_ELEMENT (stmt_info))) + != (oprnd_info->first_dt != vect_reduction_def)))) { /* Try swapping operands if we got a mismatch. */ if (i == commutative_op && !swapped) { + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, vect_location, + "trying swapped operands\n"); swapped = true; goto again; } @@ -484,9 +499,26 @@ again: oprnd_info->ops.quick_push (oprnd); break; + case vect_internal_def: case vect_reduction_def: + if (oprnd_info->first_dt == vect_reduction_def + && !STMT_VINFO_DATA_REF (stmt_info) + && REDUC_GROUP_FIRST_ELEMENT (stmt_info) + && !STMT_VINFO_DATA_REF (def_stmt_info) + && (REDUC_GROUP_FIRST_ELEMENT (def_stmt_info) + == REDUC_GROUP_FIRST_ELEMENT (stmt_info))) + { + /* For a SLP reduction chain we want to duplicate the + reduction to each of the chain members. That gets + us a sane SLP graph (still the stmts are not 100% + correct wrt the initial values). */ + gcc_assert (!first); + oprnd_info->def_stmts.quick_push (oprnd_info->def_stmts[0]); + oprnd_info->ops.quick_push (oprnd_info->ops[0]); + break; + } + /* Fallthru. */ case vect_induction_def: - case vect_internal_def: oprnd_info->def_stmts.quick_push (def_stmt_info); oprnd_info->ops.quick_push (oprnd); break; @@ -1182,15 +1214,8 @@ vect_build_slp_tree_2 (vec_info *vinfo, /* Else def types have to match. */ stmt_vec_info other_info; FOR_EACH_VEC_ELT (stmts, i, other_info) - { - /* But for reduction chains only check on the first stmt. */ - if (!STMT_VINFO_DATA_REF (other_info) - && REDUC_GROUP_FIRST_ELEMENT (other_info) - && REDUC_GROUP_FIRST_ELEMENT (other_info) != stmt_info) - continue; - if (STMT_VINFO_DEF_TYPE (other_info) != def_type) - return NULL; - } + if (STMT_VINFO_DEF_TYPE (other_info) != def_type) + return NULL; } else return NULL; Index: gcc/testsuite/gcc.dg/vect/slp-reduc-10a.c =================================================================== --- gcc/testsuite/gcc.dg/vect/slp-reduc-10a.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/slp-reduc-10a.c (working copy) @@ -0,0 +1,82 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fgimple" } */ + +int __GIMPLE (ssa,guessed_local(118111600),startwith("dce3")) +foo (int * x, int n) +{ + int i; + int sum; + int _1; + long unsigned int _2; + long unsigned int _3; + int * _4; + int _5; + __SIZETYPE__ _7; + __SIZETYPE__ _8; + int * _9; + int _10; + __SIZETYPE__ _11; + __SIZETYPE__ _12; + int * _13; + int _14; + __SIZETYPE__ _15; + __SIZETYPE__ _16; + int * _17; + int _18; + + __BB(2,guessed_local(118111600)): + if (n_21(D) > 0) + goto __BB5(guessed(119453778)); + else + goto __BB7(guessed(14763950)); + + __BB(5,guessed_local(105119324)): + goto __BB3(precise(134217728)); + + __BB(3,loop_header(1),guessed_local(955630224)): + sum_30 = __PHI (__BB5: 0, __BB6: sum_27); + i_32 = __PHI (__BB5: 0, __BB6: i_28); + _1 = i_32 * 4; + _2 = (long unsigned int) _1; + _3 = _2 * 4ul; + _4 = x_23(D) + _3; + _5 = __MEM (_4); + sum_24 = _5 + sum_30; + _7 = _2 + 1ul; + _8 = _7 * 4ul; + _9 = x_23(D) + _8; + _10 = __MEM (_9); + sum_25 = _10 + sum_24; + _11 = _2 + 2ul; + _12 = _11 * 4ul; + _13 = x_23(D) + _12; + _14 = __MEM (_13); + sum_26 = _14 + sum_25; + _15 = _2 + 3ul; + _16 = _15 * 4ul; + _17 = x_23(D) + _16; + _18 = __MEM (_17); + sum_27 = _18 + sum_26; + i_28 = i_32 + 1; + if (n_21(D) > i_28) + goto __BB6(guessed(119453778)); + else + goto __BB8(guessed(14763950)); + + __BB(8,guessed_local(105119324)): + goto __BB4(precise(134217728)); + + __BB(6,guessed_local(850510900)): + goto __BB3(precise(134217728)); + + __BB(7,guessed_local(12992276)): + goto __BB4(precise(134217728)); + + __BB(4,guessed_local(118111601)): + sum_31 = __PHI (__BB7: 0, __BB8: sum_27); + return sum_31; + +} + +/* { dg-final { scan-tree-dump "Decided to SLP 1 instances" "vect" } } */ Index: gcc/testsuite/gcc.dg/vect/slp-reduc-10b.c =================================================================== --- gcc/testsuite/gcc.dg/vect/slp-reduc-10b.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/slp-reduc-10b.c (working copy) @@ -0,0 +1,82 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fgimple" } */ + +int __GIMPLE (ssa,guessed_local(118111600),startwith("dce3")) +foo (int * x, int n) +{ + int i; + int sum; + int _1; + long unsigned int _2; + long unsigned int _3; + int * _4; + int _5; + __SIZETYPE__ _7; + __SIZETYPE__ _8; + int * _9; + int _100; + __SIZETYPE__ _11; + __SIZETYPE__ _12; + int * _13; + int _14; + __SIZETYPE__ _15; + __SIZETYPE__ _16; + int * _17; + int _18; + + __BB(2,guessed_local(118111600)): + if (n_21(D) > 0) + goto __BB5(guessed(119453778)); + else + goto __BB7(guessed(14763950)); + + __BB(5,guessed_local(105119324)): + goto __BB3(precise(134217728)); + + __BB(3,loop_header(1),guessed_local(955630224)): + sum_30 = __PHI (__BB5: 0, __BB6: sum_27); + i_32 = __PHI (__BB5: 0, __BB6: i_28); + _1 = i_32 * 4; + _2 = (long unsigned int) _1; + _3 = _2 * 4ul; + _4 = x_23(D) + _3; + _5 = __MEM (_4); + sum_24 = _5 + sum_30; + _7 = _2 + 1ul; + _8 = _7 * 4ul; + _9 = x_23(D) + _8; + _100 = __MEM (_9); + sum_25 = sum_24 + _100; + _11 = _2 + 2ul; + _12 = _11 * 4ul; + _13 = x_23(D) + _12; + _14 = __MEM (_13); + sum_26 = _14 + sum_25; + _15 = _2 + 3ul; + _16 = _15 * 4ul; + _17 = x_23(D) + _16; + _18 = __MEM (_17); + sum_27 = _18 + sum_26; + i_28 = i_32 + 1; + if (n_21(D) > i_28) + goto __BB6(guessed(119453778)); + else + goto __BB8(guessed(14763950)); + + __BB(8,guessed_local(105119324)): + goto __BB4(precise(134217728)); + + __BB(6,guessed_local(850510900)): + goto __BB3(precise(134217728)); + + __BB(7,guessed_local(12992276)): + goto __BB4(precise(134217728)); + + __BB(4,guessed_local(118111601)): + sum_31 = __PHI (__BB7: 0, __BB8: sum_27); + return sum_31; + +} + +/* { dg-final { scan-tree-dump "Decided to SLP 1 instances" "vect" } } */ Index: gcc/testsuite/gcc.dg/vect/slp-reduc-10c.c =================================================================== --- gcc/testsuite/gcc.dg/vect/slp-reduc-10c.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/slp-reduc-10c.c (working copy) @@ -0,0 +1,82 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fgimple" } */ + +int __GIMPLE (ssa,guessed_local(118111600),startwith("dce3")) +foo (int * x, int n) +{ + int i; + int sum; + int _1; + long unsigned int _2; + long unsigned int _3; + int * _4; + int _5; + __SIZETYPE__ _7; + __SIZETYPE__ _8; + int * _9; + int _10; + __SIZETYPE__ _11; + __SIZETYPE__ _12; + int * _13; + int _100; + __SIZETYPE__ _15; + __SIZETYPE__ _16; + int * _17; + int _18; + + __BB(2,guessed_local(118111600)): + if (n_21(D) > 0) + goto __BB5(guessed(119453778)); + else + goto __BB7(guessed(14763950)); + + __BB(5,guessed_local(105119324)): + goto __BB3(precise(134217728)); + + __BB(3,loop_header(1),guessed_local(955630224)): + sum_30 = __PHI (__BB5: 0, __BB6: sum_27); + i_32 = __PHI (__BB5: 0, __BB6: i_28); + _1 = i_32 * 4; + _2 = (long unsigned int) _1; + _3 = _2 * 4ul; + _4 = x_23(D) + _3; + _5 = __MEM (_4); + sum_24 = _5 + sum_30; + _7 = _2 + 1ul; + _8 = _7 * 4ul; + _9 = x_23(D) + _8; + _10 = __MEM (_9); + sum_25 = _10 + sum_24; + _11 = _2 + 2ul; + _12 = _11 * 4ul; + _13 = x_23(D) + _12; + _100 = __MEM (_13); + sum_26 = sum_25 + _100; + _15 = _2 + 3ul; + _16 = _15 * 4ul; + _17 = x_23(D) + _16; + _18 = __MEM (_17); + sum_27 = _18 + sum_26; + i_28 = i_32 + 1; + if (n_21(D) > i_28) + goto __BB6(guessed(119453778)); + else + goto __BB8(guessed(14763950)); + + __BB(8,guessed_local(105119324)): + goto __BB4(precise(134217728)); + + __BB(6,guessed_local(850510900)): + goto __BB3(precise(134217728)); + + __BB(7,guessed_local(12992276)): + goto __BB4(precise(134217728)); + + __BB(4,guessed_local(118111601)): + sum_31 = __PHI (__BB7: 0, __BB8: sum_27); + return sum_31; + +} + +/* { dg-final { scan-tree-dump "Decided to SLP 1 instances" "vect" } } */ Index: gcc/testsuite/gcc.dg/vect/slp-reduc-10d.c =================================================================== --- gcc/testsuite/gcc.dg/vect/slp-reduc-10d.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/slp-reduc-10d.c (working copy) @@ -0,0 +1,82 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fgimple" } */ + +int __GIMPLE (ssa,guessed_local(118111600),startwith("dce3")) +foo (int * x, int n) +{ + int i; + int sum; + int _1; + long unsigned int _2; + long unsigned int _3; + int * _4; + int _5; + __SIZETYPE__ _7; + __SIZETYPE__ _8; + int * _9; + int _10; + __SIZETYPE__ _11; + __SIZETYPE__ _12; + int * _13; + int _14; + __SIZETYPE__ _15; + __SIZETYPE__ _16; + int * _17; + int _100; + + __BB(2,guessed_local(118111600)): + if (n_21(D) > 0) + goto __BB5(guessed(119453778)); + else + goto __BB7(guessed(14763950)); + + __BB(5,guessed_local(105119324)): + goto __BB3(precise(134217728)); + + __BB(3,loop_header(1),guessed_local(955630224)): + sum_30 = __PHI (__BB5: 0, __BB6: sum_27); + i_32 = __PHI (__BB5: 0, __BB6: i_28); + _1 = i_32 * 4; + _2 = (long unsigned int) _1; + _3 = _2 * 4ul; + _4 = x_23(D) + _3; + _5 = __MEM (_4); + sum_24 = _5 + sum_30; + _7 = _2 + 1ul; + _8 = _7 * 4ul; + _9 = x_23(D) + _8; + _10 = __MEM (_9); + sum_25 = _10 + sum_24; + _11 = _2 + 2ul; + _12 = _11 * 4ul; + _13 = x_23(D) + _12; + _14 = __MEM (_13); + sum_26 = _14 + sum_25; + _15 = _2 + 3ul; + _16 = _15 * 4ul; + _17 = x_23(D) + _16; + _100 = __MEM (_17); + sum_27 = sum_26 + _100; + i_28 = i_32 + 1; + if (n_21(D) > i_28) + goto __BB6(guessed(119453778)); + else + goto __BB8(guessed(14763950)); + + __BB(8,guessed_local(105119324)): + goto __BB4(precise(134217728)); + + __BB(6,guessed_local(850510900)): + goto __BB3(precise(134217728)); + + __BB(7,guessed_local(12992276)): + goto __BB4(precise(134217728)); + + __BB(4,guessed_local(118111601)): + sum_31 = __PHI (__BB7: 0, __BB8: sum_27); + return sum_31; + +} + +/* { dg-final { scan-tree-dump "Decided to SLP 1 instances" "vect" } } */ Index: gcc/testsuite/gcc.dg/vect/slp-reduc-10e.c =================================================================== --- gcc/testsuite/gcc.dg/vect/slp-reduc-10e.c (nonexistent) +++ gcc/testsuite/gcc.dg/vect/slp-reduc-10e.c (working copy) @@ -0,0 +1,82 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-fgimple" } */ + +int __GIMPLE (ssa,guessed_local(118111600),startwith("dce3")) +foo (int * x, int n) +{ + int i; + int sum; + int _1; + long unsigned int _2; + long unsigned int _3; + int * _4; + int _100; + __SIZETYPE__ _7; + __SIZETYPE__ _8; + int * _9; + int _10; + __SIZETYPE__ _11; + __SIZETYPE__ _12; + int * _13; + int _14; + __SIZETYPE__ _15; + __SIZETYPE__ _16; + int * _17; + int _18; + + __BB(2,guessed_local(118111600)): + if (n_21(D) > 0) + goto __BB5(guessed(119453778)); + else + goto __BB7(guessed(14763950)); + + __BB(5,guessed_local(105119324)): + goto __BB3(precise(134217728)); + + __BB(3,loop_header(1),guessed_local(955630224)): + sum_30 = __PHI (__BB5: 0, __BB6: sum_27); + i_32 = __PHI (__BB5: 0, __BB6: i_28); + _1 = i_32 * 4; + _2 = (long unsigned int) _1; + _3 = _2 * 4ul; + _4 = x_23(D) + _3; + _100 = __MEM (_4); + sum_24 = sum_30 + _100; + _7 = _2 + 1ul; + _8 = _7 * 4ul; + _9 = x_23(D) + _8; + _10 = __MEM (_9); + sum_25 = _10 + sum_24; + _11 = _2 + 2ul; + _12 = _11 * 4ul; + _13 = x_23(D) + _12; + _14 = __MEM (_13); + sum_26 = _14 + sum_25; + _15 = _2 + 3ul; + _16 = _15 * 4ul; + _17 = x_23(D) + _16; + _18 = __MEM (_17); + sum_27 = _18 + sum_26; + i_28 = i_32 + 1; + if (n_21(D) > i_28) + goto __BB6(guessed(119453778)); + else + goto __BB8(guessed(14763950)); + + __BB(8,guessed_local(105119324)): + goto __BB4(precise(134217728)); + + __BB(6,guessed_local(850510900)): + goto __BB3(precise(134217728)); + + __BB(7,guessed_local(12992276)): + goto __BB4(precise(134217728)); + + __BB(4,guessed_local(118111601)): + sum_31 = __PHI (__BB7: 0, __BB8: sum_27); + return sum_31; + +} + +/* { dg-final { scan-tree-dump "Decided to SLP 1 instances" "vect" } } */