re PR middle-end/70920 (if ((intptr_t)ptr == 0) doesn't get simplified to if (ptr == 0))
2016-07-26 Richard Biener <rguenther@suse.de> Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR middle-end/70920 * match.pd ((intptr)x eq/ne CST to x eq/ne (typeof x) CST): New pattern. testsuite/ * gcc.dg/pr70920-1.c: New test-case. * gcc.dg/pr70902-2.c: Likewise. * gcc.dg/pr70920-3.c: Likewise. * gcc.dg/pr70920-4.c: Likewise * gcc.dg/tree-ssa/ssa-dom-branch-1.c: Change scan-tree-dump-times to 2 instead of 3. Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> From-SVN: r238754
This commit is contained in:
parent
c4f820552a
commit
8f63caf682
@ -1,3 +1,10 @@
|
||||
2016-07-26 Richard Biener <rguenther@suse.de>
|
||||
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||
|
||||
PR middle-end/70920
|
||||
* match.pd ((intptr)x eq/ne CST to x eq/ne (typeof x) CST): New
|
||||
pattern.
|
||||
|
||||
2016-07-26 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
|
||||
|
||||
* tree-ssa-structalias.c (struct scc_info): Change types of
|
||||
|
@ -2513,6 +2513,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
||||
&& ptrs_compare_unequal (@0, @1))
|
||||
{ neeq == EQ_EXPR ? boolean_false_node : boolean_true_node; })))
|
||||
|
||||
/* PR70920: Transform (intptr_t)x eq/ne CST to x eq/ne (typeof x) CST.
|
||||
and (typeof ptr_cst) x eq/ne ptr_cst to x eq/ne (typeof x) CST */
|
||||
(for cmp (ne eq)
|
||||
(simplify
|
||||
(cmp (convert @0) INTEGER_CST@1)
|
||||
(if ((POINTER_TYPE_P (TREE_TYPE (@0)) && INTEGRAL_TYPE_P (TREE_TYPE (@1)))
|
||||
|| (INTEGRAL_TYPE_P (TREE_TYPE (@0)) && POINTER_TYPE_P (TREE_TYPE (@1))))
|
||||
(cmp @0 (convert @1)))))
|
||||
|
||||
/* Non-equality compare simplifications from fold_binary */
|
||||
(for cmp (lt gt le ge)
|
||||
/* Comparisons with the highest or lowest possible integer of
|
||||
|
@ -1,3 +1,14 @@
|
||||
2016-07-26 Richard Biener <rguenther@suse.de>
|
||||
Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||
|
||||
PR middle-end/70920
|
||||
* gcc.dg/pr70920-1.c: New test-case.
|
||||
* gcc.dg/pr70902-2.c: Likewise.
|
||||
* gcc.dg/pr70920-3.c: Likewise.
|
||||
* gcc.dg/pr70920-4.c: Likewise
|
||||
* gcc.dg/tree-ssa/ssa-dom-branch-1.c: Change scan-tree-dump-times to
|
||||
2 instead of 3.
|
||||
|
||||
2016-07-25 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
* gcc.c-torture/execute/pr71494.c: Require label_values.
|
||||
|
20
gcc/testsuite/gcc.dg/pr70920-1.c
Normal file
20
gcc/testsuite/gcc.dg/pr70920-1.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdump-tree-gimple" } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void f1();
|
||||
void f2();
|
||||
|
||||
void
|
||||
foo (int *a)
|
||||
{
|
||||
if ((intptr_t) a == 0)
|
||||
{
|
||||
f1 ();
|
||||
if (a)
|
||||
f2 ();
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "if \\(a == 0B\\)" "gimple" } } */
|
21
gcc/testsuite/gcc.dg/pr70920-2.c
Normal file
21
gcc/testsuite/gcc.dg/pr70920-2.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-forwprop-details" } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void f1();
|
||||
void f2();
|
||||
|
||||
void
|
||||
foo (int *a)
|
||||
{
|
||||
int cst = 0;
|
||||
if ((intptr_t) a == cst)
|
||||
{
|
||||
f1 ();
|
||||
if (a)
|
||||
f2 ();
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "gimple_simplified to if \\(a_\[0-9\]*\\(D\\) == 0B\\)" "forwprop1" } } */
|
20
gcc/testsuite/gcc.dg/pr70920-3.c
Normal file
20
gcc/testsuite/gcc.dg/pr70920-3.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdump-tree-gimple -Wno-int-to-pointer-cast" } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void f1();
|
||||
void f2();
|
||||
|
||||
void
|
||||
foo (int a)
|
||||
{
|
||||
if ((int *) a == 0)
|
||||
{
|
||||
f1 ();
|
||||
if (a)
|
||||
f2 ();
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "if \\(a == 0\\)" "gimple" } } */
|
21
gcc/testsuite/gcc.dg/pr70920-4.c
Normal file
21
gcc/testsuite/gcc.dg/pr70920-4.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-ccp-details -Wno-int-to-pointer-cast" } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void f1();
|
||||
void f2();
|
||||
|
||||
void
|
||||
foo (int a)
|
||||
{
|
||||
void *cst = 0;
|
||||
if ((int *) a == cst)
|
||||
{
|
||||
f1 ();
|
||||
if (a)
|
||||
f2 ();
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "gimple_simplified to if \\(_\[0-9\]* == 0\\)" "ccp1" } } */
|
@ -19,9 +19,9 @@ try_combine (rtx i1, rtx newpat)
|
||||
else if (i1 && foo ());
|
||||
}
|
||||
|
||||
/* There should be three tests against i1. Two from the hash table
|
||||
/* There should be two tests against i1. One from the hash table
|
||||
dumps, one in the code itself. */
|
||||
/* { dg-final { scan-tree-dump-times "if .i1_" 3 "dom2"} } */
|
||||
/* { dg-final { scan-tree-dump-times "if .i1_" 2 "dom2"} } */
|
||||
|
||||
/* There should be no actual jump threads realized by DOM. The
|
||||
legitimize jump threads are handled in VRP and those discovered
|
||||
|
Loading…
Reference in New Issue
Block a user