Commit b2f06c39 by Ian Lance Taylor Committed by Ian Lance Taylor

fold-const.c (pointer_may_wrap_p): Call int_size_in_bytes rather than size_in_bytes.

./:	* fold-const.c (pointer_may_wrap_p): Call int_size_in_bytes rather
	than size_in_bytes.
testsuite/:
	* gcc.c-torture/compile/20080419-1.c: New test.

From-SVN: r134566
parent aafc759a
2008-04-22 Ian Lance Taylor <iant@google.com>
* fold-const.c (pointer_may_wrap_p): Call int_size_in_bytes rather
than size_in_bytes.
2008-04-22 Pat Haugen <pthaugen@us.ibm.com>
* config/rs6000/rs6000.c (rs6000_register_move_cost): Increase cost
......
......@@ -8401,9 +8401,8 @@ maybe_canonicalize_comparison (enum tree_code code, tree type,
static bool
pointer_may_wrap_p (tree base, tree offset, HOST_WIDE_INT bitpos)
{
tree size;
unsigned HOST_WIDE_INT offset_low, total_low;
HOST_WIDE_INT offset_high, total_high;
HOST_WIDE_INT size, offset_high, total_high;
if (!POINTER_TYPE_P (TREE_TYPE (base)))
return true;
......@@ -8411,21 +8410,6 @@ pointer_may_wrap_p (tree base, tree offset, HOST_WIDE_INT bitpos)
if (bitpos < 0)
return true;
size = size_in_bytes (TREE_TYPE (TREE_TYPE (base)));
if (size == NULL_TREE || TREE_CODE (size) != INTEGER_CST)
return true;
/* We can do slightly better for SIZE if we have an ADDR_EXPR of an
array. */
if (TREE_CODE (base) == ADDR_EXPR)
{
tree base_size = size_in_bytes (TREE_TYPE (TREE_OPERAND (base, 0)));
if (base_size != NULL_TREE
&& TREE_CODE (base_size) == INTEGER_CST
&& INT_CST_LT_UNSIGNED (size, base_size))
size = base_size;
}
if (offset == NULL_TREE)
{
offset_low = 0;
......@@ -8445,13 +8429,25 @@ pointer_may_wrap_p (tree base, tree offset, HOST_WIDE_INT bitpos)
true))
return true;
if ((unsigned HOST_WIDE_INT) total_high
< (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (size))
return false;
if ((unsigned HOST_WIDE_INT) total_high
> (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (size))
if (total_high != 0)
return true;
return total_low > TREE_INT_CST_LOW (size);
size = int_size_in_bytes (TREE_TYPE (TREE_TYPE (base)));
if (size <= 0)
return true;
/* We can do slightly better for SIZE if we have an ADDR_EXPR of an
array. */
if (TREE_CODE (base) == ADDR_EXPR)
{
HOST_WIDE_INT base_size;
base_size = int_size_in_bytes (TREE_TYPE (TREE_OPERAND (base, 0)));
if (base_size > 0 && size < base_size)
size = base_size;
}
return total_low > (unsigned HOST_WIDE_INT) size;
}
/* Subroutine of fold_binary. This routine performs all of the
......
2008-04-22 Ian Lance Taylor <iant@google.com>
* gcc.c-torture/compile/20080419-1.c: New test.
2008-04-22 Kris Van Hees <kris.van.hees@oracle.com>
PR testsuite/35981
extern void *f();
void dmi_scan_machine(void) {
char *p = f(), *q;
for (q = p; q < p + 10; q++)
;
}
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