Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
lib/CodeGen/MachineInstr.cpp
Show First 20 Lines • Show All 314 Lines • ▼ Show 20 Lines | case MachineOperand::MO_RegisterLiveOut: { | ||||
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo(); | const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo(); | ||||
unsigned RegMaskSize = (TRI->getNumRegs() + 31) / 32; | unsigned RegMaskSize = (TRI->getNumRegs() + 31) / 32; | ||||
// Deep compare of the two RegMasks | // Deep compare of the two RegMasks | ||||
return std::equal(RegMask, RegMask + RegMaskSize, OtherRegMask); | return std::equal(RegMask, RegMask + RegMaskSize, OtherRegMask); | ||||
} | } | ||||
case MachineOperand::MO_MCSymbol: | case MachineOperand::MO_MCSymbol: | ||||
return getMCSymbol() == Other.getMCSymbol(); | return getMCSymbol() == Other.getMCSymbol(); | ||||
case MachineOperand::MO_CFIIndex: | case MachineOperand::MO_CFIIndex: { | ||||
return getCFIIndex() == Other.getCFIIndex(); | const MachineFunction *MF = getParent()->getParent()->getParent(); | ||||
const MachineFunction *OtherMF = | |||||
Other.getParent()->getParent()->getParent(); | |||||
MCCFIInstruction Inst = MF->getFrameInstructions()[getCFIIndex()]; | |||||
MCCFIInstruction OtherInst = | |||||
OtherMF->getFrameInstructions()[Other.getCFIIndex()]; | |||||
MCCFIInstruction::OpType op = Inst.getOperation(); | |||||
if (op != OtherInst.getOperation()) return false; | |||||
switch (op) { | |||||
case MCCFIInstruction::OpDefCfa: | |||||
case MCCFIInstruction::OpOffset: | |||||
case MCCFIInstruction::OpRelOffset: | |||||
if (Inst.getRegister() != OtherInst.getRegister()) return false; | |||||
if (Inst.getOffset() != OtherInst.getOffset()) return false; | |||||
break; | |||||
case MCCFIInstruction::OpRestore: | |||||
case MCCFIInstruction::OpUndefined: | |||||
case MCCFIInstruction::OpSameValue: | |||||
case MCCFIInstruction::OpDefCfaRegister: | |||||
if (Inst.getRegister() != OtherInst.getRegister()) return false; | |||||
break; | |||||
case MCCFIInstruction::OpRegister: | |||||
if (Inst.getRegister() != OtherInst.getRegister()) return false; | |||||
if (Inst.getRegister2() != OtherInst.getRegister2()) return false; | |||||
MatzeB: This looks like a good candidate for a `switch()`. | |||||
break; | |||||
case MCCFIInstruction::OpDefCfaOffset: | |||||
case MCCFIInstruction::OpAdjustCfaOffset: | |||||
case MCCFIInstruction::OpGnuArgsSize: | |||||
if (Inst.getOffset() != OtherInst.getOffset()) return false; | |||||
break; | |||||
Keep case/default at the same indentation level as the switch. MatzeB: Keep `case`/`default` at the same indentation level as the switch. | |||||
case MCCFIInstruction::OpRememberState: | |||||
case MCCFIInstruction::OpRestoreState: | |||||
As there are only 2 or 3 cases that are not handled yet, I would recommend to explicitely add cases for them and not add a default: at all. The benefit of this is that when someone adds new OpTypes in the future he will immediately get a compiler warning for a missing case when he forgets to add a case here. MatzeB: As there are only 2 or 3 cases that are not handled yet, I would recommend to explicitely add… | |||||
case MCCFIInstruction::OpEscape: | |||||
case MCCFIInstruction::OpWindowSave: | |||||
break; | |||||
} | |||||
return true; | |||||
} | |||||
case MachineOperand::MO_Metadata: | case MachineOperand::MO_Metadata: | ||||
return getMetadata() == Other.getMetadata(); | return getMetadata() == Other.getMetadata(); | ||||
case MachineOperand::MO_IntrinsicID: | case MachineOperand::MO_IntrinsicID: | ||||
return getIntrinsicID() == Other.getIntrinsicID(); | return getIntrinsicID() == Other.getIntrinsicID(); | ||||
case MachineOperand::MO_Predicate: | case MachineOperand::MO_Predicate: | ||||
return getPredicate() == Other.getPredicate(); | return getPredicate() == Other.getPredicate(); | ||||
} | } | ||||
llvm_unreachable("Invalid machine operand type"); | llvm_unreachable("Invalid machine operand type"); | ||||
Show All 32 Lines | return hash_combine(MO.getType(), MO.getTargetFlags(), | ||||
MO.getBlockAddress(), MO.getOffset()); | MO.getBlockAddress(), MO.getOffset()); | ||||
case MachineOperand::MO_RegisterMask: | case MachineOperand::MO_RegisterMask: | ||||
case MachineOperand::MO_RegisterLiveOut: | case MachineOperand::MO_RegisterLiveOut: | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getRegMask()); | return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getRegMask()); | ||||
case MachineOperand::MO_Metadata: | case MachineOperand::MO_Metadata: | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getMetadata()); | return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getMetadata()); | ||||
case MachineOperand::MO_MCSymbol: | case MachineOperand::MO_MCSymbol: | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getMCSymbol()); | return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getMCSymbol()); | ||||
case MachineOperand::MO_CFIIndex: | case MachineOperand::MO_CFIIndex: { | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getCFIIndex()); | const MachineFunction *MF = MO.getParent()->getParent()->getParent(); | ||||
MCCFIInstruction Inst = MF->getFrameInstructions()[MO.getCFIIndex()]; | |||||
return hash_combine(MO.getType(), MO.getTargetFlags(), Inst.getOperation(), | |||||
Inst.getRegister(), Inst.getRegister2(), | |||||
Inst.getOffset()); | |||||
} | |||||
case MachineOperand::MO_IntrinsicID: | case MachineOperand::MO_IntrinsicID: | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getIntrinsicID()); | return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getIntrinsicID()); | ||||
case MachineOperand::MO_Predicate: | case MachineOperand::MO_Predicate: | ||||
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getPredicate()); | return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getPredicate()); | ||||
} | } | ||||
llvm_unreachable("Invalid machine operand type"); | llvm_unreachable("Invalid machine operand type"); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 2,061 Lines • Show Last 20 Lines |
This looks like a good candidate for a switch().