From patchwork Fri Jan 26 14:21:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 125993 Delivered-To: patch@linaro.org Received: by 10.46.84.92 with SMTP id y28csp369590ljd; Fri, 26 Jan 2018 06:21:34 -0800 (PST) X-Google-Smtp-Source: AH8x226BFV/qq9QjvjN1pNX+r25Th5EsplSwiCb/CCMuuwV+88OJ7dsN7a+BSG4l9h53HhjmbKGP X-Received: by 2002:a17:902:548f:: with SMTP id e15-v6mr9827205pli.230.1516976494368; Fri, 26 Jan 2018 06:21:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516976494; cv=none; d=google.com; s=arc-20160816; b=HlTobSomg6nCgZot/vlvsiaGjOCUXwj+BdUcb36a5oU3uL51k9liy1UoqkzHXY0pbF WUouS80x2GuDxHuRdym8qyFUrCC5uaBHHw0Fk8aC4xBxsDV3rpL8XyVLYskyCDfBUrgi EcbsE29rFzFwhLvMXuTN489z4EvydIRQdB8Kwcob1eq3MGopAm+gOTIMRxBiIuk8nVsU r9uexJwsyhMc10Nhi9TICl78EmBtH4efk8OGAtVZ9CEPEq4Sk4e/oQngWSysCcjesEOn Qd3XQuuayR6DpOXK2LOuJtIdPZ1dk3svTx4ofzjxjM9ShCdk9WzmW7efX3AxmiN5JzuU 3Ygw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:message-id:date:user-agent:subject:cc:mail-followup-to :to:from:delivered-to:sender:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature:arc-authentication-results; bh=5t5zxqF+KPImYdLdQgJ9BIUDdrtiafY4o/2o3bcGewk=; b=wq5YrRfwK7hRXjoJOpKlhzr/SKbnauMTXmrzLAvpuxVNdhRDRaFAx3OExQUR1SjuCL FGuenUPxcO2sINZX2pTT82K1C9Oi2rXwEcjcUWlWf1GkoAJ2/D2nMKARDgTezkbdbXTW /sUF1PHmwGkTe+bE495cRstYR9X7u+bh/oo6HDz+WNqOwi10SP+YEhkGrTgqRUIl9miT sMPf9WJpkZ03zXVKDnmj4Pfo3P8/DPjaP8A5Bo3S/XivC9WNaGbJBHEUz4uireD9LMZL qzjOZuOX+mboBLDYuRFCq+s0eclLPobC3LTVtPY0JY5+12MHG6rZ/Re8fYaFWvW6TUQQ tO/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=Z8MEUuXD; spf=pass (google.com: domain of gcc-patches-return-472109-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-472109-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id 1-v6si3787102plp.678.2018.01.26.06.21.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 26 Jan 2018 06:21:34 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-472109-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=Z8MEUuXD; spf=pass (google.com: domain of gcc-patches-return-472109-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-472109-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:mime-version:content-type; q=dns; s=default; b=shNvszK+CpT8qjIZNj/WjzdxWq+oVHWqkk90B4POHGXY/JB1Tz 0lsgw3INB6o/rWCqotTeUE39ljPS+s5lawrrcnU2qmZIODJkS4XaXAW/jXC/d8Bd tdmH8icv4anVpJHx9LfzlkU3glhyuNfBRdKsX2VyrjfZsv/TKxVdAEQ6I= 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:from :to:cc:subject:date:message-id:mime-version:content-type; s= default; bh=c1kwPUqKL9rkmmpNTlTLgsgEc5s=; b=Z8MEUuXDbwv1vens3ycM SmvKjwkdt20vnJ9S1Bi0diaTvnbE84TFKtoiKVvUkVCqCIlijWm8N/AQqRRsevS7 HyTrbfXjIVZrdHo+03YikKRizwyCxZ5IA5J4ibIfxg4NI4lI5bitb/t3JNhrdzBK DvJh2sQJyigJR/i+WV17CO8= Received: (qmail 1678 invoked by alias); 26 Jan 2018 14:21:19 -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 1623 invoked by uid 89); 26 Jan 2018 14:21:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-9.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_WEB, SPF_PASS autolearn=ham version=3.3.2 spammy=ZIP, 1b, 0h, zips X-HELO: mail-wr0-f170.google.com Received: from mail-wr0-f170.google.com (HELO mail-wr0-f170.google.com) (209.85.128.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 26 Jan 2018 14:21:15 +0000 Received: by mail-wr0-f170.google.com with SMTP id v15so665511wrb.8 for ; Fri, 26 Jan 2018 06:21:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:mail-followup-to:cc:subject:user-agent :date:message-id:mime-version; bh=5t5zxqF+KPImYdLdQgJ9BIUDdrtiafY4o/2o3bcGewk=; b=IEQxfFW0Mw2+mqkQq9ij6Fp+uwdZelk053c4cm9VNZVsXsM2rER1vsUUogUYoZSJYO 9lSZC1gFEnW54r65GVoWcSXAGs3FHCRV71psNLZWkAV2xR3c2Bw2IKOYeqHi0By2n1q5 GXyQLSJSwEs6HNt9ohDlu8u3Sp1fhEEp9rT4H0rsFp8yTWDc3/DyxjG0/j/jtyv9I3ds BJ8FU85yzy+/Kesr4W+Ij6XM51DH3rtxyXEaTpjYj4O5jgKVDJYd1Ha/cp0IoSrZ8Rno J8od1jaQKw505TTmTl9D0uibnOfxay+NuXTO8YJezB83OBFC+X0XCMvNXOl4ZVKv0jGj lAdw== X-Gm-Message-State: AKwxytd5sAtBYqOMvQEu455oIenhA0rF2JfiUWFGip09V7JAjxdd1Gm+ AD/hgHd2iOOaQrDtbCWT3gGb3A== X-Received: by 10.223.200.140 with SMTP id k12mr12668931wrh.211.1516976473396; Fri, 26 Jan 2018 06:21:13 -0800 (PST) Received: from localhost (92.40.248.183.threembb.co.uk. [92.40.248.183]) by smtp.gmail.com with ESMTPSA id c49sm5526901wrc.48.2018.01.26.06.21.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Jan 2018 06:21:12 -0800 (PST) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.earnshaw@arm.com, james.greenhalgh@arm.com, marcus.shawcroft@arm.com, richard.sandiford@linaro.org Cc: richard.earnshaw@arm.com, james.greenhalgh@arm.com, marcus.shawcroft@arm.com Subject: [SLP/AArch64] Fix unpack handling for big-endian SVE User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) Date: Fri, 26 Jan 2018 14:21:11 +0000 Message-ID: <87h8r8og4o.fsf@linaro.org> MIME-Version: 1.0 I hadn't realised that on big-endian targets, VEC_UNPACK*HI_EXPR unpacks the low-numbered lanes and VEC_UNPACK*LO_EXPR unpacks the high-numbered lanes. This meant that both the SVE patterns and the handling of fully-masked loops were wrong. The patch deals with that by making sure that all vec_unpack* optabs are define_expands, using BYTES_BIG_ENDIAN to choose the appropriate define_insn. This in turn meant that we can get rid of the duplication between the signed and unsigned patterns for predicates. (We provide implementations of both the signed and unsigned optabs because the sign doesn't matter for predicates: every element contains only one significant bit.) Also, the float unpacks need to unpack one half of the input vector, but the unpacked upper bits are "don't care". There are two obvious ways of handling that: use an unpack (filling with zeros) or use a ZIP (filling with a duplicate of the low bits). The code previously used unpacks, but the sequence involved a subreg that is semantically an element reverse on big-endian targets. Using the ZIP patterns avoids that, and at the moment there's no reason to prefer one over the other for performance reasons, so the patch switches to ZIP unconditionally. As the comment says, it would be easy to optimise this later if UUNPK turns out to be better for some implementations. Tested on aarch64_be-elf, aarch64-linux-gnu and x86_64-linux-gnu. I think the tree-vect-loop-manip.c part is obvious, but OK for the AArch64 bits? Richard 2018-01-26 Richard Sandiford gcc/ * tree-vect-loop-manip.c (vect_maybe_permute_loop_masks): Reverse the choice between VEC_UNPACK_LO_EXPR and VEC_UNPACK_HI_EXPR for big-endian. * config/aarch64/iterators.md (hi_lanes_optab): New int attribute. * config/aarch64/aarch64-sve.md (*aarch64_sve_): Rename to... (aarch64_sve_): ...this. (*extend2): Rename to... (aarch64_sve_extend2): ...this. (vec_unpack__): Turn into a define_expand, renaming the old pattern to... (aarch64_sve_punpk_): ...this. Only define unsigned packs. (vec_unpack__): Turn into a define_expand, renaming the old pattern to... (aarch64_sve_unpk_): ...this. (*vec_unpacku___no_convert): Delete. (vec_unpacks__): Take BYTES_BIG_ENDIAN into account when deciding which SVE instruction the optab should use. (vec_unpack_float__vnx4si): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/unpack_fcvt_signed_1.c: Expect zips rather than unpacks. * gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c: Likewise. * gcc.target/aarch64/sve/unpack_float_1.c: Likewise. Index: gcc/tree-vect-loop-manip.c =================================================================== --- gcc/tree-vect-loop-manip.c 2018-01-13 18:02:00.948360274 +0000 +++ gcc/tree-vect-loop-manip.c 2018-01-26 14:00:15.717916957 +0000 @@ -334,7 +334,8 @@ vect_maybe_permute_loop_masks (gimple_se { tree src = src_rgm->masks[i / 2]; tree dest = dest_rgm->masks[i]; - tree_code code = (i & 1 ? VEC_UNPACK_HI_EXPR + tree_code code = ((i & 1) == (BYTES_BIG_ENDIAN ? 0 : 1) + ? VEC_UNPACK_HI_EXPR : VEC_UNPACK_LO_EXPR); gassign *stmt; if (dest_masktype == unpack_masktype) Index: gcc/config/aarch64/iterators.md =================================================================== --- gcc/config/aarch64/iterators.md 2018-01-13 18:01:26.106685901 +0000 +++ gcc/config/aarch64/iterators.md 2018-01-26 14:00:15.716916999 +0000 @@ -1674,6 +1674,15 @@ (define_int_attr perm_hilo [(UNSPEC_ZIP1 (UNSPEC_UNPACKSHI "hi") (UNSPEC_UNPACKUHI "hi") (UNSPEC_UNPACKSLO "lo") (UNSPEC_UNPACKULO "lo")]) +;; Return true if the associated optab refers to the high-numbered lanes, +;; false if it refers to the low-numbered lanes. The convention is for +;; "hi" to refer to the low-numbered lanes (the first ones in memory) +;; for big-endian. +(define_int_attr hi_lanes_optab [(UNSPEC_UNPACKSHI "!BYTES_BIG_ENDIAN") + (UNSPEC_UNPACKUHI "!BYTES_BIG_ENDIAN") + (UNSPEC_UNPACKSLO "BYTES_BIG_ENDIAN") + (UNSPEC_UNPACKULO "BYTES_BIG_ENDIAN")]) + (define_int_attr frecp_suffix [(UNSPEC_FRECPE "e") (UNSPEC_FRECPX "x")]) (define_int_attr crc_variant [(UNSPEC_CRC32B "crc32b") (UNSPEC_CRC32H "crc32h") Index: gcc/config/aarch64/aarch64-sve.md =================================================================== --- gcc/config/aarch64/aarch64-sve.md 2018-01-26 13:55:12.277219211 +0000 +++ gcc/config/aarch64/aarch64-sve.md 2018-01-26 14:00:15.716916999 +0000 @@ -817,7 +817,7 @@ (define_insn "*aarch64_sve_

\t%0., %1., %2." ) -(define_insn "*aarch64_sve_" +(define_insn "aarch64_sve_" [(set (match_operand:SVE_ALL 0 "register_operand" "=w") (unspec:SVE_ALL [(match_operand:SVE_ALL 1 "register_operand" "w") (match_operand:SVE_ALL 2 "register_operand" "w")] @@ -2156,7 +2156,7 @@ (define_insn "*vnx4sf2" ) ;; Conversion of DI or SI to DF, predicated with a PTRUE. -(define_insn "*vnx2df2" +(define_insn "aarch64_sve_vnx2df2" [(set (match_operand:VNx2DF 0 "register_operand" "=w") (unspec:VNx2DF [(match_operand:VNx2BI 1 "register_operand" "Upl") @@ -2183,7 +2183,7 @@ (define_insn "*trunc2" ;; Conversion of SFs to the same number of DFs, or HFs to the same number ;; of SFs. -(define_insn "*extend2" +(define_insn "aarch64_sve_extend2" [(set (match_operand: 0 "register_operand" "=w") (unspec: [(match_operand: 1 "register_operand" "Upl") @@ -2195,17 +2195,50 @@ (define_insn "*extend2" "fcvt\t%0., %1/m, %2." ) +;; Unpack the low or high half of a predicate, where "high" refers to +;; the low-numbered lanes for big-endian and the high-numbered lanes +;; for little-endian. +(define_expand "vec_unpack__" + [(match_operand: 0 "register_operand") + (unspec: [(match_operand:PRED_BHS 1 "register_operand")] + UNPACK)] + "TARGET_SVE" + { + emit_insn (( + ? gen_aarch64_sve_punpkhi_ + : gen_aarch64_sve_punpklo_) + (operands[0], operands[1])); + DONE; + } +) + ;; PUNPKHI and PUNPKLO. -(define_insn "vec_unpack__" +(define_insn "aarch64_sve_punpk_" [(set (match_operand: 0 "register_operand" "=Upa") (unspec: [(match_operand:PRED_BHS 1 "register_operand" "Upa")] - UNPACK))] + UNPACK_UNSIGNED))] "TARGET_SVE" "punpk\t%0.h, %1.b" ) +;; Unpack the low or high half of a vector, where "high" refers to +;; the low-numbered lanes for big-endian and the high-numbered lanes +;; for little-endian. +(define_expand "vec_unpack__" + [(match_operand: 0 "register_operand") + (unspec: [(match_operand:SVE_BHSI 1 "register_operand")] UNPACK)] + "TARGET_SVE" + { + emit_insn (( + ? gen_aarch64_sve_unpkhi_ + : gen_aarch64_sve_unpklo_) + (operands[0], operands[1])); + DONE; + } +) + ;; SUNPKHI, UUNPKHI, SUNPKLO and UUNPKLO. -(define_insn "vec_unpack__" +(define_insn "aarch64_sve_unpk_" [(set (match_operand: 0 "register_operand" "=w") (unspec: [(match_operand:SVE_BHSI 1 "register_operand" "w")] UNPACK))] @@ -2213,32 +2246,28 @@ (define_insn "vec_unpack_ "unpk\t%0., %1." ) -;; Used by the vec_unpacks__ expander to unpack the bit -;; representation of a VNx4SF or VNx8HF without conversion. The choice -;; between signed and unsigned isn't significant. -(define_insn "*vec_unpacku___no_convert" - [(set (match_operand:SVE_HSF 0 "register_operand" "=w") - (unspec:SVE_HSF [(match_operand:SVE_HSF 1 "register_operand" "w")] - UNPACK_UNSIGNED))] - "TARGET_SVE" - "uunpk\t%0., %1." -) - ;; Unpack one half of a VNx4SF to VNx2DF, or one half of a VNx8HF to VNx4SF. ;; First unpack the source without conversion, then float-convert the ;; unpacked source. (define_expand "vec_unpacks__" - [(set (match_dup 2) - (unspec:SVE_HSF [(match_operand:SVE_HSF 1 "register_operand")] - UNPACK_UNSIGNED)) - (set (match_operand: 0 "register_operand") - (unspec: [(match_dup 3) - (unspec: [(match_dup 2)] UNSPEC_FLOAT_CONVERT)] - UNSPEC_MERGE_PTRUE))] - "TARGET_SVE" - { - operands[2] = gen_reg_rtx (mode); - operands[3] = force_reg (mode, CONSTM1_RTX (mode)); + [(match_operand: 0 "register_operand") + (unspec:SVE_HSF [(match_operand:SVE_HSF 1 "register_operand")] + UNPACK_UNSIGNED)] + "TARGET_SVE" + { + /* Use ZIP to do the unpack, since we don't care about the upper halves + and since it has the nice property of not needing any subregs. + If using UUNPK* turns out to be preferable, we could model it as + a ZIP whose first operand is zero. */ + rtx temp = gen_reg_rtx (mode); + emit_insn (( + ? gen_aarch64_sve_zip2 + : gen_aarch64_sve_zip1) + (temp, operands[1], operands[1])); + rtx ptrue = force_reg (mode, CONSTM1_RTX (mode)); + emit_insn (gen_aarch64_sve_extend2 (operands[0], + ptrue, temp)); + DONE; } ) @@ -2246,18 +2275,25 @@ (define_expand "vec_unpacks__ ;; to VNx2DI, reinterpret the VNx2DI as a VNx4SI, then convert the ;; unpacked VNx4SI to VNx2DF. (define_expand "vec_unpack_float__vnx4si" - [(set (match_dup 2) - (unspec:VNx2DI [(match_operand:VNx4SI 1 "register_operand")] - UNPACK_UNSIGNED)) - (set (match_operand:VNx2DF 0 "register_operand") - (unspec:VNx2DF [(match_dup 3) - (FLOATUORS:VNx2DF (match_dup 4))] - UNSPEC_MERGE_PTRUE))] - "TARGET_SVE" - { - operands[2] = gen_reg_rtx (VNx2DImode); - operands[3] = force_reg (VNx2BImode, CONSTM1_RTX (VNx2BImode)); - operands[4] = gen_rtx_SUBREG (VNx4SImode, operands[2], 0); + [(match_operand:VNx2DF 0 "register_operand") + (FLOATUORS:VNx2DF + (unspec:VNx2DI [(match_operand:VNx4SI 1 "register_operand")] + UNPACK_UNSIGNED))] + "TARGET_SVE" + { + /* Use ZIP to do the unpack, since we don't care about the upper halves + and since it has the nice property of not needing any subregs. + If using UUNPK* turns out to be preferable, we could model it as + a ZIP whose first operand is zero. */ + rtx temp = gen_reg_rtx (VNx4SImode); + emit_insn (( + ? gen_aarch64_sve_zip2vnx4si + : gen_aarch64_sve_zip1vnx4si) + (temp, operands[1], operands[1])); + rtx ptrue = force_reg (VNx2BImode, CONSTM1_RTX (VNx2BImode)); + emit_insn (gen_aarch64_sve_vnx4sivnx2df2 (operands[0], + ptrue, temp)); + DONE; } ) Index: gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_signed_1.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_signed_1.c 2018-01-13 17:54:52.934269783 +0000 +++ gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_signed_1.c 2018-01-26 14:00:15.716916999 +0000 @@ -10,6 +10,6 @@ unpack_double_int_plus8 (double *d, int3 d[i] = s[i] + 8; } -/* { dg-final { scan-assembler-times {\tuunpklo\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tuunpkhi\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip1\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip2\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ /* { dg-final { scan-assembler-times {\tscvtf\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 2 } } */ Index: gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c 2018-01-13 17:54:52.934269783 +0000 +++ gcc/testsuite/gcc.target/aarch64/sve/unpack_fcvt_unsigned_1.c 2018-01-26 14:00:15.717916957 +0000 @@ -10,6 +10,6 @@ unpack_double_int_plus9 (double *d, uint d[i] = (double) (s[i] + 9); } -/* { dg-final { scan-assembler-times {\tuunpklo\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tuunpkhi\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip1\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip2\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ /* { dg-final { scan-assembler-times {\tucvtf\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 2 } } */ Index: gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c 2018-01-13 17:54:52.935269745 +0000 +++ gcc/testsuite/gcc.target/aarch64/sve/unpack_float_1.c 2018-01-26 14:00:15.717916957 +0000 @@ -8,6 +8,6 @@ unpack_float_plus_7point9 (double *d, fl d[i] = s[i] + 7.9; } -/* { dg-final { scan-assembler-times {\tuunpklo\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tuunpkhi\tz[0-9]+\.d, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip1\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ +/* { dg-final { scan-assembler-times {\tzip2\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfcvt\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.s\n} 2 } } */