summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2018-01-12 15:03:24 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2018-01-12 15:03:24 +0000
commit309124e0b1b0cfee8fc8ef27c4caf9fc7d4c86ac (patch)
treeba50ced8e6421ca9dc85a58544b3b44bc3367f06 /llvm/lib
parentebb23078e92c00d3dde9d925df989afdf5f07f76 (diff)
downloadbcm5719-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.cpp4
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;
OpenPOWER on IntegriCloud