mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 04:28:30 +00:00
CMOVxx doesn't swap operands which it's commuted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75266 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
261ce1d5f8
commit
49ddb61612
lib/Target/X86
@ -1430,6 +1430,67 @@ X86InstrInfo::commuteInstruction(MachineInstr *MI, bool NewMI) const {
|
||||
}
|
||||
}
|
||||
|
||||
/// findCommutedOpIndices - If specified MI is commutable, return the two
|
||||
/// operand indices that would swap value. Return true if the instruction
|
||||
/// is not in a form which this routine understands.
|
||||
bool X86InstrInfo::findCommutedOpIndices(MachineInstr *MI,
|
||||
unsigned &SrcOpIdx1,
|
||||
unsigned &SrcOpIdx2) const {
|
||||
switch (MI->getOpcode()) {
|
||||
case X86::CMOVB16rr:
|
||||
case X86::CMOVB32rr:
|
||||
case X86::CMOVB64rr:
|
||||
case X86::CMOVAE16rr:
|
||||
case X86::CMOVAE32rr:
|
||||
case X86::CMOVAE64rr:
|
||||
case X86::CMOVE16rr:
|
||||
case X86::CMOVE32rr:
|
||||
case X86::CMOVE64rr:
|
||||
case X86::CMOVNE16rr:
|
||||
case X86::CMOVNE32rr:
|
||||
case X86::CMOVNE64rr:
|
||||
case X86::CMOVBE16rr:
|
||||
case X86::CMOVBE32rr:
|
||||
case X86::CMOVBE64rr:
|
||||
case X86::CMOVA16rr:
|
||||
case X86::CMOVA32rr:
|
||||
case X86::CMOVA64rr:
|
||||
case X86::CMOVL16rr:
|
||||
case X86::CMOVL32rr:
|
||||
case X86::CMOVL64rr:
|
||||
case X86::CMOVGE16rr:
|
||||
case X86::CMOVGE32rr:
|
||||
case X86::CMOVGE64rr:
|
||||
case X86::CMOVLE16rr:
|
||||
case X86::CMOVLE32rr:
|
||||
case X86::CMOVLE64rr:
|
||||
case X86::CMOVG16rr:
|
||||
case X86::CMOVG32rr:
|
||||
case X86::CMOVG64rr:
|
||||
case X86::CMOVS16rr:
|
||||
case X86::CMOVS32rr:
|
||||
case X86::CMOVS64rr:
|
||||
case X86::CMOVNS16rr:
|
||||
case X86::CMOVNS32rr:
|
||||
case X86::CMOVNS64rr:
|
||||
case X86::CMOVP16rr:
|
||||
case X86::CMOVP32rr:
|
||||
case X86::CMOVP64rr:
|
||||
case X86::CMOVNP16rr:
|
||||
case X86::CMOVNP32rr:
|
||||
case X86::CMOVNP64rr:
|
||||
case X86::CMOVO16rr:
|
||||
case X86::CMOVO32rr:
|
||||
case X86::CMOVO64rr:
|
||||
case X86::CMOVNO16rr:
|
||||
case X86::CMOVNO32rr:
|
||||
case X86::CMOVNO64rr:
|
||||
return false;
|
||||
default:
|
||||
return TargetInstrInfoImpl::findCommutedOpIndices(MI, SrcOpIdx1, SrcOpIdx2);
|
||||
}
|
||||
}
|
||||
|
||||
static X86::CondCode GetCondFromBranchOpc(unsigned BrOpc) {
|
||||
switch (BrOpc) {
|
||||
default: return X86::COND_INVALID;
|
||||
|
@ -479,6 +479,12 @@ public:
|
||||
///
|
||||
virtual MachineInstr *commuteInstruction(MachineInstr *MI, bool NewMI) const;
|
||||
|
||||
/// findCommutedOpIndices - If specified MI is commutable, return the two
|
||||
/// operand indices that would swap value. Return true if the instruction
|
||||
/// is not in a form which this routine understands.
|
||||
virtual bool findCommutedOpIndices(MachineInstr *MI, unsigned &SrcOpIdx1,
|
||||
unsigned &SrcOpIdx2) const;
|
||||
|
||||
// Branch analysis.
|
||||
virtual bool isUnpredicatedTerminator(const MachineInstr* MI) const;
|
||||
virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
|
||||
|
Loading…
Reference in New Issue
Block a user