MachineInstr.cpp revision a2dd745613fdb9deff6037285f4efc20248c7b3d
1035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===-- MachineInstr.cpp --------------------------------------------------===// 270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve// 3035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===----------------------------------------------------------------------===// 470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 5822b4fb896846b87dd11a330ae13f2239329aeefChris Lattner#include "llvm/CodeGen/MachineInstr.h" 6ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner#include "llvm/CodeGen/MachineBasicBlock.h" 73801f6d38371b734d9de2fb8394ca75d2bf190ebChris Lattner#include "llvm/Value.h" 81049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner#include "llvm/Target/TargetMachine.h" 93501feab811c86c9659248a4875fc31a3165f84dChris Lattner#include "llvm/Target/TargetInstrInfo.h" 102a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner#include "llvm/Target/MRegisterInfo.h" 118d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner 12f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// Global variable holding an array of descriptors for machine instructions. 13f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// The actual object needs to be created separately for each target machine. 143501feab811c86c9659248a4875fc31a3165f84dChris Lattner// This variable is initialized and reset by class TargetInstrInfo. 15f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// 16f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// FIXME: This should be a property of the target so that more than one target 17f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// at a time can be active... 18f1757c414cbf7d1b7a11cc8287fd26c2ce13fb41Chris Lattner// 193501feab811c86c9659248a4875fc31a3165f84dChris Lattnerextern const TargetInstrDescriptor *TargetInstrDescriptors; 2069917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka 211885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve// Constructor for instructions with variable #operands 22b98a53f201fd3652f4b7e37d1f2cb3b9b0775d45Chris LattnerMachineInstr::MachineInstr(MachineOpCode OpCode, unsigned numOperands) 23a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve : opCode(OpCode), 243497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve opCodeFlags(0), 25a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve operands(numOperands, MachineOperand()), 26a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve numImplicitRefs(0) 27a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve{ 28413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner} 29413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner 30ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr ctor - This constructor only does a _reserve_ of the operands, 31ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// not a resize for them. It is expected that if you use this that you call 32ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// add* methods below to fill up the operands, instead of the Set methods. 33ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// Eventually, the "resizing" ctors will be phased out. 34ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// 357279122e668816bed0d4f38d3392bbab0140fad0Chris LattnerMachineInstr::MachineInstr(MachineOpCode Opcode, unsigned numOperands, 36a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve bool XX, bool YY) 37a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve : opCode(Opcode), 383497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve opCodeFlags(0), 39a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve numImplicitRefs(0) 40a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve{ 417279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner operands.reserve(numOperands); 427279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner} 437279122e668816bed0d4f38d3392bbab0140fad0Chris Lattner 44ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr ctor - Work exactly the same as the ctor above, except that the 45ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// MachineInstr is created and added to the end of the specified basic block. 46ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner/// 47ddd7fcb887be752ec8167276a697994ad9cb9c4eChris LattnerMachineInstr::MachineInstr(MachineBasicBlock *MBB, MachineOpCode Opcode, 48ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner unsigned numOperands) 49ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner : opCode(Opcode), 503497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve opCodeFlags(0), 51ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner numImplicitRefs(0) 52ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner{ 53ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner assert(MBB && "Cannot use inserting ctor with null basic block!"); 54ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner operands.reserve(numOperands); 55ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner MBB->push_back(this); // Add instruction to end of basic block! 56ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner} 57ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner 58ddd7fcb887be752ec8167276a697994ad9cb9c4eChris Lattner 59413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner// OperandComplete - Return true if it's illegal to add a new operand 60a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Advebool MachineInstr::OperandsComplete() const 61a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve{ 62413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner int NumOperands = TargetInstrDescriptors[opCode].numOperands; 63a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve if (NumOperands >= 0 && getNumOperands() >= (unsigned)NumOperands) 643497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve return true; // Broken: we have all the operands of this instruction! 65413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner return false; 6670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 6770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 68413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner 69e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// 70e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// Support for replacing opcode and operands of a MachineInstr in place. 71e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// This only resets the size of the operand vector and initializes it. 72e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// The new operands must be set explicitly later. 73e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// 74a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Advevoid MachineInstr::replace(MachineOpCode Opcode, unsigned numOperands) 75a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve{ 76a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(getNumImplicitRefs() == 0 && 77a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve "This is probably broken because implicit refs are going to be lost."); 78413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner opCode = Opcode; 79e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve operands.clear(); 80413746e9833d97a8b463ef6a788aa326cf3829a2Chris Lattner operands.resize(numOperands, MachineOperand()); 81e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve} 82e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve 83a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattnervoid MachineInstr::SetMachineOperandVal(unsigned i, 84a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner MachineOperand::MachineOperandType opTy, 85a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner Value* V) { 86a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(i < operands.size()); // may be explicit or implicit op 87a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattner operands[i].opType = opTy; 88572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].value = V; 89572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].regNum = -1; 9070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 9170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 9270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 93572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris LattnerMachineInstr::SetMachineOperandConst(unsigned i, 9470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve MachineOperand::MachineOperandType operandType, 95c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve int64_t intValue) 9670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 97a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(i < getNumOperands()); // must be explicit op 98c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve assert(TargetInstrDescriptors[opCode].resultPos != (int) i && 99c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve "immed. constant cannot be defined"); 100572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner 101572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].opType = operandType; 102572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].value = NULL; 103572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].immedVal = intValue; 104572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].regNum = -1; 105572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].flags = 0; 10670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 10770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 108a2dd745613fdb9deff6037285f4efc20248c7b3dChris Lattnervoid MachineInstr::SetMachineOperandReg(unsigned i, int regNum) { 109a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(i < getNumOperands()); // must be explicit op 110572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner 1112f305989b395a0a8bf00c4b9dc140a6df051245eChris Lattner operands[i].opType = MachineOperand::MO_MachineRegister; 112572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].value = NULL; 113572f5c8c0cf66cd6f53dda255cd8c4d8f27d8505Chris Lattner operands[i].regNum = regNum; 11427a08935ca4ccf2121c2cf4bfbf148e2382c7762Chris Lattner insertUsedReg(regNum); 11570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 11670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 11770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 1187a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::SetRegForOperand(unsigned i, int regNum) 11970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 120a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(i < getNumOperands()); // must be explicit op 1217a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve operands[i].setRegForValue(regNum); 12227a08935ca4ccf2121c2cf4bfbf148e2382c7762Chris Lattner insertUsedReg(regNum); 1237a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve} 1247a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 1253497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Advevoid 1263497782f3843007de3be0c43e3ff206a01e2ccacVikram S. AdveMachineInstr::SetRegForImplicitRef(unsigned i, int regNum) 1273497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve{ 1283497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve getImplicitOp(i).setRegForValue(regNum); 1293497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve insertUsedReg(regNum); 1303497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve} 1313497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve 1327a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 133e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve// Subsitute all occurrences of Value* oldVal with newVal in all operands 134627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// and all implicit refs. 135627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// If defsOnly == true, substitute defs only. 136e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adveunsigned 137627eb31cd791f808eaa048478d01222577a30a1aVikram S. AdveMachineInstr::substituteValue(const Value* oldVal, Value* newVal, 138627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve bool defsOnly, bool notDefsAndUses, 139627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve bool& someArgsWereIgnored) 140e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve{ 141627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve assert((defsOnly || !notDefsAndUses) && 142627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve "notDefsAndUses is irrelevant if defsOnly == false."); 143627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve 144e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve unsigned numSubst = 0; 145e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 146e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve // Subsitute operands 147e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O) 148e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (*O == oldVal) 149627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve if (!defsOnly || 150627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve notDefsAndUses && O.isDefOnly() || 151627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve !notDefsAndUses && !O.isUseOnly()) 152e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 153e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve O.getMachineOperand().value = newVal; 154e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 155e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 156627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve else 157627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve someArgsWereIgnored = true; 158e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 159e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve // Subsitute implicit refs 160a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve for (unsigned i=0, N=getNumImplicitRefs(); i < N; ++i) 16127a08935ca4ccf2121c2cf4bfbf148e2382c7762Chris Lattner if (getImplicitRef(i) == oldVal) 162627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve if (!defsOnly || 163627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve notDefsAndUses && getImplicitOp(i).opIsDefOnly() || 164627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve !notDefsAndUses && !getImplicitOp(i).opIsUse()) 165e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 166a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve getImplicitOp(i).value = newVal; 167e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 168e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 169627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve else 170627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve someArgsWereIgnored = true; 171e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 172e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve return numSubst; 173e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve} 174e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 175e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 1767a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Advevoid 1777a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::dump() const 1787a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve{ 179925b771dc378d6c88da44cd5b6650f2758c3c0a7Chris Lattner std::cerr << " " << *this; 18070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 18170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 1828c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Advestatic inline std::ostream& 1838c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. AdveOutputValue(std::ostream &os, const Value* val) 18493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve{ 18593240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "(val "; 186627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve os << (void*) val; // print address always 18793240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve if (val && val->hasName()) 188627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve os << " " << val->getName() << ")"; // print name also, if available 189627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve return os; 19093240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve} 19193240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 1922a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattnerstatic inline void OutputReg(std::ostream &os, unsigned RegNo, 1932a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner const MRegisterInfo *MRI = 0) { 1942a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner if (MRI) { 1952a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner if (RegNo < MRegisterInfo::FirstVirtualRegister) 1962a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%" << MRI->get(RegNo).Name; 1972a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner else 1982a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%reg" << RegNo; 1992a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner } else 2002a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%mreg(" << RegNo << ")"; 2018c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve} 2028c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve 2031049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattnerstatic void print(const MachineOperand &MO, std::ostream &OS, 2041049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner const TargetMachine &TM) { 2052a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner const MRegisterInfo *MRI = TM.getRegisterInfo(); 2061049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner bool CloseParen = true; 2071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.opHiBits32()) 2081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%lm("; 2091049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opLoBits32()) 2101049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%lo("; 2111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opHiBits64()) 2121049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%hh("; 2131049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opLoBits64()) 2141049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%hm("; 2151049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else 2161049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner CloseParen = false; 2171049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 2181049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner switch (MO.getType()) { 2191049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_VirtualRegister: 2201049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.getVRegValue()) { 2211049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%reg"; 2221049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OutputValue(OS, MO.getVRegValue()); 2231049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) 2241049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "=="; 2251049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2261049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) 2272a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getAllocatedRegNum(), MRI); 2281049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2291049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_CCRegister: 2301049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%ccreg"; 2311049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OutputValue(OS, MO.getVRegValue()); 2321049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) { 2331049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "=="; 2342a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getAllocatedRegNum(), MRI); 2351049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2361049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2371049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_MachineRegister: 2382a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getMachineRegNum(), MRI); 2391049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2401049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_SignExtendedImmed: 2411049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (long)MO.getImmedValue(); 2421049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2431049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_UnextendedImmed: 2441049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (long)MO.getImmedValue(); 2451049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2461049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_PCRelativeDisp: { 2471049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner const Value* opVal = MO.getVRegValue(); 2481049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal); 2491049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%disp(" << (isLabel? "label " : "addr-of-val "); 2501049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (opVal->hasName()) 2511049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << opVal->getName(); 2521049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else 2531049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (const void*) opVal; 2541049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << ")"; 2551049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2561049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2572109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner case MachineOperand::MO_MachineBasicBlock: 2582109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner OS << "bb<" 2592109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName() 2602109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">"; 2612109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner break; 26210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner case MachineOperand::MO_FrameIndex: 26310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "<fi#" << MO.getFrameIndex() << ">"; 26410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner break; 2658d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ConstantPoolIndex: 2668d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<cp#" << MO.getConstantPoolIndex() << ">"; 2678d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2688d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_GlobalAddress: 2698d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; 2708d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2718d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ExternalSymbol: 2728d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<es:" << MO.getSymbolName() << ">"; 2738d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2741049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner default: 2751049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner assert(0 && "Unrecognized operand type"); 2761049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2771049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 2781049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (CloseParen) 2791049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << ")"; 2801049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner} 2811049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 282af55be15dfa5321f470ce9734fabd858f5af7a88Chris Lattnervoid MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const { 2836a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner unsigned StartOp = 0; 2846a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 2856a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner // Specialize printing if op#0 is definition 2865f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (getNumOperands() && 2875f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve (getOperand(0).opIsDefOnly() || getOperand(0).opIsDefAndUse())) { 2886a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner ::print(getOperand(0), OS, TM); 2896a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << " = "; 2906a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner ++StartOp; // Don't print this operand again! 2916a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner } 2921049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << TM.getInstrInfo().getName(getOpcode()); 2936a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 2946a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) { 2955f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve const MachineOperand& mop = getOperand(i); 2966a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner if (i != StartOp) 2976a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << ","; 2986a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << " "; 2995f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve ::print(mop, OS, TM); 3006a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 3015f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (mop.opIsDefAndUse()) 3021049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def&use>"; 3035f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve else if (mop.opIsDefOnly()) 3041049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def>"; 3051049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3066a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 3071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner // code for printing implict references 3081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (getNumImplicitRefs()) { 3091049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\tImplicitRefs: "; 3101049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner for(unsigned i = 0, e = getNumImplicitRefs(); i != e; ++i) { 3111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\t"; 3125f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve OutputValue(OS, getImplicitRef(i)); 3135f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (getImplicitOp(i).opIsDefAndUse()) 3141049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def&use>"; 3155f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve else if (getImplicitOp(i).opIsDefOnly()) 3161049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def>"; 3171049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3181049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3191049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3201049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\n"; 3211049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner} 3221049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3231049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3248d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattnerstd::ostream &operator<<(std::ostream& os, const MachineInstr& MI) 32570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 3268d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << TargetInstrDescriptors[MI.opCode].Name; 32770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 3288d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner for (unsigned i=0, N=MI.getNumOperands(); i < N; i++) { 3298d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "\t" << MI.getOperand(i); 3305f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getOperand(i).opIsDefOnly()) 3318d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "<d>"; 3325f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getOperand(i).opIsDefAndUse()) 3338d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "<d&u>"; 3348d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka } 33570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 33669917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka // code for printing implict references 3378d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner unsigned NumOfImpRefs = MI.getNumImplicitRefs(); 3388d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (NumOfImpRefs > 0) { 33993240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "\tImplicit: "; 3408d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner for (unsigned z=0; z < NumOfImpRefs; z++) { 3418d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OutputValue(os, MI.getImplicitRef(z)); 3425f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getImplicitOp(z).opIsDefOnly()) os << "<d>"; 3435f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getImplicitOp(z).opIsDefAndUse()) os << "<d&u>"; 34407c7086bd29b5c7223945cbdeae48494874de38fRuchira Sasanka os << "\t"; 34569917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 34669917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 34793240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 348697954c15da58bd8b186dbafdedd8b06db770201Chris Lattner return os << "\n"; 34970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 35070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 35110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattnerstd::ostream &operator<<(std::ostream &OS, const MachineOperand &MO) 3526e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve{ 3532109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.opHiBits32()) 35410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%lm("; 3552109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opLoBits32()) 35610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%lo("; 3572109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opHiBits64()) 35810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%hh("; 3592109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opLoBits64()) 36010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%hm("; 3613bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 3622109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner switch (MO.getType()) 3636e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve { 3646e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_VirtualRegister: 3658d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.hasAllocatedReg()) 36610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getAllocatedRegNum()); 3678d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner 3688d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.getVRegValue()) { 3698d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.hasAllocatedReg()) OS << "=="; 3708d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "%vreg"; 3718d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OutputValue(OS, MO.getVRegValue()); 3721049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3733bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3746e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_CCRegister: 37510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%ccreg"; 37610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputValue(OS, MO.getVRegValue()); 3772109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.hasAllocatedReg()) { 37810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "=="; 37910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getAllocatedRegNum()); 3801049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3813bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3823bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve case MachineOperand::MO_MachineRegister: 38310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getMachineRegNum()); 3843bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3856e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_SignExtendedImmed: 38610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (long)MO.getImmedValue(); 3873bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3886e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_UnextendedImmed: 38910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (long)MO.getImmedValue(); 3903bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3916e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_PCRelativeDisp: 392e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve { 3932109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner const Value* opVal = MO.getVRegValue(); 3944d669b510c1d609c6b3fe98ac14ae38bd7c011f6Chris Lattner bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal); 39510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%disp(" << (isLabel? "label " : "addr-of-val "); 396d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve if (opVal->hasName()) 39710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << opVal->getName(); 398d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve else 39910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (const void*) opVal; 40010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << ")"; 4013bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 402e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve } 4032109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner case MachineOperand::MO_MachineBasicBlock: 40410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "bb<" 4052109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName() 4062109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">"; 4072109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner break; 40810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner case MachineOperand::MO_FrameIndex: 40910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "<fi#" << MO.getFrameIndex() << ">"; 41010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner break; 4118d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ConstantPoolIndex: 4128d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<cp#" << MO.getConstantPoolIndex() << ">"; 4138d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4148d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_GlobalAddress: 4158d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; 4168d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4178d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ExternalSymbol: 4188d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<es:" << MO.getSymbolName() << ">"; 4198d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4206e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve default: 4216e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve assert(0 && "Unrecognized operand type"); 4226e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve break; 4236e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve } 424e6fdb11e1ae823d69e646e76828ccb5d427a9d3aChris Lattner 4252109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.flags & 4263bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve (MachineOperand::HIFLAG32 | MachineOperand::LOFLAG32 | 4273bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve MachineOperand::HIFLAG64 | MachineOperand::LOFLAG64)) 42810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << ")"; 4293bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 43010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner return OS; 43170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 432