summaryrefslogtreecommitdiffstats
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-04 16:14:52 +0000
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-04 16:14:52 +0000
commit4f1b71c0be664fd5f019779170a28a5f8b3b5dfa (patch)
tree12da54299f47090404a0a1212ec465c542c8ee64 /gcc/builtins.c
parentf27642b4e24ba896205504a6968166c3d860e361 (diff)
downloadppe42-gcc-4f1b71c0be664fd5f019779170a28a5f8b3b5dfa.tar.gz
ppe42-gcc-4f1b71c0be664fd5f019779170a28a5f8b3b5dfa.zip
PR ada/19382
* builtins.c (fold_builtin_memcmp): When constructing the pointer type used to access data in the inlined length == 1 case, use build_pointer_type_for_mode with CAN_ALIAS_ALL set to true. (fold_builtin_strcmp, fold_builtin_strncmp): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104948 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 12ae9d9f549..a4c3bfc1bc6 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -8089,7 +8089,9 @@ fold_builtin_memcmp (tree arglist)
if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1)
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
tree ind1 = fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
@@ -8141,7 +8143,9 @@ fold_builtin_strcmp (tree arglist)
if (p2 && *p2 == '\0')
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
return fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
@@ -8152,7 +8156,9 @@ fold_builtin_strcmp (tree arglist)
if (p1 && *p1 == '\0')
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
tree temp = fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
@@ -8210,7 +8216,9 @@ fold_builtin_strncmp (tree arglist)
&& tree_int_cst_sgn (len) == 1)
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
return fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
@@ -8224,7 +8232,9 @@ fold_builtin_strncmp (tree arglist)
&& tree_int_cst_sgn (len) == 1)
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
tree temp = fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
@@ -8237,7 +8247,9 @@ fold_builtin_strncmp (tree arglist)
if (host_integerp (len, 1) && tree_low_cst (len, 1) == 1)
{
tree cst_uchar_node = build_type_variant (unsigned_char_type_node, 1, 0);
- tree cst_uchar_ptr_node = build_pointer_type (cst_uchar_node);
+ tree cst_uchar_ptr_node
+ = build_pointer_type_for_mode (cst_uchar_node, ptr_mode, true);
+
tree ind1 = fold_convert (integer_type_node,
build1 (INDIRECT_REF, cst_uchar_node,
fold_convert (cst_uchar_ptr_node,
OpenPOWER on IntegriCloud