From fc2ec2dc8f67e1db55a2b4e809abfdbd0003fa7a Mon Sep 17 00:00:00 2001
From: Kugan Vivekanandarajah <kvivekananda@nvidia.com>
Date: Tue, 11 Nov 2025 18:17:21 -0800
Subject: [PATCH 3/4] [AutoFDO] Add hierarchical discriminator for loop
 versioning

Add hierarchical discriminator support for loop versioning pass.
Assigns copyid discriminators to distinguish different loop versions.

gcc/ChangeLog:

	* gimple-loop-versioning.cc (loop_versioning::version_loop): Assign
	copyid discriminators to distinguish different loop versions.

Signed-off-by: Kugan Vivekanandarajah <kvivekananda@nvidia.com>
---
 gcc/gimple-loop-versioning.cc | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/gcc/gimple-loop-versioning.cc b/gcc/gimple-loop-versioning.cc
index 5c9b2fb77ff..3264d0589eb 100644
--- a/gcc/gimple-loop-versioning.cc
+++ b/gcc/gimple-loop-versioning.cc
@@ -41,6 +41,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-into-ssa.h"
 #include "gimple-range.h"
 #include "tree-cfg.h"
+#include "hierarchical_discriminator.h"
 
 namespace {
 
@@ -1699,6 +1700,13 @@ loop_versioning::version_loop (class loop *loop)
       return false;
     }
 
+  /* Assign hierarchical discriminators to distinguish loop versions.
+     This allows AutoFDO to distinguish profile data from different
+     versions.  No multiplicity for non-vectorized loop versioning.  */
+  assign_discriminators_to_loop (li.optimized_loop, 0,
+				  DISCRIMINATOR_LOOP_VERSION_ALIGNED);
+  assign_discriminators_to_loop (loop, 0, DISCRIMINATOR_LOOP_VERSION_UNALIGNED);
+
   if (dump_enabled_p ())
     dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, find_loop_location (loop),
 		     "versioned this loop for when certain strides are 1\n");
-- 
2.34.1

