| Duraid Madina | 91ed0a1 | 2005-03-17 18:17:03 +0000 | [diff] [blame] | 1 | //===- IA64InstrInfo.cpp - IA64 Instruction Information -----------*- C++ -*-===// | 
| Misha Brukman | 89b8c8d | 2005-04-21 23:13:11 +0000 | [diff] [blame] | 2 | // | 
| Duraid Madina | 91ed0a1 | 2005-03-17 18:17:03 +0000 | [diff] [blame] | 3 | //                     The LLVM Compiler Infrastructure | 
|  | 4 | // | 
|  | 5 | // This file was developed by the LLVM research group and is distributed under | 
|  | 6 | // the University of Illinois Open Source License. See LICENSE.TXT for details. | 
| Misha Brukman | 89b8c8d | 2005-04-21 23:13:11 +0000 | [diff] [blame] | 7 | // | 
| Duraid Madina | 91ed0a1 | 2005-03-17 18:17:03 +0000 | [diff] [blame] | 8 | //===----------------------------------------------------------------------===// | 
|  | 9 | // | 
|  | 10 | // This file contains the IA64 implementation of the TargetInstrInfo class. | 
|  | 11 | // | 
|  | 12 | //===----------------------------------------------------------------------===// | 
|  | 13 |  | 
|  | 14 | #include "IA64InstrInfo.h" | 
|  | 15 | #include "IA64.h" | 
|  | 16 | #include "IA64InstrBuilder.h" | 
|  | 17 | #include "llvm/CodeGen/MachineInstrBuilder.h" | 
|  | 18 | #include "IA64GenInstrInfo.inc" | 
|  | 19 | using namespace llvm; | 
|  | 20 |  | 
|  | 21 | IA64InstrInfo::IA64InstrInfo() | 
|  | 22 | : TargetInstrInfo(IA64Insts, sizeof(IA64Insts)/sizeof(IA64Insts[0])) { | 
|  | 23 | } | 
|  | 24 |  | 
|  | 25 |  | 
|  | 26 | bool IA64InstrInfo::isMoveInstr(const MachineInstr& MI, | 
|  | 27 | unsigned& sourceReg, | 
|  | 28 | unsigned& destReg) const { | 
|  | 29 | MachineOpCode oc = MI.getOpcode(); | 
|  | 30 | if (oc == IA64::MOV || oc == IA64::FMOV) { | 
| Duraid Madina | 5ea06a9 | 2006-01-25 02:23:38 +0000 | [diff] [blame] | 31 | // TODO: this doesn't detect predicate moves | 
| Duraid Madina | 91ed0a1 | 2005-03-17 18:17:03 +0000 | [diff] [blame] | 32 | assert(MI.getNumOperands() == 2 && | 
|  | 33 | /* MI.getOperand(0).isRegister() && | 
|  | 34 | MI.getOperand(1).isRegister() && */ | 
|  | 35 | "invalid register-register move instruction"); | 
|  | 36 | if( MI.getOperand(0).isRegister() && | 
| Misha Brukman | e73e76d | 2005-04-22 17:54:37 +0000 | [diff] [blame] | 37 | MI.getOperand(1).isRegister() ) { | 
| Duraid Madina | 91ed0a1 | 2005-03-17 18:17:03 +0000 | [diff] [blame] | 38 | // if both operands of the MOV/FMOV are registers, then | 
|  | 39 | // yes, this is a move instruction | 
|  | 40 | sourceReg = MI.getOperand(1).getReg(); | 
|  | 41 | destReg = MI.getOperand(0).getReg(); | 
|  | 42 | return true; | 
|  | 43 | } | 
|  | 44 | } | 
|  | 45 | return false; // we don't consider e.g. %regN = MOV <FrameIndex #x> a | 
|  | 46 | // move instruction | 
|  | 47 | } | 
|  | 48 |  |