On 11/9/24 12:44 PM, Mariam Arutunian wrote:
This patch adds a new compiler pass aimed at identifying naive CRC implementations, characterized by the presence of a loop calculating a CRC (polynomial long division).
Upon detection of a potential CRC, the pass prints an informational message.

Performs CRC optimization if optimization level is >= 2 and if fno_gimple_crc_optimization given.

This pass is added for the detection and optimization of naive CRC implementations,
improving the efficiency of CRC-related computations.

This patch includes only initial fast checks for filtering out non-CRCs,
detected possible CRCs verification and optimization parts will be provided in subsequent patches.

   gcc/

     * Makefile.in (OBJS): Add gimple-crc-optimization.o.
     * common.opt (foptimize-crc): New option.
     * common.opt.urls: Regenerate to add foptimize-crc.
     * doc/invoke.texi (-foptimize-crc): Add documentation.
     * gimple-crc-optimization.cc: New file.
     * opts.cc (default_options_table): Add OPT_foptimize_crc.
     (enable_fdo_optimizations): Enable optimize_crc.
     * passes.def (pass_crc_optimization): Add new pass.
     * timevar.def (TV_GIMPLE_CRC_OPTIMIZATION): New timevar.
    * tree-pass.h (make_pass_crc_optimization): New extern function declaration.

Signed-off-by: Mariam Arutunian <mariamarutun...@gmail.com <mailto:mariamarutun...@gmail.com>>
Mentored-by: Jeff Law <j...@ventanamicro.com <mailto:j...@ventanamicro.com>>


---
 gcc/Makefile.in                |    1 +
 gcc/common.opt                 |   10 +
 gcc/common.opt.urls            |    3 +
 gcc/doc/invoke.texi            |   16 +-
 gcc/gimple-crc-optimization.cc | 1000 ++++++++++++++++++++++++++++++++
 gcc/opts.cc                    |    2 +
 gcc/passes.def                 |    1 +
 gcc/timevar.def                |    1 +
 gcc/tree-pass.h                |    1 +
 9 files changed, 1034 insertions(+), 1 deletion(-)
 create mode 100644 gcc/gimple-crc-optimization.cc


diff --git a/gcc/gimple-crc-optimization.cc b/gcc/gimple-crc-optimization.cc
new file mode 100644
index 00000000000..c67b0fd38c3
--- /dev/null
+++ b/gcc/gimple-crc-optimization.cc
@@ -0,0 +1,1000 @@
+/* CRC optimization.
+   Copyright (C) 2022-2024 Free Software Foundation, Inc.
+   Contributed by Mariam Arutunian <mariamarutun...@gmail.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.   */
+
+/* This pass performs CRC optimization.  */
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "backend.h"
+#include "tree.h"
+#include "gimple.h"
+#include "tree-pass.h"
+#include "ssa.h"
+#include "gimple-iterator.h"
+#include "tree-cfg.h"
+#include "cfgloop.h"
+#include "tree-scalar-evolution.h"
So there's been some changes in the trunk and this patch (and a few others) need #define INCLUDE_MEMORY before the various #includes. I've fixed all these in my local tree.



diff --git a/gcc/timevar.def b/gcc/timevar.def
index 0f9d2c0b032..37460def292 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -313,6 +313,7 @@ DEFTIMEVAR (TV_INITIALIZE_RTL        , "initialize rtl")
 DEFTIMEVAR (TV_GIMPLE_LADDRESS       , "address lowering")
 DEFTIMEVAR (TV_TREE_LOOP_IFCVT       , "tree loop if-conversion")
 DEFTIMEVAR (TV_WARN_ACCESS           , "access analysis")
+DEFTIMEVAR (TV_GIMPLE_CRC_OPTIMIZATION, "crc optimization")
/* Everything else in rest_of_compilation not included above. */
 DEFTIMEVAR (TV_EARLY_LOCAL          , "early local passes")
This has a trivial conflict with a recent change in the tree. I've resolved the conflict locally.


jeff

Reply via email to