aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-10-10 13:33:34 +0200
committerRichard Biener <rguenther@suse.de>2023-10-10 14:17:23 +0200
commit70b5c6981fcdff246f90e57e91f3e1667eab2eb3 (patch)
tree3aeea830608f2b37e95cf475febcb499365d1e7c /gcc
parent2f150833b4edaad314f61a91d46b7f871661df15 (diff)
downloadgcc-70b5c6981fcdff246f90e57e91f3e1667eab2eb3.zip
gcc-70b5c6981fcdff246f90e57e91f3e1667eab2eb3.tar.gz
gcc-70b5c6981fcdff246f90e57e91f3e1667eab2eb3.tar.bz2
tree-optimization/111751 - support 1024 bit vector constant reinterpretation
The following ups the limit in fold_view_convert_expr to handle 1024bit vectors as used by GCN and RVV. It also robustifies the handling in visit_reference_op_load to properly give up when constants cannot be re-interpreted. PR tree-optimization/111751 * fold-const.cc (fold_view_convert_expr): Up the buffer size to 128 bytes. * tree-ssa-sccvn.cc (visit_reference_op_load): Special case constants, giving up when re-interpretation to the target type fails.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fold-const.cc4
-rw-r--r--gcc/tree-ssa-sccvn.cc2
2 files changed, 4 insertions, 2 deletions
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index 4f85615..82299bb 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -9266,8 +9266,8 @@ fold_view_convert_vector_encoding (tree type, tree expr)
static tree
fold_view_convert_expr (tree type, tree expr)
{
- /* We support up to 512-bit values (for V8DFmode). */
- unsigned char buffer[64];
+ /* We support up to 1024-bit values (for GCN/RISC-V V128QImode). */
+ unsigned char buffer[128];
int len;
/* Check that the host and target are sane. */
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index ce8ae8c..0b2c10dc 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -5751,6 +5751,8 @@ visit_reference_op_load (tree lhs, tree op, gimple *stmt)
&& maybe_lt (GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (result))),
GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (op)))))
result = NULL_TREE;
+ else if (CONSTANT_CLASS_P (result))
+ result = const_unop (VIEW_CONVERT_EXPR, TREE_TYPE (op), result);
else
{
/* We will be setting the value number of lhs to the value number