diff options
author | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2017-10-10 08:46:10 +0000 |
---|---|---|
committer | Nemanja Ivanovic <nemanja.i.ibm@gmail.com> | 2017-10-10 08:46:10 +0000 |
commit | 7bf866eb10411d6ee20b93cb368a580797e1cdd0 (patch) | |
tree | 6f3cc394335de403ad91efde039ae789e4c4170f /llvm/lib/Target/PowerPC/PPCMIPeephole.cpp | |
parent | 4923a80f007111deed9ab78081e3e4891605257a (diff) | |
download | bcm5719-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.cpp | 7 |
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; } |