diff options
author | Chris Lattner <sabre@nondot.org> | 2007-06-15 19:11:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-06-15 19:11:01 +0000 |
commit | f852e339b6221a48faa198055f7833ace157c89d (patch) | |
tree | 5822ac41e80b3d116ba63c8b4063e55e4ce01a71 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 2d7f447a7a3285fb86c6fed3f8b94758d3da20a3 (diff) | |
download | bcm5719-llvm-f852e339b6221a48faa198055f7833ace157c89d.tar.gz bcm5719-llvm-f852e339b6221a48faa198055f7833ace157c89d.zip |
Fix CodeGen/X86/inline-asm-x-scalar.ll:test4, by retaining regclass info
for tied register constraints.
llvm-svn: 37601
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index b29fb0d65ed..c9ed8b62473 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -3222,7 +3222,8 @@ GetRegistersForValue(AsmOperandInfo &OpInfo, bool HasEarlyClobber, // Otherwise, if this was a reference to an LLVM register class, create vregs // for this reference. std::vector<unsigned> RegClassRegs; - if (PhysReg.second) { + const TargetRegisterClass *RC = PhysReg.second; + if (RC) { // If this is an early clobber or tied register, our regalloc doesn't know // how to maintain the constraint. If it isn't, go ahead and create vreg // and let the regalloc do the right thing. @@ -3272,11 +3273,13 @@ GetRegistersForValue(AsmOperandInfo &OpInfo, bool HasEarlyClobber, // Check to see if this register is allocatable (i.e. don't give out the // stack pointer). - const TargetRegisterClass *RC = isAllocatableRegister(Reg, MF, TLI, MRI); - if (!RC) { - // Make sure we find consecutive registers. - NumAllocated = 0; - continue; + if (RC == 0) { + RC = isAllocatableRegister(Reg, MF, TLI, MRI); + if (!RC) { // Couldn't allocate this register. + // Reset NumAllocated to make sure we return consecutive registers. + NumAllocated = 0; + continue; + } } // Okay, this register is good, we can use it. |