From patchwork Wed Apr 12 14:18:00 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: 9677567 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 3A2AD60325 for ; Wed, 12 Apr 2017 14:20:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 28F4E2867F for ; Wed, 12 Apr 2017 14:20:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1D4412868C; Wed, 12 Apr 2017 14:20:25 +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 784842867F for ; Wed, 12 Apr 2017 14:20:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753239AbdDLOUO (ORCPT ); Wed, 12 Apr 2017 10:20:14 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:35129 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753244AbdDLOUM (ORCPT ); Wed, 12 Apr 2017 10:20:12 -0400 Received: by mail-wr0-f194.google.com with SMTP id l44so4423193wrc.2 for ; Wed, 12 Apr 2017 07:20:11 -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=gXX9DPY+J5uc6JqZuTtxjRz4BWm2wtXAGlkCQbz0T6k=; b=gz+CLtsxCldKt4GfnKC1o0ILk8+EcMNCoMIaDceLsY7abLXqSooyZKkP6Tw6X8qHTl J++1XFvELUBkvg6QrnAKOAN8yArSt5mqhnFLKfigCmey4JR4jjKWZ5yT5DbvbMIEzkTb T3TJNXPrdmfLn1qN1PIGI4+rD8FGGCgQ7F7gk5MXcqmQJmVmRjs7QWp4zIe8HUaadejt aR52oDZswoNDmK3BKTCmdVgdsd182zhuihXadmZ3qZ4Ldq55Thd3SocJlR/khSoKbAvn +z3Cxewyr3/kZIKg2aVpWwcYb6/uJGkBREBAINkZ/4qS9RJ3ltMIopGeku2C5nJtVnCC 9Kxw== 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=gXX9DPY+J5uc6JqZuTtxjRz4BWm2wtXAGlkCQbz0T6k=; b=ReQS16avy5SAvaoOrk1OTz1q0WXBnuuObbfEQlWBX07O2Ytglyed8qLtmNGMJpe22i qJQwEi3FMoRi3kjChvZTofzAyZcVLxKyJdcIQAadvBULMDlk74wxXGatu0iysE4ILPth xfuq+4TnxQgnHJo9uAVUxSVJk6QFJo14oo+Xt6SnbGTGtm9wAfKCpA7GRM5uEQDbeu8H oAwhi4aDmprYYMvpHKBRnRnAQIPP4GNlQ1m20XKsozA8xSLCe1IJTGu2K8pcr7mUMf/Y 4hGOUXSbqpAft/25gzfcqrPh25Tbdvci08vKY+ErAKFrxvk+jtBP2sMWO45HefTALr6b 1/CQ== X-Gm-Message-State: AN3rC/77QHxh33pliL0XuxeRawztgNAOv/Sap1h6ml3S3EkE47Avw7YpM5So9ibcI00pSA== X-Received: by 10.223.146.98 with SMTP id 89mr3194250wrj.71.1492006810735; Wed, 12 Apr 2017 07:20:10 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:8b2:dc00:6c54:829e:388a:2472]) by smtp.gmail.com with ESMTPSA id j2sm8402914wrd.28.2017.04.12.07.20.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 12 Apr 2017 07:20:10 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Christopher Li , Luc Van Oostenryck Subject: [PATCH 1/3] simplify 'x | ~0' and 'x & ~0' Date: Wed, 12 Apr 2017 16:18:00 +0200 Message-Id: <20170412141802.81231-2-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170412141802.81231-1-luc.vanoostenryck@gmail.com> References: <20170412141802.81231-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 Signed-off-by: Luc Van Oostenryck --- simplify.c | 11 ++++++++++- validation/optim/bool-not-zero.c | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 validation/optim/bool-not-zero.c diff --git a/simplify.c b/simplify.c index 2286440e0..e4ccb6c5f 100644 --- a/simplify.c +++ b/simplify.c @@ -453,6 +453,8 @@ static int simplify_seteq_setne(struct instruction *insn, long long value) static int simplify_constant_rightside(struct instruction *insn) { long long value = insn->src2->value; + long long sbit = 1ULL << (insn->size - 1); + long long bits = sbit | (sbit - 1); switch (insn->opcode) { case OP_OR_BOOL: @@ -460,6 +462,11 @@ static int simplify_constant_rightside(struct instruction *insn) return replace_with_pseudo(insn, insn->src2); goto case_neutral_zero; + case OP_OR: + if ((value & bits) == bits) + return replace_with_pseudo(insn, insn->src2); + goto case_neutral_zero; + case OP_SUB: if (value) { insn->opcode = OP_ADD; @@ -468,7 +475,7 @@ static int simplify_constant_rightside(struct instruction *insn) } /* Fall through */ case OP_ADD: - case OP_OR: case OP_XOR: + case OP_XOR: case OP_SHL: case OP_LSR: case_neutral_zero: @@ -492,6 +499,8 @@ static int simplify_constant_rightside(struct instruction *insn) return replace_with_pseudo(insn, insn->src1); /* Fall through */ case OP_AND: + if ((value & bits) == bits) + return replace_with_pseudo(insn, insn->src1); if (!value) return replace_with_pseudo(insn, insn->src2); return 0; diff --git a/validation/optim/bool-not-zero.c b/validation/optim/bool-not-zero.c new file mode 100644 index 000000000..ce74705e8 --- /dev/null +++ b/validation/optim/bool-not-zero.c @@ -0,0 +1,22 @@ +int or_not0(int a) { return a | ~0; } +int and_not0(int a) { return a & ~0; } + +/* + * check-name: bool-not-zero + * check-command: test-linearize -Wno-decl $file + * + * check-output-start +or_not0: +.L0: + + ret.32 $0xffffffff + + +and_not0: +.L2: + + ret.32 %arg1 + + + * check-output-end + */