SDAG: Make sure we use an allocatable reg class when we create this vreg
authorJustin Bogner <mail@justinbogner.com>
Fri, 28 Oct 2016 22:42:54 +0000 (22:42 +0000)
committerJustin Bogner <mail@justinbogner.com>
Fri, 28 Oct 2016 22:42:54 +0000 (22:42 +0000)
As per the discussion on r280783, if constrainRegClass fails we need
to call getAllocatableClass like we did before that commit.

llvm-svn: 285467

llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp

index d760a70..3b91e58 100644 (file)
@@ -338,6 +338,8 @@ InstrEmitter::AddRegisterOperand(MachineInstrBuilder &MIB,
       const TargetRegisterClass *ConstrainedRC
         = MRI->constrainRegClass(VReg, OpRC, MinRCSize);
       if (!ConstrainedRC) {
+        OpRC = TRI->getAllocatableClass(OpRC);
+        assert(OpRC && "Constraints cannot be fulfilled for allocation");
         unsigned NewVReg = MRI->createVirtualRegister(OpRC);
         BuildMI(*MBB, InsertPos, Op.getNode()->getDebugLoc(),
                 TII->get(TargetOpcode::COPY), NewVReg).addReg(VReg);