From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5719AC388F2 for ; Fri, 6 Nov 2020 05:15:23 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C0C3320756 for ; Fri, 6 Nov 2020 05:15:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YsdAypc4" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C0C3320756 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gsHZePCNbAnwcOxUJ3pwyWu+hd8sYtks0Yn1o58oQt8=; b=YsdAypc4lWtwqmiqM3bFH8M4+ quxAiMT5Khbu8OxFikYwyxHKK3ZriSPp1X4wthbDxYv2jdBPIE0AFsWG79th/pb3PjMoLF7cT2lFj GTi8RB3t0SIyAS63H6UDRKY5ke6ic4VuJ31QegEfdBO2flEklseS3eSaVJMFlv2b/DKt7UvGtANGb 5g0N510WY46KD4xNuMDgzoaKmdP1pRurciA0xvnLXaFaVw7/+BZozlZ5XeDucMsA9KlZMFk0nZHGo Yx2in1Q9d17hmo7gLD7bzANJSN6Unm/lPlQEfXLZw/BI6V2gf0zzwH/3pZ327KhK8RFxt5XkXh7TW aFZh40Tow==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kau5R-0006Kw-2P; Fri, 06 Nov 2020 05:14:57 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kau5J-0006Ik-P4 for linux-arm-kernel@lists.infradead.org; Fri, 06 Nov 2020 05:14:51 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: aratiu) with ESMTPSA id D41631F466CE From: Adrian Ratiu To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/2] arm: lib: xor-neon: disable clang vectorization Date: Fri, 6 Nov 2020 07:14:36 +0200 Message-Id: <20201106051436.2384842-3-adrian.ratiu@collabora.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20201106051436.2384842-1-adrian.ratiu@collabora.com> References: <20201106051436.2384842-1-adrian.ratiu@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201106_001449_955851_E3A1D7E6 X-CRM114-Status: GOOD ( 18.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , Nick Desaulniers , Russell King , linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Nathan Chancellor , kernel@collabora.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Due to a Clang bug [1] neon autoloop vectorization does not happen or happens badly with no gains and considering previous GCC experiences which generated unoptimized code which was worse than the default asm implementation, it is safer to default clang builds to the known good generic implementation. The kernel currently supports a minimum Clang version of v10.0.1, see commit 1f7a44f63e6c ("compiler-clang: add build check for clang 10.0.1"). When the bug gets eventually fixed, this commit could be reverted or, if the minimum clang version bump takes a long time, a warning could be added for users to upgrade their compilers like was done for GCC. [1] https://bugs.llvm.org/show_bug.cgi?id=40976 Signed-off-by: Adrian Ratiu --- arch/arm/include/asm/xor.h | 3 ++- arch/arm/lib/Makefile | 3 +++ arch/arm/lib/xor-neon.c | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/xor.h b/arch/arm/include/asm/xor.h index aefddec79286..49937dafaa71 100644 --- a/arch/arm/include/asm/xor.h +++ b/arch/arm/include/asm/xor.h @@ -141,7 +141,8 @@ static struct xor_block_template xor_block_arm4regs = { NEON_TEMPLATES; \ } while (0) -#ifdef CONFIG_KERNEL_MODE_NEON +/* disabled on clang/arm due to https://bugs.llvm.org/show_bug.cgi?id=40976 */ +#if defined(CONFIG_KERNEL_MODE_NEON) && !defined(CONFIG_CC_IS_CLANG) extern struct xor_block_template const xor_block_neon_inner; diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile index 6d2ba454f25b..53f9e7dd9714 100644 --- a/arch/arm/lib/Makefile +++ b/arch/arm/lib/Makefile @@ -43,8 +43,11 @@ endif $(obj)/csumpartialcopy.o: $(obj)/csumpartialcopygeneric.S $(obj)/csumpartialcopyuser.o: $(obj)/csumpartialcopygeneric.S +# disabled on clang/arm due to https://bugs.llvm.org/show_bug.cgi?id=40976 +ifndef CONFIG_CC_IS_CLANG ifeq ($(CONFIG_KERNEL_MODE_NEON),y) NEON_FLAGS := -march=armv7-a -mfloat-abi=softfp -mfpu=neon CFLAGS_xor-neon.o += $(NEON_FLAGS) obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o endif +endif diff --git a/arch/arm/lib/xor-neon.c b/arch/arm/lib/xor-neon.c index e1e76186ec23..84c91c48dfa2 100644 --- a/arch/arm/lib/xor-neon.c +++ b/arch/arm/lib/xor-neon.c @@ -18,6 +18,10 @@ MODULE_LICENSE("GPL"); * Pull in the reference implementations while instructing GCC (through * -ftree-vectorize) to attempt to exploit implicit parallelism and emit * NEON instructions. + + * On Clang the loop vectorizer is enabled by default, but due to a bug + * (https://bugs.llvm.org/show_bug.cgi?id=40976) vectorization is broke + * so xor-neon is disabled in favor of the default reg implementations. */ #ifdef CONFIG_CC_IS_GCC #pragma GCC optimize "tree-vectorize" -- 2.29.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel