On 6/23/23 08:48, juzhe.zh...@rivai.ai wrote:
From: Ju-Zhe Zhong <juzhe.zh...@rivai.ai>
gcc/ChangeLog:
* tree-ssa-dse.cc (initialize_ao_ref_for_dse): Add LEN_MASK_STORE.
(dse_optimize_stmt): Ditto.
---
gcc/tree-ssa-dse.cc | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
index 3c7a2e9992d..01b0951f1a9 100644
--- a/gcc/tree-ssa-dse.cc
+++ b/gcc/tree-ssa-dse.cc
@@ -174,6 +174,23 @@ initialize_ao_ref_for_dse (gimple *stmt, ao_ref *write,
bool may_def_ok = false)
return true;
}
break;
+ case IFN_LEN_MASK_STORE: {
+ /* We cannot initialize a must-def ao_ref (in all cases) but we
+ can provide a may-def variant. */
+ if (may_def_ok)
+ {
+ tree len_size
+ = int_const_binop (MINUS_EXPR, gimple_call_arg (stmt, 2),
+ gimple_call_arg (stmt, 5));
+ tree mask_size
+ = TYPE_SIZE_UNIT (TREE_TYPE (gimple_call_arg (stmt, 4)));
+ tree size = int_const_binop (MAX_EXPR, len_size, mask_size);
+ ao_ref_init_from_ptr_and_size (write, gimple_call_arg (stmt, 0),
+ size);
So isn't len_size here the size in elements? If so, don't you need to
multiply len_size by the element size?
Jeff