diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2018-01-12 15:03:24 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2018-01-12 15:03:24 +0000 |
commit | 309124e0b1b0cfee8fc8ef27c4caf9fc7d4c86ac (patch) | |
tree | ba50ced8e6421ca9dc85a58544b3b44bc3367f06 /llvm/lib | |
parent | ebb23078e92c00d3dde9d925df989afdf5f07f76 (diff) | |
download | bcm5719-llvm-309124e0b1b0cfee8fc8ef27c4caf9fc7d4c86ac.tar.gz bcm5719-llvm-309124e0b1b0cfee8fc8ef27c4caf9fc7d4c86ac.zip |
[PowerPC] Don't miscompile rotate+mask into an ANDIo if it can't recreate the immediate
I'm not even sure if this transform is ever worth it, but this at least
stops the bleeding.
llvm-svn: 322373
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp index fb16700a5e1..ec74d309f68 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -2444,6 +2444,8 @@ bool PPCInstrInfo::convertToImmediateForm(MachineInstr &MI, Is64BitLI = Opc != PPC::RLDICL_32; NewImm = InVal.getSExtValue(); SetCR = Opc == PPC::RLDICLo; + if (SetCR && (SExtImm & NewImm) != NewImm) + return false; break; } return false; @@ -2471,6 +2473,8 @@ bool PPCInstrInfo::convertToImmediateForm(MachineInstr &MI, Is64BitLI = Opc == PPC::RLWINM8 || Opc == PPC::RLWINM8o; NewImm = InVal.getSExtValue(); SetCR = Opc == PPC::RLWINMo || Opc == PPC::RLWINM8o; + if (SetCR && (SExtImm & NewImm) != NewImm) + return false; break; } return false; |