From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by sourceware.org (Postfix) with ESMTPS id 708B13858022 for ; Fri, 4 Jun 2021 07:26:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 708B13858022 Received: by mail-pg1-x533.google.com with SMTP id i34so754065pgl.9 for ; Fri, 04 Jun 2021 00:26:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=7M1MjmL4NtNSOejgOH6ynP5NK5FhYTDqqSYKo57UNgk=; b=iTbG7qKl18WI2hiY86tuzRVxXyA3G612rB6YzQq0HZ9bIzb31ovREqO6Q3Fmc5jJHw h9jTTMWe5aNUerIKVOHnYFPOh2MAPJ479jzcIU3ruP9kC5Wq7Uj/5fLRx1FKoK3MGqrI 2xmgAUkpYT1hhCoJse4Gxz1y7WJJpPpDSQSbqUGha5peIeEQxxFLAU1yRs+/ssIYh9aD Gehdo+2ri/gNs5RysabdTbmLZWdWUwyFfTlTOE51ZnavvA3QD9Mn3SCWBlQggX6sg8by ieFxr7Cd0DUyyiBF+6MUK8KM6pvHRbtwMnI3CFFgvEhMWAkxH51Or9M77vppyKpF2Uiw ICoQ== X-Gm-Message-State: AOAM531v/k77BQ9aC1+KwR1nqCSojVal9G8thEEd2ER40SytXA6KpYNJ gCWIJUlS9GzXjqr0qXV1KiRLIFcpSvQUAZ9RhLMjWv2a7DB+bg== X-Google-Smtp-Source: ABdhPJy7rH4SfReFlsdV+Rp84kh5N4eF+y5YEKP+za8SX/+GVvQNRQRmw49mADgFuuOd9/ZFpZ8nva2UA5ya/nYk6Zk= X-Received: by 2002:aa7:8481:0:b029:2e9:c72d:de61 with SMTP id u1-20020aa784810000b02902e9c72dde61mr3327473pfn.24.1622791585121; Fri, 04 Jun 2021 00:26:25 -0700 (PDT) MIME-Version: 1.0 From: Prathamesh Kulkarni Date: Fri, 4 Jun 2021 12:55:49 +0530 Message-ID: Subject: [ARM] PR98435: Missed optimization in expanding vector constructor To: gcc Patches , Kyrill Tkachov Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jun 2021 07:26:36 -0000 Hi, As mentioned in PR, for the following test-case: #include bfloat16x4_t f1 (bfloat16_t a) { return vdup_n_bf16 (a); } bfloat16x4_t f2 (bfloat16_t a) { return (bfloat16x4_t) {a, a, a, a}; } Compiling with arm-linux-gnueabi -O3 -mfpu=neon -mfloat-abi=softfp -march=armv8.2-a+bf16+fp16 results in f2 not being vectorized: f1: vdup.16 d16, r0 vmov r0, r1, d16 @ v4bf bx lr f2: mov r3, r0 @ __bf16 adr r1, .L4 ldrd r0, [r1] mov r2, r3 @ __bf16 mov ip, r3 @ __bf16 bfi r1, r2, #0, #16 bfi r0, ip, #0, #16 bfi r1, r3, #16, #16 bfi r0, r2, #16, #16 bx lr This seems to happen because vec_init pattern in neon.md has VDQ mode iterator, which doesn't include V4BF. In attached patch, I changed mode to VDQX which seems to work for the test-case, and the compiler now generates: f2: vdup.16 d16, r0 vmov r0, r1, d16 @ v4bf bx lr However, the pattern is also gated on TARGET_HAVE_MVE and I am not sure if either VDQ or VDQX are correct modes for MVE since MVE has only 128-bit vectors ? Thanks, Prathamesh