MachineInstr.cpp revision 2a90ba60175f93e7438165d8423100aa573c16c5
1035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===-- MachineInstr.cpp --------------------------------------------------===//
270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve//
3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//                     The LLVM Compiler Infrastructure
4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
5b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// This file was developed by the LLVM research group and is distributed under
6b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
7b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===//
9b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//
10035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===----------------------------------------------------------------------===//
1170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
12822b4fb896846b87dd11a330ae13f2239329aeefChris Lattner#include "llvm/CodeGen/MachineInstr.h"
13ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner#include "llvm/CodeGen/MachineBasicBlock.h"
143801f6d38371b734d9de2fb8394ca75d2bf190ebChris Lattner#include "llvm/Value.h"
151049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner#include "llvm/Target/TargetMachine.h"
163501feab811c86c9659248a4875fc31a3165f84dChris Lattner#include "llvm/Target/TargetInstrInfo.h"
172a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner#include "llvm/Target/MRegisterInfo.h"
188d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner
19d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekenamespace llvm {
20d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
21f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// Global variable holding an array of descriptors for machine instructions.
22f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// The actual object needs to be created separately for each target machine.
233501feab811c86c9659248a4875fc31a3165f84dChris Lattner// This variable is initialized and reset by class TargetInstrInfo.
24f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner//
25f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// FIXME: This should be a property of the target so that more than one target
26f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// at a time can be active...
27f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner//
283501feab811c86c9659248a4875fc31a3165f84dChris Lattnerextern const TargetInstrDescriptor *TargetInstrDescriptors;
2969917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka
301885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve// Constructor for instructions with variable #operands
312a90ba60175f93e7438165d8423100aa573c16c5Chris LattnerMachineInstr::MachineInstr(MachineOpCode opcode, unsigned  numOperands)
322a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  : Opcode(opcode), operands(numOperands, MachineOperand()), numImplicitRefs(0){
33413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner}
34413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner
35ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr ctor - This constructor only does a _reserve_ of the operands,
36ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// not a resize for them.  It is expected that if you use this that you call
37ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// add* methods below to fill up the operands, instead of the Set methods.
38ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// Eventually, the "resizing" ctors will be phased out.
39ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner///
402a90ba60175f93e7438165d8423100aa573c16c5Chris LattnerMachineInstr::MachineInstr(MachineOpCode opcode, unsigned numOperands,
41a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve                           bool XX, bool YY)
422a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  : Opcode(opcode), numImplicitRefs(0) {
437279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner  operands.reserve(numOperands);
447279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner}
457279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner
46ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr ctor - Work exactly the same as the ctor above, except that the
47ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr is created and added to the end of the specified basic block.
48ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner///
492a90ba60175f93e7438165d8423100aa573c16c5Chris LattnerMachineInstr::MachineInstr(MachineBasicBlock *MBB, MachineOpCode opcode,
50ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner                           unsigned numOperands)
512a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  : Opcode(opcode), numImplicitRefs(0) {
52ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner  assert(MBB && "Cannot use inserting ctor with null basic block!");
53ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner  operands.reserve(numOperands);
54ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner  MBB->push_back(this);  // Add instruction to end of basic block!
55ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner}
56ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner
57ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner
58413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner// OperandComplete - Return true if it's illegal to add a new operand
592a90ba60175f93e7438165d8423100aa573c16c5Chris Lattnerbool MachineInstr::OperandsComplete() const {
602a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  int NumOperands = TargetInstrDescriptors[Opcode].numOperands;
61a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  if (NumOperands >= 0 && getNumOperands() >= (unsigned)NumOperands)
623497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve    return true;  // Broken: we have all the operands of this instruction!
63413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner  return false;
6470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
6570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
66413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner
67e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve//
68e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// Support for replacing opcode and operands of a MachineInstr in place.
69e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// This only resets the size of the operand vector and initializes it.
70e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// The new operands must be set explicitly later.
71e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve//
722a90ba60175f93e7438165d8423100aa573c16c5Chris Lattnervoid MachineInstr::replace(MachineOpCode opcode, unsigned numOperands) {
73a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  assert(getNumImplicitRefs() == 0 &&
74a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve         "This is probably broken because implicit refs are going to be lost.");
752a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  Opcode = opcode;
76e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve  operands.clear();
77413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner  operands.resize(numOperands, MachineOperand());
78e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve}
79e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve
80a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattnervoid MachineInstr::SetMachineOperandVal(unsigned i,
81a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner                                        MachineOperand::MachineOperandType opTy,
82a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner                                        Value* V) {
83a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  assert(i < operands.size());          // may be explicit or implicit op
84a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner  operands[i].opType = opTy;
85572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].value = V;
86572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].regNum = -1;
8770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
8870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
8970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid
90572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris LattnerMachineInstr::SetMachineOperandConst(unsigned i,
9170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve				MachineOperand::MachineOperandType operandType,
922a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner                                     int64_t intValue) {
93a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  assert(i < getNumOperands());          // must be explicit op
942a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  assert(TargetInstrDescriptors[Opcode].resultPos != (int) i &&
95c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve         "immed. constant cannot be defined");
96572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner
97572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].opType = operandType;
98572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].value = NULL;
99572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].immedVal = intValue;
100572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].regNum = -1;
101572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].flags = 0;
10270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
10370bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
104a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattnervoid MachineInstr::SetMachineOperandReg(unsigned i, int regNum) {
105a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  assert(i < getNumOperands());          // must be explicit op
106572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner
1072f305989b395a0a8bf00c4b9dc140a6df051245eChris Lattner  operands[i].opType = MachineOperand::MO_MachineRegister;
108572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].value = NULL;
109572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner  operands[i].regNum = regNum;
11070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
11170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
1122a90ba60175f93e7438165d8423100aa573c16c5Chris Lattnervoid MachineInstr::SetRegForOperand(unsigned i, int regNum) {
113a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  assert(i < getNumOperands());          // must be explicit op
1147a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve  operands[i].setRegForValue(regNum);
1157a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve}
1167a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve
1172a90ba60175f93e7438165d8423100aa573c16c5Chris Lattnervoid MachineInstr::SetRegForImplicitRef(unsigned i, int regNum) {
1183497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve  getImplicitOp(i).setRegForValue(regNum);
1193497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve}
1203497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve
1217a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve
1226eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman// Substitute all occurrences of Value* oldVal with newVal in all operands
123627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// and all implicit refs.
124627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// If defsOnly == true, substitute defs only.
125e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adveunsigned
126627eb31cd791f808eaa048478d01222577a30a1aVikram S. AdveMachineInstr::substituteValue(const Value* oldVal, Value* newVal,
127627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve                              bool defsOnly, bool notDefsAndUses,
128627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve                              bool& someArgsWereIgnored)
129e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve{
1302010f7baec18914b8a5d1b2b4c3c21511fa6e25dVikram S. Adve  assert((!defsOnly || !notDefsAndUses) &&
1312010f7baec18914b8a5d1b2b4c3c21511fa6e25dVikram S. Adve         "notDefsAndUses is irrelevant if defsOnly == true.");
132627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve
133e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve  unsigned numSubst = 0;
134e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve
1356eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman  // Substitute operands
136e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve  for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O)
137e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve    if (*O == oldVal)
138627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve      if (!defsOnly ||
1394d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          notDefsAndUses && (O.isDef() && !O.isUse()) ||
1404d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          !notDefsAndUses && O.isDef())
141e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve        {
142e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve          O.getMachineOperand().value = newVal;
143e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve          ++numSubst;
144e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve        }
145627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve      else
146627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve        someArgsWereIgnored = true;
147e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve
1486eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman  // Substitute implicit refs
149a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve  for (unsigned i=0, N=getNumImplicitRefs(); i < N; ++i)
15027a08935ca4ccf2121c2cf4bfbf148e2382c7762Chris Lattner    if (getImplicitRef(i) == oldVal)
151627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve      if (!defsOnly ||
1524d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          notDefsAndUses && (getImplicitOp(i).isDef() && !getImplicitOp(i).isUse()) ||
1534d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          !notDefsAndUses && getImplicitOp(i).isDef())
154e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve        {
155a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve          getImplicitOp(i).value = newVal;
156e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve          ++numSubst;
157e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve        }
158627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve      else
159627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve        someArgsWereIgnored = true;
160e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve
161e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve  return numSubst;
162e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve}
163e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve
164e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve
1657a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Advevoid
1667a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::dump() const
1677a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve{
168925b771dc378d6c88da44cd5b6650f2758c3c0a7Chris Lattner  std::cerr << "  " << *this;
16970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
17070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
1718c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Advestatic inline std::ostream&
1728c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. AdveOutputValue(std::ostream &os, const Value* val)
17393240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve{
17493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve  os << "(val ";
175627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve  os << (void*) val;                    // print address always
17693240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve  if (val && val->hasName())
177627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve    os << " " << val->getName() << ")"; // print name also, if available
178627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve  return os;
17993240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve}
18093240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve
1812a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattnerstatic inline void OutputReg(std::ostream &os, unsigned RegNo,
1822a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner                             const MRegisterInfo *MRI = 0) {
1832a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner  if (MRI) {
1842a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner    if (RegNo < MRegisterInfo::FirstVirtualRegister)
1852a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner      os << "%" << MRI->get(RegNo).Name;
1862a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner    else
1872a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner      os << "%reg" << RegNo;
1882a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner  } else
1892a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner    os << "%mreg(" << RegNo << ")";
1908c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve}
1918c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve
1921049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattnerstatic void print(const MachineOperand &MO, std::ostream &OS,
1931049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner                  const TargetMachine &TM) {
1942a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner  const MRegisterInfo *MRI = TM.getRegisterInfo();
1951049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  bool CloseParen = true;
1964d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  if (MO.isHiBits32())
1971049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%lm(";
1984d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isLoBits32())
1991049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%lo(";
2004d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isHiBits64())
2011049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%hh(";
2024d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isLoBits64())
2031049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%hm(";
2041049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  else
2051049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    CloseParen = false;
2061049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
2071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  switch (MO.getType()) {
2081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_VirtualRegister:
2091049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    if (MO.getVRegValue()) {
2101049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OS << "%reg";
2111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OutputValue(OS, MO.getVRegValue());
2121049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      if (MO.hasAllocatedReg())
2131049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner        OS << "==";
2141049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    }
2151049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    if (MO.hasAllocatedReg())
2162a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner      OutputReg(OS, MO.getAllocatedRegNum(), MRI);
2171049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2181049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_CCRegister:
2191049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%ccreg";
2201049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OutputValue(OS, MO.getVRegValue());
2211049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    if (MO.hasAllocatedReg()) {
2221049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OS << "==";
2232a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner      OutputReg(OS, MO.getAllocatedRegNum(), MRI);
2241049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    }
2251049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2261049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_MachineRegister:
2272a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner    OutputReg(OS, MO.getMachineRegNum(), MRI);
2281049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2291049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_SignExtendedImmed:
2301049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << (long)MO.getImmedValue();
2311049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2321049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_UnextendedImmed:
2331049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << (long)MO.getImmedValue();
2341049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2351049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  case MachineOperand::MO_PCRelativeDisp: {
2361049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    const Value* opVal = MO.getVRegValue();
2371049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal);
2381049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "%disp(" << (isLabel? "label " : "addr-of-val ");
2391049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    if (opVal->hasName())
2401049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OS << opVal->getName();
2411049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    else
2421049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OS << (const void*) opVal;
2431049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << ")";
2441049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    break;
2451049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  }
2462109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner  case MachineOperand::MO_MachineBasicBlock:
2472109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner    OS << "bb<"
2482109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner       << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName()
2492109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner       << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">";
2502109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner    break;
25110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner  case MachineOperand::MO_FrameIndex:
25210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << "<fi#" << MO.getFrameIndex() << ">";
25310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    break;
2548d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  case MachineOperand::MO_ConstantPoolIndex:
2558d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    OS << "<cp#" << MO.getConstantPoolIndex() << ">";
2568d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    break;
2578d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  case MachineOperand::MO_GlobalAddress:
2588d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">";
2598d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    break;
2608d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  case MachineOperand::MO_ExternalSymbol:
2618d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    OS << "<es:" << MO.getSymbolName() << ">";
2628d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    break;
2631049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  default:
2641049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    assert(0 && "Unrecognized operand type");
2651049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  }
2661049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
2671049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  if (CloseParen)
2681049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << ")";
2691049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner}
2701049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
271af55be15dfa5321f470ce9734fabd858f5af7a88Chris Lattnervoid MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const {
2726a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner  unsigned StartOp = 0;
2736a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner
2746a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner   // Specialize printing if op#0 is definition
2754d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  if (getNumOperands() && getOperand(0).isDef() && !getOperand(0).isUse()) {
276d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke      llvm::print(getOperand(0), OS, TM);
2776a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner    OS << " = ";
2786a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner    ++StartOp;   // Don't print this operand again!
2796a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner  }
2801049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  OS << TM.getInstrInfo().getName(getOpcode());
2816a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner
2826a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner  for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) {
2835f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve    const MachineOperand& mop = getOperand(i);
2846a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner    if (i != StartOp)
2856a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner      OS << ",";
2866a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner    OS << " ";
287d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke    llvm::print(mop, OS, TM);
2886a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner
2894d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos    if (mop.isDef())
2904d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      if (mop.isUse())
2914d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos        OS << "<def&use>";
2924d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      else
2934d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos        OS << "<def>";
2941049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  }
2956a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner
2966eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman  // code for printing implicit references
2971049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  if (getNumImplicitRefs()) {
2981049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    OS << "\tImplicitRefs: ";
2991049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    for(unsigned i = 0, e = getNumImplicitRefs(); i != e; ++i) {
3001049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      OS << "\t";
3015f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve      OutputValue(OS, getImplicitRef(i));
3024d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      if (getImplicitOp(i).isDef())
3034d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          if (getImplicitOp(i).isUse())
3044d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos            OS << "<def&use>";
3054d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          else
3064d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos            OS << "<def>";
3071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner    }
3081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  }
3091049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
3101049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner  OS << "\n";
3111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner}
3121049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
3131049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner
3148d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattnerstd::ostream &operator<<(std::ostream& os, const MachineInstr& MI)
31570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{
3162a90ba60175f93e7438165d8423100aa573c16c5Chris Lattner  os << TargetInstrDescriptors[MI.getOpcode()].Name;
31770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
3188d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  for (unsigned i=0, N=MI.getNumOperands(); i < N; i++) {
3198d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    os << "\t" << MI.getOperand(i);
3204d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos    if (MI.getOperand(i).isDef())
3214d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      if (MI.getOperand(i).isUse())
3224d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos        os << "<d&u>";
3234d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      else
3244d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos        os << "<d>";
3258d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka  }
32670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
3276eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman  // code for printing implicit references
3288d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  unsigned NumOfImpRefs = MI.getNumImplicitRefs();
3298d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner  if (NumOfImpRefs > 0) {
33093240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve    os << "\tImplicit: ";
3318d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    for (unsigned z=0; z < NumOfImpRefs; z++) {
3328d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      OutputValue(os, MI.getImplicitRef(z));
3334d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos      if (MI.getImplicitOp(z).isDef())
3344d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          if (MI.getImplicitOp(z).isUse())
3354d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos            os << "<d&u>";
3364d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos          else
3374d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos            os << "<d>";
33807c7086bd29b5c7223945cbdeae48494874de38fRuchira Sasanka      os << "\t";
33969917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka    }
34069917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka  }
34193240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve
342697954c15da58bd8b186dbafdedd8b06db770201Chris Lattner  return os << "\n";
34370bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
34470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve
34510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattnerstd::ostream &operator<<(std::ostream &OS, const MachineOperand &MO)
3466e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve{
3474d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  if (MO.isHiBits32())
34810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << "%lm(";
3494d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isLoBits32())
35010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << "%lo(";
3514d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isHiBits64())
35210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << "%hh(";
3534d7af65903cbc858464362e70a6adf499982ec8aAlkis Evlogimenos  else if (MO.isLoBits64())
35410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << "%hm(";
3553bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve
3562109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner  switch (MO.getType())
3576e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    {
3586e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    case MachineOperand::MO_VirtualRegister:
3598d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      if (MO.hasAllocatedReg())
36010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner        OutputReg(OS, MO.getAllocatedRegNum());
3618d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner
3628d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      if (MO.getVRegValue()) {
3638d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner	if (MO.hasAllocatedReg()) OS << "==";
3648d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner	OS << "%vreg";
3658d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner	OutputValue(OS, MO.getVRegValue());
3661049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      }
3673bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      break;
3686e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    case MachineOperand::MO_CCRegister:
36910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OS << "%ccreg";
37010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OutputValue(OS, MO.getVRegValue());
3712109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner      if (MO.hasAllocatedReg()) {
37210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner        OS << "==";
37310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner        OutputReg(OS, MO.getAllocatedRegNum());
3741049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner      }
3753bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      break;
3763bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve    case MachineOperand::MO_MachineRegister:
37710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OutputReg(OS, MO.getMachineRegNum());
3783bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      break;
3796e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    case MachineOperand::MO_SignExtendedImmed:
38010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OS << (long)MO.getImmedValue();
3813bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      break;
3826e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    case MachineOperand::MO_UnextendedImmed:
38310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OS << (long)MO.getImmedValue();
3843bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      break;
3856e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    case MachineOperand::MO_PCRelativeDisp:
386e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve      {
3872109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner        const Value* opVal = MO.getVRegValue();
3884d669b510c1d609c6b3fe98ac14ae38bd7c011f6Chris Lattner        bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal);
38910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner        OS << "%disp(" << (isLabel? "label " : "addr-of-val ");
390d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve        if (opVal->hasName())
39110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner          OS << opVal->getName();
392d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve        else
39310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner          OS << (const void*) opVal;
39410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner        OS << ")";
3953bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve        break;
396e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve      }
3972109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner    case MachineOperand::MO_MachineBasicBlock:
39810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OS << "bb<"
3992109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner         << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName()
4002109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner         << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">";
4012109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner      break;
40210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    case MachineOperand::MO_FrameIndex:
40310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      OS << "<fi#" << MO.getFrameIndex() << ">";
40410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner      break;
4058d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    case MachineOperand::MO_ConstantPoolIndex:
4068d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      OS << "<cp#" << MO.getConstantPoolIndex() << ">";
4078d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      break;
4088d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    case MachineOperand::MO_GlobalAddress:
4098d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">";
4108d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      break;
4118d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner    case MachineOperand::MO_ExternalSymbol:
4128d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      OS << "<es:" << MO.getSymbolName() << ">";
4138d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner      break;
4146e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    default:
4156e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve      assert(0 && "Unrecognized operand type");
4166e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve      break;
4176e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve    }
418e6fdb11e1ae823d69e646e76828ccb5d427a9d3aChris Lattner
4192109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner  if (MO.flags &
4203bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve      (MachineOperand::HIFLAG32 | MachineOperand::LOFLAG32 |
4213bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve       MachineOperand::HIFLAG64 | MachineOperand::LOFLAG64))
42210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner    OS << ")";
4233bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve
42410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner  return OS;
42570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve}
426d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
427d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke} // End llvm namespace
428