summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2014-12-10 01:13:13 +0000
committerMatthias Braun <matze@braunis.de>2014-12-10 01:13:13 +0000
commit96d7732b08dfb61e9c15ee6f0dd0550aeae1fcfc (patch)
treee3f530433e87562eb91177a35061f435c9fc3479 /llvm/lib
parent21554d9b302571c7d2a6e0dbd17888b1b00bb038 (diff)
downloadbcm5719-llvm-96d7732b08dfb61e9c15ee6f0dd0550aeae1fcfc.tar.gz
bcm5719-llvm-96d7732b08dfb61e9c15ee6f0dd0550aeae1fcfc.zip
MachineVerifier: Allow physreg use if just a subreg is defined.
We can't mark partially undefined registers, so we have to allow reading a register in the machine verifier if just parts of a register are defined. llvm-svn: 223896
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index 5cdcc666028..677b5093f40 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -1066,7 +1066,18 @@ void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) {
if (!regsLive.count(Reg)) {
if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
// Reserved registers may be used even when 'dead'.
- if (!isReserved(Reg))
+ bool Bad = !isReserved(Reg);
+ // We are fine if just any subregister has a defined value.
+ if (Bad) {
+ for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid();
+ ++SubRegs) {
+ if (regsLive.count(*SubRegs)) {
+ Bad = false;
+ break;
+ }
+ }
+ }
+ if (Bad)
report("Using an undefined physical register", MO, MONum);
} else if (MRI->def_empty(Reg)) {
report("Reading virtual register without a def", MO, MONum);
OpenPOWER on IntegriCloud