Commit 9179ed9d by Richard Guenther Committed by Richard Biener

re PR middle-end/53144 (PPRE infinite loop)

2012-05-03  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/53144
	* tree-ssa-sccvn.c (vn_reference_lookup_or_insert_constant_for_pieces):
	Rename to ...
	(vn_reference_lookup_or_insert_for_pieces): ... this.  Properly deal
	with SSA name values.
	(vn_reference_lookup_3): Adjust callers.

	* gcc.dg/torture/pr53144.c: New testcase.

From-SVN: r187078
parent d130f146
2012-05-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53144
* tree-ssa-sccvn.c (vn_reference_lookup_or_insert_constant_for_pieces):
Rename to ...
(vn_reference_lookup_or_insert_for_pieces): ... this. Properly deal
with SSA name values.
(vn_reference_lookup_3): Adjust callers.
2012-05-03 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
* config/i386/driver-i386.c (host_detect_local_cpu): Reset
......
2012-05-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53144
* gcc.dg/torture/pr53144.c: New testcase.
2012-05-03 Tobias Burnus <burnus@net-b.de>
PR fortran/52864
......
/* { dg-do compile } */
typedef unsigned char __attribute__((vector_size(4))) uvec;
int main (int argc, char *argv[]) {
int i;
int x = 0;
uvec uc0 = (uvec) {argc, 1, 2, 10};
unsigned char uc1[4] = {0, 3, 2, 200};
signed char ucg[4] = {1, 0, 0, 0 };
signed char ucl[4] = {0, 1, 0, 1 };
#define uc0_ ((unsigned char *)&uc0)
for (i = 0; i < 4; i ++) {
x |= ucg[i] != (uc0_[i] > uc1[i]);
x |= ucl[i] != (uc0_[i] < uc1[i]);
}
return x;
}
......@@ -1348,18 +1348,19 @@ vn_reference_lookup_2 (ao_ref *op ATTRIBUTE_UNUSED, tree vuse, void *vr_)
/* Lookup an existing or insert a new vn_reference entry into the
value table for the VUSE, SET, TYPE, OPERANDS reference which
has the constant value CST. */
has the value VALUE which is either a constant or an SSA name. */
static vn_reference_t
vn_reference_lookup_or_insert_constant_for_pieces (tree vuse,
alias_set_type set,
tree type,
VEC (vn_reference_op_s,
heap) *operands,
tree cst)
vn_reference_lookup_or_insert_for_pieces (tree vuse,
alias_set_type set,
tree type,
VEC (vn_reference_op_s,
heap) *operands,
tree value)
{
struct vn_reference_s vr1;
vn_reference_t result;
unsigned value_id;
vr1.vuse = vuse;
vr1.operands = operands;
vr1.type = type;
......@@ -1367,10 +1368,13 @@ vn_reference_lookup_or_insert_constant_for_pieces (tree vuse,
vr1.hashcode = vn_reference_compute_hash (&vr1);
if (vn_reference_lookup_1 (&vr1, &result))
return result;
if (TREE_CODE (value) == SSA_NAME)
value_id = VN_INFO (value)->value_id;
else
value_id = get_or_alloc_constant_value_id (value);
return vn_reference_insert_pieces (vuse, set, type,
VEC_copy (vn_reference_op_s, heap,
operands), cst,
get_or_alloc_constant_value_id (cst));
operands), value, value_id);
}
/* Callback for walk_non_aliased_vuses. Tries to perform a lookup
......@@ -1452,7 +1456,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
&& offset2 + size2 >= offset + maxsize)
{
tree val = build_zero_cst (vr->type);
return vn_reference_lookup_or_insert_constant_for_pieces
return vn_reference_lookup_or_insert_for_pieces
(vuse, vr->set, vr->type, vr->operands, val);
}
}
......@@ -1473,7 +1477,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
&& offset2 + size2 >= offset + maxsize)
{
tree val = build_zero_cst (vr->type);
return vn_reference_lookup_or_insert_constant_for_pieces
return vn_reference_lookup_or_insert_for_pieces
(vuse, vr->set, vr->type, vr->operands, val);
}
}
......@@ -1514,7 +1518,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
/ BITS_PER_UNIT),
ref->size / BITS_PER_UNIT);
if (val)
return vn_reference_lookup_or_insert_constant_for_pieces
return vn_reference_lookup_or_insert_for_pieces
(vuse, vr->set, vr->type, vr->operands, val);
}
}
......@@ -1568,7 +1572,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
}
}
if (val)
return vn_reference_lookup_or_insert_constant_for_pieces
return vn_reference_lookup_or_insert_for_pieces
(vuse, vr->set, vr->type, vr->operands, val);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment