Home | History | Annotate | Line # | Download | only in gcc
      1 /* A self-testing framework, for use by -fself-test.
      2    Copyright (C) 2016-2024 Free Software Foundation, Inc.
      3 
      4 This file is part of GCC.
      5 
      6 GCC is free software; you can redistribute it and/or modify it under
      7 the terms of the GNU General Public License as published by the Free
      8 Software Foundation; either version 3, or (at your option) any later
      9 version.
     10 
     11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14 for more details.
     15 
     16 You should have received a copy of the GNU General Public License
     17 along with GCC; see the file COPYING3.  If not see
     18 <http://www.gnu.org/licenses/>.  */
     19 
     20 #ifndef GCC_SELFTEST_RTL_H
     21 #define GCC_SELFTEST_RTL_H
     22 
     23 /* The selftest code should entirely disappear in a production
     24    configuration, hence we guard all of it with #if CHECKING_P.  */
     25 
     26 #if CHECKING_P
     27 
     28 class rtx_reuse_manager;
     29 
     30 namespace selftest {
     31 
     32 /* Verify that X is dumped as EXPECTED_DUMP, using compact mode.
     33    Use LOC as the effective location when reporting errors.  */
     34 
     35 extern void
     36 assert_rtl_dump_eq (const location &loc, const char *expected_dump, rtx x,
     37 		    rtx_reuse_manager *reuse_manager);
     38 
     39 /* Verify that RTX is dumped as EXPECTED_DUMP, using compact mode.  */
     40 
     41 #define ASSERT_RTL_DUMP_EQ(EXPECTED_DUMP, RTX) \
     42   assert_rtl_dump_eq (SELFTEST_LOCATION, (EXPECTED_DUMP), (RTX), NULL)
     43 
     44 /* As above, but using REUSE_MANAGER when dumping.  */
     45 
     46 #define ASSERT_RTL_DUMP_EQ_WITH_REUSE(EXPECTED_DUMP, RTX, REUSE_MANAGER) \
     47   assert_rtl_dump_eq (SELFTEST_LOCATION, (EXPECTED_DUMP), (RTX), \
     48 		      (REUSE_MANAGER))
     49 
     50 #define ASSERT_RTX_EQ(EXPECTED, ACTUAL) 				\
     51   SELFTEST_BEGIN_STMT							\
     52   const char *desc_ = "ASSERT_RTX_EQ (" #EXPECTED ", " #ACTUAL ")";	\
     53   ::selftest::assert_rtx_eq_at (SELFTEST_LOCATION, desc_, (EXPECTED),	\
     54 				(ACTUAL));				\
     55   SELFTEST_END_STMT
     56 
     57 extern void assert_rtx_eq_at (const location &, const char *, rtx, rtx);
     58 
     59 /* Evaluate rtx EXPECTED and ACTUAL and compare them with ==
     60    (i.e. pointer equality), calling ::selftest::pass if they are
     61    equal, aborting if they are non-equal.  */
     62 
     63 #define ASSERT_RTX_PTR_EQ(EXPECTED, ACTUAL) \
     64   SELFTEST_BEGIN_STMT							\
     65   const char *desc_ = "ASSERT_RTX_PTR_EQ (" #EXPECTED ", " #ACTUAL ")";  \
     66   ::selftest::assert_rtx_ptr_eq_at (SELFTEST_LOCATION, desc_, (EXPECTED), \
     67 				    (ACTUAL));				\
     68   SELFTEST_END_STMT
     69 
     70 /* Compare rtx EXPECTED and ACTUAL by pointer equality, calling
     71    ::selftest::pass if they are equal, aborting if they are non-equal.
     72    LOC is the effective location of the assertion, MSG describes it.  */
     73 
     74 extern void assert_rtx_ptr_eq_at (const location &loc, const char *msg,
     75 				  rtx expected, rtx actual);
     76 
     77 /* A class for testing RTL function dumps.  */
     78 
     79 class rtl_dump_test
     80 {
     81  public:
     82   /* Takes ownership of PATH.  */
     83   rtl_dump_test (const location &loc, char *path);
     84   ~rtl_dump_test ();
     85 
     86  private:
     87   char *m_path;
     88 };
     89 
     90 /* Get the insn with the given uid, or NULL if not found.  */
     91 
     92 extern rtx_insn *get_insn_by_uid (int uid);
     93 
     94 extern void verify_three_block_rtl_cfg (function *fun);
     95 
     96 } /* end of namespace selftest.  */
     97 
     98 #endif /* #if CHECKING_P */
     99 
    100 #endif /* GCC_SELFTEST_RTL_H */
    101