1 //===-- Nios2InstrInfo.cpp - Nios2 Instruction Information ----------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains the Nios2 implementation of the TargetInstrInfo class.
12 //===----------------------------------------------------------------------===//
14 #include "Nios2InstrInfo.h"
15 #include "Nios2TargetMachine.h"
16 #include "llvm/CodeGen/MachineInstrBuilder.h"
20 #define GET_INSTRINFO_CTOR_DTOR
21 #include "Nios2GenInstrInfo.inc"
23 // Pin the vtable to this file.
24 void Nios2InstrInfo::anchor() {}
26 Nios2InstrInfo::Nios2InstrInfo(Nios2Subtarget
&ST
)
27 : Nios2GenInstrInfo(), RI(ST
), Subtarget(ST
) {}
29 /// Expand Pseudo instructions into real backend instructions
30 bool Nios2InstrInfo::expandPostRAPseudo(MachineInstr
&MI
) const {
31 MachineBasicBlock
&MBB
= *MI
.getParent();
33 switch (MI
.getDesc().getOpcode()) {
37 BuildMI(MBB
, MI
, MI
.getDebugLoc(), get(Nios2::RET_R1
)).addReg(Nios2::RA
);
45 void Nios2InstrInfo::copyPhysReg(MachineBasicBlock
&MBB
,
46 MachineBasicBlock::iterator I
,
47 const DebugLoc
&DL
, unsigned DestReg
,
48 unsigned SrcReg
, bool KillSrc
) const {
49 unsigned opc
= Subtarget
.hasNios2r2() ? Nios2::ADD_R2
: Nios2::ADD_R1
;
50 BuildMI(MBB
, I
, DL
, get(opc
))
51 .addReg(DestReg
, RegState::Define
)
53 .addReg(SrcReg
, getKillRegState(KillSrc
));