summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-10-10 08:46:10 +0000
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-10-10 08:46:10 +0000
commit7bf866eb10411d6ee20b93cb368a580797e1cdd0 (patch)
tree6f3cc394335de403ad91efde039ae789e4c4170f /llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
parent4923a80f007111deed9ab78081e3e4891605257a (diff)
downloadbcm5719-llvm-7bf866eb10411d6ee20b93cb368a580797e1cdd0.tar.gz
bcm5719-llvm-7bf866eb10411d6ee20b93cb368a580797e1cdd0.zip
Fix for PR34888.
The issue is that we assume operand zero of the input to the add instruction is a register. In this case, the input comes from inline assembly and operand zero is not a register thereby causing a crash. The code will bail anyway if the input instruction doesn't have the right opcode. So do that check first and let short-circuiting prevent the crash. llvm-svn: 315285
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCMIPeephole.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCMIPeephole.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
index 66c1bb1c05c..8e7e067a21e 100644
--- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
@@ -394,9 +394,10 @@ bool PPCMIPeephole::simplifyCode(void) {
for (unsigned i = 1; i < DefPhiMI->getNumOperands(); i += 2) {
MachineInstr *LiMI =
getVRegDefOrNull(&DefPhiMI->getOperand(i), MRI);
- if (!LiMI || !MRI->hasOneNonDBGUse(LiMI->getOperand(0).getReg()) ||
- !MDT->dominates(DefDomMI, LiMI) ||
- (LiMI->getOpcode() != PPC::LI && LiMI->getOpcode() != PPC::LI8))
+ if (!LiMI ||
+ (LiMI->getOpcode() != PPC::LI && LiMI->getOpcode() != PPC::LI8)
+ || !MRI->hasOneNonDBGUse(LiMI->getOperand(0).getReg()) ||
+ !MDT->dominates(DefDomMI, LiMI))
return false;
}
OpenPOWER on IntegriCloud