From ec7aa02d9f29078c4a0b9aec922891014e882df4 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 18 Jun 2015 20:00:03 +0000 Subject: [PATCH] [BranchFolding] Replace custom MachineInstr with MachineInstrExpressionTrait While the hash functions are subtly different it shouldn't have an impact. Instructions are checked with isIdenticalTo later. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240040 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/BranchFolding.cpp | 52 ++++------------------------------- 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index b8d9a1a29ed..a884833d471 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -264,54 +264,14 @@ bool BranchFolder::OptimizeFunction(MachineFunction &MF, // Tail Merging of Blocks //===----------------------------------------------------------------------===// -/// HashMachineInstr - Compute a hash value for MI and its operands. -static unsigned HashMachineInstr(const MachineInstr *MI) { - unsigned Hash = MI->getOpcode(); - for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { - const MachineOperand &Op = MI->getOperand(i); - - // Merge in bits from the operand if easy. - unsigned OperandHash = 0; - switch (Op.getType()) { - case MachineOperand::MO_Register: OperandHash = Op.getReg(); break; - case MachineOperand::MO_Immediate: OperandHash = Op.getImm(); break; - case MachineOperand::MO_MachineBasicBlock: - OperandHash = Op.getMBB()->getNumber(); - break; - case MachineOperand::MO_FrameIndex: - case MachineOperand::MO_ConstantPoolIndex: - case MachineOperand::MO_JumpTableIndex: - OperandHash = Op.getIndex(); - break; - case MachineOperand::MO_GlobalAddress: - case MachineOperand::MO_ExternalSymbol: - // Global address / external symbol are too hard, don't bother, but do - // pull in the offset. - OperandHash = Op.getOffset(); - break; - default: break; - } - - Hash += ((OperandHash << 3) | Op.getType()) << (i&31); - } - return Hash; -} - /// HashEndOfMBB - Hash the last instruction in the MBB. static unsigned HashEndOfMBB(const MachineBasicBlock *MBB) { - MachineBasicBlock::const_iterator I = MBB->end(); - if (I == MBB->begin()) - return 0; // Empty MBB. - - --I; - // Skip debug info so it will not affect codegen. - while (I->isDebugValue()) { - if (I==MBB->begin()) - return 0; // MBB empty except for debug info. - --I; - } - - return HashMachineInstr(I); + auto LastInst = MBB->getLastNonDebugInstr(); + if (LastInst == MBB->end()) + return 0; + // Hash the instruction and all operands. MachineInstrExpressionTrait ignores + // vreg defs when computing the hash but we're post-regalloc here. + return MachineInstrExpressionTrait::getHashValue(LastInst); } /// ComputeCommonTailLength - Given two machine basic blocks, compute the number -- 2.34.1