[GlobalISel] Fix incorrect setting of ValNo when splitting
authorGabriel Hjort Ã…kerlund <gabriel.hjort.akerlund@ericsson.com>
Wed, 30 Sep 2020 13:24:41 +0000 (15:24 +0200)
committerMikael Holmen <mikael.holmen@ericsson.com>
Wed, 30 Sep 2020 14:08:51 +0000 (16:08 +0200)
Before, for each original argument i, ValNo was set to i + PartIdx, but
ValNo is intended to reflect the index of the value before splitting.
Hence, ValNo should always be set to i and not consider the PartIdx.

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D86511

llvm/lib/CodeGen/GlobalISel/CallLowering.cpp

index 49d101a..2e2cb57 100644 (file)
@@ -285,7 +285,7 @@ bool CallLowering::handleAssignments(CCState &CCInfo,
           }
           Args[i].Regs.push_back(Reg);
           Args[i].Flags.push_back(Flags);
-          if (Handler.assignArg(i + Part, NewVT, NewVT, CCValAssign::Full,
+          if (Handler.assignArg(i, NewVT, NewVT, CCValAssign::Full,
                                 Args[i], Args[i].Flags[Part], CCInfo)) {
             // Still couldn't assign this smaller part type for some reason.
             return false;
@@ -318,7 +318,7 @@ bool CallLowering::handleAssignments(CCState &CCInfo,
         }
         Args[i].Regs.push_back(Unmerge.getReg(PartIdx));
         Args[i].Flags.push_back(Flags);
-        if (Handler.assignArg(i + PartIdx, NewVT, NewVT, CCValAssign::Full,
+        if (Handler.assignArg(i, NewVT, NewVT, CCValAssign::Full,
                               Args[i], Args[i].Flags[PartIdx], CCInfo))
           return false;
       }