From patchwork Sat Jun 20 07:12:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kugan Vivekanandarajah X-Patchwork-Id: 486970 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 66CFD1401AF for ; Sat, 20 Jun 2015 17:12:24 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=i0Ts9XIR; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:subject:content-type; q= dns; s=default; b=Go3LQUXL2WsLvOXLFSEyT2jzh5WwK/CTUsyMhgRoedBbgz lHWZ4j3jezlntdThvYdLl1x4bLVT+pZHvlAzznIXiVum6jrrhRK9buaM+Uw7LFl3 76GaQpERcpfQUxwi2JNXWCnxPvRCL8Y7f9Nwmt+3ilir7cG13tT/sYbKbqtIc= 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 :message-id:date:from:mime-version:to:subject:content-type; s= default; bh=C2CKvG9HczOTzBSdVSU/YDpmr2A=; b=i0Ts9XIR6lR73GcmB+qs TIhS/Z/eSJI25Jklpjcn10jmchqgNUWXxwzfNOgb2nyxJkKfWLLAZElC+FPakFn+ axvKn1UYC2UU57s4RXsCs//4JPIZ1zT66pyPhlfMkmWaY/Vyd95F3mFZhcLdMFNN W8qYGkk929/PuoswMJwc/9k= Received: (qmail 100690 invoked by alias); 20 Jun 2015 07:12:16 -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 100676 invoked by uid 89); 20 Jun 2015 07:12:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f170.google.com Received: from mail-pd0-f170.google.com (HELO mail-pd0-f170.google.com) (209.85.192.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sat, 20 Jun 2015 07:12:15 +0000 Received: by pdbci14 with SMTP id ci14so46323392pdb.2 for ; Sat, 20 Jun 2015 00:12:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :subject:content-type; bh=/zOto6xDeqXBRa2q3UwDYL0p9wtyCe2LYQ+Vbu/sdUo=; b=X08GgyrrX9bIc/Xs72DtDxOfMviXLByyAJ3ORpl3RZD8yZ/F1XZTlTNhWSshncv1u3 ZN/NYBphTJey7ckcDVqupUDvHR8whPbbyjsnS1SNeNxrIBJ8jgE9V+pcVqkpXc9CXb0W WCDJ4jme7CL6TFEnzJHw7JMMn4rvgrx6eSdws7o48HBe2xHUm8TersVrOUd4mtaCQAJr r9bikDau78ymxbX8Mh/keGxxvZsp3R2B+un0+jAu20Y/z3XR1/j6hqBtwH7HbCehhPNZ oTg0IrSFNrYwydNBikdYKFlfJdVDX2zqLDTrkW1KTmu1r8OyJ5Dd5L7w+OcYIbtqDNSU ZdZw== X-Gm-Message-State: ALoCoQlzHx+6jLytSpsMskld/zrJ3XPuSh27j42gaKqtuoXa5UWVKCYWBqOfY7lOwVqSwmWK/tzJ X-Received: by 10.70.130.35 with SMTP id ob3mr39252984pdb.64.1434784333197; Sat, 20 Jun 2015 00:12:13 -0700 (PDT) Received: from [10.1.1.6] (58-6-183-210.dyn.iinet.net.au. [58.6.183.210]) by mx.google.com with ESMTPSA id kk6sm13231421pdb.94.2015.06.20.00.12.11 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 20 Jun 2015 00:12:12 -0700 (PDT) Message-ID: <55851248.3010408@linaro.org> Date: Sat, 20 Jun 2015 17:12:08 +1000 From: Kugan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" Subject: [VRP] Improve value ranges for unsigned division X-IsSubscribed: yes As discussed in PR64130, this patch improves the VRP value ranges for unsigned division. Bootstrapped and regression tested on x86_64-linux-gnu and regression tested on arm-none-linux-gnu with no new regression. Is this OK for trunk? Thanks, Kugan gcc/ChangeLog: 2015-06-20 Kugan Vivekanandarajah PR middle-end/64130 * tree-vrp.c (extract_range_from_binary_expr_1): For unsigned division, compute minimum when value ranges for dividend and divisor are available. gcc/testsuite/ChangeLog: 2015-06-20 Kugan Vivekanandarajah PR middle-end/64130 * gcc.dg/tree-ssa/pr64130.c: New test. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c b/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c index e69de29..9e96abb 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr64130.c @@ -0,0 +1,11 @@ + +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-vrp1" } */ + +int funsigned(unsigned a) +{ + return 0x1ffffffffL / a == 0; +} + +/* { dg-final { scan-tree-dump ": \\\[2, 8589934591\\\]" "vrp1" } } */ + diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index b517363..2e1c84b 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -3158,7 +3158,16 @@ extract_range_from_binary_expr_1 (value_range_t *vr, type = VR_VARYING; cmp = compare_values (vr0.min, zero); if (cmp == 1) - min = zero; + { + /* For unsigned division when value ranges for dividend + and divisor are available. */ + if (vr1.type == VR_RANGE + && !symbolic_range_p (&vr0) + && !symbolic_range_p (&vr1)) + min = int_const_binop (code, vr0.min, vr1.max); + else + min = zero; + } else if (cmp == 0 || cmp == -1) min = vr0.min; else