blob: 9700cba3595b3521bc004c40a483381c018ee298 [file] [log] [blame]
Nikolai Bozhenovebbde142017-09-19 11:54:29 +00001//===-- Nios2InstrInfo.cpp - Nios2 Instruction Information ----------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the Nios2 implementation of the TargetInstrInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Nios2InstrInfo.h"
15#include "Nios2TargetMachine.h"
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000016#include "llvm/CodeGen/MachineInstrBuilder.h"
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000017
18using namespace llvm;
19
20#define GET_INSTRINFO_CTOR_DTOR
21#include "Nios2GenInstrInfo.inc"
22
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000023// Pin the vtable to this file.
24void Nios2InstrInfo::anchor() {}
Nikolai Bozhenovebbde142017-09-19 11:54:29 +000025
Nikolai Bozhenov1cf9c542017-12-07 12:35:02 +000026Nios2InstrInfo::Nios2InstrInfo(Nios2Subtarget &ST)
27 : Nios2GenInstrInfo(), RI(ST), Subtarget(ST) {}
28
29/// Expand Pseudo instructions into real backend instructions
30bool Nios2InstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
31 MachineBasicBlock &MBB = *MI.getParent();
32
33 switch (MI.getDesc().getOpcode()) {
34 default:
35 return false;
36 case Nios2::RetRA:
37 BuildMI(MBB, MI, MI.getDebugLoc(), get(Nios2::RET_R1)).addReg(Nios2::RA);
38 break;
39 }
40
41 MBB.erase(MI);
42 return true;
43}
Nikolai Bozhenoveededda2018-01-09 11:15:08 +000044
45void 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)
52 .addReg(Nios2::ZERO)
53 .addReg(SrcReg, getKillRegState(KillSrc));
54}