[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-10-28 Thread pinskia at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522

Andrew Pinski pinskia at gcc dot gnu.org changed:

   What|Removed |Added

   Keywords||missed-optimization
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2010.10.28 20:41:46
 Ever Confirmed|0   |1

--- Comment #12 from Andrew Pinski pinskia at gcc dot gnu.org 2010-10-28 
20:41:46 UTC ---
Confirmed.


[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-04 Thread rguenther at suse dot de


--- Comment #8 from rguenther at suse dot de  2010-09-04 08:29 ---
Subject: Re:  VRP misses oppurtunity for statement
 folding.

On Fri, 3 Sep 2010, hubicka at gcc dot gnu dot org wrote:

 --- Comment #7 from hubicka at gcc dot gnu dot org  2010-09-03 20:28 
 ---
 In #5 the expression is created by PRE via create_expression_by_pieces that
 uses normal fold that is not able of constant variable folding. The statement
 does not get folded later and survives.  I guess one can fold all statements 
 in
 commit_edge_insertions but it seems by symptomatic?

You need to enhance fully_constant_vn_reference_p.

Richard.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-04 Thread hubicka at gcc dot gnu dot org


--- Comment #9 from hubicka at gcc dot gnu dot org  2010-09-04 13:51 ---
Hi,
thanks.  In meantime I made tree-ssa-pre to fold statements it produces and it
gets me to bootstrapland with sanity check in expr.c except for Ada (with the
patches I sent so far)

So it seems that I need to basically duplicate all logic for initializer
folding from tree-ssa-ccp.c into this function, right? I guess it makes sense,
but it is all quite ugly.

On VN side, i wondered if we can retire more of expand this way. For example
dojump knows that:
a = b ror x;
if (a != 0)
can be folded into:
if (b != 0)
(ror is rotation).  I guess we should do this kind of tricks in VN instead?

Honza


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-04 Thread rguenther at suse dot de


--- Comment #10 from rguenther at suse dot de  2010-09-04 14:11 ---
Subject: Re:  VRP misses oppurtunity for statement
 folding.

On Sat, 4 Sep 2010, hubicka at gcc dot gnu dot org wrote:

 --- Comment #9 from hubicka at gcc dot gnu dot org  2010-09-04 13:51 
 ---
 Hi,
 thanks.  In meantime I made tree-ssa-pre to fold statements it produces and it
 gets me to bootstrapland with sanity check in expr.c except for Ada (with the
 patches I sent so far)

Well - that's a workaround and will cause us to miss PRE because we do
not fold during translation of expressions.  So I wouldn't go down that
route.

 So it seems that I need to basically duplicate all logic for initializer
 folding from tree-ssa-ccp.c into this function, right? I guess it makes sense,
 but it is all quite ugly.

Yes ;)

 On VN side, i wondered if we can retire more of expand this way. For example
 dojump knows that:
 a = b ror x;
 if (a != 0)
 can be folded into:
 if (b != 0)
 (ror is rotation).  I guess we should do this kind of tricks in VN instead?

Well ... it's not that easy (that's not CSE but tree-combining, so
the specific thing would fit to forwprop).

Richard.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-04 Thread hubicka at gcc dot gnu dot org


--- Comment #11 from hubicka at gcc dot gnu dot org  2010-09-04 18:00 
---
Created an attachment (id=21700)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21700action=view)
proposed fix for sccvn

Well, this is patch I am currently testing. At least small part is shared in
between tree-ssa-ccp (probably should go into gimple-fold) and VN.
I am not sure how much of other initializer folding I need to borrow - i.e.
folding of var_decl into its decl_initial, handling of component_refs and such.

Also the tree-ssa-ccp code seems quite incomplette, it won't fold array with
incomplette initializer for example because it won't find the matching item. 
Probably worth to fix.

Honza


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #1 from hubicka at gcc dot gnu dot org  2010-09-03 15:59 ---
Created an attachment (id=21684)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21684action=view)
testcase


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #2 from hubicka at gcc dot gnu dot org  2010-09-03 16:33 ---
OK, the problem seems to be that fold_stmt seems to make no serious attempt to
fold constant references.  There is some code in maybe_fold_reference that
seems to partly duplicate fold_const_aggregate_ref however.  What is reason for
that?

The following patch solves the problem, I am looking what other testcases I can
find.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #3 from hubicka at gcc dot gnu dot org  2010-09-03 16:34 ---
Created an attachment (id=21685)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21685action=view)
patch for better folding


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #4 from hubicka at gcc dot gnu dot org  2010-09-03 20:04 ---
A related testcase where we fail to fold fundamentals[0]
typedef union tree_node *tree;
enum tree_code
{
  OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, POINTER_TYPE, FIXED_POINT_TYPE,
};
struct tree_base
{
  unsigned public_flag:1;
};
struct tree_decl_with_vis
{
  unsigned comdat_flag:1;
};
union tree_node
{
  struct tree_base base;
  struct tree_decl_with_vis decl_with_vis;
};
enum tree_index
{
TI_LONG_DOUBLE_PTR_TYPE, TI_INTEGER_PTR_TYPE, TI_VOID_TYPE, TI_PTR_TYPE,
TI_VA_LIST_FPR_COUNTER_FIELD, TI_BOOLEAN_TYPE, TI_FILEPTR_TYPE,
TI_CURRENT_TARGET_PRAGMA, TI_CURRENT_OPTIMIZE_PRAGMA, TI_MAX
};
extern tree global_trees[TI_MAX];
emit_support_tinfos (void)
{
  static tree *const fundamentals[] = {
global_trees[TI_VOID_TYPE], global_trees[TI_BOOLEAN_TYPE],
  };
  int ix;
  for (ix = 0; fundamentals[ix]; ix++)
{
{
  tree tinfo;
{
  ((void) (!(((tinfo)-base.public_flag)  !(__extension__ (
  {
 
__typeof
 
(tinfo)
  __t
  =
 
(tinfo);
  __t;}
  )-decl_with_vis.
  comdat_flag)) ?
   fancy_abort (../../gcc/cp/rtti.c, 1529,
__FUNCTION__), 0 : 0));
}
}
}
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #5 from hubicka at gcc dot gnu dot org  2010-09-03 20:09 ---
And here we fail to fold messages[1] created by PRE
enum
{
  ERROR_OK, ERROR_UNKNOWN, 
  ERROR_NUM
};
enum
{ __LC_CTYPE = 0, __LC_NUMERIC = 1, __LC_TIME = 2, __LC_COLLATE =
3, __LC_MONETARY = 4, __LC_MESSAGES = 5, __LC_ALL = 6, __LC_PAPER =
10, __LC_MEASUREMENT = 11, __LC_IDENTIFICATION = 12 };
static const char *const _messages[] = {
  no error, unknown error, Internal error: unknown reason,
};
elf_errmsg (int err)
{
  if (err  0 || err = ERROR_NUM || _messages[err] == ((void *) 0))
{
  err = ERROR_UNKNOWN;
}
  return _messages[err];
}


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #6 from hubicka at gcc dot gnu dot org  2010-09-03 20:12 ---
In testcase from comment #4 the problem is that value in DECL_INITIAL is not in
the form acceptable for gimple_min_invariant.  Have patch.
In testcase from comment #5 we never try to fold it.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522



[Bug tree-optimization/45522] VRP misses oppurtunity for statement folding.

2010-09-03 Thread hubicka at gcc dot gnu dot org


--- Comment #7 from hubicka at gcc dot gnu dot org  2010-09-03 20:28 ---
In #5 the expression is created by PRE via create_expression_by_pieces that
uses normal fold that is not able of constant variable folding. The statement
does not get folded later and survives.  I guess one can fold all statements in
commit_edge_insertions but it seems by symptomatic?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45522