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

Reply via email to