[llvm] [AMDGPU] SelectionDAG divergence tracking should take into account Target divergency. (PR #144947)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 25 07:21:04 PDT 2025


================
@@ -13594,24 +13600,25 @@ void SelectionDAG::createOperands(SDNode *Node, ArrayRef<SDValue> Vals) {
   SDUse *Ops = OperandRecycler.allocate(
       ArrayRecycler<SDUse>::Capacity::get(Vals.size()), OperandAllocator);
 
-  bool IsDivergent = false;
+  Node->SDNodeBits.IsDivergent = false;
   for (unsigned I = 0; I != Vals.size(); ++I) {
     Ops[I].setUser(Node);
     Ops[I].setInitial(Vals[I]);
     EVT VT = Ops[I].getValueType();
 
-    // Skip Chain. It does not carry divergence.
-    if (VT != MVT::Other &&
-        (VT != MVT::Glue || gluePropagatesDivergence(Ops[I].getNode())) &&
-        Ops[I].getNode()->isDivergent()) {
-      IsDivergent = true;
-    }
+    if (DivergentTarget)
+      // Skip Chain. It does not carry divergence.
+      if (VT != MVT::Other &&
+          (VT != MVT::Glue || gluePropagatesDivergence(Ops[I].getNode())) &&
+          Ops[I].getNode()->isDivergent()) {
+        Node->SDNodeBits.IsDivergent = true;
----------------
alex-t wrote:

Oops, that was sloppy on my part. Thanks for catching it.

https://github.com/llvm/llvm-project/pull/144947


More information about the llvm-commits mailing list