MachineInstr.cpp revision 6eba07a6a3dacec09aefa54a305b06c98b0c86c1
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; 11470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 11570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 11670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 1177a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::SetRegForOperand(unsigned i, int regNum) 11870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 119a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve assert(i < getNumOperands()); // must be explicit op 1207a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve operands[i].setRegForValue(regNum); 1217a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve} 1227a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 1233497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Advevoid 1243497782f3843007de3be0c43e3ff206a01e2ccacVikram S. AdveMachineInstr::SetRegForImplicitRef(unsigned i, int regNum) 1253497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve{ 1263497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve getImplicitOp(i).setRegForValue(regNum); 1273497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve} 1283497782f3843007de3be0c43e3ff206a01e2ccacVikram S. Adve 1297a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 1306eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman// Substitute all occurrences of Value* oldVal with newVal in all operands 131627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// and all implicit refs. 132627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve// If defsOnly == true, substitute defs only. 133e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adveunsigned 134627eb31cd791f808eaa048478d01222577a30a1aVikram S. AdveMachineInstr::substituteValue(const Value* oldVal, Value* newVal, 135627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve bool defsOnly, bool notDefsAndUses, 136627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve bool& someArgsWereIgnored) 137e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve{ 1382010f7baec18914b8a5d1b2b4c3c21511fa6e25dVikram S. Adve assert((!defsOnly || !notDefsAndUses) && 1392010f7baec18914b8a5d1b2b4c3c21511fa6e25dVikram S. Adve "notDefsAndUses is irrelevant if defsOnly == true."); 140627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve 141e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve unsigned numSubst = 0; 142e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 1436eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman // Substitute operands 144e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O) 145e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (*O == oldVal) 146627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve if (!defsOnly || 147627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve notDefsAndUses && O.isDefOnly() || 148627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve !notDefsAndUses && !O.isUseOnly()) 149e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 150e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve O.getMachineOperand().value = newVal; 151e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 152e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 153627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve else 154627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve someArgsWereIgnored = true; 155e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 1566eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman // Substitute implicit refs 157a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve for (unsigned i=0, N=getNumImplicitRefs(); i < N; ++i) 15827a08935ca4ccf2121c2cf4bfbf148e2382c7762Chris Lattner if (getImplicitRef(i) == oldVal) 159627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve if (!defsOnly || 160627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve notDefsAndUses && getImplicitOp(i).opIsDefOnly() || 161627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve !notDefsAndUses && !getImplicitOp(i).opIsUse()) 162e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 163a2bae305fb5a870c4ef753ed290a7ddea73ec82bVikram S. Adve getImplicitOp(i).value = newVal; 164e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 165e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 166627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve else 167627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve someArgsWereIgnored = true; 168e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 169e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve return numSubst; 170e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve} 171e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 172e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 1737a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Advevoid 1747a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::dump() const 1757a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve{ 176925b771dc378d6c88da44cd5b6650f2758c3c0a7Chris Lattner std::cerr << " " << *this; 17770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 17870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 1798c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Advestatic inline std::ostream& 1808c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. AdveOutputValue(std::ostream &os, const Value* val) 18193240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve{ 18293240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "(val "; 183627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve os << (void*) val; // print address always 18493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve if (val && val->hasName()) 185627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve os << " " << val->getName() << ")"; // print name also, if available 186627eb31cd791f808eaa048478d01222577a30a1aVikram S. Adve return os; 18793240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve} 18893240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 1892a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattnerstatic inline void OutputReg(std::ostream &os, unsigned RegNo, 1902a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner const MRegisterInfo *MRI = 0) { 1912a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner if (MRI) { 1922a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner if (RegNo < MRegisterInfo::FirstVirtualRegister) 1932a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%" << MRI->get(RegNo).Name; 1942a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner else 1952a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%reg" << RegNo; 1962a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner } else 1972a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner os << "%mreg(" << RegNo << ")"; 1988c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve} 1998c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve 2001049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattnerstatic void print(const MachineOperand &MO, std::ostream &OS, 2011049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner const TargetMachine &TM) { 2022a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner const MRegisterInfo *MRI = TM.getRegisterInfo(); 2031049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner bool CloseParen = true; 2041049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.opHiBits32()) 2051049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%lm("; 2061049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opLoBits32()) 2071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%lo("; 2081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opHiBits64()) 2091049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%hh("; 2101049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else if (MO.opLoBits64()) 2111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%hm("; 2121049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else 2131049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner CloseParen = false; 2141049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 2151049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner switch (MO.getType()) { 2161049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_VirtualRegister: 2171049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.getVRegValue()) { 2181049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%reg"; 2191049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OutputValue(OS, MO.getVRegValue()); 2201049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) 2211049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "=="; 2221049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2231049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) 2242a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getAllocatedRegNum(), MRI); 2251049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2261049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_CCRegister: 2271049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%ccreg"; 2281049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OutputValue(OS, MO.getVRegValue()); 2291049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (MO.hasAllocatedReg()) { 2301049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "=="; 2312a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getAllocatedRegNum(), MRI); 2321049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2331049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2341049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_MachineRegister: 2352a79a0927c479b69316aa275c1f79c74d20e8040Chris Lattner OutputReg(OS, MO.getMachineRegNum(), MRI); 2361049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2371049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_SignExtendedImmed: 2381049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (long)MO.getImmedValue(); 2391049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2401049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_UnextendedImmed: 2411049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (long)MO.getImmedValue(); 2421049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2431049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner case MachineOperand::MO_PCRelativeDisp: { 2441049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner const Value* opVal = MO.getVRegValue(); 2451049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal); 2461049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "%disp(" << (isLabel? "label " : "addr-of-val "); 2471049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (opVal->hasName()) 2481049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << opVal->getName(); 2491049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner else 2501049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << (const void*) opVal; 2511049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << ")"; 2521049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner break; 2531049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2542109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner case MachineOperand::MO_MachineBasicBlock: 2552109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner OS << "bb<" 2562109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName() 2572109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">"; 2582109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner break; 25910cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner case MachineOperand::MO_FrameIndex: 26010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "<fi#" << MO.getFrameIndex() << ">"; 26110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner break; 2628d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ConstantPoolIndex: 2638d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<cp#" << MO.getConstantPoolIndex() << ">"; 2648d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2658d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_GlobalAddress: 2668d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; 2678d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2688d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ExternalSymbol: 2698d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<es:" << MO.getSymbolName() << ">"; 2708d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 2711049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner default: 2721049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner assert(0 && "Unrecognized operand type"); 2731049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 2741049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 2751049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (CloseParen) 2761049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << ")"; 2771049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner} 2781049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 279af55be15dfa5321f470ce9734fabd858f5af7a88Chris Lattnervoid MachineInstr::print(std::ostream &OS, const TargetMachine &TM) const { 2806a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner unsigned StartOp = 0; 2816a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 2826a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner // Specialize printing if op#0 is definition 2835f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (getNumOperands() && 2845f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve (getOperand(0).opIsDefOnly() || getOperand(0).opIsDefAndUse())) { 2856a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner ::print(getOperand(0), OS, TM); 2866a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << " = "; 2876a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner ++StartOp; // Don't print this operand again! 2886a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner } 2891049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << TM.getInstrInfo().getName(getOpcode()); 2906a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 2916a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner for (unsigned i = StartOp, e = getNumOperands(); i != e; ++i) { 2925f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve const MachineOperand& mop = getOperand(i); 2936a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner if (i != StartOp) 2946a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << ","; 2956a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner OS << " "; 2965f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve ::print(mop, OS, TM); 2976a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 2985f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (mop.opIsDefAndUse()) 2991049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def&use>"; 3005f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve else if (mop.opIsDefOnly()) 3011049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def>"; 3021049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3036a592271fb2946a0704b06fd66199987cdd40b3cChris Lattner 3046eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman // code for printing implicit references 3051049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner if (getNumImplicitRefs()) { 3061049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\tImplicitRefs: "; 3071049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner for(unsigned i = 0, e = getNumImplicitRefs(); i != e; ++i) { 3081049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\t"; 3095f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve OutputValue(OS, getImplicitRef(i)); 3105f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (getImplicitOp(i).opIsDefAndUse()) 3111049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def&use>"; 3125f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve else if (getImplicitOp(i).opIsDefOnly()) 3131049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "<def>"; 3141049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3151049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3161049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3171049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner OS << "\n"; 3181049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner} 3191049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3201049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner 3218d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattnerstd::ostream &operator<<(std::ostream& os, const MachineInstr& MI) 32270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 3238d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << TargetInstrDescriptors[MI.opCode].Name; 32470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 3258d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner for (unsigned i=0, N=MI.getNumOperands(); i < N; i++) { 3268d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "\t" << MI.getOperand(i); 3275f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getOperand(i).opIsDefOnly()) 3288d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "<d>"; 3295f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getOperand(i).opIsDefAndUse()) 3308d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner os << "<d&u>"; 3318d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka } 33270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 3336eba07a6a3dacec09aefa54a305b06c98b0c86c1Misha Brukman // code for printing implicit references 3348d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner unsigned NumOfImpRefs = MI.getNumImplicitRefs(); 3358d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (NumOfImpRefs > 0) { 33693240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "\tImplicit: "; 3378d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner for (unsigned z=0; z < NumOfImpRefs; z++) { 3388d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OutputValue(os, MI.getImplicitRef(z)); 3395f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getImplicitOp(z).opIsDefOnly()) os << "<d>"; 3405f2180c53330502eb2f0f5bf3f21a838ad800906Vikram S. Adve if (MI.getImplicitOp(z).opIsDefAndUse()) os << "<d&u>"; 34107c7086bd29b5c7223945cbdeae48494874de38fRuchira Sasanka os << "\t"; 34269917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 34369917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 34493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 345697954c15da58bd8b186dbafdedd8b06db770201Chris Lattner return os << "\n"; 34670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 34770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 34810cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattnerstd::ostream &operator<<(std::ostream &OS, const MachineOperand &MO) 3496e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve{ 3502109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.opHiBits32()) 35110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%lm("; 3522109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opLoBits32()) 35310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%lo("; 3542109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opHiBits64()) 35510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%hh("; 3562109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner else if (MO.opLoBits64()) 35710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%hm("; 3583bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 3592109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner switch (MO.getType()) 3606e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve { 3616e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_VirtualRegister: 3628d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.hasAllocatedReg()) 36310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getAllocatedRegNum()); 3648d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner 3658d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.getVRegValue()) { 3668d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner if (MO.hasAllocatedReg()) OS << "=="; 3678d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "%vreg"; 3688d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OutputValue(OS, MO.getVRegValue()); 3691049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3703bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3716e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_CCRegister: 37210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%ccreg"; 37310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputValue(OS, MO.getVRegValue()); 3742109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.hasAllocatedReg()) { 37510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "=="; 37610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getAllocatedRegNum()); 3771049164aa6b06d91d9b3b557a9a213eaf3f6319aChris Lattner } 3783bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3793bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve case MachineOperand::MO_MachineRegister: 38010cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OutputReg(OS, MO.getMachineRegNum()); 3813bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3826e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_SignExtendedImmed: 38310cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (long)MO.getImmedValue(); 3843bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3856e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_UnextendedImmed: 38610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (long)MO.getImmedValue(); 3873bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 3886e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_PCRelativeDisp: 389e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve { 3902109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner const Value* opVal = MO.getVRegValue(); 3914d669b510c1d609c6b3fe98ac14ae38bd7c011f6Chris Lattner bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal); 39210cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "%disp(" << (isLabel? "label " : "addr-of-val "); 393d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve if (opVal->hasName()) 39410cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << opVal->getName(); 395d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve else 39610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << (const void*) opVal; 39710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << ")"; 3983bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 399e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve } 4002109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner case MachineOperand::MO_MachineBasicBlock: 40110cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "bb<" 4022109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << ((Value*)MO.getMachineBasicBlock()->getBasicBlock())->getName() 4032109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner << "," << (void*)MO.getMachineBasicBlock()->getBasicBlock() << ">"; 4042109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner break; 40510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner case MachineOperand::MO_FrameIndex: 40610cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << "<fi#" << MO.getFrameIndex() << ">"; 40710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner break; 4088d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ConstantPoolIndex: 4098d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<cp#" << MO.getConstantPoolIndex() << ">"; 4108d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4118d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_GlobalAddress: 4128d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<ga:" << ((Value*)MO.getGlobal())->getName() << ">"; 4138d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4148d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner case MachineOperand::MO_ExternalSymbol: 4158d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner OS << "<es:" << MO.getSymbolName() << ">"; 4168d95ef4973226044cefdd6dc237d3c326ffc15b3Chris Lattner break; 4176e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve default: 4186e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve assert(0 && "Unrecognized operand type"); 4196e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve break; 4206e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve } 421e6fdb11e1ae823d69e646e76828ccb5d427a9d3aChris Lattner 4222109f502d646a1bafc7b21a14347a71771a7b4cfChris Lattner if (MO.flags & 4233bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve (MachineOperand::HIFLAG32 | MachineOperand::LOFLAG32 | 4243bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve MachineOperand::HIFLAG64 | MachineOperand::LOFLAG64)) 42510cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner OS << ")"; 4263bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 42710cb79b48430ea7679e83ae045aaeadea04a0cc5Chris Lattner return OS; 42870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 429