From: Anatoly Sokolov <aesok@post.ru>
To: Richard Guenther <richard.guenther@gmail.com>
Cc: gcc-patches@gcc.gnu.org, java-patches@gcc.gnu.org
Subject: Re[2]: Remove build_int_cst_wide_type function.
Date: Wed, 19 May 2010 20:00:00 -0000 [thread overview]
Message-ID: <1805129171.20100520000040@post.ru> (raw)
In-Reply-To: <n2w84fc9c001005071331t15ae9ce6o3dc3c09acd48af8d@mail.gmail.com>
Hello.
>> Index: gcc/dojump.c
>> ===================================================================
>> --- gcc/dojump.c (revision 159109)
>> +++ gcc/dojump.c (working copy)
>> @@ -539,10 +539,11 @@
>> && prefer_and_bit_test (TYPE_MODE (argtype),
>> TREE_INT_CST_LOW (shift)))
>> {
>> - unsigned HOST_WIDE_INT mask
>> - = (unsigned HOST_WIDE_INT) 1 << TREE_INT_CST_LOW (shift);
>> + double_int mask
>> + = double_int_setbit (double_int_zero,
>> + TREE_INT_CST_LOW (shift));
>> do_jump (build2 (BIT_AND_EXPR, argtype, arg,
>> - build_int_cst_wide_type (argtype, mask, 0)),
>> + double_int_to_tree (argtype, mask)),
> Use build_int_cstu instead and retain using HOST_WIDE_INTs. Btw,
> both build_int_cst and build_int_cstu should do proper sign/zero
> extension as the types precision may be lower than that of
> HOST_WIDE_INT.
> Ok with these changes.
Committed as.
* double-int.h (double_int_ior): New function.
* tree.h (build_int_cst_wide_type): Remove.
* tree.c (build_int_cst_wide_type): Remove.
* fold-const.c (native_interpret_int): Use double_int_to_tree instead
of build_int_cst_wide_type.
* stor-layout.c (set_sizetype): (Ditto.).
* dojump.c (do_jump): Use build_int_cstu instead of
build_int_cst_wide_type.
/java
* jcf-parse.c (get_constant): Use double_int_to_tree instead of
build_int_cst_wide_type
Index: gcc/java/jcf-parse.c
===================================================================
--- gcc/java/jcf-parse.c (revision 159566)
+++ gcc/java/jcf-parse.c (working copy)
@@ -1040,14 +1040,15 @@
}
case CONSTANT_Long:
{
- unsigned HOST_WIDE_INT num = JPOOL_UINT (jcf, index);
- unsigned HOST_WIDE_INT lo;
- HOST_WIDE_INT hi;
-
- lshift_double (num, 0, 32, 64, &lo, &hi, 0);
- num = JPOOL_UINT (jcf, index+1);
- add_double (lo, hi, num, 0, &lo, &hi);
- value = build_int_cst_wide_type (long_type_node, lo, hi);
+ unsigned HOST_WIDE_INT num;
+ double_int val;
+
+ num = JPOOL_UINT (jcf, index);
+ val = double_int_lshift (uhwi_to_double_int (num), 32, 64, false);
+ num = JPOOL_UINT (jcf, index + 1);
+ val = double_int_ior (val, uhwi_to_double_int (num));
+
+ value = double_int_to_tree (long_type_node, val);
break;
}
Index: gcc/tree.c
===================================================================
--- gcc/tree.c (revision 159566)
+++ gcc/tree.c (working copy)
@@ -1063,17 +1063,6 @@
return build_int_cst_wide (type, low1, hi);
}
-/* Create an INT_CST node of TYPE and value HI:LOW. The value is truncated
- and sign extended according to the value range of TYPE. */
-
-tree
-build_int_cst_wide_type (tree type,
- unsigned HOST_WIDE_INT low, HOST_WIDE_INT high)
-{
- fit_double_type (low, high, &low, &high, type);
- return build_int_cst_wide (type, low, high);
-}
-
/* Constructs tree in type TYPE from with value given by CST. Signedness
of CST is assumed to be the same as the signedness of TYPE. */
Index: gcc/tree.h
===================================================================
--- gcc/tree.h (revision 159566)
+++ gcc/tree.h (working copy)
@@ -4012,8 +4012,6 @@
extern tree build_int_cst (tree, HOST_WIDE_INT);
extern tree build_int_cst_type (tree, HOST_WIDE_INT);
extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
-extern tree build_int_cst_wide_type (tree,
- unsigned HOST_WIDE_INT, HOST_WIDE_INT);
extern tree build_vector (tree, tree);
extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);
extern tree build_constructor (tree, VEC(constructor_elt,gc) *);
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c (revision 159566)
+++ gcc/fold-const.c (working copy)
@@ -7408,13 +7408,14 @@
int total_bytes = GET_MODE_SIZE (TYPE_MODE (type));
int byte, offset, word, words;
unsigned char value;
- unsigned int HOST_WIDE_INT lo = 0;
- HOST_WIDE_INT hi = 0;
+ double_int result;
if (total_bytes > len)
return NULL_TREE;
if (total_bytes * BITS_PER_UNIT > 2 * HOST_BITS_PER_WIDE_INT)
return NULL_TREE;
+
+ result = double_int_zero;
words = total_bytes / UNITS_PER_WORD;
for (byte = 0; byte < total_bytes; byte++)
@@ -7436,13 +7437,13 @@
value = ptr[offset];
if (bitpos < HOST_BITS_PER_WIDE_INT)
- lo |= (unsigned HOST_WIDE_INT) value << bitpos;
+ result.low |= (unsigned HOST_WIDE_INT) value << bitpos;
else
- hi |= (unsigned HOST_WIDE_INT) value
- << (bitpos - HOST_BITS_PER_WIDE_INT);
+ result.high |= (unsigned HOST_WIDE_INT) value
+ << (bitpos - HOST_BITS_PER_WIDE_INT);
}
- return build_int_cst_wide_type (type, lo, hi);
+ return double_int_to_tree (type, result);
}
Index: gcc/dojump.c
===================================================================
--- gcc/dojump.c (revision 159566)
+++ gcc/dojump.c (working copy)
@@ -542,7 +542,7 @@
unsigned HOST_WIDE_INT mask
= (unsigned HOST_WIDE_INT) 1 << TREE_INT_CST_LOW (shift);
do_jump (build2 (BIT_AND_EXPR, argtype, arg,
- build_int_cst_wide_type (argtype, mask, 0)),
+ build_int_cstu (argtype, mask)),
clr_label, set_label, setclr_prob);
break;
}
Index: gcc/double-int.h
===================================================================
--- gcc/double-int.h (revision 159566)
+++ gcc/double-int.h (working copy)
@@ -126,6 +126,9 @@
double_int double_int_setbit (double_int, unsigned);
/* Logical operations. */
+
+/* Returns ~A. */
+
static inline double_int
double_int_not (double_int a)
{
@@ -134,6 +137,16 @@
return a;
}
+/* Returns A | B. */
+
+static inline double_int
+double_int_ior (double_int a, double_int b)
+{
+ a.low |= b.low;
+ a.high |= b.high;
+ return a;
+}
+
/* Shift operations. */
double_int double_int_lshift (double_int, HOST_WIDE_INT, unsigned int, bool);
double_int double_int_rshift (double_int, HOST_WIDE_INT, unsigned int, bool);
Index: gcc/stor-layout.c
===================================================================
--- gcc/stor-layout.c (revision 159566)
+++ gcc/stor-layout.c (working copy)
@@ -2275,9 +2275,7 @@
sign-extended in a way consistent with force_fit_type. */
max = TYPE_MAX_VALUE (sizetype);
TYPE_MAX_VALUE (sizetype)
- = build_int_cst_wide_type (sizetype,
- TREE_INT_CST_LOW (max),
- TREE_INT_CST_HIGH (max));
+ = double_int_to_tree (sizetype, tree_to_double_int (max));
t = make_node (INTEGER_TYPE);
TYPE_NAME (t) = get_identifier ("bit_size_type");
Anatoly.
prev parent reply other threads:[~2010-05-19 20:00 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-07 18:59 Anatoly Sokolov
2010-05-07 20:31 ` Richard Guenther
2010-05-10 9:24 ` Anatoly Sokolov
2010-05-10 9:34 ` Richard Guenther
2010-05-10 10:24 ` Anatoly Sokolov
2010-05-10 10:34 ` Richard Guenther
2010-05-10 11:17 ` Anatoly Sokolov
2010-05-10 11:35 ` Richard Guenther
2010-05-10 11:47 ` Anatoly Sokolov
2010-05-19 20:00 ` Anatoly Sokolov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1805129171.20100520000040@post.ru \
--to=aesok@post.ru \
--cc=gcc-patches@gcc.gnu.org \
--cc=java-patches@gcc.gnu.org \
--cc=richard.guenther@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).