mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
move target-independent opcodes out of TargetInstrInfo
into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95687 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4152778605
commit
518bb53485
@ -22,6 +22,7 @@
|
||||
#include "llvm/CodeGen/AsmPrinter.h"
|
||||
#include "llvm/CodeGen/MachineOperand.h"
|
||||
#include "llvm/Target/TargetInstrDesc.h"
|
||||
#include "llvm/Target/TargetOpcodes.h"
|
||||
#include "llvm/Support/DebugLoc.h"
|
||||
#include <vector>
|
||||
|
||||
@ -193,12 +194,31 @@ public:
|
||||
|
||||
/// isLabel - Returns true if the MachineInstr represents a label.
|
||||
///
|
||||
bool isLabel() const;
|
||||
|
||||
/// isDebugLabel - Returns true if the MachineInstr represents a debug label.
|
||||
///
|
||||
bool isDebugLabel() const;
|
||||
|
||||
bool isLabel() const {
|
||||
return getOpcode() == TargetOpcode::DBG_LABEL ||
|
||||
getOpcode() == TargetOpcode::EH_LABEL ||
|
||||
getOpcode() == TargetOpcode::GC_LABEL;
|
||||
}
|
||||
|
||||
bool isDebugLabel() const { return getOpcode() == TargetOpcode::DBG_LABEL; }
|
||||
bool isEHLabel() const { return getOpcode() == TargetOpcode::EH_LABEL; }
|
||||
bool isGCLabel() const { return getOpcode() == TargetOpcode::GC_LABEL; }
|
||||
bool isDebugValue() const { return getOpcode() == TargetOpcode::DBG_VALUE; }
|
||||
|
||||
bool isPHI() const { return getOpcode() == TargetOpcode::PHI; }
|
||||
bool isKill() const { return getOpcode() == TargetOpcode::KILL; }
|
||||
bool isImplicitDef() const { return getOpcode()==TargetOpcode::IMPLICIT_DEF; }
|
||||
bool isInlineAsm() const { return getOpcode() == TargetOpcode::INLINEASM; }
|
||||
bool isExtractSubreg() const {
|
||||
return getOpcode() == TargetOpcode::EXTRACT_SUBREG;
|
||||
}
|
||||
bool isInsertSubreg() const {
|
||||
return getOpcode() == TargetOpcode::INSERT_SUBREG;
|
||||
}
|
||||
bool isSubregToReg() const {
|
||||
return getOpcode() == TargetOpcode::SUBREG_TO_REG;
|
||||
}
|
||||
|
||||
/// readsRegister - Return true if the MachineInstr reads the specified
|
||||
/// register. If TargetRegisterInfo is passed, then it also checks if there
|
||||
/// is a read of a super-register.
|
||||
|
@ -399,19 +399,19 @@ def PHI : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops variable_ops);
|
||||
let AsmString = "PHINODE";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
}
|
||||
def INLINEASM : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops variable_ops);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
}
|
||||
def DBG_LABEL : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops i32imm:$id);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let hasCtrlDep = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
@ -419,7 +419,7 @@ def EH_LABEL : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops i32imm:$id);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let hasCtrlDep = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
@ -427,7 +427,7 @@ def GC_LABEL : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops i32imm:$id);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let hasCtrlDep = 1;
|
||||
let isNotDuplicable = 1;
|
||||
}
|
||||
@ -435,21 +435,21 @@ def KILL : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops variable_ops);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
}
|
||||
def EXTRACT_SUBREG : Instruction {
|
||||
let OutOperandList = (ops unknown:$dst);
|
||||
let InOperandList = (ops unknown:$supersrc, i32imm:$subidx);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
}
|
||||
def INSERT_SUBREG : Instruction {
|
||||
let OutOperandList = (ops unknown:$dst);
|
||||
let InOperandList = (ops unknown:$supersrc, unknown:$subsrc, i32imm:$subidx);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
let Constraints = "$supersrc = $dst";
|
||||
}
|
||||
@ -457,7 +457,7 @@ def IMPLICIT_DEF : Instruction {
|
||||
let OutOperandList = (ops unknown:$dst);
|
||||
let InOperandList = (ops);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
let isReMaterializable = 1;
|
||||
let isAsCheapAsAMove = 1;
|
||||
@ -466,22 +466,22 @@ def SUBREG_TO_REG : Instruction {
|
||||
let OutOperandList = (ops unknown:$dst);
|
||||
let InOperandList = (ops unknown:$implsrc, unknown:$subsrc, i32imm:$subidx);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
}
|
||||
def COPY_TO_REGCLASS : Instruction {
|
||||
let OutOperandList = (ops unknown:$dst);
|
||||
let InOperandList = (ops unknown:$src, i32imm:$regclass);
|
||||
let AsmString = "";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let Namespace = "TargetOpcode";
|
||||
let neverHasSideEffects = 1;
|
||||
let isAsCheapAsAMove = 1;
|
||||
}
|
||||
def DEBUG_VALUE : Instruction {
|
||||
def DBG_VALUE : Instruction {
|
||||
let OutOperandList = (ops);
|
||||
let InOperandList = (ops variable_ops);
|
||||
let AsmString = "DEBUG_VALUE";
|
||||
let Namespace = "TargetInstrInfo";
|
||||
let AsmString = "DBG_VALUE";
|
||||
let Namespace = "TargetOpcode";
|
||||
let isAsCheapAsAMove = 1;
|
||||
}
|
||||
}
|
||||
|
@ -45,55 +45,6 @@ public:
|
||||
TargetInstrInfo(const TargetInstrDesc *desc, unsigned NumOpcodes);
|
||||
virtual ~TargetInstrInfo();
|
||||
|
||||
// Invariant opcodes: All instruction sets have these as their low opcodes.
|
||||
enum {
|
||||
PHI = 0,
|
||||
INLINEASM = 1,
|
||||
DBG_LABEL = 2,
|
||||
EH_LABEL = 3,
|
||||
GC_LABEL = 4,
|
||||
|
||||
/// KILL - This instruction is a noop that is used only to adjust the liveness
|
||||
/// of registers. This can be useful when dealing with sub-registers.
|
||||
KILL = 5,
|
||||
|
||||
/// EXTRACT_SUBREG - This instruction takes two operands: a register
|
||||
/// that has subregisters, and a subregister index. It returns the
|
||||
/// extracted subregister value. This is commonly used to implement
|
||||
/// truncation operations on target architectures which support it.
|
||||
EXTRACT_SUBREG = 6,
|
||||
|
||||
/// INSERT_SUBREG - This instruction takes three operands: a register
|
||||
/// that has subregisters, a register providing an insert value, and a
|
||||
/// subregister index. It returns the value of the first register with
|
||||
/// the value of the second register inserted. The first register is
|
||||
/// often defined by an IMPLICIT_DEF, as is commonly used to implement
|
||||
/// anyext operations on target architectures which support it.
|
||||
INSERT_SUBREG = 7,
|
||||
|
||||
/// IMPLICIT_DEF - This is the MachineInstr-level equivalent of undef.
|
||||
IMPLICIT_DEF = 8,
|
||||
|
||||
/// SUBREG_TO_REG - This instruction is similar to INSERT_SUBREG except
|
||||
/// that the first operand is an immediate integer constant. This constant
|
||||
/// is often zero, as is commonly used to implement zext operations on
|
||||
/// target architectures which support it, such as with x86-64 (with
|
||||
/// zext from i32 to i64 via implicit zero-extension).
|
||||
SUBREG_TO_REG = 9,
|
||||
|
||||
/// COPY_TO_REGCLASS - This instruction is a placeholder for a plain
|
||||
/// register-to-register copy into a specific register class. This is only
|
||||
/// used between instruction selection and MachineInstr creation, before
|
||||
/// virtual registers have been created for all the instructions, and it's
|
||||
/// only needed in cases where the register classes implied by the
|
||||
/// instructions are insufficient. The actual MachineInstrs to perform
|
||||
/// the copy are emitted with the TargetInstrInfo::copyRegToReg hook.
|
||||
COPY_TO_REGCLASS = 10,
|
||||
|
||||
// DEBUG_VALUE - a mapping of the llvm.dbg.value intrinsic
|
||||
DEBUG_VALUE = 11
|
||||
};
|
||||
|
||||
unsigned getNumOpcodes() const { return NumOpcodes; }
|
||||
|
||||
/// get - Return the machine instruction descriptor that corresponds to the
|
||||
@ -109,7 +60,7 @@ public:
|
||||
/// that aren't always available.
|
||||
bool isTriviallyReMaterializable(const MachineInstr *MI,
|
||||
AliasAnalysis *AA = 0) const {
|
||||
return MI->getOpcode() == IMPLICIT_DEF ||
|
||||
return MI->getOpcode() == TargetOpcode::IMPLICIT_DEF ||
|
||||
(MI->getDesc().isRematerializable() &&
|
||||
(isReallyTriviallyReMaterializable(MI, AA) ||
|
||||
isReallyTriviallyReMaterializableGeneric(MI, AA)));
|
||||
@ -167,12 +118,12 @@ public:
|
||||
SrcReg == DstReg)
|
||||
return true;
|
||||
|
||||
if (MI.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG &&
|
||||
if (MI.getOpcode() == TargetOpcode::EXTRACT_SUBREG &&
|
||||
MI.getOperand(0).getReg() == MI.getOperand(1).getReg())
|
||||
return true;
|
||||
|
||||
if ((MI.getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
MI.getOpcode() == TargetInstrInfo::SUBREG_TO_REG) &&
|
||||
if ((MI.getOpcode() == TargetOpcode::INSERT_SUBREG ||
|
||||
MI.getOpcode() == TargetOpcode::SUBREG_TO_REG) &&
|
||||
MI.getOperand(0).getReg() == MI.getOperand(2).getReg())
|
||||
return true;
|
||||
return false;
|
||||
|
72
include/llvm/Target/TargetOpcodes.h
Normal file
72
include/llvm/Target/TargetOpcodes.h
Normal file
@ -0,0 +1,72 @@
|
||||
//===-- llvm/Target/TargetOpcodes.h - Target Indep Opcodes ------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines the target independent instruction opcodes.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_TARGET_TARGETOPCODES_H
|
||||
#define LLVM_TARGET_TARGETOPCODES_H
|
||||
|
||||
namespace llvm {
|
||||
|
||||
// Invariant opcodes: All instruction sets have these as their low opcodes.
|
||||
namespace TargetOpcode {
|
||||
enum {
|
||||
PHI = 0,
|
||||
INLINEASM = 1,
|
||||
DBG_LABEL = 2,
|
||||
EH_LABEL = 3,
|
||||
GC_LABEL = 4,
|
||||
|
||||
/// KILL - This instruction is a noop that is used only to adjust the
|
||||
/// liveness of registers. This can be useful when dealing with
|
||||
/// sub-registers.
|
||||
KILL = 5,
|
||||
|
||||
/// EXTRACT_SUBREG - This instruction takes two operands: a register
|
||||
/// that has subregisters, and a subregister index. It returns the
|
||||
/// extracted subregister value. This is commonly used to implement
|
||||
/// truncation operations on target architectures which support it.
|
||||
EXTRACT_SUBREG = 6,
|
||||
|
||||
/// INSERT_SUBREG - This instruction takes three operands: a register
|
||||
/// that has subregisters, a register providing an insert value, and a
|
||||
/// subregister index. It returns the value of the first register with
|
||||
/// the value of the second register inserted. The first register is
|
||||
/// often defined by an IMPLICIT_DEF, as is commonly used to implement
|
||||
/// anyext operations on target architectures which support it.
|
||||
INSERT_SUBREG = 7,
|
||||
|
||||
/// IMPLICIT_DEF - This is the MachineInstr-level equivalent of undef.
|
||||
IMPLICIT_DEF = 8,
|
||||
|
||||
/// SUBREG_TO_REG - This instruction is similar to INSERT_SUBREG except
|
||||
/// that the first operand is an immediate integer constant. This constant
|
||||
/// is often zero, as is commonly used to implement zext operations on
|
||||
/// target architectures which support it, such as with x86-64 (with
|
||||
/// zext from i32 to i64 via implicit zero-extension).
|
||||
SUBREG_TO_REG = 9,
|
||||
|
||||
/// COPY_TO_REGCLASS - This instruction is a placeholder for a plain
|
||||
/// register-to-register copy into a specific register class. This is only
|
||||
/// used between instruction selection and MachineInstr creation, before
|
||||
/// virtual registers have been created for all the instructions, and it's
|
||||
/// only needed in cases where the register classes implied by the
|
||||
/// instructions are insufficient. The actual MachineInstrs to perform
|
||||
/// the copy are emitted with the TargetInstrInfo::copyRegToReg hook.
|
||||
COPY_TO_REGCLASS = 10,
|
||||
|
||||
// DBG_VALUE - a mapping of the llvm.dbg.value intrinsic
|
||||
DBG_VALUE = 11
|
||||
};
|
||||
} // end namespace TargetOpcode
|
||||
} // end namespace llvm
|
||||
|
||||
#endif
|
@ -425,8 +425,7 @@ void AggressiveAntiDepBreaker::PrescanInstruction(MachineInstr *MI,
|
||||
unsigned Reg = MO.getReg();
|
||||
if (Reg == 0) continue;
|
||||
// Ignore KILLs and passthru registers for liveness...
|
||||
if ((MI->getOpcode() == TargetInstrInfo::KILL) ||
|
||||
(PassthruRegs.count(Reg) != 0))
|
||||
if (MI->isKill() || (PassthruRegs.count(Reg) != 0))
|
||||
continue;
|
||||
|
||||
// Update def for Reg and aliases.
|
||||
@ -481,7 +480,7 @@ void AggressiveAntiDepBreaker::ScanInstruction(MachineInstr *MI,
|
||||
|
||||
// Form a group of all defs and uses of a KILL instruction to ensure
|
||||
// that all registers are renamed as a group.
|
||||
if (MI->getOpcode() == TargetInstrInfo::KILL) {
|
||||
if (MI->isKill()) {
|
||||
DEBUG(dbgs() << "\tKill Group:");
|
||||
|
||||
unsigned FirstReg = 0;
|
||||
@ -792,7 +791,7 @@ unsigned AggressiveAntiDepBreaker::BreakAntiDependencies(
|
||||
|
||||
// Ignore KILL instructions (they form a group in ScanInstruction
|
||||
// but don't cause any anti-dependence breaking themselves)
|
||||
if (MI->getOpcode() != TargetInstrInfo::KILL) {
|
||||
if (!MI->isKill()) {
|
||||
// Attempt to break each anti-dependency...
|
||||
for (unsigned i = 0, e = Edges.size(); i != e; ++i) {
|
||||
SDep *Edge = Edges[i];
|
||||
|
@ -348,18 +348,18 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
processDebugLoc(II, true);
|
||||
|
||||
switch (II->getOpcode()) {
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetInstrInfo::GC_LABEL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
case TargetOpcode::GC_LABEL:
|
||||
printLabelInst(II);
|
||||
break;
|
||||
case TargetInstrInfo::INLINEASM:
|
||||
case TargetOpcode::INLINEASM:
|
||||
printInlineAsm(II);
|
||||
break;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
printImplicitDef(II);
|
||||
break;
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::KILL:
|
||||
printKill(II);
|
||||
break;
|
||||
default:
|
||||
|
@ -133,7 +133,7 @@ bool BranchFolder::OptimizeImpDefsBlock(MachineBasicBlock *MBB) {
|
||||
SmallSet<unsigned, 4> ImpDefRegs;
|
||||
MachineBasicBlock::iterator I = MBB->begin();
|
||||
while (I != MBB->end()) {
|
||||
if (I->getOpcode() != TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (!I->isImplicitDef())
|
||||
break;
|
||||
unsigned Reg = I->getOperand(0).getReg();
|
||||
ImpDefRegs.insert(Reg);
|
||||
@ -340,7 +340,7 @@ static unsigned ComputeCommonTailLength(MachineBasicBlock *MBB1,
|
||||
// relative order. This is untenable because normal compiler
|
||||
// optimizations (like this one) may reorder and/or merge these
|
||||
// directives.
|
||||
I1->getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
I1->isInlineAsm()) {
|
||||
++I1; ++I2;
|
||||
break;
|
||||
}
|
||||
|
@ -58,13 +58,7 @@ bool CalculateSpillWeights::runOnMachineFunction(MachineFunction &fn) {
|
||||
for (MachineBasicBlock::const_iterator mii = mbb->begin(), mie = mbb->end();
|
||||
mii != mie; ++mii) {
|
||||
const MachineInstr *mi = mii;
|
||||
if (tii->isIdentityCopy(*mi))
|
||||
continue;
|
||||
|
||||
if (mi->getOpcode() == TargetInstrInfo::IMPLICIT_DEF)
|
||||
continue;
|
||||
|
||||
if (mi->getOpcode() == TargetInstrInfo::DEBUG_VALUE)
|
||||
if (tii->isIdentityCopy(*mi) || mi->isImplicitDef() || mi->isDebugValue())
|
||||
continue;
|
||||
|
||||
for (unsigned i = 0, e = mi->getNumOperands(); i != e; ++i) {
|
||||
|
@ -106,7 +106,7 @@ bool CodePlacementOpt::HasAnalyzableTerminator(MachineBasicBlock *MBB) {
|
||||
// At the time of this writing, there are blocks which AnalyzeBranch
|
||||
// thinks end in single uncoditional branches, yet which have two CFG
|
||||
// successors. Code in this file is not prepared to reason about such things.
|
||||
if (!MBB->empty() && MBB->back().getOpcode() == TargetInstrInfo::EH_LABEL)
|
||||
if (!MBB->empty() && MBB->back().isEHLabel())
|
||||
return false;
|
||||
|
||||
// Aggressively handle return blocks and similar constructs.
|
||||
|
@ -111,7 +111,7 @@ bool DeadMachineInstructionElim::runOnMachineFunction(MachineFunction &MF) {
|
||||
MIE = MBB->rend(); MII != MIE; ) {
|
||||
MachineInstr *MI = &*MII;
|
||||
|
||||
if (MI->getOpcode()==TargetInstrInfo::DEBUG_VALUE) {
|
||||
if (MI->isDebugValue()) {
|
||||
// Don't delete the DEBUG_VALUE itself, but if its Value operand is
|
||||
// a vreg and this is the only use, substitute an undef operand;
|
||||
// the former operand will then be deleted normally.
|
||||
|
@ -335,7 +335,7 @@ unsigned MachineCodeAnalysis::InsertLabel(MachineBasicBlock &MBB,
|
||||
unsigned Label = MMI->NextLabelID();
|
||||
|
||||
BuildMI(MBB, MI, DL,
|
||||
TII->get(TargetInstrInfo::GC_LABEL)).addImm(Label);
|
||||
TII->get(TargetOpcode::GC_LABEL)).addImm(Label);
|
||||
|
||||
return Label;
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ void LiveIntervals::printInstrs(raw_ostream &OS) const {
|
||||
<< ":\t\t# derived from " << mbbi->getName() << "\n";
|
||||
for (MachineBasicBlock::iterator mii = mbbi->begin(),
|
||||
mie = mbbi->end(); mii != mie; ++mii) {
|
||||
if (mii->getOpcode()==TargetInstrInfo::DEBUG_VALUE)
|
||||
if (mii->isDebugValue())
|
||||
OS << SlotIndex::getEmptyKey() << '\t' << *mii;
|
||||
else
|
||||
OS << getInstructionIndex(mii) << '\t' << *mii;
|
||||
@ -288,9 +288,7 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
|
||||
VNInfo *ValNo;
|
||||
MachineInstr *CopyMI = NULL;
|
||||
unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
|
||||
if (mi->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
mi->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
mi->getOpcode() == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
if (mi->isExtractSubreg() || mi->isInsertSubreg() || mi->isSubregToReg() ||
|
||||
tii_->isMoveInstr(*mi, SrcReg, DstReg, SrcSubReg, DstSubReg))
|
||||
CopyMI = mi;
|
||||
// Earlyclobbers move back one.
|
||||
@ -460,9 +458,7 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
|
||||
VNInfo *ValNo;
|
||||
MachineInstr *CopyMI = NULL;
|
||||
unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
|
||||
if (mi->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
mi->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
mi->getOpcode() == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
if (mi->isExtractSubreg() || mi->isInsertSubreg() || mi->isSubregToReg()||
|
||||
tii_->isMoveInstr(*mi, SrcReg, DstReg, SrcSubReg, DstSubReg))
|
||||
CopyMI = mi;
|
||||
ValNo = interval.getNextValue(defIndex, CopyMI, true, VNInfoAllocator);
|
||||
@ -577,9 +573,7 @@ void LiveIntervals::handleRegisterDef(MachineBasicBlock *MBB,
|
||||
else if (allocatableRegs_[MO.getReg()]) {
|
||||
MachineInstr *CopyMI = NULL;
|
||||
unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
|
||||
if (MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
if (MI->isExtractSubreg() || MI->isInsertSubreg() || MI->isSubregToReg() ||
|
||||
tii_->isMoveInstr(*MI, SrcReg, DstReg, SrcSubReg, DstSubReg))
|
||||
CopyMI = MI;
|
||||
handlePhysicalRegisterDef(MBB, MI, MIIdx, MO,
|
||||
@ -696,7 +690,7 @@ void LiveIntervals::computeIntervals() {
|
||||
for (MachineBasicBlock::iterator MI = MBB->begin(), miEnd = MBB->end();
|
||||
MI != miEnd; ++MI) {
|
||||
DEBUG(dbgs() << MIIndex << "\t" << *MI);
|
||||
if (MI->getOpcode()==TargetInstrInfo::DEBUG_VALUE)
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
|
||||
// Handle defs.
|
||||
@ -745,7 +739,7 @@ unsigned LiveIntervals::getVNInfoSourceReg(const VNInfo *VNI) const {
|
||||
if (!VNI->getCopy())
|
||||
return 0;
|
||||
|
||||
if (VNI->getCopy()->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (VNI->getCopy()->isExtractSubreg()) {
|
||||
// If it's extracting out of a physical register, return the sub-register.
|
||||
unsigned Reg = VNI->getCopy()->getOperand(1).getReg();
|
||||
if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
|
||||
@ -759,8 +753,8 @@ unsigned LiveIntervals::getVNInfoSourceReg(const VNInfo *VNI) const {
|
||||
Reg = tri_->getSubReg(Reg, VNI->getCopy()->getOperand(2).getImm());
|
||||
}
|
||||
return Reg;
|
||||
} else if (VNI->getCopy()->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
VNI->getCopy()->getOpcode() == TargetInstrInfo::SUBREG_TO_REG)
|
||||
} else if (VNI->getCopy()->isInsertSubreg() ||
|
||||
VNI->getCopy()->isSubregToReg())
|
||||
return VNI->getCopy()->getOperand(2).getReg();
|
||||
|
||||
unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
|
||||
@ -922,7 +916,7 @@ bool LiveIntervals::tryFoldMemoryOperand(MachineInstr* &MI,
|
||||
SmallVector<unsigned, 2> &Ops,
|
||||
bool isSS, int Slot, unsigned Reg) {
|
||||
// If it is an implicit def instruction, just delete it.
|
||||
if (MI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF) {
|
||||
if (MI->isImplicitDef()) {
|
||||
RemoveMachineInstrFromMaps(MI);
|
||||
vrm.RemoveMachineInstrFromMaps(MI);
|
||||
MI->eraseFromParent();
|
||||
@ -1528,7 +1522,7 @@ LiveIntervals::handleSpilledImpDefs(const LiveInterval &li, VirtRegMap &vrm,
|
||||
MachineInstr *MI = &*ri;
|
||||
++ri;
|
||||
if (O.isDef()) {
|
||||
assert(MI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF &&
|
||||
assert(MI->isImplicitDef() &&
|
||||
"Register def was not rewritten?");
|
||||
RemoveMachineInstrFromMaps(MI);
|
||||
vrm.RemoveMachineInstrFromMaps(MI);
|
||||
@ -2059,7 +2053,7 @@ bool LiveIntervals::spillPhysRegAroundRegDefsUses(const LiveInterval &li,
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Ran out of registers during register allocation!";
|
||||
if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
if (MI->isInlineAsm()) {
|
||||
Msg << "\nPlease check your inline asm statement for invalid "
|
||||
<< "constraints:\n";
|
||||
MI->print(Msg, tm_);
|
||||
|
@ -543,7 +543,7 @@ bool LiveVariables::runOnMachineFunction(MachineFunction &mf) {
|
||||
for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
|
||||
I != E; ++I) {
|
||||
MachineInstr *MI = I;
|
||||
if (MI->getOpcode()==TargetInstrInfo::DEBUG_VALUE)
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
DistanceMap.insert(std::make_pair(MI, Dist++));
|
||||
|
||||
@ -552,7 +552,7 @@ bool LiveVariables::runOnMachineFunction(MachineFunction &mf) {
|
||||
|
||||
// Unless it is a PHI node. In this case, ONLY process the DEF, not any
|
||||
// of the uses. They will be handled in other basic blocks.
|
||||
if (MI->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (MI->isPHI())
|
||||
NumOperandsToProcess = 1;
|
||||
|
||||
SmallVector<unsigned, 4> UseRegs;
|
||||
@ -694,7 +694,7 @@ void LiveVariables::analyzePHINodes(const MachineFunction& Fn) {
|
||||
for (MachineFunction::const_iterator I = Fn.begin(), E = Fn.end();
|
||||
I != E; ++I)
|
||||
for (MachineBasicBlock::const_iterator BBI = I->begin(), BBE = I->end();
|
||||
BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI)
|
||||
BBI != BBE && BBI->isPHI(); ++BBI)
|
||||
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
|
||||
PHIVarInfo[BBI->getOperand(i + 1).getMBB()->getNumber()]
|
||||
.push_back(BBI->getOperand(i).getReg());
|
||||
@ -773,8 +773,7 @@ void LiveVariables::addNewBlock(MachineBasicBlock *BB,
|
||||
|
||||
// All registers used by PHI nodes in SuccBB must be live through BB.
|
||||
for (MachineBasicBlock::const_iterator BBI = SuccBB->begin(),
|
||||
BBE = SuccBB->end();
|
||||
BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI)
|
||||
BBE = SuccBB->end(); BBI != BBE && BBI->isPHI(); ++BBI)
|
||||
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
|
||||
if (BBI->getOperand(i+1).getMBB() == BB)
|
||||
getVarInfo(BBI->getOperand(i).getReg()).AliveBlocks.set(NumNew);
|
||||
|
@ -129,7 +129,7 @@ bool LowerSubregsInstructionPass::LowerExtract(MachineInstr *MI) {
|
||||
if (MI->getOperand(1).isKill()) {
|
||||
// We must make sure the super-register gets killed. Replace the
|
||||
// instruction with KILL.
|
||||
MI->setDesc(TII->get(TargetInstrInfo::KILL));
|
||||
MI->setDesc(TII->get(TargetOpcode::KILL));
|
||||
MI->RemoveOperand(2); // SubIdx
|
||||
DEBUG(dbgs() << "subreg: replace by: " << *MI);
|
||||
return true;
|
||||
@ -242,7 +242,7 @@ bool LowerSubregsInstructionPass::LowerInsert(MachineInstr *MI) {
|
||||
// <undef>, we need to make sure it is alive by inserting a KILL
|
||||
if (MI->getOperand(1).isUndef() && !MI->getOperand(0).isDead()) {
|
||||
MachineInstrBuilder MIB = BuildMI(*MBB, MI, MI->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::KILL), DstReg);
|
||||
TII->get(TargetOpcode::KILL), DstReg);
|
||||
if (MI->getOperand(2).isUndef())
|
||||
MIB.addReg(InsReg, RegState::Undef);
|
||||
else
|
||||
@ -260,7 +260,7 @@ bool LowerSubregsInstructionPass::LowerInsert(MachineInstr *MI) {
|
||||
// If the source register being inserted is undef, then this becomes a
|
||||
// KILL.
|
||||
BuildMI(*MBB, MI, MI->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::KILL), DstSubReg);
|
||||
TII->get(TargetOpcode::KILL), DstSubReg);
|
||||
else {
|
||||
bool Emitted = TII->copyRegToReg(*MBB, MI, DstSubReg, InsReg, TRC0, TRC1);
|
||||
(void)Emitted;
|
||||
@ -314,11 +314,11 @@ bool LowerSubregsInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
||||
mi != me;) {
|
||||
MachineBasicBlock::iterator nmi = llvm::next(mi);
|
||||
MachineInstr *MI = mi;
|
||||
if (MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (MI->isExtractSubreg()) {
|
||||
MadeChange |= LowerExtract(MI);
|
||||
} else if (MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG) {
|
||||
} else if (MI->isInsertSubreg()) {
|
||||
MadeChange |= LowerInsert(MI);
|
||||
} else if (MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
} else if (MI->isSubregToReg()) {
|
||||
MadeChange |= LowerSubregToReg(MI);
|
||||
}
|
||||
mi = nmi;
|
||||
|
@ -548,8 +548,7 @@ MachineBasicBlock::findDebugLoc(MachineBasicBlock::iterator &MBBI) {
|
||||
if (MBBI != E) {
|
||||
// Skip debug declarations, we don't want a DebugLoc from them.
|
||||
MachineBasicBlock::iterator MBBI2 = MBBI;
|
||||
while (MBBI2 != E &&
|
||||
MBBI2->getOpcode()==TargetInstrInfo::DEBUG_VALUE)
|
||||
while (MBBI2 != E && MBBI2->isDebugValue())
|
||||
MBBI2++;
|
||||
if (MBBI2 != E)
|
||||
DL = MBBI2->getDebugLoc();
|
||||
|
@ -740,20 +740,6 @@ unsigned MachineInstr::getNumExplicitOperands() const {
|
||||
}
|
||||
|
||||
|
||||
/// isLabel - Returns true if the MachineInstr represents a label.
|
||||
///
|
||||
bool MachineInstr::isLabel() const {
|
||||
return getOpcode() == TargetInstrInfo::DBG_LABEL ||
|
||||
getOpcode() == TargetInstrInfo::EH_LABEL ||
|
||||
getOpcode() == TargetInstrInfo::GC_LABEL;
|
||||
}
|
||||
|
||||
/// isDebugLabel - Returns true if the MachineInstr represents a debug label.
|
||||
///
|
||||
bool MachineInstr::isDebugLabel() const {
|
||||
return getOpcode() == TargetInstrInfo::DBG_LABEL;
|
||||
}
|
||||
|
||||
/// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of
|
||||
/// the specific register or -1 if it is not found. It further tightens
|
||||
/// the search criteria to a use that kills the register if isKill is true.
|
||||
@ -819,7 +805,7 @@ int MachineInstr::findFirstPredOperandIdx() const {
|
||||
/// first tied use operand index by reference is UseOpIdx is not null.
|
||||
bool MachineInstr::
|
||||
isRegTiedToUseOperand(unsigned DefOpIdx, unsigned *UseOpIdx) const {
|
||||
if (getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
if (isInlineAsm()) {
|
||||
assert(DefOpIdx >= 2);
|
||||
const MachineOperand &MO = getOperand(DefOpIdx);
|
||||
if (!MO.isReg() || !MO.isDef() || MO.getReg() == 0)
|
||||
@ -878,7 +864,7 @@ isRegTiedToUseOperand(unsigned DefOpIdx, unsigned *UseOpIdx) const {
|
||||
/// operand index by reference.
|
||||
bool MachineInstr::
|
||||
isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx) const {
|
||||
if (getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
if (isInlineAsm()) {
|
||||
const MachineOperand &MO = getOperand(UseOpIdx);
|
||||
if (!MO.isReg() || !MO.isUse() || MO.getReg() == 0)
|
||||
return false;
|
||||
@ -1088,7 +1074,7 @@ bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
|
||||
/// merges together the same virtual register, return the register, otherwise
|
||||
/// return 0.
|
||||
unsigned MachineInstr::isConstantValuePHI() const {
|
||||
if (getOpcode() != TargetInstrInfo::PHI)
|
||||
if (!isPHI())
|
||||
return 0;
|
||||
assert(getNumOperands() >= 3 &&
|
||||
"It's illegal to have a PHI without source operands");
|
||||
|
@ -336,7 +336,7 @@ static bool HasPHIUses(unsigned Reg, MachineRegisterInfo *RegInfo) {
|
||||
for (MachineRegisterInfo::use_iterator UI = RegInfo->use_begin(Reg),
|
||||
UE = RegInfo->use_end(); UI != UE; ++UI) {
|
||||
MachineInstr *UseMI = &*UI;
|
||||
if (UseMI->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (UseMI->isPHI())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -363,7 +363,7 @@ bool MachineLICM::isLoadFromConstantMemory(MachineInstr *MI) {
|
||||
/// IsProfitableToHoist - Return true if it is potentially profitable to hoist
|
||||
/// the given loop invariant.
|
||||
bool MachineLICM::IsProfitableToHoist(MachineInstr &MI) {
|
||||
if (MI.getOpcode() == TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (MI.isImplicitDef())
|
||||
return false;
|
||||
|
||||
// FIXME: For now, only hoist re-materilizable instructions. LICM will
|
||||
|
@ -92,13 +92,13 @@ unsigned LookForIdenticalPHI(MachineBasicBlock *BB,
|
||||
return 0;
|
||||
|
||||
MachineBasicBlock::iterator I = BB->front();
|
||||
if (I->getOpcode() != TargetInstrInfo::PHI)
|
||||
if (!I->isPHI())
|
||||
return 0;
|
||||
|
||||
AvailableValsTy AVals;
|
||||
for (unsigned i = 0, e = PredValues.size(); i != e; ++i)
|
||||
AVals[PredValues[i].first] = PredValues[i].second;
|
||||
while (I != BB->end() && I->getOpcode() == TargetInstrInfo::PHI) {
|
||||
while (I != BB->end() && I->isPHI()) {
|
||||
bool Same = true;
|
||||
for (unsigned i = 1, e = I->getNumOperands(); i != e; i += 2) {
|
||||
unsigned SrcReg = I->getOperand(i).getReg();
|
||||
@ -155,7 +155,7 @@ unsigned MachineSSAUpdater::GetValueInMiddleOfBlock(MachineBasicBlock *BB) {
|
||||
// If there are no predecessors, just return undef.
|
||||
if (BB->pred_empty()) {
|
||||
// Insert an implicit_def to represent an undef value.
|
||||
MachineInstr *NewDef = InsertNewDef(TargetInstrInfo::IMPLICIT_DEF,
|
||||
MachineInstr *NewDef = InsertNewDef(TargetOpcode::IMPLICIT_DEF,
|
||||
BB, BB->getFirstTerminator(),
|
||||
VRC, MRI, TII);
|
||||
return NewDef->getOperand(0).getReg();
|
||||
@ -192,7 +192,7 @@ unsigned MachineSSAUpdater::GetValueInMiddleOfBlock(MachineBasicBlock *BB) {
|
||||
|
||||
// Otherwise, we do need a PHI: insert one now.
|
||||
MachineBasicBlock::iterator Loc = BB->empty() ? BB->end() : BB->front();
|
||||
MachineInstr *InsertedPHI = InsertNewDef(TargetInstrInfo::PHI, BB,
|
||||
MachineInstr *InsertedPHI = InsertNewDef(TargetOpcode::PHI, BB,
|
||||
Loc, VRC, MRI, TII);
|
||||
|
||||
// Fill in all the predecessors of the PHI.
|
||||
@ -231,7 +231,7 @@ MachineBasicBlock *findCorrespondingPred(const MachineInstr *MI,
|
||||
void MachineSSAUpdater::RewriteUse(MachineOperand &U) {
|
||||
MachineInstr *UseMI = U.getParent();
|
||||
unsigned NewVR = 0;
|
||||
if (UseMI->getOpcode() == TargetInstrInfo::PHI) {
|
||||
if (UseMI->isPHI()) {
|
||||
MachineBasicBlock *SourceBB = findCorrespondingPred(UseMI, &U);
|
||||
NewVR = GetValueAtEndOfBlockInternal(SourceBB);
|
||||
} else {
|
||||
@ -277,7 +277,7 @@ unsigned MachineSSAUpdater::GetValueAtEndOfBlockInternal(MachineBasicBlock *BB){
|
||||
// it. When we get back to the first instance of the recursion we will fill
|
||||
// in the PHI node.
|
||||
MachineBasicBlock::iterator Loc = BB->empty() ? BB->end() : BB->front();
|
||||
MachineInstr *NewPHI = InsertNewDef(TargetInstrInfo::PHI, BB, Loc,
|
||||
MachineInstr *NewPHI = InsertNewDef(TargetOpcode::PHI, BB, Loc,
|
||||
VRC, MRI,TII);
|
||||
unsigned NewVR = NewPHI->getOperand(0).getReg();
|
||||
InsertRes.first->second = NewVR;
|
||||
@ -289,7 +289,7 @@ unsigned MachineSSAUpdater::GetValueAtEndOfBlockInternal(MachineBasicBlock *BB){
|
||||
// be invalidated.
|
||||
if (BB->pred_empty()) {
|
||||
// Insert an implicit_def to represent an undef value.
|
||||
MachineInstr *NewDef = InsertNewDef(TargetInstrInfo::IMPLICIT_DEF,
|
||||
MachineInstr *NewDef = InsertNewDef(TargetOpcode::IMPLICIT_DEF,
|
||||
BB, BB->getFirstTerminator(),
|
||||
VRC, MRI, TII);
|
||||
return InsertRes.first->second = NewDef->getOperand(0).getReg();
|
||||
@ -358,7 +358,7 @@ unsigned MachineSSAUpdater::GetValueAtEndOfBlockInternal(MachineBasicBlock *BB){
|
||||
MachineInstr *InsertedPHI;
|
||||
if (InsertedVal == 0) {
|
||||
MachineBasicBlock::iterator Loc = BB->empty() ? BB->end() : BB->front();
|
||||
InsertedPHI = InsertNewDef(TargetInstrInfo::PHI, BB, Loc,
|
||||
InsertedPHI = InsertNewDef(TargetOpcode::PHI, BB, Loc,
|
||||
VRC, MRI, TII);
|
||||
InsertedVal = InsertedPHI->getOperand(0).getReg();
|
||||
} else {
|
||||
|
@ -77,7 +77,7 @@ bool MachineSinking::AllUsesDominatedByBlock(unsigned Reg,
|
||||
// Determine the block of the use.
|
||||
MachineInstr *UseInst = &*I;
|
||||
MachineBasicBlock *UseBlock = UseInst->getParent();
|
||||
if (UseInst->getOpcode() == TargetInstrInfo::PHI) {
|
||||
if (UseInst->isPHI()) {
|
||||
// PHI nodes use the operand in the predecessor block, not the block with
|
||||
// the PHI.
|
||||
UseBlock = UseInst->getOperand(I.getOperandNo()+1).getMBB();
|
||||
@ -269,8 +269,7 @@ bool MachineSinking::SinkInstruction(MachineInstr *MI, bool &SawStore) {
|
||||
|
||||
// Determine where to insert into. Skip phi nodes.
|
||||
MachineBasicBlock::iterator InsertPos = SuccToSinkTo->begin();
|
||||
while (InsertPos != SuccToSinkTo->end() &&
|
||||
InsertPos->getOpcode() == TargetInstrInfo::PHI)
|
||||
while (InsertPos != SuccToSinkTo->end() && InsertPos->isPHI())
|
||||
++InsertPos;
|
||||
|
||||
// Move the instruction.
|
||||
|
@ -590,7 +590,7 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
|
||||
// must be live in. PHI instructions are handled separately.
|
||||
if (MInfo.regsKilled.count(Reg))
|
||||
report("Using a killed virtual register", MO, MONum);
|
||||
else if (MI->getOpcode() != TargetInstrInfo::PHI)
|
||||
else if (!MI->isPHI())
|
||||
MInfo.vregsLiveIn.insert(std::make_pair(Reg, MI));
|
||||
}
|
||||
}
|
||||
@ -650,10 +650,8 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
|
||||
}
|
||||
|
||||
case MachineOperand::MO_MachineBasicBlock:
|
||||
if (MI->getOpcode() == TargetInstrInfo::PHI) {
|
||||
if (!MO->getMBB()->isSuccessor(MI->getParent()))
|
||||
report("PHI operand is not in the CFG", MO, MONum);
|
||||
}
|
||||
if (MI->isPHI() && !MO->getMBB()->isSuccessor(MI->getParent()))
|
||||
report("PHI operand is not in the CFG", MO, MONum);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -783,7 +781,7 @@ void MachineVerifier::calcRegsRequired() {
|
||||
// calcRegsPassed has been run so BBInfo::isLiveOut is valid.
|
||||
void MachineVerifier::checkPHIOps(const MachineBasicBlock *MBB) {
|
||||
for (MachineBasicBlock::const_iterator BBI = MBB->begin(), BBE = MBB->end();
|
||||
BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI) {
|
||||
BBI != BBE && BBI->isPHI(); ++BBI) {
|
||||
DenseSet<const MachineBasicBlock*> seen;
|
||||
|
||||
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) {
|
||||
|
@ -110,7 +110,7 @@ bool OptimizeExts::OptimizeInstr(MachineInstr *MI, MachineBasicBlock *MBB,
|
||||
MachineInstr *UseMI = &*UI;
|
||||
if (UseMI == MI)
|
||||
continue;
|
||||
if (UseMI->getOpcode() == TargetInstrInfo::PHI) {
|
||||
if (UseMI->isPHI()) {
|
||||
ExtendLife = false;
|
||||
continue;
|
||||
}
|
||||
@ -150,7 +150,7 @@ bool OptimizeExts::OptimizeInstr(MachineInstr *MI, MachineBasicBlock *MBB,
|
||||
UI = MRI->use_begin(DstReg);
|
||||
for (MachineRegisterInfo::use_iterator UE = MRI->use_end(); UI != UE;
|
||||
++UI)
|
||||
if (UI->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (UI->isPHI())
|
||||
PHIBBs.insert(UI->getParent());
|
||||
|
||||
const TargetRegisterClass *RC = MRI->getRegClass(SrcReg);
|
||||
@ -162,7 +162,7 @@ bool OptimizeExts::OptimizeInstr(MachineInstr *MI, MachineBasicBlock *MBB,
|
||||
continue;
|
||||
unsigned NewVR = MRI->createVirtualRegister(RC);
|
||||
BuildMI(*UseMBB, UseMI, UseMI->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::EXTRACT_SUBREG), NewVR)
|
||||
TII->get(TargetOpcode::EXTRACT_SUBREG), NewVR)
|
||||
.addReg(DstReg).addImm(SubIdx);
|
||||
UseMO->setReg(NewVR);
|
||||
++NumReuse;
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "llvm/CodeGen/MachineInstr.h"
|
||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Function.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
@ -95,14 +96,14 @@ bool llvm::PHIElimination::runOnMachineFunction(MachineFunction &Fn) {
|
||||
///
|
||||
bool llvm::PHIElimination::EliminatePHINodes(MachineFunction &MF,
|
||||
MachineBasicBlock &MBB) {
|
||||
if (MBB.empty() || MBB.front().getOpcode() != TargetInstrInfo::PHI)
|
||||
if (MBB.empty() || !MBB.front().isPHI())
|
||||
return false; // Quick exit for basic blocks without PHIs.
|
||||
|
||||
// Get an iterator to the first instruction after the last PHI node (this may
|
||||
// also be the end of the basic block).
|
||||
MachineBasicBlock::iterator AfterPHIsIt = SkipPHIsAndLabels(MBB, MBB.begin());
|
||||
|
||||
while (MBB.front().getOpcode() == TargetInstrInfo::PHI)
|
||||
while (MBB.front().isPHI())
|
||||
LowerAtomicPHINode(MBB, AfterPHIsIt);
|
||||
|
||||
return true;
|
||||
@ -115,7 +116,7 @@ static bool isSourceDefinedByImplicitDef(const MachineInstr *MPhi,
|
||||
for (unsigned i = 1; i != MPhi->getNumOperands(); i += 2) {
|
||||
unsigned SrcReg = MPhi->getOperand(i).getReg();
|
||||
const MachineInstr *DefMI = MRI->getVRegDef(SrcReg);
|
||||
if (!DefMI || DefMI->getOpcode() != TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (!DefMI || !DefMI->isImplicitDef())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -197,7 +198,7 @@ void llvm::PHIElimination::LowerAtomicPHINode(
|
||||
// If all sources of a PHI node are implicit_def, just emit an
|
||||
// implicit_def instead of a copy.
|
||||
BuildMI(MBB, AfterPHIsIt, MPhi->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::IMPLICIT_DEF), DestReg);
|
||||
TII->get(TargetOpcode::IMPLICIT_DEF), DestReg);
|
||||
else {
|
||||
// Can we reuse an earlier PHI node? This only happens for critical edges,
|
||||
// typically those created by tail duplication.
|
||||
@ -281,7 +282,7 @@ void llvm::PHIElimination::LowerAtomicPHINode(
|
||||
// If source is defined by an implicit def, there is no need to insert a
|
||||
// copy.
|
||||
MachineInstr *DefMI = MRI->getVRegDef(SrcReg);
|
||||
if (DefMI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF) {
|
||||
if (DefMI->isImplicitDef()) {
|
||||
ImpDefs.insert(DefMI);
|
||||
continue;
|
||||
}
|
||||
@ -375,7 +376,7 @@ void llvm::PHIElimination::analyzePHINodes(const MachineFunction& Fn) {
|
||||
for (MachineFunction::const_iterator I = Fn.begin(), E = Fn.end();
|
||||
I != E; ++I)
|
||||
for (MachineBasicBlock::const_iterator BBI = I->begin(), BBE = I->end();
|
||||
BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI)
|
||||
BBI != BBE && BBI->isPHI(); ++BBI)
|
||||
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2)
|
||||
++VRegPHIUseCount[BBVRegPair(BBI->getOperand(i+1).getMBB()->getNumber(),
|
||||
BBI->getOperand(i).getReg())];
|
||||
@ -384,12 +385,11 @@ void llvm::PHIElimination::analyzePHINodes(const MachineFunction& Fn) {
|
||||
bool llvm::PHIElimination::SplitPHIEdges(MachineFunction &MF,
|
||||
MachineBasicBlock &MBB,
|
||||
LiveVariables &LV) {
|
||||
if (MBB.empty() || MBB.front().getOpcode() != TargetInstrInfo::PHI ||
|
||||
MBB.isLandingPad())
|
||||
if (MBB.empty() || !MBB.front().isPHI() || MBB.isLandingPad())
|
||||
return false; // Quick exit for basic blocks without PHIs.
|
||||
|
||||
for (MachineBasicBlock::const_iterator BBI = MBB.begin(), BBE = MBB.end();
|
||||
BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI) {
|
||||
BBI != BBE && BBI->isPHI(); ++BBI) {
|
||||
for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) {
|
||||
unsigned Reg = BBI->getOperand(i).getReg();
|
||||
MachineBasicBlock *PreMBB = BBI->getOperand(i+1).getMBB();
|
||||
@ -438,7 +438,7 @@ MachineBasicBlock *PHIElimination::SplitCriticalEdge(MachineBasicBlock *A,
|
||||
|
||||
// Fix PHI nodes in B so they refer to NMBB instead of A
|
||||
for (MachineBasicBlock::iterator i = B->begin(), e = B->end();
|
||||
i != e && i->getOpcode() == TargetInstrInfo::PHI; ++i)
|
||||
i != e && i->isPHI(); ++i)
|
||||
for (unsigned ni = 1, ne = i->getNumOperands(); ni != ne; ni += 2)
|
||||
if (i->getOperand(ni+1).getMBB() == A)
|
||||
i->getOperand(ni+1).setMBB(NMBB);
|
||||
|
@ -14,10 +14,11 @@
|
||||
#include "llvm/ADT/SmallSet.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class LiveVariables;
|
||||
|
||||
/// Lower PHI instructions to copies.
|
||||
class PHIElimination : public MachineFunctionPass {
|
||||
MachineRegisterInfo *MRI; // Machine register information
|
||||
@ -112,8 +113,7 @@ namespace llvm {
|
||||
MachineBasicBlock::iterator I) {
|
||||
// Rather than assuming that EH labels come before other kinds of labels,
|
||||
// just skip all labels.
|
||||
while (I != MBB.end() &&
|
||||
(I->getOpcode() == TargetInstrInfo::PHI || I->isLabel()))
|
||||
while (I != MBB.end() && (I->isPHI() || I->isLabel()))
|
||||
++I;
|
||||
return I;
|
||||
}
|
||||
|
@ -686,8 +686,7 @@ void PreAllocSplitting::ReconstructLiveInterval(LiveInterval* LI) {
|
||||
SlotIndex DefIdx = LIs->getInstructionIndex(&*DI);
|
||||
DefIdx = DefIdx.getDefIndex();
|
||||
|
||||
assert(DI->getOpcode() != TargetInstrInfo::PHI &&
|
||||
"PHI instr in code during pre-alloc splitting.");
|
||||
assert(!DI->isPHI() && "PHI instr in code during pre-alloc splitting.");
|
||||
VNInfo* NewVN = LI->getNextValue(DefIdx, 0, true, Alloc);
|
||||
|
||||
// If the def is a move, set the copy field.
|
||||
|
@ -49,9 +49,9 @@ bool ProcessImplicitDefs::CanTurnIntoImplicitDef(MachineInstr *MI,
|
||||
Reg == SrcReg)
|
||||
return true;
|
||||
|
||||
if (OpIdx == 2 && MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG)
|
||||
if (OpIdx == 2 && MI->isSubregToReg())
|
||||
return true;
|
||||
if (OpIdx == 1 && MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG)
|
||||
if (OpIdx == 1 && MI->isExtractSubreg())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@ -88,7 +88,7 @@ bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &fn) {
|
||||
I != E; ) {
|
||||
MachineInstr *MI = &*I;
|
||||
++I;
|
||||
if (MI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF) {
|
||||
if (MI->isImplicitDef()) {
|
||||
unsigned Reg = MI->getOperand(0).getReg();
|
||||
ImpDefRegs.insert(Reg);
|
||||
if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
|
||||
@ -99,7 +99,7 @@ bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &fn) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG) {
|
||||
if (MI->isInsertSubreg()) {
|
||||
MachineOperand &MO = MI->getOperand(2);
|
||||
if (ImpDefRegs.count(MO.getReg())) {
|
||||
// %reg1032<def> = INSERT_SUBREG %reg1032, undef, 2
|
||||
@ -127,7 +127,7 @@ bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &fn) {
|
||||
// Use is a copy, just turn it into an implicit_def.
|
||||
if (CanTurnIntoImplicitDef(MI, Reg, i, tii_)) {
|
||||
bool isKill = MO.isKill();
|
||||
MI->setDesc(tii_->get(TargetInstrInfo::IMPLICIT_DEF));
|
||||
MI->setDesc(tii_->get(TargetOpcode::IMPLICIT_DEF));
|
||||
for (int j = MI->getNumOperands() - 1, ee = 0; j > ee; --j)
|
||||
MI->RemoveOperand(j);
|
||||
if (isKill) {
|
||||
@ -187,7 +187,7 @@ bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &fn) {
|
||||
for (MachineRegisterInfo::def_iterator DI = mri_->def_begin(Reg),
|
||||
DE = mri_->def_end(); DI != DE; ++DI) {
|
||||
MachineInstr *DeadImpDef = &*DI;
|
||||
if (DeadImpDef->getOpcode() != TargetInstrInfo::IMPLICIT_DEF) {
|
||||
if (!DeadImpDef->isImplicitDef()) {
|
||||
Skip = true;
|
||||
break;
|
||||
}
|
||||
@ -220,7 +220,7 @@ bool ProcessImplicitDefs::runOnMachineFunction(MachineFunction &fn) {
|
||||
unsigned SrcReg, DstReg, SrcSubReg, DstSubReg;
|
||||
if (tii_->isMoveInstr(*RMI, SrcReg, DstReg, SrcSubReg, DstSubReg) &&
|
||||
Reg == SrcReg) {
|
||||
RMI->setDesc(tii_->get(TargetInstrInfo::IMPLICIT_DEF));
|
||||
RMI->setDesc(tii_->get(TargetOpcode::IMPLICIT_DEF));
|
||||
|
||||
bool isKill = false;
|
||||
SmallVector<unsigned, 4> Ops;
|
||||
|
@ -161,7 +161,7 @@ void PEI::calculateCallsInformation(MachineFunction &Fn) {
|
||||
if (Size > MaxCallFrameSize) MaxCallFrameSize = Size;
|
||||
HasCalls = true;
|
||||
FrameSDOps.push_back(I);
|
||||
} else if (I->getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
} else if (I->isInlineAsm()) {
|
||||
// An InlineAsm might be a call; assume it is to get the stack frame
|
||||
// aligned correctly for calls.
|
||||
HasCalls = true;
|
||||
|
@ -531,7 +531,7 @@ MachineInstr *RALocal::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Ran out of registers during register allocation!";
|
||||
if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
if (MI->isInlineAsm()) {
|
||||
Msg << "\nPlease check your inline asm statement for invalid "
|
||||
<< "constraints:\n";
|
||||
MI->print(Msg, TM);
|
||||
@ -544,7 +544,7 @@ MachineInstr *RALocal::reloadVirtReg(MachineBasicBlock &MBB, MachineInstr *MI,
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Ran out of registers during register allocation!";
|
||||
if (MI->getOpcode() == TargetInstrInfo::INLINEASM) {
|
||||
if (MI->isInlineAsm()) {
|
||||
Msg << "\nPlease check your inline asm statement for invalid "
|
||||
<< "constraints:\n";
|
||||
MI->print(Msg, TM);
|
||||
@ -796,7 +796,7 @@ void RALocal::AllocateBasicBlock(MachineBasicBlock &MBB) {
|
||||
// have in them, then mark them unallocatable.
|
||||
// If any virtual regs are earlyclobber, allocate them now (before
|
||||
// freeing inputs that are killed).
|
||||
if (MI->getOpcode()==TargetInstrInfo::INLINEASM) {
|
||||
if (MI->isInlineAsm()) {
|
||||
for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
|
||||
MachineOperand& MO = MI->getOperand(i);
|
||||
if (MO.isReg() && MO.isDef() && MO.isEarlyClobber() &&
|
||||
@ -845,7 +845,7 @@ void RALocal::AllocateBasicBlock(MachineBasicBlock &MBB) {
|
||||
// change the DEBUG_VALUE to be undef, which prevents the register
|
||||
// from being reloaded here. Doing that would change the generated
|
||||
// code, unless another use immediately follows this instruction.
|
||||
if (MI->getOpcode()==TargetInstrInfo::DEBUG_VALUE &&
|
||||
if (MI->isDebugValue() &&
|
||||
MI->getNumOperands()==3 && MI->getOperand(0).isReg()) {
|
||||
unsigned VirtReg = MI->getOperand(0).getReg();
|
||||
if (VirtReg && TargetRegisterInfo::isVirtualRegister(VirtReg) &&
|
||||
|
@ -121,7 +121,7 @@ unsigned FastISel::getRegForValue(Value *V) {
|
||||
Reg = LocalValueMap[CE];
|
||||
} else if (isa<UndefValue>(V)) {
|
||||
Reg = createResultReg(TLI.getRegClassFor(VT));
|
||||
BuildMI(MBB, DL, TII.get(TargetInstrInfo::IMPLICIT_DEF), Reg);
|
||||
BuildMI(MBB, DL, TII.get(TargetOpcode::IMPLICIT_DEF), Reg);
|
||||
}
|
||||
|
||||
// If target-independent code couldn't handle the value, give target-specific
|
||||
@ -971,7 +971,7 @@ unsigned FastISel::FastEmitInst_extractsubreg(MVT RetVT,
|
||||
const TargetRegisterClass* RC = MRI.getRegClass(Op0);
|
||||
|
||||
unsigned ResultReg = createResultReg(TLI.getRegClassFor(RetVT));
|
||||
const TargetInstrDesc &II = TII.get(TargetInstrInfo::EXTRACT_SUBREG);
|
||||
const TargetInstrDesc &II = TII.get(TargetOpcode::EXTRACT_SUBREG);
|
||||
|
||||
if (II.getNumDefs() >= 1)
|
||||
BuildMI(MBB, DL, II, ResultReg).addReg(Op0).addImm(Idx);
|
||||
|
@ -227,7 +227,7 @@ void FunctionLoweringInfo::set(Function &fn, MachineFunction &mf,
|
||||
unsigned NumRegisters = TLI.getNumRegisters(Fn->getContext(), VT);
|
||||
const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
|
||||
for (unsigned i = 0; i != NumRegisters; ++i)
|
||||
BuildMI(MBB, DL, TII->get(TargetInstrInfo::PHI), PHIReg + i);
|
||||
BuildMI(MBB, DL, TII->get(TargetOpcode::PHI), PHIReg + i);
|
||||
PHIReg += NumRegisters;
|
||||
}
|
||||
}
|
||||
|
@ -178,7 +178,7 @@ void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
|
||||
const TargetInstrDesc &II,
|
||||
bool IsClone, bool IsCloned,
|
||||
DenseMap<SDValue, unsigned> &VRBaseMap) {
|
||||
assert(Node->getMachineOpcode() != TargetInstrInfo::IMPLICIT_DEF &&
|
||||
assert(Node->getMachineOpcode() != TargetOpcode::IMPLICIT_DEF &&
|
||||
"IMPLICIT_DEF should have been handled as a special case elsewhere!");
|
||||
|
||||
for (unsigned i = 0; i < II.getNumDefs(); ++i) {
|
||||
@ -236,7 +236,7 @@ void InstrEmitter::CreateVirtualRegisters(SDNode *Node, MachineInstr *MI,
|
||||
unsigned InstrEmitter::getVR(SDValue Op,
|
||||
DenseMap<SDValue, unsigned> &VRBaseMap) {
|
||||
if (Op.isMachineOpcode() &&
|
||||
Op.getMachineOpcode() == TargetInstrInfo::IMPLICIT_DEF) {
|
||||
Op.getMachineOpcode() == TargetOpcode::IMPLICIT_DEF) {
|
||||
// Add an IMPLICIT_DEF instruction before every use.
|
||||
unsigned VReg = getDstOfOnlyCopyToRegUse(Op.getNode(), Op.getResNo());
|
||||
// IMPLICIT_DEF can produce any type of result so its TargetInstrDesc
|
||||
@ -246,7 +246,7 @@ unsigned InstrEmitter::getVR(SDValue Op,
|
||||
VReg = MRI->createVirtualRegister(RC);
|
||||
}
|
||||
BuildMI(MBB, Op.getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::IMPLICIT_DEF), VReg);
|
||||
TII->get(TargetOpcode::IMPLICIT_DEF), VReg);
|
||||
return VReg;
|
||||
}
|
||||
|
||||
@ -396,12 +396,12 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
}
|
||||
}
|
||||
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG) {
|
||||
unsigned SubIdx = cast<ConstantSDNode>(Node->getOperand(1))->getZExtValue();
|
||||
|
||||
// Create the extract_subreg machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::EXTRACT_SUBREG));
|
||||
TII->get(TargetOpcode::EXTRACT_SUBREG));
|
||||
|
||||
// Figure out the register class to create for the destreg.
|
||||
unsigned VReg = getVR(Node->getOperand(0), VRBaseMap);
|
||||
@ -424,8 +424,8 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
AddOperand(MI, Node->getOperand(0), 0, 0, VRBaseMap);
|
||||
MI->addOperand(MachineOperand::CreateImm(SubIdx));
|
||||
MBB->insert(InsertPos, MI);
|
||||
} else if (Opc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
} else if (Opc == TargetOpcode::INSERT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
SDValue N0 = Node->getOperand(0);
|
||||
SDValue N1 = Node->getOperand(1);
|
||||
SDValue N2 = Node->getOperand(2);
|
||||
@ -452,7 +452,7 @@ void InstrEmitter::EmitSubregNode(SDNode *Node,
|
||||
|
||||
// If creating a subreg_to_reg, then the first input operand
|
||||
// is an implicit value immediate, otherwise it's a register
|
||||
if (Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
if (Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
const ConstantSDNode *SD = cast<ConstantSDNode>(N0);
|
||||
MI->addOperand(MachineOperand::CreateImm(SD->getZExtValue()));
|
||||
} else
|
||||
@ -507,20 +507,20 @@ void InstrEmitter::EmitNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
unsigned Opc = Node->getMachineOpcode();
|
||||
|
||||
// Handle subreg insert/extract specially
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
Opc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
Opc == TargetOpcode::INSERT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG) {
|
||||
EmitSubregNode(Node, VRBaseMap);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle COPY_TO_REGCLASS specially.
|
||||
if (Opc == TargetInstrInfo::COPY_TO_REGCLASS) {
|
||||
if (Opc == TargetOpcode::COPY_TO_REGCLASS) {
|
||||
EmitCopyToRegClassNode(Node, VRBaseMap);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Opc == TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (Opc == TargetOpcode::IMPLICIT_DEF)
|
||||
// We want a unique VR for each IMPLICIT_DEF use.
|
||||
return;
|
||||
|
||||
@ -640,7 +640,7 @@ void InstrEmitter::EmitNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
|
||||
// Create the inline asm machine instruction.
|
||||
MachineInstr *MI = BuildMI(*MF, Node->getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::INLINEASM));
|
||||
TII->get(TargetOpcode::INLINEASM));
|
||||
|
||||
// Add the asm string as an external symbol operand.
|
||||
const char *AsmStr =
|
||||
|
@ -1042,9 +1042,9 @@ namespace {
|
||||
// CopyToReg should be close to its uses to facilitate coalescing and
|
||||
// avoid spilling.
|
||||
return 0;
|
||||
if (Opc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
Opc == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
Opc == TargetInstrInfo::INSERT_SUBREG)
|
||||
if (Opc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
Opc == TargetOpcode::SUBREG_TO_REG ||
|
||||
Opc == TargetOpcode::INSERT_SUBREG)
|
||||
// EXTRACT_SUBREG, INSERT_SUBREG, and SUBREG_TO_REG nodes should be
|
||||
// close to their uses to facilitate coalescing.
|
||||
return 0;
|
||||
@ -1445,7 +1445,7 @@ void RegReductionPriorityQueue<SF>::AddPseudoTwoAddrDeps() {
|
||||
while (SuccSU->Succs.size() == 1 &&
|
||||
SuccSU->getNode()->isMachineOpcode() &&
|
||||
SuccSU->getNode()->getMachineOpcode() ==
|
||||
TargetInstrInfo::COPY_TO_REGCLASS)
|
||||
TargetOpcode::COPY_TO_REGCLASS)
|
||||
SuccSU = SuccSU->Succs.front().getSUnit();
|
||||
// Don't constrain non-instruction nodes.
|
||||
if (!SuccSU->getNode() || !SuccSU->getNode()->isMachineOpcode())
|
||||
@ -1459,9 +1459,9 @@ void RegReductionPriorityQueue<SF>::AddPseudoTwoAddrDeps() {
|
||||
// Don't constrain EXTRACT_SUBREG, INSERT_SUBREG, and SUBREG_TO_REG;
|
||||
// these may be coalesced away. We want them close to their uses.
|
||||
unsigned SuccOpc = SuccSU->getNode()->getMachineOpcode();
|
||||
if (SuccOpc == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
SuccOpc == TargetInstrInfo::INSERT_SUBREG ||
|
||||
SuccOpc == TargetInstrInfo::SUBREG_TO_REG)
|
||||
if (SuccOpc == TargetOpcode::EXTRACT_SUBREG ||
|
||||
SuccOpc == TargetOpcode::INSERT_SUBREG ||
|
||||
SuccOpc == TargetOpcode::SUBREG_TO_REG)
|
||||
continue;
|
||||
if ((!canClobber(SuccSU, DUSU) ||
|
||||
(hasCopyToRegUse(SU) && !hasCopyToRegUse(SuccSU)) ||
|
||||
|
@ -4872,23 +4872,23 @@ SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc DL, SDVTList VTs,
|
||||
}
|
||||
|
||||
/// getTargetExtractSubreg - A convenience function for creating
|
||||
/// TargetInstrInfo::EXTRACT_SUBREG nodes.
|
||||
/// TargetOpcode::EXTRACT_SUBREG nodes.
|
||||
SDValue
|
||||
SelectionDAG::getTargetExtractSubreg(int SRIdx, DebugLoc DL, EVT VT,
|
||||
SDValue Operand) {
|
||||
SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
|
||||
SDNode *Subreg = getMachineNode(TargetInstrInfo::EXTRACT_SUBREG, DL,
|
||||
SDNode *Subreg = getMachineNode(TargetOpcode::EXTRACT_SUBREG, DL,
|
||||
VT, Operand, SRIdxVal);
|
||||
return SDValue(Subreg, 0);
|
||||
}
|
||||
|
||||
/// getTargetInsertSubreg - A convenience function for creating
|
||||
/// TargetInstrInfo::INSERT_SUBREG nodes.
|
||||
/// TargetOpcode::INSERT_SUBREG nodes.
|
||||
SDValue
|
||||
SelectionDAG::getTargetInsertSubreg(int SRIdx, DebugLoc DL, EVT VT,
|
||||
SDValue Operand, SDValue Subreg) {
|
||||
SDValue SRIdxVal = getTargetConstant(SRIdx, MVT::i32);
|
||||
SDNode *Result = getMachineNode(TargetInstrInfo::INSERT_SUBREG, DL,
|
||||
SDNode *Result = getMachineNode(TargetOpcode::INSERT_SUBREG, DL,
|
||||
VT, Operand, Subreg, SRIdxVal);
|
||||
return SDValue(Result, 0);
|
||||
}
|
||||
|
@ -801,7 +801,7 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn,
|
||||
// landing pad can thus be detected via the MachineModuleInfo.
|
||||
unsigned LabelID = MMI->addLandingPad(BB);
|
||||
|
||||
const TargetInstrDesc &II = TII.get(TargetInstrInfo::EH_LABEL);
|
||||
const TargetInstrDesc &II = TII.get(TargetOpcode::EH_LABEL);
|
||||
BuildMI(BB, SDB->getCurDebugLoc(), II).addImm(LabelID);
|
||||
|
||||
// Mark exception register as live in.
|
||||
@ -953,7 +953,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
SDB->BitTestCases.empty()) {
|
||||
for (unsigned i = 0, e = SDB->PHINodesToUpdate.size(); i != e; ++i) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[i].first;
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
PHI->addOperand(MachineOperand::CreateReg(SDB->PHINodesToUpdate[i].second,
|
||||
false));
|
||||
@ -1000,7 +1000,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
for (unsigned pi = 0, pe = SDB->PHINodesToUpdate.size(); pi != pe; ++pi) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[pi].first;
|
||||
MachineBasicBlock *PHIBB = PHI->getParent();
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
// This is "default" BB. We have two jumps to it. From "header" BB and
|
||||
// from last "case" BB.
|
||||
@ -1056,7 +1056,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
for (unsigned pi = 0, pe = SDB->PHINodesToUpdate.size(); pi != pe; ++pi) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[pi].first;
|
||||
MachineBasicBlock *PHIBB = PHI->getParent();
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
// "default" BB. We can go there only from header BB.
|
||||
if (PHIBB == SDB->JTCases[i].second.Default) {
|
||||
@ -1079,7 +1079,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
// need to update PHI nodes in that block.
|
||||
for (unsigned i = 0, e = SDB->PHINodesToUpdate.size(); i != e; ++i) {
|
||||
MachineInstr *PHI = SDB->PHINodesToUpdate[i].first;
|
||||
assert(PHI->getOpcode() == TargetInstrInfo::PHI &&
|
||||
assert(PHI->isPHI() &&
|
||||
"This is not a machine PHI node that we are updating!");
|
||||
if (BB->isSuccessor(PHI->getParent())) {
|
||||
PHI->addOperand(MachineOperand::CreateReg(SDB->PHINodesToUpdate[i].second,
|
||||
@ -1116,7 +1116,7 @@ SelectionDAGISel::FinishBasicBlock() {
|
||||
// BB may have been removed from the CFG if a branch was constant folded.
|
||||
if (ThisBB->isSuccessor(BB)) {
|
||||
for (MachineBasicBlock::iterator Phi = BB->begin();
|
||||
Phi != BB->end() && Phi->getOpcode() == TargetInstrInfo::PHI;
|
||||
Phi != BB->end() && Phi->isPHI();
|
||||
++Phi) {
|
||||
// This value for this PHI node is recorded in PHINodesToUpdate.
|
||||
for (unsigned pn = 0; ; ++pn) {
|
||||
@ -1410,15 +1410,14 @@ SDNode *SelectionDAGISel::Select_INLINEASM(SDNode *N) {
|
||||
}
|
||||
|
||||
SDNode *SelectionDAGISel::Select_UNDEF(SDNode *N) {
|
||||
return CurDAG->SelectNodeTo(N, TargetInstrInfo::IMPLICIT_DEF,
|
||||
N->getValueType(0));
|
||||
return CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF,N->getValueType(0));
|
||||
}
|
||||
|
||||
SDNode *SelectionDAGISel::Select_EH_LABEL(SDNode *N) {
|
||||
SDValue Chain = N->getOperand(0);
|
||||
unsigned C = cast<LabelSDNode>(N)->getLabelID();
|
||||
SDValue Tmp = CurDAG->getTargetConstant(C, MVT::i32);
|
||||
return CurDAG->SelectNodeTo(N, TargetInstrInfo::EH_LABEL,
|
||||
return CurDAG->SelectNodeTo(N, TargetOpcode::EH_LABEL,
|
||||
MVT::Other, Tmp, Chain);
|
||||
}
|
||||
|
||||
|
@ -659,7 +659,7 @@ bool SimpleRegisterCoalescing::ReMaterializeTrivialDef(LiveInterval &SrcInt,
|
||||
return false;
|
||||
if (TID.getNumDefs() != 1)
|
||||
return false;
|
||||
if (DefMI->getOpcode() != TargetInstrInfo::IMPLICIT_DEF) {
|
||||
if (!DefMI->isImplicitDef()) {
|
||||
// Make sure the copy destination register class fits the instruction
|
||||
// definition register class. The mismatch can happen as a result of earlier
|
||||
// extract_subreg, insert_subreg, subreg_to_reg coalescing.
|
||||
@ -1170,7 +1170,7 @@ SimpleRegisterCoalescing::HasIncompatibleSubRegDefUse(MachineInstr *CopyMI,
|
||||
unsigned SubIdx = O.getSubReg();
|
||||
if (SubIdx && !tri_->getSubReg(PhysReg, SubIdx))
|
||||
return true;
|
||||
if (MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (MI->isExtractSubreg()) {
|
||||
SubIdx = MI->getOperand(2).getImm();
|
||||
if (O.isUse() && !tri_->getSubReg(PhysReg, SubIdx))
|
||||
return true;
|
||||
@ -1184,8 +1184,7 @@ SimpleRegisterCoalescing::HasIncompatibleSubRegDefUse(MachineInstr *CopyMI,
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
if (MI->isInsertSubreg() || MI->isSubregToReg()) {
|
||||
SubIdx = MI->getOperand(3).getImm();
|
||||
if (VirtReg == MI->getOperand(0).getReg()) {
|
||||
if (!tri_->getSubReg(PhysReg, SubIdx))
|
||||
@ -1296,9 +1295,9 @@ bool SimpleRegisterCoalescing::JoinCopy(CopyRec &TheCopy, bool &Again) {
|
||||
DEBUG(dbgs() << li_->getInstructionIndex(CopyMI) << '\t' << *CopyMI);
|
||||
|
||||
unsigned SrcReg, DstReg, SrcSubIdx = 0, DstSubIdx = 0;
|
||||
bool isExtSubReg = CopyMI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG;
|
||||
bool isInsSubReg = CopyMI->getOpcode() == TargetInstrInfo::INSERT_SUBREG;
|
||||
bool isSubRegToReg = CopyMI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG;
|
||||
bool isExtSubReg = CopyMI->isExtractSubreg();
|
||||
bool isInsSubReg = CopyMI->isInsertSubreg();
|
||||
bool isSubRegToReg = CopyMI->isSubregToReg();
|
||||
unsigned SubIdx = 0;
|
||||
if (isExtSubReg) {
|
||||
DstReg = CopyMI->getOperand(0).getReg();
|
||||
@ -1866,11 +1865,11 @@ static bool isValNoDefMove(const MachineInstr *MI, unsigned DR, unsigned SR,
|
||||
unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
|
||||
if (TII->isMoveInstr(*MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx))
|
||||
;
|
||||
else if (MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
else if (MI->isExtractSubreg()) {
|
||||
DstReg = MI->getOperand(0).getReg();
|
||||
SrcReg = MI->getOperand(1).getReg();
|
||||
} else if (MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG ||
|
||||
MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG) {
|
||||
} else if (MI->isSubregToReg() ||
|
||||
MI->isInsertSubreg()) {
|
||||
DstReg = MI->getOperand(0).getReg();
|
||||
SrcReg = MI->getOperand(2).getReg();
|
||||
} else
|
||||
@ -2442,16 +2441,15 @@ void SimpleRegisterCoalescing::CopyCoalesceInMBB(MachineBasicBlock *MBB,
|
||||
// If this isn't a copy nor a extract_subreg, we can't join intervals.
|
||||
unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
|
||||
bool isInsUndef = false;
|
||||
if (Inst->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (Inst->isExtractSubreg()) {
|
||||
DstReg = Inst->getOperand(0).getReg();
|
||||
SrcReg = Inst->getOperand(1).getReg();
|
||||
} else if (Inst->getOpcode() == TargetInstrInfo::INSERT_SUBREG) {
|
||||
} else if (Inst->isInsertSubreg()) {
|
||||
DstReg = Inst->getOperand(0).getReg();
|
||||
SrcReg = Inst->getOperand(2).getReg();
|
||||
if (Inst->getOperand(1).isUndef())
|
||||
isInsUndef = true;
|
||||
} else if (Inst->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
Inst->getOpcode() == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
} else if (Inst->isInsertSubreg() || Inst->isSubregToReg()) {
|
||||
DstReg = Inst->getOperand(0).getReg();
|
||||
SrcReg = Inst->getOperand(2).getReg();
|
||||
} else if (!tii_->isMoveInstr(*Inst, SrcReg, DstReg, SrcSubIdx, DstSubIdx))
|
||||
@ -2687,10 +2685,8 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
||||
// Delete all coalesced copies.
|
||||
bool DoDelete = true;
|
||||
if (!tii_->isMoveInstr(*MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx)) {
|
||||
assert((MI->getOpcode() == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
MI->getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
MI->getOpcode() == TargetInstrInfo::SUBREG_TO_REG) &&
|
||||
"Unrecognized copy instruction");
|
||||
assert((MI->isExtractSubreg() || MI->isInsertSubreg() ||
|
||||
MI->isSubregToReg()) && "Unrecognized copy instruction");
|
||||
DstReg = MI->getOperand(0).getReg();
|
||||
if (TargetRegisterInfo::isPhysicalRegister(DstReg))
|
||||
// Do not delete extract_subreg, insert_subreg of physical
|
||||
|
@ -107,8 +107,8 @@ bool SlotIndexes::runOnMachineFunction(MachineFunction &fn) {
|
||||
|
||||
for (MachineBasicBlock::iterator miItr = mbb->begin(), miEnd = mbb->end();
|
||||
miItr != miEnd; ++miItr) {
|
||||
MachineInstr *mi = &*miItr;
|
||||
if (mi->getOpcode()==TargetInstrInfo::DEBUG_VALUE)
|
||||
MachineInstr *mi = miItr;
|
||||
if (mi->isDebugValue())
|
||||
continue;
|
||||
|
||||
if (miItr == mbb->getFirstTerminator()) {
|
||||
|
@ -504,10 +504,8 @@ bool StackSlotColoring::PropagateBackward(MachineBasicBlock::iterator MII,
|
||||
|
||||
// Abort the use is actually a sub-register def. We don't have enough
|
||||
// information to figure out if it is really legal.
|
||||
if (MO.getSubReg() ||
|
||||
TID.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG ||
|
||||
TID.getOpcode() == TargetInstrInfo::INSERT_SUBREG ||
|
||||
TID.getOpcode() == TargetInstrInfo::SUBREG_TO_REG)
|
||||
if (MO.getSubReg() || MII->isExtractSubreg() ||
|
||||
MII->isInsertSubreg() || MII->isSubregToReg())
|
||||
return false;
|
||||
|
||||
const TargetRegisterClass *RC = TID.OpInfo[i].getRegClass(TRI);
|
||||
@ -569,8 +567,7 @@ bool StackSlotColoring::PropagateForward(MachineBasicBlock::iterator MII,
|
||||
|
||||
// Abort the use is actually a sub-register use. We don't have enough
|
||||
// information to figure out if it is really legal.
|
||||
if (MO.getSubReg() ||
|
||||
TID.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG)
|
||||
if (MO.getSubReg() || MII->isExtractSubreg())
|
||||
return false;
|
||||
|
||||
const TargetRegisterClass *RC = TID.OpInfo[i].getRegClass(TRI);
|
||||
|
@ -419,7 +419,7 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) {
|
||||
|
||||
// Iterate over all the PHI nodes in this block
|
||||
MachineBasicBlock::iterator P = MBB->begin();
|
||||
while (P != MBB->end() && P->getOpcode() == TargetInstrInfo::PHI) {
|
||||
while (P != MBB->end() && P->isPHI()) {
|
||||
unsigned DestReg = P->getOperand(0).getReg();
|
||||
|
||||
// Don't both doing PHI elimination for dead PHI's.
|
||||
@ -452,7 +452,7 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) {
|
||||
|
||||
// We don't need to insert copies for implicit_defs.
|
||||
MachineInstr* DefMI = MRI.getVRegDef(SrcReg);
|
||||
if (DefMI->getOpcode() == TargetInstrInfo::IMPLICIT_DEF)
|
||||
if (DefMI->isImplicitDef())
|
||||
ProcessedNames.insert(SrcReg);
|
||||
|
||||
// Check for trivial interferences via liveness information, allowing us
|
||||
@ -470,7 +470,7 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) {
|
||||
if (isLiveIn(SrcReg, P->getParent(), LI) ||
|
||||
isLiveOut(P->getOperand(0).getReg(),
|
||||
MRI.getVRegDef(SrcReg)->getParent(), LI) ||
|
||||
( MRI.getVRegDef(SrcReg)->getOpcode() == TargetInstrInfo::PHI &&
|
||||
( MRI.getVRegDef(SrcReg)->isPHI() &&
|
||||
isLiveIn(P->getOperand(0).getReg(),
|
||||
MRI.getVRegDef(SrcReg)->getParent(), LI) ) ||
|
||||
ProcessedNames.count(SrcReg) ||
|
||||
@ -810,7 +810,7 @@ void StrongPHIElimination::InsertCopies(MachineDomTreeNode* MDTN,
|
||||
// Rewrite register uses from Stacks
|
||||
for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
|
||||
I != E; ++I) {
|
||||
if (I->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (I->isPHI())
|
||||
continue;
|
||||
|
||||
for (unsigned i = 0; i < I->getNumOperands(); ++i)
|
||||
@ -907,8 +907,7 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
|
||||
|
||||
// Determine which phi node operands need copies
|
||||
for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
|
||||
if (!I->empty() &&
|
||||
I->begin()->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (!I->empty() && I->begin()->isPHI())
|
||||
processBlock(I);
|
||||
|
||||
// Break interferences where two different phis want to coalesce
|
||||
@ -996,7 +995,7 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
|
||||
for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
|
||||
for (MachineBasicBlock::iterator BI = I->begin(), BE = I->end();
|
||||
BI != BE; ++BI)
|
||||
if (BI->getOpcode() == TargetInstrInfo::PHI)
|
||||
if (BI->isPHI())
|
||||
phis.push_back(BI);
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,7 @@ static void VerifyPHIs(MachineFunction &MF, bool CheckExtra) {
|
||||
MBB->pred_end());
|
||||
MachineBasicBlock::iterator MI = MBB->begin();
|
||||
while (MI != MBB->end()) {
|
||||
if (MI->getOpcode() != TargetInstrInfo::PHI)
|
||||
if (!MI->isPHI())
|
||||
break;
|
||||
for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
|
||||
PE = Preds.end(); PI != PE; ++PI) {
|
||||
@ -378,7 +378,7 @@ TailDuplicatePass::UpdateSuccessorsPHIs(MachineBasicBlock *FromBB, bool isDead,
|
||||
MachineBasicBlock *SuccBB = *SI;
|
||||
for (MachineBasicBlock::iterator II = SuccBB->begin(), EE = SuccBB->end();
|
||||
II != EE; ++II) {
|
||||
if (II->getOpcode() != TargetInstrInfo::PHI)
|
||||
if (!II->isPHI())
|
||||
break;
|
||||
unsigned Idx = 0;
|
||||
for (unsigned i = 1, e = II->getNumOperands(); i != e; i += 2) {
|
||||
@ -476,7 +476,7 @@ TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
|
||||
if (InstrCount == MaxDuplicateCount) return false;
|
||||
// Remember if we saw a call.
|
||||
if (I->getDesc().isCall()) HasCall = true;
|
||||
if (I->getOpcode() != TargetInstrInfo::PHI)
|
||||
if (!I->isPHI())
|
||||
InstrCount += 1;
|
||||
}
|
||||
// Heuristically, don't tail-duplicate calls if it would expand code size,
|
||||
@ -528,7 +528,7 @@ TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
|
||||
while (I != TailBB->end()) {
|
||||
MachineInstr *MI = &*I;
|
||||
++I;
|
||||
if (MI->getOpcode() == TargetInstrInfo::PHI) {
|
||||
if (MI->isPHI()) {
|
||||
// Replace the uses of the def of the PHI with the register coming
|
||||
// from PredBB.
|
||||
ProcessPHI(MI, TailBB, PredBB, LocalVRMap, CopyInfos);
|
||||
@ -580,7 +580,7 @@ TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB, MachineFunction &MF,
|
||||
SmallVector<std::pair<unsigned,unsigned>, 4> CopyInfos;
|
||||
MachineBasicBlock::iterator I = TailBB->begin();
|
||||
// Process PHI instructions first.
|
||||
while (I != TailBB->end() && I->getOpcode() == TargetInstrInfo::PHI) {
|
||||
while (I != TailBB->end() && I->isPHI()) {
|
||||
// Replace the uses of the def of the PHI with the register coming
|
||||
// from PredBB.
|
||||
MachineInstr *MI = &*I++;
|
||||
|
@ -316,9 +316,7 @@ bool TwoAddressInstructionPass::NoUseAfterLastDef(unsigned Reg,
|
||||
E = MRI->reg_end(); I != E; ++I) {
|
||||
MachineOperand &MO = I.getOperand();
|
||||
MachineInstr *MI = MO.getParent();
|
||||
if (MI->getParent() != MBB)
|
||||
continue;
|
||||
if (MI->getOpcode() == TargetInstrInfo::DEBUG_VALUE)
|
||||
if (MI->getParent() != MBB || MI->isDebugValue())
|
||||
continue;
|
||||
DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
|
||||
if (DI == DistanceMap.end())
|
||||
@ -341,9 +339,7 @@ MachineInstr *TwoAddressInstructionPass::FindLastUseInMBB(unsigned Reg,
|
||||
E = MRI->reg_end(); I != E; ++I) {
|
||||
MachineOperand &MO = I.getOperand();
|
||||
MachineInstr *MI = MO.getParent();
|
||||
if (MI->getParent() != MBB)
|
||||
continue;
|
||||
if (MI->getOpcode() == TargetInstrInfo::DEBUG_VALUE)
|
||||
if (MI->getParent() != MBB || MI->isDebugValue())
|
||||
continue;
|
||||
DenseMap<MachineInstr*, unsigned>::iterator DI = DistanceMap.find(MI);
|
||||
if (DI == DistanceMap.end())
|
||||
@ -369,13 +365,13 @@ static bool isCopyToReg(MachineInstr &MI, const TargetInstrInfo *TII,
|
||||
DstReg = 0;
|
||||
unsigned SrcSubIdx, DstSubIdx;
|
||||
if (!TII->isMoveInstr(MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx)) {
|
||||
if (MI.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG) {
|
||||
if (MI.isExtractSubreg()) {
|
||||
DstReg = MI.getOperand(0).getReg();
|
||||
SrcReg = MI.getOperand(1).getReg();
|
||||
} else if (MI.getOpcode() == TargetInstrInfo::INSERT_SUBREG) {
|
||||
} else if (MI.isInsertSubreg()) {
|
||||
DstReg = MI.getOperand(0).getReg();
|
||||
SrcReg = MI.getOperand(2).getReg();
|
||||
} else if (MI.getOpcode() == TargetInstrInfo::SUBREG_TO_REG) {
|
||||
} else if (MI.isSubregToReg()) {
|
||||
DstReg = MI.getOperand(0).getReg();
|
||||
SrcReg = MI.getOperand(2).getReg();
|
||||
}
|
||||
@ -433,8 +429,7 @@ static bool isKilled(MachineInstr &MI, unsigned Reg,
|
||||
/// as a two-address use. If so, return the destination register by reference.
|
||||
static bool isTwoAddrUse(MachineInstr &MI, unsigned Reg, unsigned &DstReg) {
|
||||
const TargetInstrDesc &TID = MI.getDesc();
|
||||
unsigned NumOps = (MI.getOpcode() == TargetInstrInfo::INLINEASM)
|
||||
? MI.getNumOperands() : TID.getNumOperands();
|
||||
unsigned NumOps = MI.isInlineAsm() ? MI.getNumOperands():TID.getNumOperands();
|
||||
for (unsigned i = 0; i != NumOps; ++i) {
|
||||
const MachineOperand &MO = MI.getOperand(i);
|
||||
if (!MO.isReg() || !MO.isUse() || MO.getReg() != Reg)
|
||||
@ -937,7 +932,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
|
||||
|
||||
// First scan through all the tied register uses in this instruction
|
||||
// and record a list of pairs of tied operands for each register.
|
||||
unsigned NumOps = (mi->getOpcode() == TargetInstrInfo::INLINEASM)
|
||||
unsigned NumOps = mi->isInlineAsm()
|
||||
? mi->getNumOperands() : TID.getNumOperands();
|
||||
for (unsigned SrcIdx = 0; SrcIdx < NumOps; ++SrcIdx) {
|
||||
unsigned DstIdx = 0;
|
||||
|
@ -148,8 +148,7 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
|
||||
MachineBasicBlock* succ = *BB->succ_begin();
|
||||
|
||||
MachineBasicBlock::iterator start = succ->begin();
|
||||
while (start != succ->end() &&
|
||||
start->getOpcode() == TargetInstrInfo::PHI) {
|
||||
while (start != succ->end() && start->isPHI()) {
|
||||
for (unsigned i = start->getNumOperands() - 1; i >= 2; i-=2)
|
||||
if (start->getOperand(i).isMBB() &&
|
||||
start->getOperand(i).getMBB() == BB) {
|
||||
@ -188,8 +187,7 @@ bool UnreachableMachineBlockElim::runOnMachineFunction(MachineFunction &F) {
|
||||
SmallPtrSet<MachineBasicBlock*, 8> preds(BB->pred_begin(),
|
||||
BB->pred_end());
|
||||
MachineBasicBlock::iterator phi = BB->begin();
|
||||
while (phi != BB->end() &&
|
||||
phi->getOpcode() == TargetInstrInfo::PHI) {
|
||||
while (phi != BB->end() && phi->isPHI()) {
|
||||
for (unsigned i = phi->getNumOperands() - 1; i >= 2; i-=2)
|
||||
if (!preds.count(phi->getOperand(i).getMBB())) {
|
||||
phi->RemoveOperand(i);
|
||||
|
@ -1866,7 +1866,7 @@ private:
|
||||
if (VRM.isImplicitlyDefined(VirtReg))
|
||||
// FIXME: Is this needed?
|
||||
BuildMI(MBB, &MI, MI.getDebugLoc(),
|
||||
TII->get(TargetInstrInfo::IMPLICIT_DEF), Phys);
|
||||
TII->get(TargetOpcode::IMPLICIT_DEF), Phys);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1902,8 +1902,7 @@ private:
|
||||
// = EXTRACT_SUBREG fi#1
|
||||
// fi#1 is available in EDI, but it cannot be reused because it's not in
|
||||
// the right register file.
|
||||
if (PhysReg && !AvoidReload &&
|
||||
(SubIdx || MI.getOpcode() == TargetInstrInfo::EXTRACT_SUBREG)) {
|
||||
if (PhysReg && !AvoidReload && (SubIdx || MI.isExtractSubreg())) {
|
||||
const TargetRegisterClass* RC = RegInfo->getRegClass(VirtReg);
|
||||
if (!RC->contains(PhysReg))
|
||||
PhysReg = 0;
|
||||
|
@ -450,10 +450,10 @@ unsigned ARMBaseInstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
|
||||
switch (Opc) {
|
||||
default:
|
||||
llvm_unreachable("Unknown or unset size field for instr!");
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
@ -553,7 +553,7 @@ void ARMCodeEmitter::emitPseudoInstruction(const MachineInstr &MI) {
|
||||
default:
|
||||
llvm_unreachable("ARMCodeEmitter::emitPseudoInstruction");
|
||||
// FIXME: Add support for MOVimm32.
|
||||
case TargetInstrInfo::INLINEASM: {
|
||||
case TargetOpcode::INLINEASM: {
|
||||
// We allow inline assembler nodes with empty bodies - they can
|
||||
// implicitly define registers, which is ok for JIT.
|
||||
if (MI.getOperand(0).getSymbolName()[0]) {
|
||||
@ -561,12 +561,12 @@ void ARMCodeEmitter::emitPseudoInstruction(const MachineInstr &MI) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
MCE.emitLabel(MI.getOperand(0).getImm());
|
||||
break;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
// Do nothing.
|
||||
break;
|
||||
case ARM::CONSTPOOL_ENTRY:
|
||||
|
@ -732,7 +732,7 @@ MachineBasicBlock *ARMConstantIslands::SplitBlockBeforeInstr(MachineInstr *MI) {
|
||||
|
||||
// This pass should be run after register allocation, so there should be no
|
||||
// PHI nodes to update.
|
||||
assert((Succ->empty() || Succ->begin()->getOpcode() != TargetInstrInfo::PHI)
|
||||
assert((Succ->empty() || !Succ->begin()->isPHI())
|
||||
&& "PHI nodes should be eliminated by now!");
|
||||
}
|
||||
|
||||
|
@ -1007,12 +1007,12 @@ SDNode *ARMDAGToDAGISel::SelectDYN_ALLOC(SDNode *N) {
|
||||
SDNode *ARMDAGToDAGISel::PairDRegs(EVT VT, SDValue V0, SDValue V1) {
|
||||
DebugLoc dl = V0.getNode()->getDebugLoc();
|
||||
SDValue Undef =
|
||||
SDValue(CurDAG->getMachineNode(TargetInstrInfo::IMPLICIT_DEF, dl, VT), 0);
|
||||
SDValue(CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF, dl, VT), 0);
|
||||
SDValue SubReg0 = CurDAG->getTargetConstant(ARM::DSUBREG_0, MVT::i32);
|
||||
SDValue SubReg1 = CurDAG->getTargetConstant(ARM::DSUBREG_1, MVT::i32);
|
||||
SDNode *Pair = CurDAG->getMachineNode(TargetInstrInfo::INSERT_SUBREG, dl,
|
||||
SDNode *Pair = CurDAG->getMachineNode(TargetOpcode::INSERT_SUBREG, dl,
|
||||
VT, Undef, V0, SubReg0);
|
||||
return CurDAG->getMachineNode(TargetInstrInfo::INSERT_SUBREG, dl,
|
||||
return CurDAG->getMachineNode(TargetOpcode::INSERT_SUBREG, dl,
|
||||
VT, SDValue(Pair, 0), V1, SubReg1);
|
||||
}
|
||||
|
||||
|
@ -95,8 +95,8 @@ void AlphaCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) {
|
||||
case Alpha::ALTENT:
|
||||
case Alpha::PCLABEL:
|
||||
case Alpha::MEMLABEL:
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
break; //skip these
|
||||
}
|
||||
MCE.processDebugLoc(MI.getDebugLoc(), false);
|
||||
|
@ -175,7 +175,7 @@ void BlackfinDAGToDAGISel::FixRegisterClasses(SelectionDAG &DAG) {
|
||||
// We cannot copy CC <-> !(CC/D)
|
||||
if ((isCC(DefRC) && !isDCC(UseRC)) || (isCC(UseRC) && !isDCC(DefRC))) {
|
||||
SDNode *Copy =
|
||||
DAG.getMachineNode(TargetInstrInfo::COPY_TO_REGCLASS,
|
||||
DAG.getMachineNode(TargetOpcode::COPY_TO_REGCLASS,
|
||||
NI->getDebugLoc(),
|
||||
MVT::i32,
|
||||
UI.getUse().get(),
|
||||
|
@ -356,12 +356,12 @@ unsigned MSP430InstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
|
||||
switch (Desc.getOpcode()) {
|
||||
default:
|
||||
assert(0 && "Unknown instruction size!");
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
return 0;
|
||||
case TargetInstrInfo::INLINEASM: {
|
||||
case TargetOpcode::INLINEASM: {
|
||||
const MachineFunction *MF = MI->getParent()->getParent();
|
||||
const TargetInstrInfo &TII = *MF->getTarget().getInstrInfo();
|
||||
return TII.getInlineAsmLength(MI->getOperand(0).getSymbolName(),
|
||||
|
@ -285,7 +285,7 @@ def MOV16rm_POST : IForm16<0x0, DstReg, SrcPostInc, Size2Bytes,
|
||||
// up to 16 bits.
|
||||
def def8 : PatLeaf<(i8 GR8:$src), [{
|
||||
return N->getOpcode() != ISD::TRUNCATE &&
|
||||
N->getOpcode() != TargetInstrInfo::EXTRACT_SUBREG &&
|
||||
N->getOpcode() != TargetOpcode::EXTRACT_SUBREG &&
|
||||
N->getOpcode() != ISD::CopyFromReg;
|
||||
}]>;
|
||||
|
||||
|
@ -245,7 +245,7 @@ SDNode *MipsDAGToDAGISel::SelectLoadFp64(SDNode *N) {
|
||||
// lwc $f1, X+4($3)
|
||||
SDNode *LD0 = CurDAG->getMachineNode(Mips::LWC1, dl, MVT::f32,
|
||||
MVT::Other, Offset0, Base, Chain);
|
||||
SDValue Undef = SDValue(CurDAG->getMachineNode(TargetInstrInfo::IMPLICIT_DEF,
|
||||
SDValue Undef = SDValue(CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
|
||||
dl, NVT), 0);
|
||||
SDValue I0 = CurDAG->getTargetInsertSubreg(Mips::SUBREG_FPEVEN, dl,
|
||||
MVT::f64, Undef, SDValue(LD0, 0));
|
||||
@ -464,8 +464,7 @@ SDNode* MipsDAGToDAGISel::Select(SDNode *Node) {
|
||||
SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), dl,
|
||||
Mips::ZERO, MVT::i32);
|
||||
SDValue Undef = SDValue(
|
||||
CurDAG->getMachineNode(
|
||||
TargetInstrInfo::IMPLICIT_DEF, dl, MVT::f64), 0);
|
||||
CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF, dl, MVT::f64), 0);
|
||||
SDNode *MTC = CurDAG->getMachineNode(Mips::MTC1, dl, MVT::f32, Zero);
|
||||
SDValue I0 = CurDAG->getTargetInsertSubreg(Mips::SUBREG_FPEVEN, dl,
|
||||
MVT::f64, Undef, SDValue(MTC, 0));
|
||||
|
@ -108,12 +108,12 @@ void PPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) {
|
||||
default:
|
||||
MCE.emitWordBE(getBinaryCodeForInstr(MI));
|
||||
break;
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
MCE.emitLabel(MI.getOperand(0).getImm());
|
||||
break;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
break; // pseudo opcode, no side effects
|
||||
case PPC::MovePCtoLR:
|
||||
case PPC::MovePCtoLR8:
|
||||
|
@ -724,7 +724,7 @@ PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
}
|
||||
// Take into account whether it's an add or mem instruction
|
||||
unsigned OffsetOperandNo = (FIOperandNo == 2) ? 1 : 2;
|
||||
if (MI.getOpcode() == TargetInstrInfo::INLINEASM)
|
||||
if (MI.isInlineAsm())
|
||||
OffsetOperandNo = FIOperandNo-1;
|
||||
|
||||
// Get the frame index.
|
||||
@ -817,7 +817,7 @@ PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
// addi 0:rA 1:rB, 2, imm ==> add 0:rA, 1:rB, 2:r0
|
||||
unsigned OperandBase;
|
||||
|
||||
if (OpC != TargetInstrInfo::INLINEASM) {
|
||||
if (OpC != TargetOpcode::INLINEASM) {
|
||||
assert(ImmToIdxMap.count(OpC) &&
|
||||
"No indexed form of load or store available!");
|
||||
unsigned NewOpcode = ImmToIdxMap.find(OpC)->second;
|
||||
|
@ -665,10 +665,10 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
Dividend = N0.getNode();
|
||||
|
||||
// Insert prepared dividend into suitable 'subreg'
|
||||
SDNode *Tmp = CurDAG->getMachineNode(TargetInstrInfo::IMPLICIT_DEF,
|
||||
SDNode *Tmp = CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
|
||||
dl, ResVT);
|
||||
Dividend =
|
||||
CurDAG->getMachineNode(TargetInstrInfo::INSERT_SUBREG, dl, ResVT,
|
||||
CurDAG->getMachineNode(TargetOpcode::INSERT_SUBREG, dl, ResVT,
|
||||
SDValue(Tmp, 0), SDValue(Dividend, 0),
|
||||
CurDAG->getTargetConstant(subreg_odd, MVT::i32));
|
||||
|
||||
@ -687,7 +687,7 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
// Copy the division (odd subreg) result, if it is needed.
|
||||
if (!SDValue(Node, 0).use_empty()) {
|
||||
unsigned SubRegIdx = (is32Bit ? subreg_odd32 : subreg_odd);
|
||||
SDNode *Div = CurDAG->getMachineNode(TargetInstrInfo::EXTRACT_SUBREG,
|
||||
SDNode *Div = CurDAG->getMachineNode(TargetOpcode::EXTRACT_SUBREG,
|
||||
dl, NVT,
|
||||
SDValue(Result, 0),
|
||||
CurDAG->getTargetConstant(SubRegIdx,
|
||||
@ -702,7 +702,7 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
// Copy the remainder (even subreg) result, if it is needed.
|
||||
if (!SDValue(Node, 1).use_empty()) {
|
||||
unsigned SubRegIdx = (is32Bit ? subreg_even32 : subreg_even);
|
||||
SDNode *Rem = CurDAG->getMachineNode(TargetInstrInfo::EXTRACT_SUBREG,
|
||||
SDNode *Rem = CurDAG->getMachineNode(TargetOpcode::EXTRACT_SUBREG,
|
||||
dl, NVT,
|
||||
SDValue(Result, 0),
|
||||
CurDAG->getTargetConstant(SubRegIdx,
|
||||
@ -749,12 +749,12 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
SDNode *Dividend = N0.getNode();
|
||||
|
||||
// Insert prepared dividend into suitable 'subreg'
|
||||
SDNode *Tmp = CurDAG->getMachineNode(TargetInstrInfo::IMPLICIT_DEF,
|
||||
SDNode *Tmp = CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
|
||||
dl, ResVT);
|
||||
{
|
||||
unsigned SubRegIdx = (is32Bit ? subreg_odd32 : subreg_odd);
|
||||
Dividend =
|
||||
CurDAG->getMachineNode(TargetInstrInfo::INSERT_SUBREG, dl, ResVT,
|
||||
CurDAG->getMachineNode(TargetOpcode::INSERT_SUBREG, dl, ResVT,
|
||||
SDValue(Tmp, 0), SDValue(Dividend, 0),
|
||||
CurDAG->getTargetConstant(SubRegIdx, MVT::i32));
|
||||
}
|
||||
@ -777,7 +777,7 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
// Copy the division (odd subreg) result, if it is needed.
|
||||
if (!SDValue(Node, 0).use_empty()) {
|
||||
unsigned SubRegIdx = (is32Bit ? subreg_odd32 : subreg_odd);
|
||||
SDNode *Div = CurDAG->getMachineNode(TargetInstrInfo::EXTRACT_SUBREG,
|
||||
SDNode *Div = CurDAG->getMachineNode(TargetOpcode::EXTRACT_SUBREG,
|
||||
dl, NVT,
|
||||
SDValue(Result, 0),
|
||||
CurDAG->getTargetConstant(SubRegIdx,
|
||||
@ -791,7 +791,7 @@ SDNode *SystemZDAGToDAGISel::Select(SDNode *Node) {
|
||||
// Copy the remainder (even subreg) result, if it is needed.
|
||||
if (!SDValue(Node, 1).use_empty()) {
|
||||
unsigned SubRegIdx = (is32Bit ? subreg_even32 : subreg_even);
|
||||
SDNode *Rem = CurDAG->getMachineNode(TargetInstrInfo::EXTRACT_SUBREG,
|
||||
SDNode *Rem = CurDAG->getMachineNode(TargetOpcode::EXTRACT_SUBREG,
|
||||
dl, NVT,
|
||||
SDValue(Result, 0),
|
||||
CurDAG->getTargetConstant(SubRegIdx,
|
||||
|
@ -302,7 +302,7 @@ void X86MCInstLower::Lower(const MachineInstr *MI, MCInst &OutMI) const {
|
||||
void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
X86MCInstLower MCInstLowering(OutContext, Mang, *this);
|
||||
switch (MI->getOpcode()) {
|
||||
case TargetInstrInfo::DEBUG_VALUE: {
|
||||
case TargetOpcode::DBG_VALUE: {
|
||||
// FIXME: if this is implemented for another target before it goes
|
||||
// away completely, the common part should be moved into AsmPrinter.
|
||||
if (!VerboseAsm)
|
||||
|
@ -578,19 +578,19 @@ void Emitter<CodeEmitter>::emitInstruction(const MachineInstr &MI,
|
||||
llvm_unreachable("psuedo instructions should be removed before code"
|
||||
" emission");
|
||||
break;
|
||||
case TargetInstrInfo::INLINEASM:
|
||||
case TargetOpcode::INLINEASM:
|
||||
// We allow inline assembler nodes with empty bodies - they can
|
||||
// implicitly define registers, which is ok for JIT.
|
||||
if (MI.getOperand(0).getSymbolName()[0])
|
||||
llvm_report_error("JIT does not support inline asm!");
|
||||
break;
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetInstrInfo::GC_LABEL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
case TargetOpcode::GC_LABEL:
|
||||
MCE.emitLabel(MI.getOperand(0).getImm());
|
||||
break;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
case X86::FP_REG_KILL:
|
||||
break;
|
||||
case X86::MOVPC32r: {
|
||||
|
@ -1012,7 +1012,7 @@ bool X86FastISel::X86SelectShift(Instruction *I) {
|
||||
// of X86::CL, emit an EXTRACT_SUBREG to precisely describe what
|
||||
// we're doing here.
|
||||
if (CReg != X86::CL)
|
||||
BuildMI(MBB, DL, TII.get(TargetInstrInfo::EXTRACT_SUBREG), X86::CL)
|
||||
BuildMI(MBB, DL, TII.get(TargetOpcode::EXTRACT_SUBREG), X86::CL)
|
||||
.addReg(CReg).addImm(X86::SUBREG_8BIT);
|
||||
|
||||
unsigned ResultReg = createResultReg(RC);
|
||||
@ -1159,7 +1159,7 @@ bool X86FastISel::X86VisitIntrinsicCall(IntrinsicInst &I) {
|
||||
assert(DI->getAddress() && "Null address should be checked earlier!");
|
||||
if (!X86SelectAddress(DI->getAddress(), AM))
|
||||
return false;
|
||||
const TargetInstrDesc &II = TII.get(TargetInstrInfo::DEBUG_VALUE);
|
||||
const TargetInstrDesc &II = TII.get(TargetOpcode::DBG_VALUE);
|
||||
addFullAddress(BuildMI(MBB, DL, II), AM).addImm(0).
|
||||
addMetadata(DI->getVariable());
|
||||
return true;
|
||||
|
@ -235,7 +235,7 @@ bool FPS::processBasicBlock(MachineFunction &MF, MachineBasicBlock &BB) {
|
||||
unsigned Flags = MI->getDesc().TSFlags;
|
||||
|
||||
unsigned FPInstClass = Flags & X86II::FPTypeMask;
|
||||
if (MI->getOpcode() == TargetInstrInfo::INLINEASM)
|
||||
if (MI->isInlineAsm())
|
||||
FPInstClass = X86II::SpecialFP;
|
||||
|
||||
if (FPInstClass == X86II::NotFP)
|
||||
@ -1083,7 +1083,7 @@ void FPS::handleSpecialFP(MachineBasicBlock::iterator &I) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TargetInstrInfo::INLINEASM: {
|
||||
case TargetOpcode::INLINEASM: {
|
||||
// The inline asm MachineInstr currently only *uses* FP registers for the
|
||||
// 'f' constraint. These should be turned into the current ST(x) register
|
||||
// in the machine instr. Also, any kills should be explicitly popped after
|
||||
|
@ -1606,7 +1606,7 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
||||
}
|
||||
|
||||
DebugLoc dl = Node->getDebugLoc();
|
||||
SDValue Undef = SDValue(CurDAG->getMachineNode(TargetInstrInfo::IMPLICIT_DEF,
|
||||
SDValue Undef = SDValue(CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
|
||||
dl, NVT), 0);
|
||||
MachineSDNode::mmo_iterator MemOp = MF->allocateMemRefsArray(1);
|
||||
MemOp[0] = cast<MemSDNode>(Node)->getMemOperand();
|
||||
|
@ -435,7 +435,7 @@ def MOVZX64rm32 : I<0x8B, MRMSrcMem, (outs GR64:$dst), (ins i32mem:$src),
|
||||
// up to 64 bits.
|
||||
def def32 : PatLeaf<(i32 GR32:$src), [{
|
||||
return N->getOpcode() != ISD::TRUNCATE &&
|
||||
N->getOpcode() != TargetInstrInfo::EXTRACT_SUBREG &&
|
||||
N->getOpcode() != TargetOpcode::EXTRACT_SUBREG &&
|
||||
N->getOpcode() != ISD::CopyFromReg &&
|
||||
N->getOpcode() != X86ISD::CMOV;
|
||||
}]>;
|
||||
|
@ -3372,18 +3372,18 @@ static unsigned GetInstSizeWithDesc(const MachineInstr &MI,
|
||||
switch (Opcode) {
|
||||
default:
|
||||
break;
|
||||
case TargetInstrInfo::INLINEASM: {
|
||||
case TargetOpcode::INLINEASM: {
|
||||
const MachineFunction *MF = MI.getParent()->getParent();
|
||||
const TargetInstrInfo &TII = *MF->getTarget().getInstrInfo();
|
||||
FinalSize += TII.getInlineAsmLength(MI.getOperand(0).getSymbolName(),
|
||||
*MF->getTarget().getMCAsmInfo());
|
||||
break;
|
||||
}
|
||||
case TargetInstrInfo::DBG_LABEL:
|
||||
case TargetInstrInfo::EH_LABEL:
|
||||
case TargetOpcode::DBG_LABEL:
|
||||
case TargetOpcode::EH_LABEL:
|
||||
break;
|
||||
case TargetInstrInfo::IMPLICIT_DEF:
|
||||
case TargetInstrInfo::KILL:
|
||||
case TargetOpcode::IMPLICIT_DEF:
|
||||
case TargetOpcode::KILL:
|
||||
case X86::FP_REG_KILL:
|
||||
break;
|
||||
case X86::MOVPC32r: {
|
||||
|
@ -35,7 +35,7 @@ void CodeEmitterGen::reverseBits(std::vector<Record*> &Insts) {
|
||||
R->getName() == "IMPLICIT_DEF" ||
|
||||
R->getName() == "SUBREG_TO_REG" ||
|
||||
R->getName() == "COPY_TO_REGCLASS" ||
|
||||
R->getName() == "DEBUG_VALUE") continue;
|
||||
R->getName() == "DBG_VALUE") continue;
|
||||
|
||||
BitsInit *BI = R->getValueAsBitsInit("Inst");
|
||||
|
||||
@ -113,7 +113,7 @@ void CodeEmitterGen::run(raw_ostream &o) {
|
||||
R->getName() == "IMPLICIT_DEF" ||
|
||||
R->getName() == "SUBREG_TO_REG" ||
|
||||
R->getName() == "COPY_TO_REGCLASS" ||
|
||||
R->getName() == "DEBUG_VALUE") {
|
||||
R->getName() == "DBG_VALUE") {
|
||||
o << " 0U,\n";
|
||||
continue;
|
||||
}
|
||||
@ -152,7 +152,7 @@ void CodeEmitterGen::run(raw_ostream &o) {
|
||||
InstName == "IMPLICIT_DEF" ||
|
||||
InstName == "SUBREG_TO_REG" ||
|
||||
InstName == "COPY_TO_REGCLASS" ||
|
||||
InstName == "DEBUG_VALUE") continue;
|
||||
InstName == "DBG_VALUE") continue;
|
||||
|
||||
BitsInit *BI = R->getValueAsBitsInit("Inst");
|
||||
const std::vector<RecordVal> &Vals = R->getValues();
|
||||
|
@ -337,10 +337,10 @@ getInstructionsByEnumValue(std::vector<const CodeGenInstruction*>
|
||||
throw "Could not find 'COPY_TO_REGCLASS' instruction!";
|
||||
const CodeGenInstruction *COPY_TO_REGCLASS = &I->second;
|
||||
|
||||
I = getInstructions().find("DEBUG_VALUE");
|
||||
I = getInstructions().find("DBG_VALUE");
|
||||
if (I == Instructions.end())
|
||||
throw "Could not find 'DEBUG_VALUE' instruction!";
|
||||
const CodeGenInstruction *DEBUG_VALUE = &I->second;
|
||||
throw "Could not find 'DBG_VALUE' instruction!";
|
||||
const CodeGenInstruction *DBG_VALUE = &I->second;
|
||||
|
||||
// Print out the rest of the instructions now.
|
||||
NumberedInstructions.push_back(PHI);
|
||||
@ -354,7 +354,7 @@ getInstructionsByEnumValue(std::vector<const CodeGenInstruction*>
|
||||
NumberedInstructions.push_back(IMPLICIT_DEF);
|
||||
NumberedInstructions.push_back(SUBREG_TO_REG);
|
||||
NumberedInstructions.push_back(COPY_TO_REGCLASS);
|
||||
NumberedInstructions.push_back(DEBUG_VALUE);
|
||||
NumberedInstructions.push_back(DBG_VALUE);
|
||||
for (inst_iterator II = inst_begin(), E = inst_end(); II != E; ++II)
|
||||
if (&II->second != PHI &&
|
||||
&II->second != INLINEASM &&
|
||||
@ -367,7 +367,7 @@ getInstructionsByEnumValue(std::vector<const CodeGenInstruction*>
|
||||
&II->second != IMPLICIT_DEF &&
|
||||
&II->second != SUBREG_TO_REG &&
|
||||
&II->second != COPY_TO_REGCLASS &&
|
||||
&II->second != DEBUG_VALUE)
|
||||
&II->second != DBG_VALUE)
|
||||
NumberedInstructions.push_back(&II->second);
|
||||
}
|
||||
|
||||
|
@ -346,7 +346,7 @@ void InstrInfoEmitter::emitShiftedValue(Record *R, StringInit *Val,
|
||||
R->getName() != "IMPLICIT_DEF" &&
|
||||
R->getName() != "SUBREG_TO_REG" &&
|
||||
R->getName() != "COPY_TO_REGCLASS" &&
|
||||
R->getName() != "DEBUG_VALUE")
|
||||
R->getName() != "DBG_VALUE")
|
||||
throw R->getName() + " doesn't have a field named '" +
|
||||
Val->getValue() + "'!";
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user