summaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2013-08-16 23:37:31 +0000
committerJim Grosbach <grosbach@apple.com>2013-08-16 23:37:31 +0000
commitb49860ef030cb2dba0386278ee8737eecc4e7272 (patch)
tree49e12e5f8665c077022e4848d94bc262cceb0ef8 /lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
parent0673379712100110c213a0e7610b73b6c706e83d (diff)
downloadllvm-b49860ef030cb2dba0386278ee8737eecc4e7272.tar.gz
llvm-b49860ef030cb2dba0386278ee8737eecc4e7272.tar.bz2
llvm-b49860ef030cb2dba0386278ee8737eecc4e7272.tar.xz
ARM: Fix more fast-isel verifier failures.
Teach the generic instruction selection helper functions to constrain the register classes of their input operands. For non-physical register references, the generic code needs to be careful not to mess that up when replacing references to result registers. As the comment indicates for MachineRegisterInfo::replaceRegWith(), it's important to call constrainRegClass() first. rdar://12594152 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188593 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index e60adbf9e4..17ccdb2bd5 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -497,6 +497,10 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
if (J == E) break;
To = J->second;
}
+ // Make sure the new register has a sufficiently constrained register class.
+ if (TargetRegisterInfo::isVirtualRegister(From) &&
+ TargetRegisterInfo::isVirtualRegister(To))
+ MRI.constrainRegClass(To, MRI.getRegClass(From));
// Replace it.
MRI.replaceRegWith(From, To);
}