diff options
author | Richard Biener <rguenther@suse.de> | 2017-02-22 15:00:39 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-02-22 15:00:39 +0000 |
commit | 76dd203e1b51267cbb227a5e2ffab5f20a56f62d (patch) | |
tree | 9d81c3cc45d0d8e13bfcdf4a2aeeb876b47e10e0 | |
parent | a9c774d2ae7c0ae983aa33fd53d34ef054dbee5a (diff) | |
download | gcc-76dd203e1b51267cbb227a5e2ffab5f20a56f62d.zip gcc-76dd203e1b51267cbb227a5e2ffab5f20a56f62d.tar.gz gcc-76dd203e1b51267cbb227a5e2ffab5f20a56f62d.tar.bz2 |
re PR middle-end/79673 (GIMPLE verification fails when compiling code with __seg_gs)
2017-02-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/79673
* tree-ssa-pre.c (compute_avail): Use wide_int_to_tree to
convert the [TARGET_]MEM_REF offset INTEGER_CST, scrapping off
irrelevant address-space qualifiers and avoiding a
ADDR_SPACE_CONVERT_EXPR from fold_convert.
* gcc.target/i386/pr79673.c: New testcase.
From-SVN: r245649
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr79673.c | 12 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 16 |
4 files changed, 33 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa7a1cf..d920b6b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2017-02-22 Richard Biener <rguenther@suse.de> + PR tree-optimization/79673 + * tree-ssa-pre.c (compute_avail): Use wide_int_to_tree to + convert the [TARGET_]MEM_REF offset INTEGER_CST, scrapping off + irrelevant address-space qualifiers and avoiding a + ADDR_SPACE_CONVERT_EXPR from fold_convert. + +2017-02-22 Richard Biener <rguenther@suse.de> + PR tree-optimization/79666 * tree-vrp.c (extract_range_from_binary_expr_1): Make sure to not symbolically negate if that may introduce undefined diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af56482..5ba7d83 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2017-02-22 Richard Biener <rguenther@suse.de> + PR tree-optimization/79673 + * gcc.target/i386/pr79673.c: New testcase. + +2017-02-22 Richard Biener <rguenther@suse.de> + PR tree-optimization/79666 * gcc.dg/torture/pr79666.c: New testcase. diff --git a/gcc/testsuite/gcc.target/i386/pr79673.c b/gcc/testsuite/gcc.target/i386/pr79673.c new file mode 100644 index 0000000..2ca667b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr79673.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +void used(double x); +void usel(long x); +void test(int c) +{ + if (c) + used(*((double __seg_gs *) 0)); + else + usel(*((long __seg_gs *) 0)); +} diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 681c412..7fce0d3 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3986,21 +3986,21 @@ compute_avail (void) { ref->set = set; if (ref1->opcode == MEM_REF) - ref1->op0 = fold_convert (TREE_TYPE (ref2->op0), - ref1->op0); + ref1->op0 = wide_int_to_tree (TREE_TYPE (ref2->op0), + ref1->op0); else - ref1->op2 = fold_convert (TREE_TYPE (ref2->op2), - ref1->op2); + ref1->op2 = wide_int_to_tree (TREE_TYPE (ref2->op2), + ref1->op2); } else { ref->set = 0; if (ref1->opcode == MEM_REF) - ref1->op0 = fold_convert (ptr_type_node, - ref1->op0); + ref1->op0 = wide_int_to_tree (ptr_type_node, + ref1->op0); else - ref1->op2 = fold_convert (ptr_type_node, - ref1->op2); + ref1->op2 = wide_int_to_tree (ptr_type_node, + ref1->op2); } operands.release (); |