There should be no extending loads or truncating
[oota-llvm.git] / lib / CodeGen / MachineInstr.cpp
1 //===-- lib/CodeGen/MachineInstr.cpp --------------------------------------===//
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 // Methods common to all machine instructions.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Constants.h"
15 #include "llvm/CodeGen/MachineInstr.h"
16 #include "llvm/Value.h"
17 #include "llvm/CodeGen/MachineFunction.h"
18 #include "llvm/CodeGen/MachineRegisterInfo.h"
19 #include "llvm/CodeGen/PseudoSourceValue.h"
20 #include "llvm/Target/TargetMachine.h"
21 #include "llvm/Target/TargetInstrInfo.h"
22 #include "llvm/Target/TargetInstrDesc.h"
23 #include "llvm/Target/TargetRegisterInfo.h"
24 #include "llvm/Support/MathExtras.h"
25 #include "llvm/Support/Streams.h"
26 #include <ostream>
27 using namespace llvm;
28
29 //===----------------------------------------------------------------------===//
30 // MachineOperand Implementation
31 //===----------------------------------------------------------------------===//
32
33 /// AddRegOperandToRegInfo - Add this register operand to the specified
34 /// MachineRegisterInfo.  If it is null, then the next/prev fields should be
35 /// explicitly nulled out.
36 void MachineOperand::AddRegOperandToRegInfo(MachineRegisterInfo *RegInfo) {
37   assert(isReg() && "Can only add reg operand to use lists");
38   
39   // If the reginfo pointer is null, just explicitly null out or next/prev
40   // pointers, to ensure they are not garbage.
41   if (RegInfo == 0) {
42     Contents.Reg.Prev = 0;
43     Contents.Reg.Next = 0;
44     return;
45   }
46   
47   // Otherwise, add this operand to the head of the registers use/def list.
48   MachineOperand **Head = &RegInfo->getRegUseDefListHead(getReg());
49   
50   // For SSA values, we prefer to keep the definition at the start of the list.
51   // we do this by skipping over the definition if it is at the head of the
52   // list.
53   if (*Head && (*Head)->isDef())
54     Head = &(*Head)->Contents.Reg.Next;
55   
56   Contents.Reg.Next = *Head;
57   if (Contents.Reg.Next) {
58     assert(getReg() == Contents.Reg.Next->getReg() &&
59            "Different regs on the same list!");
60     Contents.Reg.Next->Contents.Reg.Prev = &Contents.Reg.Next;
61   }
62   
63   Contents.Reg.Prev = Head;
64   *Head = this;
65 }
66
67 void MachineOperand::setReg(unsigned Reg) {
68   if (getReg() == Reg) return; // No change.
69   
70   // Otherwise, we have to change the register.  If this operand is embedded
71   // into a machine function, we need to update the old and new register's
72   // use/def lists.
73   if (MachineInstr *MI = getParent())
74     if (MachineBasicBlock *MBB = MI->getParent())
75       if (MachineFunction *MF = MBB->getParent()) {
76         RemoveRegOperandFromRegInfo();
77         Contents.Reg.RegNo = Reg;
78         AddRegOperandToRegInfo(&MF->getRegInfo());
79         return;
80       }
81         
82   // Otherwise, just change the register, no problem.  :)
83   Contents.Reg.RegNo = Reg;
84 }
85
86 /// ChangeToImmediate - Replace this operand with a new immediate operand of
87 /// the specified value.  If an operand is known to be an immediate already,
88 /// the setImm method should be used.
89 void MachineOperand::ChangeToImmediate(int64_t ImmVal) {
90   // If this operand is currently a register operand, and if this is in a
91   // function, deregister the operand from the register's use/def list.
92   if (isReg() && getParent() && getParent()->getParent() &&
93       getParent()->getParent()->getParent())
94     RemoveRegOperandFromRegInfo();
95   
96   OpKind = MO_Immediate;
97   Contents.ImmVal = ImmVal;
98 }
99
100 /// ChangeToRegister - Replace this operand with a new register operand of
101 /// the specified value.  If an operand is known to be an register already,
102 /// the setReg method should be used.
103 void MachineOperand::ChangeToRegister(unsigned Reg, bool isDef, bool isImp,
104                                       bool isKill, bool isDead) {
105   // If this operand is already a register operand, use setReg to update the 
106   // register's use/def lists.
107   if (isReg()) {
108     setReg(Reg);
109   } else {
110     // Otherwise, change this to a register and set the reg#.
111     OpKind = MO_Register;
112     Contents.Reg.RegNo = Reg;
113
114     // If this operand is embedded in a function, add the operand to the
115     // register's use/def list.
116     if (MachineInstr *MI = getParent())
117       if (MachineBasicBlock *MBB = MI->getParent())
118         if (MachineFunction *MF = MBB->getParent())
119           AddRegOperandToRegInfo(&MF->getRegInfo());
120   }
121
122   IsDef = isDef;
123   IsImp = isImp;
124   IsKill = isKill;
125   IsDead = isDead;
126   SubReg = 0;
127 }
128
129 /// isIdenticalTo - Return true if this operand is identical to the specified
130 /// operand.
131 bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
132   if (getType() != Other.getType()) return false;
133   
134   switch (getType()) {
135   default: assert(0 && "Unrecognized operand type");
136   case MachineOperand::MO_Register:
137     return getReg() == Other.getReg() && isDef() == Other.isDef() &&
138            getSubReg() == Other.getSubReg();
139   case MachineOperand::MO_Immediate:
140     return getImm() == Other.getImm();
141   case MachineOperand::MO_FPImmediate:
142     return getFPImm() == Other.getFPImm();
143   case MachineOperand::MO_MachineBasicBlock:
144     return getMBB() == Other.getMBB();
145   case MachineOperand::MO_FrameIndex:
146     return getIndex() == Other.getIndex();
147   case MachineOperand::MO_ConstantPoolIndex:
148     return getIndex() == Other.getIndex() && getOffset() == Other.getOffset();
149   case MachineOperand::MO_JumpTableIndex:
150     return getIndex() == Other.getIndex();
151   case MachineOperand::MO_GlobalAddress:
152     return getGlobal() == Other.getGlobal() && getOffset() == Other.getOffset();
153   case MachineOperand::MO_ExternalSymbol:
154     return !strcmp(getSymbolName(), Other.getSymbolName()) &&
155            getOffset() == Other.getOffset();
156   }
157 }
158
159 /// print - Print the specified machine operand.
160 ///
161 void MachineOperand::print(std::ostream &OS, const TargetMachine *TM) const {
162   switch (getType()) {
163   case MachineOperand::MO_Register:
164     if (getReg() == 0 || TargetRegisterInfo::isVirtualRegister(getReg())) {
165       OS << "%reg" << getReg();
166     } else {
167       // If the instruction is embedded into a basic block, we can find the
168       // target info for the instruction.
169       if (TM == 0)
170         if (const MachineInstr *MI = getParent())
171           if (const MachineBasicBlock *MBB = MI->getParent())
172             if (const MachineFunction *MF = MBB->getParent())
173               TM = &MF->getTarget();
174       
175       if (TM)
176         OS << "%" << TM->getRegisterInfo()->get(getReg()).Name;
177       else
178         OS << "%mreg" << getReg();
179     }
180       
181     if (isDef() || isKill() || isDead() || isImplicit()) {
182       OS << "<";
183       bool NeedComma = false;
184       if (isImplicit()) {
185         OS << (isDef() ? "imp-def" : "imp-use");
186         NeedComma = true;
187       } else if (isDef()) {
188         OS << "def";
189         NeedComma = true;
190       }
191       if (isKill() || isDead()) {
192         if (NeedComma) OS << ",";
193         if (isKill())  OS << "kill";
194         if (isDead())  OS << "dead";
195       }
196       OS << ">";
197     }
198     break;
199   case MachineOperand::MO_Immediate:
200     OS << getImm();
201     break;
202   case MachineOperand::MO_FPImmediate:
203     if (getFPImm()->getType() == Type::FloatTy) {
204       OS << getFPImm()->getValueAPF().convertToFloat();
205     } else {
206       OS << getFPImm()->getValueAPF().convertToDouble();
207     }
208     break;
209   case MachineOperand::MO_MachineBasicBlock:
210     OS << "mbb<"
211        << ((Value*)getMBB()->getBasicBlock())->getName()
212        << "," << (void*)getMBB() << ">";
213     break;
214   case MachineOperand::MO_FrameIndex:
215     OS << "<fi#" << getIndex() << ">";
216     break;
217   case MachineOperand::MO_ConstantPoolIndex:
218     OS << "<cp#" << getIndex();
219     if (getOffset()) OS << "+" << getOffset();
220     OS << ">";
221     break;
222   case MachineOperand::MO_JumpTableIndex:
223     OS << "<jt#" << getIndex() << ">";
224     break;
225   case MachineOperand::MO_GlobalAddress:
226     OS << "<ga:" << ((Value*)getGlobal())->getName();
227     if (getOffset()) OS << "+" << getOffset();
228     OS << ">";
229     break;
230   case MachineOperand::MO_ExternalSymbol:
231     OS << "<es:" << getSymbolName();
232     if (getOffset()) OS << "+" << getOffset();
233     OS << ">";
234     break;
235   default:
236     assert(0 && "Unrecognized operand type");
237   }
238 }
239
240 //===----------------------------------------------------------------------===//
241 // MachineMemOperand Implementation
242 //===----------------------------------------------------------------------===//
243
244 MachineMemOperand::MachineMemOperand(const Value *v, unsigned int f,
245                                      int64_t o, uint64_t s, unsigned int a)
246   : Offset(o), Size(s), V(v),
247     Flags((f & 7) | ((Log2_32(a) + 1) << 3)) {
248   assert(isPowerOf2_32(a) && "Alignment is not a power of 2!");
249 }
250
251 //===----------------------------------------------------------------------===//
252 // MachineInstr Implementation
253 //===----------------------------------------------------------------------===//
254
255 /// MachineInstr ctor - This constructor creates a dummy MachineInstr with
256 /// TID NULL and no operands.
257 MachineInstr::MachineInstr()
258   : TID(0), NumImplicitOps(0), Parent(0) {
259 }
260
261 void MachineInstr::addImplicitDefUseOperands() {
262   if (TID->ImplicitDefs)
263     for (const unsigned *ImpDefs = TID->ImplicitDefs; *ImpDefs; ++ImpDefs)
264       addOperand(MachineOperand::CreateReg(*ImpDefs, true, true));
265   if (TID->ImplicitUses)
266     for (const unsigned *ImpUses = TID->ImplicitUses; *ImpUses; ++ImpUses)
267       addOperand(MachineOperand::CreateReg(*ImpUses, false, true));
268 }
269
270 /// MachineInstr ctor - This constructor create a MachineInstr and add the
271 /// implicit operands. It reserves space for number of operands specified by
272 /// TargetInstrDesc or the numOperands if it is not zero. (for
273 /// instructions with variable number of operands).
274 MachineInstr::MachineInstr(const TargetInstrDesc &tid, bool NoImp)
275   : TID(&tid), NumImplicitOps(0), Parent(0) {
276   if (!NoImp && TID->getImplicitDefs())
277     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
278       NumImplicitOps++;
279   if (!NoImp && TID->getImplicitUses())
280     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
281       NumImplicitOps++;
282   Operands.reserve(NumImplicitOps + TID->getNumOperands());
283   if (!NoImp)
284     addImplicitDefUseOperands();
285 }
286
287 /// MachineInstr ctor - Work exactly the same as the ctor above, except that the
288 /// MachineInstr is created and added to the end of the specified basic block.
289 ///
290 MachineInstr::MachineInstr(MachineBasicBlock *MBB,
291                            const TargetInstrDesc &tid)
292   : TID(&tid), NumImplicitOps(0), Parent(0) {
293   assert(MBB && "Cannot use inserting ctor with null basic block!");
294   if (TID->ImplicitDefs)
295     for (const unsigned *ImpDefs = TID->getImplicitDefs(); *ImpDefs; ++ImpDefs)
296       NumImplicitOps++;
297   if (TID->ImplicitUses)
298     for (const unsigned *ImpUses = TID->getImplicitUses(); *ImpUses; ++ImpUses)
299       NumImplicitOps++;
300   Operands.reserve(NumImplicitOps + TID->getNumOperands());
301   addImplicitDefUseOperands();
302   MBB->push_back(this);  // Add instruction to end of basic block!
303 }
304
305 /// MachineInstr ctor - Copies MachineInstr arg exactly
306 ///
307 MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI) {
308   TID = &MI.getDesc();
309   NumImplicitOps = MI.NumImplicitOps;
310   Operands.reserve(MI.getNumOperands());
311
312   // Add operands
313   for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
314     Operands.push_back(MI.getOperand(i));
315     Operands.back().ParentMI = this;
316   }
317
318   // Add memory operands.
319   for (alist<MachineMemOperand>::const_iterator i = MI.memoperands_begin(),
320        j = MI.memoperands_end(); i != j; ++i)
321     addMemOperand(MF, *i);
322
323   // Set parent to null.
324   Parent = 0;
325 }
326
327 MachineInstr::~MachineInstr() {
328   assert(MemOperands.empty() &&
329          "MachineInstr being deleted with live memoperands!");
330 #ifndef NDEBUG
331   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
332     assert(Operands[i].ParentMI == this && "ParentMI mismatch!");
333     assert((!Operands[i].isReg() || !Operands[i].isOnRegUseList()) &&
334            "Reg operand def/use list corrupted");
335   }
336 #endif
337 }
338
339 /// getOpcode - Returns the opcode of this MachineInstr.
340 ///
341 int MachineInstr::getOpcode() const {
342   return TID->Opcode;
343 }
344
345 /// getRegInfo - If this instruction is embedded into a MachineFunction,
346 /// return the MachineRegisterInfo object for the current function, otherwise
347 /// return null.
348 MachineRegisterInfo *MachineInstr::getRegInfo() {
349   if (MachineBasicBlock *MBB = getParent())
350     return &MBB->getParent()->getRegInfo();
351   return 0;
352 }
353
354 /// RemoveRegOperandsFromUseLists - Unlink all of the register operands in
355 /// this instruction from their respective use lists.  This requires that the
356 /// operands already be on their use lists.
357 void MachineInstr::RemoveRegOperandsFromUseLists() {
358   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
359     if (Operands[i].isReg())
360       Operands[i].RemoveRegOperandFromRegInfo();
361   }
362 }
363
364 /// AddRegOperandsToUseLists - Add all of the register operands in
365 /// this instruction from their respective use lists.  This requires that the
366 /// operands not be on their use lists yet.
367 void MachineInstr::AddRegOperandsToUseLists(MachineRegisterInfo &RegInfo) {
368   for (unsigned i = 0, e = Operands.size(); i != e; ++i) {
369     if (Operands[i].isReg())
370       Operands[i].AddRegOperandToRegInfo(&RegInfo);
371   }
372 }
373
374
375 /// addOperand - Add the specified operand to the instruction.  If it is an
376 /// implicit operand, it is added to the end of the operand list.  If it is
377 /// an explicit operand it is added at the end of the explicit operand list
378 /// (before the first implicit operand). 
379 void MachineInstr::addOperand(const MachineOperand &Op) {
380   bool isImpReg = Op.isReg() && Op.isImplicit();
381   assert((isImpReg || !OperandsComplete()) &&
382          "Trying to add an operand to a machine instr that is already done!");
383
384   // If we are adding the operand to the end of the list, our job is simpler.
385   // This is true most of the time, so this is a reasonable optimization.
386   if (isImpReg || NumImplicitOps == 0) {
387     // We can only do this optimization if we know that the operand list won't
388     // reallocate.
389     if (Operands.empty() || Operands.size()+1 <= Operands.capacity()) {
390       Operands.push_back(Op);
391     
392       // Set the parent of the operand.
393       Operands.back().ParentMI = this;
394   
395       // If the operand is a register, update the operand's use list.
396       if (Op.isReg())
397         Operands.back().AddRegOperandToRegInfo(getRegInfo());
398       return;
399     }
400   }
401   
402   // Otherwise, we have to insert a real operand before any implicit ones.
403   unsigned OpNo = Operands.size()-NumImplicitOps;
404
405   MachineRegisterInfo *RegInfo = getRegInfo();
406
407   // If this instruction isn't embedded into a function, then we don't need to
408   // update any operand lists.
409   if (RegInfo == 0) {
410     // Simple insertion, no reginfo update needed for other register operands.
411     Operands.insert(Operands.begin()+OpNo, Op);
412     Operands[OpNo].ParentMI = this;
413
414     // Do explicitly set the reginfo for this operand though, to ensure the
415     // next/prev fields are properly nulled out.
416     if (Operands[OpNo].isReg())
417       Operands[OpNo].AddRegOperandToRegInfo(0);
418
419   } else if (Operands.size()+1 <= Operands.capacity()) {
420     // Otherwise, we have to remove register operands from their register use
421     // list, add the operand, then add the register operands back to their use
422     // list.  This also must handle the case when the operand list reallocates
423     // to somewhere else.
424   
425     // If insertion of this operand won't cause reallocation of the operand
426     // list, just remove the implicit operands, add the operand, then re-add all
427     // the rest of the operands.
428     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
429       assert(Operands[i].isReg() && "Should only be an implicit reg!");
430       Operands[i].RemoveRegOperandFromRegInfo();
431     }
432     
433     // Add the operand.  If it is a register, add it to the reg list.
434     Operands.insert(Operands.begin()+OpNo, Op);
435     Operands[OpNo].ParentMI = this;
436
437     if (Operands[OpNo].isReg())
438       Operands[OpNo].AddRegOperandToRegInfo(RegInfo);
439     
440     // Re-add all the implicit ops.
441     for (unsigned i = OpNo+1, e = Operands.size(); i != e; ++i) {
442       assert(Operands[i].isReg() && "Should only be an implicit reg!");
443       Operands[i].AddRegOperandToRegInfo(RegInfo);
444     }
445   } else {
446     // Otherwise, we will be reallocating the operand list.  Remove all reg
447     // operands from their list, then readd them after the operand list is
448     // reallocated.
449     RemoveRegOperandsFromUseLists();
450     
451     Operands.insert(Operands.begin()+OpNo, Op);
452     Operands[OpNo].ParentMI = this;
453   
454     // Re-add all the operands.
455     AddRegOperandsToUseLists(*RegInfo);
456   }
457 }
458
459 /// RemoveOperand - Erase an operand  from an instruction, leaving it with one
460 /// fewer operand than it started with.
461 ///
462 void MachineInstr::RemoveOperand(unsigned OpNo) {
463   assert(OpNo < Operands.size() && "Invalid operand number");
464   
465   // Special case removing the last one.
466   if (OpNo == Operands.size()-1) {
467     // If needed, remove from the reg def/use list.
468     if (Operands.back().isReg() && Operands.back().isOnRegUseList())
469       Operands.back().RemoveRegOperandFromRegInfo();
470     
471     Operands.pop_back();
472     return;
473   }
474
475   // Otherwise, we are removing an interior operand.  If we have reginfo to
476   // update, remove all operands that will be shifted down from their reg lists,
477   // move everything down, then re-add them.
478   MachineRegisterInfo *RegInfo = getRegInfo();
479   if (RegInfo) {
480     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
481       if (Operands[i].isReg())
482         Operands[i].RemoveRegOperandFromRegInfo();
483     }
484   }
485   
486   Operands.erase(Operands.begin()+OpNo);
487
488   if (RegInfo) {
489     for (unsigned i = OpNo, e = Operands.size(); i != e; ++i) {
490       if (Operands[i].isReg())
491         Operands[i].AddRegOperandToRegInfo(RegInfo);
492     }
493   }
494 }
495
496 /// addMemOperand - Add a MachineMemOperand to the machine instruction,
497 /// referencing arbitrary storage.
498 void MachineInstr::addMemOperand(MachineFunction &MF,
499                                  const MachineMemOperand &MO) {
500   MemOperands.push_back(MF.CreateMachineMemOperand(MO));
501 }
502
503 /// clearMemOperands - Erase all of this MachineInstr's MachineMemOperands.
504 void MachineInstr::clearMemOperands(MachineFunction &MF) {
505   while (!MemOperands.empty())
506     MF.DeleteMachineMemOperand(MemOperands.remove(MemOperands.begin()));
507 }
508
509
510 /// removeFromParent - This method unlinks 'this' from the containing basic
511 /// block, and returns it, but does not delete it.
512 MachineInstr *MachineInstr::removeFromParent() {
513   assert(getParent() && "Not embedded in a basic block!");
514   getParent()->remove(this);
515   return this;
516 }
517
518
519 /// eraseFromParent - This method unlinks 'this' from the containing basic
520 /// block, and deletes it.
521 void MachineInstr::eraseFromParent() {
522   assert(getParent() && "Not embedded in a basic block!");
523   getParent()->erase(this);
524 }
525
526
527 /// OperandComplete - Return true if it's illegal to add a new operand
528 ///
529 bool MachineInstr::OperandsComplete() const {
530   unsigned short NumOperands = TID->getNumOperands();
531   if (!TID->isVariadic() && getNumOperands()-NumImplicitOps >= NumOperands)
532     return true;  // Broken: we have all the operands of this instruction!
533   return false;
534 }
535
536 /// getNumExplicitOperands - Returns the number of non-implicit operands.
537 ///
538 unsigned MachineInstr::getNumExplicitOperands() const {
539   unsigned NumOperands = TID->getNumOperands();
540   if (!TID->isVariadic())
541     return NumOperands;
542
543   for (unsigned e = getNumOperands(); NumOperands != e; ++NumOperands) {
544     const MachineOperand &MO = getOperand(NumOperands);
545     if (!MO.isRegister() || !MO.isImplicit())
546       NumOperands++;
547   }
548   return NumOperands;
549 }
550
551
552 /// isLabel - Returns true if the MachineInstr represents a label.
553 ///
554 bool MachineInstr::isLabel() const {
555   return getOpcode() == TargetInstrInfo::DBG_LABEL ||
556          getOpcode() == TargetInstrInfo::EH_LABEL ||
557          getOpcode() == TargetInstrInfo::GC_LABEL;
558 }
559
560 /// isDebugLabel - Returns true if the MachineInstr represents a debug label.
561 ///
562 bool MachineInstr::isDebugLabel() const {
563   return getOpcode() == TargetInstrInfo::DBG_LABEL;
564 }
565
566 /// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of
567 /// the specific register or -1 if it is not found. It further tightening
568 /// the search criteria to a use that kills the register if isKill is true.
569 int MachineInstr::findRegisterUseOperandIdx(unsigned Reg, bool isKill,
570                                           const TargetRegisterInfo *TRI) const {
571   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
572     const MachineOperand &MO = getOperand(i);
573     if (!MO.isRegister() || !MO.isUse())
574       continue;
575     unsigned MOReg = MO.getReg();
576     if (!MOReg)
577       continue;
578     if (MOReg == Reg ||
579         (TRI &&
580          TargetRegisterInfo::isPhysicalRegister(MOReg) &&
581          TargetRegisterInfo::isPhysicalRegister(Reg) &&
582          TRI->isSubRegister(MOReg, Reg)))
583       if (!isKill || MO.isKill())
584         return i;
585   }
586   return -1;
587 }
588   
589 /// findRegisterDefOperandIdx() - Returns the operand index that is a def of
590 /// the specified register or -1 if it is not found. If isDead is true, defs
591 /// that are not dead are skipped. If TargetRegisterInfo is non-null, then it
592 /// also checks if there is a def of a super-register.
593 int MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead,
594                                           const TargetRegisterInfo *TRI) const {
595   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
596     const MachineOperand &MO = getOperand(i);
597     if (!MO.isRegister() || !MO.isDef())
598       continue;
599     unsigned MOReg = MO.getReg();
600     if (MOReg == Reg ||
601         (TRI &&
602          TargetRegisterInfo::isPhysicalRegister(MOReg) &&
603          TargetRegisterInfo::isPhysicalRegister(Reg) &&
604          TRI->isSubRegister(MOReg, Reg)))
605       if (!isDead || MO.isDead())
606         return i;
607   }
608   return -1;
609 }
610
611 /// findFirstPredOperandIdx() - Find the index of the first operand in the
612 /// operand list that is used to represent the predicate. It returns -1 if
613 /// none is found.
614 int MachineInstr::findFirstPredOperandIdx() const {
615   const TargetInstrDesc &TID = getDesc();
616   if (TID.isPredicable()) {
617     for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
618       if (TID.OpInfo[i].isPredicate())
619         return i;
620   }
621
622   return -1;
623 }
624   
625 /// isRegReDefinedByTwoAddr - Given the defined register and the operand index,
626 /// check if the register def is a re-definition due to two addr elimination.
627 bool MachineInstr::isRegReDefinedByTwoAddr(unsigned Reg, unsigned DefIdx) const{
628   const TargetInstrDesc &TID = getDesc();
629   for (unsigned i = 0, e = TID.getNumOperands(); i != e; ++i) {
630     const MachineOperand &MO = getOperand(i);
631     if (MO.isRegister() && MO.isUse() && MO.getReg() == Reg &&
632         TID.getOperandConstraint(i, TOI::TIED_TO) == (int)DefIdx)
633       return true;
634   }
635   return false;
636 }
637
638 /// copyKillDeadInfo - Copies kill / dead operand properties from MI.
639 ///
640 void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) {
641   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
642     const MachineOperand &MO = MI->getOperand(i);
643     if (!MO.isRegister() || (!MO.isKill() && !MO.isDead()))
644       continue;
645     for (unsigned j = 0, ee = getNumOperands(); j != ee; ++j) {
646       MachineOperand &MOp = getOperand(j);
647       if (!MOp.isIdenticalTo(MO))
648         continue;
649       if (MO.isKill())
650         MOp.setIsKill();
651       else
652         MOp.setIsDead();
653       break;
654     }
655   }
656 }
657
658 /// copyPredicates - Copies predicate operand(s) from MI.
659 void MachineInstr::copyPredicates(const MachineInstr *MI) {
660   const TargetInstrDesc &TID = MI->getDesc();
661   if (!TID.isPredicable())
662     return;
663   for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
664     if (TID.OpInfo[i].isPredicate()) {
665       // Predicated operands must be last operands.
666       addOperand(MI->getOperand(i));
667     }
668   }
669 }
670
671 /// isSafeToMove - Return true if it is safe to move this instruction. If
672 /// SawStore is set to true, it means that there is a store (or call) between
673 /// the instruction's location and its intended destination.
674 bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII, bool &SawStore) {
675   // Ignore stuff that we obviously can't move.
676   if (TID->mayStore() || TID->isCall()) {
677     SawStore = true;
678     return false;
679   }
680   if (TID->isReturn() || TID->isBranch() || TID->hasUnmodeledSideEffects())
681     return false;
682
683   // See if this instruction does a load.  If so, we have to guarantee that the
684   // loaded value doesn't change between the load and the its intended
685   // destination. The check for isInvariantLoad gives the targe the chance to
686   // classify the load as always returning a constant, e.g. a constant pool
687   // load.
688   if (TID->mayLoad() && !TII->isInvariantLoad(this)) {
689     // Otherwise, this is a real load.  If there is a store between the load and
690     // end of block, we can't sink the load.
691     //
692     // FIXME: we can't do this transformation until we know that the load is
693     // not volatile, and machineinstrs don't keep this info. :(
694     //
695     //if (SawStore) 
696     return false;
697   }
698   return true;
699 }
700
701 void MachineInstr::dump() const {
702   cerr << "  " << *this;
703 }
704
705 void MachineInstr::print(std::ostream &OS, const TargetMachine *TM) const {
706   // Specialize printing if op#0 is definition
707   unsigned StartOp = 0;
708   if (getNumOperands() && getOperand(0).isRegister() && getOperand(0).isDef()) {
709     getOperand(0).print(OS, TM);
710     OS << " = ";
711     ++StartOp;   // Don't print this operand again!
712   }
713
714   OS << getDesc().getName();
715
716   for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
717     if (i != StartOp)
718       OS << ",";
719     OS << " ";
720     getOperand(i).print(OS, TM);
721   }
722
723   if (!memoperands_empty()) {
724     OS << ", Mem:";
725     for (alist<MachineMemOperand>::const_iterator i = memoperands_begin(),
726          e = memoperands_end(); i != e; ++i) {
727       const MachineMemOperand &MRO = *i;
728       const Value *V = MRO.getValue();
729
730       assert((MRO.isLoad() || MRO.isStore()) &&
731              "SV has to be a load, store or both.");
732       
733       if (MRO.isVolatile())
734         OS << "Volatile ";
735
736       if (MRO.isLoad())
737         OS << "LD";
738       if (MRO.isStore())
739         OS << "ST";
740         
741       OS << "(" << MRO.getSize() << "," << MRO.getAlignment() << ") [";
742       
743       if (!V)
744         OS << "<unknown>";
745       else if (!V->getName().empty())
746         OS << V->getName();
747       else if (isa<PseudoSourceValue>(V))
748         OS << *V;
749       else
750         OS << V;
751
752       OS << " + " << MRO.getOffset() << "]";
753     }
754   }
755
756   OS << "\n";
757 }
758
759 bool MachineInstr::addRegisterKilled(unsigned IncomingReg,
760                                      const TargetRegisterInfo *RegInfo,
761                                      bool AddIfNotFound) {
762   bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
763   bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
764   SmallVector<unsigned,4> DeadOps;
765   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
766     MachineOperand &MO = getOperand(i);
767     if (!MO.isRegister() || !MO.isUse())
768       continue;
769     unsigned Reg = MO.getReg();
770     if (!Reg)
771       continue;
772
773     if (Reg == IncomingReg) {
774       MO.setIsKill();
775       return true;
776     }
777     if (hasAliases && MO.isKill() &&
778         TargetRegisterInfo::isPhysicalRegister(Reg)) {
779       // A super-register kill already exists.
780       if (RegInfo->isSuperRegister(IncomingReg, Reg))
781         return true;
782       if (RegInfo->isSubRegister(IncomingReg, Reg))
783         DeadOps.push_back(i);
784     }
785   }
786
787   // Trim unneeded kill operands.
788   while (!DeadOps.empty()) {
789     unsigned OpIdx = DeadOps.back();
790     if (getOperand(OpIdx).isImplicit())
791       RemoveOperand(OpIdx);
792     else
793       getOperand(OpIdx).setIsKill(false);
794     DeadOps.pop_back();
795   }
796
797   // If not found, this means an alias of one of the operands is killed. Add a
798   // new implicit operand if required.
799   if (AddIfNotFound) {
800     addOperand(MachineOperand::CreateReg(IncomingReg,
801                                          false /*IsDef*/,
802                                          true  /*IsImp*/,
803                                          true  /*IsKill*/));
804     return true;
805   }
806   return false;
807 }
808
809 bool MachineInstr::addRegisterDead(unsigned IncomingReg,
810                                    const TargetRegisterInfo *RegInfo,
811                                    bool AddIfNotFound) {
812   bool isPhysReg = TargetRegisterInfo::isPhysicalRegister(IncomingReg);
813   bool hasAliases = isPhysReg && RegInfo->getAliasSet(IncomingReg);
814   SmallVector<unsigned,4> DeadOps;
815   for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
816     MachineOperand &MO = getOperand(i);
817     if (!MO.isRegister() || !MO.isDef())
818       continue;
819     unsigned Reg = MO.getReg();
820     if (Reg == IncomingReg) {
821       MO.setIsDead();
822       return true;
823     }
824     if (hasAliases && MO.isDead() &&
825         TargetRegisterInfo::isPhysicalRegister(Reg)) {
826       // There exists a super-register that's marked dead.
827       if (RegInfo->isSuperRegister(IncomingReg, Reg))
828         return true;
829       if (RegInfo->isSubRegister(IncomingReg, Reg))
830         DeadOps.push_back(i);
831     }
832   }
833
834   // Trim unneeded dead operands.
835   while (!DeadOps.empty()) {
836     unsigned OpIdx = DeadOps.back();
837     if (getOperand(OpIdx).isImplicit())
838       RemoveOperand(OpIdx);
839     else
840       getOperand(OpIdx).setIsDead(false);
841     DeadOps.pop_back();
842   }
843
844   // If not found, this means an alias of one of the operand is dead. Add a
845   // new implicit operand.
846   if (AddIfNotFound) {
847     addOperand(MachineOperand::CreateReg(IncomingReg, true/*IsDef*/,
848                                          true/*IsImp*/,false/*IsKill*/,
849                                          true/*IsDead*/));
850     return true;
851   }
852   return false;
853 }