MachineInstr.cpp revision e8b57ef2603ed522083dc18e559ca4e20abf22ae
1035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===-- MachineInstr.cpp --------------------------------------------------===// 270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve// 3035dfbe7f2d109008d2d62d9f2a67efb477a7ab6Chris Lattner//===----------------------------------------------------------------------===// 470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 5822b4fb896846b87dd11a330ae13f2239329aeefChris Lattner#include "llvm/CodeGen/MachineInstr.h" 63801f6d38371b734d9de2fb8394ca75d2bf190ebChris Lattner#include "llvm/Value.h" 7697954c15da58bd8b186dbafdedd8b06db770201Chris Lattnerusing std::cerr; 85b79591450c47920139705712a402251af7eed79Vikram S. Adve 969917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka 101885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve// Constructor for instructions with fixed #operands (nearly all) 1170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. AdveMachineInstr::MachineInstr(MachineOpCode _opCode, 1270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve OpCodeMask _opCodeMask) 1370bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve : opCode(_opCode), 1470bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve opCodeMask(_opCodeMask), 156a175e01eb164baac5cc16311c474ff644ce17c1Vikram S. Adve operands(TargetInstrDescriptors[_opCode].numOperands) 1670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 171885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve assert(TargetInstrDescriptors[_opCode].numOperands >= 0); 181885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve} 191885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve 201885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve// Constructor for instructions with variable #operands 211885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. AdveMachineInstr::MachineInstr(MachineOpCode _opCode, 221885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve unsigned numOperands, 231885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve OpCodeMask _opCodeMask) 241885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve : opCode(_opCode), 251885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve opCodeMask(_opCodeMask), 261885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve operands(numOperands) 271885da4f49cf32efde2d4c840365c4333a0c8579Vikram S. Adve{ 2870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 2970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 30e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// 31e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// Support for replacing opcode and operands of a MachineInstr in place. 32e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// This only resets the size of the operand vector and initializes it. 33e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// The new operands must be set explicitly later. 34e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve// 35e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Advevoid 36e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. AdveMachineInstr::replace(MachineOpCode _opCode, 37e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve unsigned numOperands, 38e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve OpCodeMask _opCodeMask) 39e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve{ 40e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve opCode = _opCode; 41e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve opCodeMask = _opCodeMask; 42e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve operands.clear(); 43e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve operands.resize(numOperands); 44e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve} 45e8b57ef2603ed522083dc18e559ca4e20abf22aeVikram S. Adve 4670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 47c356e565a69e56993d018c7d94194e504a78285fVikram S. AdveMachineInstr::SetMachineOperandVal(unsigned int i, 487a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve MachineOperand::MachineOperandType opType, 497a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve Value* _val, 500c0edf8afc35a42b15a24ebb5fa5f3fc674290aeChris Lattner bool isdef, 510c0edf8afc35a42b15a24ebb5fa5f3fc674290aeChris Lattner bool isDefAndUse) 5270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 536a175e01eb164baac5cc16311c474ff644ce17c1Vikram S. Adve assert(i < operands.size()); 547a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve operands[i].Initialize(opType, _val); 553bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (isdef || TargetInstrDescriptors[opCode].resultPos == (int) i) 563bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve operands[i].markDef(); 573bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (isDefAndUse) 583bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve operands[i].markDefAndUse(); 5970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 6070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 6170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 62c356e565a69e56993d018c7d94194e504a78285fVikram S. AdveMachineInstr::SetMachineOperandConst(unsigned int i, 6370bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve MachineOperand::MachineOperandType operandType, 64c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve int64_t intValue) 6570bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 666a175e01eb164baac5cc16311c474ff644ce17c1Vikram S. Adve assert(i < operands.size()); 67c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve assert(TargetInstrDescriptors[opCode].resultPos != (int) i && 68c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve "immed. constant cannot be defined"); 6970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve operands[i].InitializeConst(operandType, intValue); 7070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 7170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 7270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 73c356e565a69e56993d018c7d94194e504a78285fVikram S. AdveMachineInstr::SetMachineOperandReg(unsigned int i, 74c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve int regNum, 750c0edf8afc35a42b15a24ebb5fa5f3fc674290aeChris Lattner bool isdef, 760c0edf8afc35a42b15a24ebb5fa5f3fc674290aeChris Lattner bool isDefAndUse, 770c0edf8afc35a42b15a24ebb5fa5f3fc674290aeChris Lattner bool isCCReg) 7870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 796a175e01eb164baac5cc16311c474ff644ce17c1Vikram S. Adve assert(i < operands.size()); 80c356e565a69e56993d018c7d94194e504a78285fVikram S. Adve operands[i].InitializeReg(regNum, isCCReg); 813bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (isdef || TargetInstrDescriptors[opCode].resultPos == (int) i) 823bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve operands[i].markDef(); 833bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (isDefAndUse) 843bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve operands[i].markDefAndUse(); 857a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve regsUsed.insert(regNum); 8670bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 8770bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 8870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Advevoid 897a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::SetRegForOperand(unsigned i, int regNum) 9070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 917a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve operands[i].setRegForValue(regNum); 927a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve regsUsed.insert(regNum); 937a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve} 947a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 957a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve 96e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve// Subsitute all occurrences of Value* oldVal with newVal in all operands 97e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve// and all implicit refs. If defsOnly == true, substitute defs only. 98e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adveunsigned 99e2a78e31862c2b6142491db5a67065756d6870beVikram S. AdveMachineInstr::substituteValue(const Value* oldVal, Value* newVal, bool defsOnly) 100e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve{ 101e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve unsigned numSubst = 0; 102e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 103e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve // Subsitute operands 104e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O) 105e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (*O == oldVal) 106e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (!defsOnly || O.isDef()) 107e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 108e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve O.getMachineOperand().value = newVal; 109e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 110e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 111e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 112e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve // Subsitute implicit refs 113e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve for (unsigned i=0, N=implicitRefs.size(); i < N; ++i) 114e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (implicitRefs[i] == oldVal) 115e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve if (!defsOnly || implicitRefIsDefined(i)) 116e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve { 117e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve implicitRefs[i] = newVal; 118e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve ++numSubst; 119e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve } 120e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 121e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve return numSubst; 122e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve} 123e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 124e2a78e31862c2b6142491db5a67065756d6870beVikram S. Adve 1257a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Advevoid 1267a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. AdveMachineInstr::dump() const 1277a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve{ 1287a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve cerr << " " << *this; 12970bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 13070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 1318c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Advestatic inline std::ostream& 1328c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. AdveOutputValue(std::ostream &os, const Value* val) 13393240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve{ 13493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "(val "; 13593240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve if (val && val->hasName()) 1363bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve return os << val->getName() << ")"; 13793240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve else 1383bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve return os << (void*) val << ")"; // print address only 13993240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve} 14093240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 1418c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Advestatic inline std::ostream& 1428c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. AdveOutputReg(std::ostream &os, unsigned int regNum) 1438c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve{ 1448c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve return os << "%mreg(" << regNum << ")"; 1458c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve} 1468c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve 147697954c15da58bd8b186dbafdedd8b06db770201Chris Lattnerstd::ostream &operator<<(std::ostream& os, const MachineInstr& minstr) 14870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve{ 1496a175e01eb164baac5cc16311c474ff644ce17c1Vikram S. Adve os << TargetInstrDescriptors[minstr.opCode].opCodeString; 15070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 1518d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka for (unsigned i=0, N=minstr.getNumOperands(); i < N; i++) { 15270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve os << "\t" << minstr.getOperand(i); 1537a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve if( minstr.operandIsDefined(i) ) 1547a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve os << "*"; 1557a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve if( minstr.operandIsDefinedAndUsed(i) ) 15607c7086bd29b5c7223945cbdeae48494874de38fRuchira Sasanka os << "*"; 1578d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka } 15870bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 15969917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka // code for printing implict references 16069917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka unsigned NumOfImpRefs = minstr.getNumImplicitRefs(); 16169917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka if( NumOfImpRefs > 0 ) { 16293240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve os << "\tImplicit: "; 16369917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka for(unsigned z=0; z < NumOfImpRefs; z++) { 16493240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve OutputValue(os, minstr.getImplicitRef(z)); 1658d24337eea5f9462908b7ac07a997935e31ddd59Ruchira Sasanka if( minstr.implicitRefIsDefined(z)) os << "*"; 1667a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve if( minstr.implicitRefIsDefinedAndUsed(z)) os << "*"; 16707c7086bd29b5c7223945cbdeae48494874de38fRuchira Sasanka os << "\t"; 16869917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 16969917e27af9248cbce98bb56f1e1b5286aede759Ruchira Sasanka } 17093240fe6b1f79e9ccb271a214a01141f8c2c123aVikram S. Adve 171697954c15da58bd8b186dbafdedd8b06db770201Chris Lattner return os << "\n"; 17270bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 17370bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve 174697954c15da58bd8b186dbafdedd8b06db770201Chris Lattnerstd::ostream &operator<<(std::ostream &os, const MachineOperand &mop) 1756e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve{ 1763bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (mop.opHiBits32()) 1773bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << "%lm("; 1783bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve else if (mop.opLoBits32()) 1793bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << "%lo("; 1803bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve else if (mop.opHiBits64()) 1813bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << "%hh("; 1823bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve else if (mop.opLoBits64()) 1833bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << "%hm("; 1843bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 1856e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve switch(mop.opType) 1866e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve { 1876e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_VirtualRegister: 1886e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve os << "%reg"; 1893bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve OutputValue(os, mop.getVRegValue()); 1908c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve if (mop.hasAllocatedReg()) 1918c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve os << "==" << OutputReg(os, mop.getAllocatedRegNum()); 1923bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 1936e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_CCRegister: 1946e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve os << "%ccreg"; 1953bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve OutputValue(os, mop.getVRegValue()); 1968c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve if (mop.hasAllocatedReg()) 1978c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve os << "==" << OutputReg(os, mop.getAllocatedRegNum()); 1983bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 1993bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve case MachineOperand::MO_MachineRegister: 2008c6936a58b75d7d185014839ea95377eb2fbd878Vikram S. Adve OutputReg(os, mop.getMachineRegNum()); 2013bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 2026e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_SignExtendedImmed: 2033bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << (long)mop.immedVal; 2043bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 2056e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_UnextendedImmed: 2063bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << (long)mop.immedVal; 2073bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 2086e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve case MachineOperand::MO_PCRelativeDisp: 209e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve { 210e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve const Value* opVal = mop.getVRegValue(); 2114d669b510c1d609c6b3fe98ac14ae38bd7c011f6Chris Lattner bool isLabel = isa<Function>(opVal) || isa<BasicBlock>(opVal); 212d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve os << "%disp(" << (isLabel? "label " : "addr-of-val "); 213d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve if (opVal->hasName()) 214697954c15da58bd8b186dbafdedd8b06db770201Chris Lattner os << opVal->getName(); 215d9beb975f20cea2d3e9c3f528068cd25b80a1b72Vikram S. Adve else 2167a4be9580e095ca4bffd16ec6ec4882f6270fb09Vikram S. Adve os << (const void*) opVal; 2173bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << ")"; 2183bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve break; 219e949da5bb18f89de40b6781237dfe616cba7bfc9Vikram S. Adve } 2206e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve default: 2216e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve assert(0 && "Unrecognized operand type"); 2226e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve break; 2236e447181928b95902c38ea89e57bc835ecd83cb5Vikram S. Adve } 224e6fdb11e1ae823d69e646e76828ccb5d427a9d3aChris Lattner 2253bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve if (mop.flags & 2263bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve (MachineOperand::HIFLAG32 | MachineOperand::LOFLAG32 | 2273bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve MachineOperand::HIFLAG64 | MachineOperand::LOFLAG64)) 2283bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve os << ")"; 2293bc9ef9317982cd7157ff29fb6bc3a60a11c3f78Vikram S. Adve 23070bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve return os; 23170bc4b5d1a3795a8f41be96723cfcbccac8e1671Vikram S. Adve} 232