From patchwork Wed Apr 12 19:33:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 9678277 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1D82A601C3 for ; Wed, 12 Apr 2017 19:33:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0C76328635 for ; Wed, 12 Apr 2017 19:33:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 00D3F28658; Wed, 12 Apr 2017 19:33:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8B02528635 for ; Wed, 12 Apr 2017 19:33:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755138AbdDLTd5 (ORCPT ); Wed, 12 Apr 2017 15:33:57 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:35157 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755100AbdDLTd4 (ORCPT ); Wed, 12 Apr 2017 15:33:56 -0400 Received: by mail-wm0-f67.google.com with SMTP id d79so8562697wmi.2 for ; Wed, 12 Apr 2017 12:33:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QiYj1lCDZLHBOdU1H8u15vdpzjNNso73vv/bs+24ZHw=; b=nbVI1Vdbx1WFZlJd8t1YhhFLv/3+unlor7ylDY9WtyoUnN2nis1bC/W8nFc+A7NX+M bFIXGKDhcCRotz2f/gebOOBTYPY3nAyMxMRk8mWeqzYpeyHXC+mpcdYGCx57Kw0RHtqV avL8neigMsZW5KbI7o5U4Le+3lVu4nY415+xp76SmVL7lL/xiRIVP68uFIlXbIs/hbud SyDo/b77n4qV2aGgWqPB4n+F24NBIb9SebB3IYFrHO+Obmyr0zXZLL3AffFXLkifDXuB ybuYKn6ON4dKNHTInh9ODbGdSrNrKjvDsM/rPjiUoNvfopQiAlHIuizHqx2YQiMd8zuX W5MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QiYj1lCDZLHBOdU1H8u15vdpzjNNso73vv/bs+24ZHw=; b=tS9gGThInJvWUmf4k7DMMkHyjPq2IH5HAunXWMcSdP02CFYAyntNpnXb/Ct+4sMqzM 3qGXPWh1v5+da8sxNFIzfDQx7yMmYZStvJW1tUq2oxGGKujZlD8qSsTAbx6FLOogTBPT wmEJSKh8Bqg7SpbOidcCdTbuBvPUNWwDRkLvTqcyYcmtEzdQxn2rOWcEbF1oHai2Ul96 SAfDIGFJL/GVg8Bm8MJd7QJ2mjUoS1DUsdYHSkkLskZpHP01wb4o9PYQFhaVYoB2Xn/L 0Yny6WRuFamwRLmgAoDZDD+M3FPps2fUZDWQSrd6pdqnxmbDdxS2MWu7KO9XHRvZnTnB btxA== X-Gm-Message-State: AN3rC/6ZmZyCBhsJBQLLNoqeF1hmGYyIYNGDlgXBF8Df3JNLUwVB1/S8 Z/KXpFOo2366lw== X-Received: by 10.28.50.195 with SMTP id y186mr20445165wmy.5.1492025635001; Wed, 12 Apr 2017 12:33:55 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:8b2:dc00:6c54:829e:388a:2472]) by smtp.gmail.com with ESMTPSA id h20sm7733401wmd.29.2017.04.12.12.33.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Apr 2017 12:33:54 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Christopher Li , Luc Van Oostenryck Subject: [PATCH 3/6] avoid useless compare with zero Date: Wed, 12 Apr 2017 21:33:41 +0200 Message-Id: <20170412193344.95935-4-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170412193344.95935-1-luc.vanoostenryck@gmail.com> References: <20170412193344.95935-1-luc.vanoostenryck@gmail.com> Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The boolean operators '||' and '&&' need to have their operands first compared against zero. However, this is not needed if the operands is already a boolean, for example because it's already the result of another previous such operation. For example, the following expression: int a, b, c; ... a || b || c ... is linearized and simplified to: setne.1 %r2 <- %arg1, $0 setne.1 %r4 <- %arg2, $0 or-bool.1 %r5 <- %r2, %r4 setne.1 %r7 <- %r5, $0 setne.1 %r9 <- %arg3, $0 or-bool.1 %r10 <- %r7, %r9 but the 3rd 'setne' is useless since %r5 is already a boolean value. It can thus be further simplified to: setne.1 %r2 <- %arg1, $0 setne.1 %r4 <- %arg2, $0 or-bool.1 %r5 <- %r2, %r4 setne.1 %r9 <- %arg3, $0 or-bool.1 %r10 <- %r5, %r9 Change this by removing such comparisons if the operand is already a boolean (its size is 1). Signed-off-by: Luc Van Oostenryck --- simplify.c | 3 ++- validation/optim/bool-context-fp.c | 6 ++---- validation/optim/bool-simplify2.c | 11 +++++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 validation/optim/bool-simplify2.c diff --git a/simplify.c b/simplify.c index 09d7ae056..30bbc9b99 100644 --- a/simplify.c +++ b/simplify.c @@ -462,7 +462,8 @@ static int simplify_seteq_setne(struct instruction *insn, long long value) return REPEAT_CSE; default: - break; + if (!inverse && def->size == 1) + return replace_with_pseudo(insn, old); } return 0; } diff --git a/validation/optim/bool-context-fp.c b/validation/optim/bool-context-fp.c index 6b3e8d181..2f15fe94d 100644 --- a/validation/optim/bool-context-fp.c +++ b/validation/optim/bool-context-fp.c @@ -54,8 +54,7 @@ bfior: fcmpune.1 %r20 <- %arg1, %r19 fcmpune.1 %r23 <- %arg2, %r19 or-bool.1 %r24 <- %r23, %r20 - setne.1 %r26 <- %r24, $0 - ret.1 %r26 + ret.1 %r24 ifior: @@ -76,8 +75,7 @@ bfand: fcmpune.1 %r39 <- %arg1, %r38 fcmpune.1 %r42 <- %arg2, %r38 and-bool.1 %r43 <- %r42, %r39 - setne.1 %r45 <- %r43, $0 - ret.1 %r45 + ret.1 %r43 ifand: diff --git a/validation/optim/bool-simplify2.c b/validation/optim/bool-simplify2.c new file mode 100644 index 000000000..caa5af053 --- /dev/null +++ b/validation/optim/bool-simplify2.c @@ -0,0 +1,11 @@ +static int foo(int a, int b, int c) +{ + return a || b || c; +} + +/* + * check-name: bool-simplify2 + * check-command: test-linearize $file + * check-output-ignore + * check-output-pattern-3-times: setne\\. + */