blob: df435d2715d79009ca31355edccd713f536c9d41 [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}