mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 21:18:19 +00:00
[SystemZ] Fix handling of 64-bit memcmp results
Generalize r188163 to cope with return types other than MVT::i32, just as the existing visitMemCmpCall code did. I've split this out into a subroutine so that it can be used for other upcoming patches. I also noticed that I'd used the wrong API to record the out chain. It's a load that uses DAG.getRoot() rather than getRoot(), so the out chain should go on PendingLoads. I don't have a testcase for that because we don't do any interesting scheduling on z yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188540 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -339,7 +339,12 @@ static void eraseIfDead(MachineInstr *MI, const MachineRegisterInfo *MRI) {
|
||||
static bool removeIPMBasedCompare(MachineInstr *Compare, unsigned SrcReg,
|
||||
const MachineRegisterInfo *MRI,
|
||||
const TargetRegisterInfo *TRI) {
|
||||
MachineInstr *LGFR = 0;
|
||||
MachineInstr *RLL = getDef(SrcReg, MRI);
|
||||
if (RLL && RLL->getOpcode() == SystemZ::LGFR) {
|
||||
LGFR = RLL;
|
||||
RLL = getDef(LGFR->getOperand(1).getReg(), MRI);
|
||||
}
|
||||
if (!RLL || !isShift(RLL, SystemZ::RLL, 31))
|
||||
return false;
|
||||
|
||||
@@ -362,6 +367,8 @@ static bool removeIPMBasedCompare(MachineInstr *Compare, unsigned SrcReg,
|
||||
}
|
||||
|
||||
Compare->eraseFromParent();
|
||||
if (LGFR)
|
||||
eraseIfDead(LGFR, MRI);
|
||||
eraseIfDead(RLL, MRI);
|
||||
eraseIfDead(SRL, MRI);
|
||||
eraseIfDead(IPM, MRI);
|
||||
|
||||
Reference in New Issue
Block a user