From: Richard Guenther Date: Tue, 15 Mar 2011 09:49:33 +0000 (+0000) Subject: re PR tree-optimization/48031 (gcc.c-torture/compile/pr42956.c ICEs gcc on m68k-linux... X-Git-Tag: upstream/12.2.0~85932 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=17dea42fc45256b06cb19bc36b18e77fdc0f20a6;p=platform%2Fupstream%2Fgcc.git re PR tree-optimization/48031 (gcc.c-torture/compile/pr42956.c ICEs gcc on m68k-linux, ivopts related?) 2011-03-15 Richard Guenther PR middle-end/48031 * fold-const.c (fold_indirect_ref_1): Do not create new variable-sized or variable-indexed array accesses when in gimple form. From-SVN: r170983 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aae2ea0..94e8260 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2011-03-15 Richard Guenther + PR middle-end/48031 + * fold-const.c (fold_indirect_ref_1): Do not create new variable-sized + or variable-indexed array accesses when in gimple form. + +2011-03-15 Richard Guenther + * config/i386/i386.c (ix86_emit_swdivsf): Implement more efficiently. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 354aa4f..5d92e0d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -15562,12 +15562,17 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0) } /* *(foo *)&fooarray => fooarray[0] */ else if (TREE_CODE (optype) == ARRAY_TYPE - && type == TREE_TYPE (optype)) + && type == TREE_TYPE (optype) + && (!in_gimple_form + || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)) { tree type_domain = TYPE_DOMAIN (optype); tree min_val = size_zero_node; if (type_domain && TYPE_MIN_VALUE (type_domain)) min_val = TYPE_MIN_VALUE (type_domain); + if (in_gimple_form + && TREE_CODE (min_val) != INTEGER_CST) + return NULL_TREE; return build4_loc (loc, ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE); } @@ -15641,7 +15646,9 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0) /* *(foo *)fooarrptr => (*fooarrptr)[0] */ if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE - && type == TREE_TYPE (TREE_TYPE (subtype))) + && type == TREE_TYPE (TREE_TYPE (subtype)) + && (!in_gimple_form + || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)) { tree type_domain; tree min_val = size_zero_node; @@ -15649,6 +15656,9 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0) type_domain = TYPE_DOMAIN (TREE_TYPE (sub)); if (type_domain && TYPE_MIN_VALUE (type_domain)) min_val = TYPE_MIN_VALUE (type_domain); + if (in_gimple_form + && TREE_CODE (min_val) != INTEGER_CST) + return NULL_TREE; return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE); }