[patch] Fix failure of ACATS cc3601a

Eric Botcazou ebotcazou@adacore.com
Thu Mar 31 15:38:00 GMT 2011


Hi,

the ACATS test cc3601a started to fail recently at -O2 after the various tweaks 
to the optimizer.  This is an assertion failure in the gimplifier invoked from 
PRE because of a dangling PLACEHOLDER_EXPR in operand #2 of an ARRAY_REF.

CCP2 turns the ARRAY_REF:

  D.2774_394 = MEM[(boolean[(size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0:<PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->UB0 >= <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0 ? (size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->UB0 : (size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0 + -1] *)&ab1][D.2776_392]{lb: D.2758_393 sz: 
1};

into:

  D.2774_394 = MEM[(boolean[(size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0:<PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->UB0 >= <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0 ? (size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->UB0 : (size_type) <PLACEHOLDER_EXPR struct 
opt16__ab___XUP>.P_BOUNDS->LB0 + -1] *)&ab1][D.2776_392]{lb: 0 sz: 1};

i.e. it computes that operand #2 is 0.  Later PRE re-creates the reference "by 
pieces" and explicitly drops the 0:

	if (genop2)
	  {
	    /* Drop zero minimum index.  */
	    if (tree_int_cst_equal (genop2, integer_zero_node))
	      genop2 = NULL_TREE;

so the gimplifier re-populates it, bringing back the PLACEHOLDER_EXPR.

Fixed by not dropping the 0 in PRE.  Tested on i586-suse-linux, OK for the 
mainline?


2011-03-31  Eric Botcazou  <ebotcazou@adacore.com>

	* tree-ssa-pre.c (create_component_ref_by_pieces_1) <ARRAY_REF>:
	Drop a zero minimum index only if it is redundant.


2011-03-31  Eric Botcazou  <ebotcazou@adacore.com>

	* gnat.dg/opt16.adb: New test.


-- 
Eric Botcazou
-------------- next part --------------
A non-text attachment was scrubbed...
Name: p.diff
Type: text/x-diff
Size: 607 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20110331/43f7b2e2/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: opt16.adb
Type: text/x-adasrc
Size: 723 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20110331/43f7b2e2/attachment-0001.bin>


More information about the Gcc-patches mailing list