]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Fix uninitialized probability for GIMPLE IR tests
authorJuzhe-Zhong <juzhe.zhong@rivai.ai>
Mon, 28 Aug 2023 11:40:05 +0000 (19:40 +0800)
committerPan Li <pan2.li@intel.com>
Mon, 28 Aug 2023 13:05:16 +0000 (21:05 +0800)
This patch fix unitialized probability in GIMPLE IR code tests:
FAIL: gcc.dg/vect/slp-reduc-10a.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10a.c (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10a.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10a.c -flto -ffat-lto-objects (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10b.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10b.c (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10b.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10b.c -flto -ffat-lto-objects (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10c.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10c.c (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10c.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10c.c -flto -ffat-lto-objects (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10d.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10d.c (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10d.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10d.c -flto -ffat-lto-objects (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10e.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10e.c (test for excess errors)
FAIL: gcc.dg/vect/slp-reduc-10e.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/slp-reduc-10e.c -flto -ffat-lto-objects (test for excess errors)
FAIL: gcc.dg/vect/vect-cond-arith-2.c (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/vect-cond-arith-2.c (test for excess errors)
FAIL: gcc.dg/vect/vect-cond-arith-2.c -flto -ffat-lto-objects (internal compiler error: in compute_probabilities, at config/riscv/riscv-vsetvl.cc:4358)
FAIL: gcc.dg/vect/vect-cond-arith-2.c -flto -ffat-lto-objects (test for excess errors)

gcc/ChangeLog:

* config/riscv/riscv-vsetvl.cc (pass_vsetvl::earliest_fusion): Skip
never probability.
(pass_vsetvl::compute_probabilities): Fix unitialized probability.

gcc/config/riscv/riscv-vsetvl.cc

index 48e89fe2c0373d4cd698aa783e98516137ac9b5e..f7ae6c16bee6bfcac31d082cf5ec5e38f98f3cde 100644 (file)
@@ -3272,6 +3272,10 @@ pass_vsetvl::earliest_fusion (void)
          if (expr.empty_p ())
            continue;
          edge eg = INDEX_EDGE (m_vector_manager->vector_edge_list, ed);
+         /* If it is the edge that we never reach, skip its possible PRE
+            fusion conservatively.  */
+         if (eg->probability == profile_probability::never ())
+           break;
          if (eg->src == ENTRY_BLOCK_PTR_FOR_FN (cfun)
              || eg->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
            break;
@@ -4359,7 +4363,14 @@ pass_vsetvl::compute_probabilities (void)
       FOR_EACH_EDGE (e, ei, cfg_bb->succs)
        {
          auto &new_prob = get_block_info (e->dest).probability;
-         if (!new_prob.initialized_p ())
+         /* Normally, the edge probability should be initialized.
+            However, some special testing code which is written in
+            GIMPLE IR style force the edge probility uninitialized,
+            we conservatively set it as never so that it will not
+            affect PRE (Phase 3 && Phse 4).  */
+         if (!e->probability.initialized_p ())
+           new_prob = profile_probability::never ();
+         else if (!new_prob.initialized_p ())
            new_prob = curr_prob * e->probability;
          else if (new_prob == profile_probability::always ())
            continue;