nv50_ir_build_util.h revision 57594065c30feec9376be9b2132659f7d87362ee
157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#ifndef __NV50_IR_BUILD_UTIL__ 357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#define __NV50_IR_BUILD_UTIL__ 457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillernamespace nv50_ir { 657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 757594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerclass BuildUtil 857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 957594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerpublic: 1057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller BuildUtil(); 1157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 1257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void setProgram(Program *); 1357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline Program *getProgram() const { return prog; } 1457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline Function *getFunction() const { return func; } 1557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 1657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller // keeps inserting at head/tail of block 1757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void setPosition(BasicBlock *, bool tail); 1857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller // position advances only if @after is true 1957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void setPosition(Instruction *, bool after); 2057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 2157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline BasicBlock *getBB() { return bb; } 2257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 2357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void insert(Instruction *); 2457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void remove(Instruction *i) { assert(i->bb == bb); bb->remove(i); } 2557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 2657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline LValue *getScratch(int size = 4); 2757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline LValue *getSSA(int size = 4); // scratch value for a single assignment 2857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 2957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline Instruction *mkOp(operation, DataType, Value *); 3057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkOp1(operation, DataType, Value *, Value *); 3157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkOp2(operation, DataType, Value *, Value *, Value *); 3257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkOp3(operation, DataType, Value *, Value *, Value *, Value *); 3357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 3457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *mkOp1v(operation, DataType, Value *, Value *); 3557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *mkOp2v(operation, DataType, Value *, Value *, Value *); 3657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *mkOp3v(operation, DataType, Value *, Value *, Value *, Value *); 3757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 3857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *mkLoad(DataType, Symbol *, Value *ptr); 3957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkStore(operation, DataType, Symbol *, Value *ptr, Value *val); 4057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 4157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkMov(Value *, Value *, DataType = TYPE_U32); 4257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkMovToReg(int id, Value *); 4357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkMovFromReg(Value *, int id); 4457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 4557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkFetch(Value *, DataType, DataFile, int32_t offset, 4657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *attrRel, Value *primRel); 4757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 4857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkCvt(operation, DataType, Value *, DataType, Value *); 4957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkCmp(operation, CondCode, DataType, 5057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *, 5157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *, Value *, Value * = NULL); 5257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkTex(operation, TexTarget, uint8_t tic, uint8_t tsc, 5357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value **def, Value **src); 5457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkQuadop(uint8_t qop, Value *, uint8_t l, Value *, Value *); 5557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 5657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller FlowInstruction *mkFlow(operation, BasicBlock *target, 5757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller CondCode, Value *pred); 5857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 5957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *mkSelect(Value *pred, Value *dst, Value *trSrc, Value *flSrc); 6057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 6157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller void mkClobber(DataFile file, uint32_t regMask, int regUnitLog2); 6257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 6357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ImmediateValue *mkImm(float); 6457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ImmediateValue *mkImm(uint32_t); 6557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ImmediateValue *mkImm(uint64_t); 6657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 6757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ImmediateValue *mkImm(int i) { return mkImm((uint32_t)i); } 6857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 6957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *loadImm(Value *dst, float); 7057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *loadImm(Value *dst, uint32_t); 7157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *loadImm(Value *dst, uint64_t); 7257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 7357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *loadImm(Value *dst, int i) { return loadImm(dst, (uint32_t)i); } 7457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 7557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller class DataArray 7657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller { 7757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller public: 7857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller DataArray(); 7957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller DataArray(BuildUtil *); 8057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ~DataArray(); 8157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 8257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline void setParent(BuildUtil *bld) { assert(!up); up = bld; } 8357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 8457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller void setup(uint32_t base, int len, int vecDim, int size, 8557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller DataFile, int8_t fileIndex = 0); 8657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 8757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline bool exists(unsigned int i, unsigned int c); 8857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 8957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *load(int i, int c, Value *ptr); 9057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller void store(int i, int c, Value *ptr, Value *value); 9157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *acquire(int i, int c); 9257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 9357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller private: 9457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Symbol *mkSymbol(int i, int c, Symbol *base); 9557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 9657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller private: 9757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value **values; 9857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller uint32_t baseAddr; 9957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller uint32_t arrayLen; 10057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Symbol *baseSym; 10157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 10257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller uint8_t vecDim; 10357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller uint8_t eltSize; // in bytes 10457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 10557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller DataFile file; 10657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bool regOnly; 10757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 10857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller BuildUtil *up; 10957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 11057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller void init(); 11157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller }; 11257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 11357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Symbol *mkSymbol(DataFile file, int8_t fileIndex, 11457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller DataType ty, uint32_t baseAddress); 11557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 11657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Symbol *mkSysVal(SVSemantic svName, uint32_t svIndex); 11757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 11857594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerprivate: 11957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller void addImmediate(ImmediateValue *); 12057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller inline unsigned int u32Hash(uint32_t); 12157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 12257594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerprotected: 12357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Program *prog; 12457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Function *func; 12557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *pos; 12657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller BasicBlock *bb; 12757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bool tail; 12857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 12957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#define NV50_IR_BUILD_IMM_HT_SIZE 256 13057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 13157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ImmediateValue *imms[NV50_IR_BUILD_IMM_HT_SIZE]; 13257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller unsigned int immCount; 13357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 13457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 13557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerunsigned int BuildUtil::u32Hash(uint32_t u) 13657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 13757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return (u % 273) % NV50_IR_BUILD_IMM_HT_SIZE; 13857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 13957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 14057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid BuildUtil::setProgram(Program *program) 14157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 14257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller prog = program; 14357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 14457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 14557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid 14657594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::setPosition(BasicBlock *block, bool atTail) 14757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 14857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bb = block; 14957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller prog = bb->getProgram(); 15057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller func = bb->getFunction(); 15157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos = NULL; 15257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller tail = atTail; 15357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 15457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 15557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid 15657594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::setPosition(Instruction *i, bool after) 15757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 15857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bb = i->bb; 15957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller prog = bb->getProgram(); 16057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller func = bb->getFunction(); 16157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos = i; 16257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller tail = after; 16357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller assert(bb); 16457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 16557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 16657594065c30feec9376be9b2132659f7d87362eeChristoph BumillerLValue * 16757594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::getScratch(int size) 16857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 16957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *lval = new_LValue(func, FILE_GPR); 17057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (size != 4) 17157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller lval->reg.size = size; 17257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return lval; 17357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 17457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 17557594065c30feec9376be9b2132659f7d87362eeChristoph BumillerLValue * 17657594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::getSSA(int size) 17757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 17857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller LValue *lval = new_LValue(func, FILE_GPR); 17957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller lval->ssa = 1; 18057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (size != 4) 18157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller lval->reg.size = size; 18257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return lval; 18357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 18457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 18557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid BuildUtil::insert(Instruction *i) 18657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 18757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (!pos) { 18857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller tail ? bb->insertTail(i) : bb->insertHead(i); 18957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else { 19057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (tail) { 19157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bb->insertAfter(pos, i); 19257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos = i; 19357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else { 19457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller bb->insertBefore(pos, i); 19557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 19657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 19757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 19857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 19957594065c30feec9376be9b2132659f7d87362eeChristoph BumillerInstruction * 20057594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::mkOp(operation op, DataType ty, Value *dst) 20157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 20257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Instruction *insn = new_Instruction(func, op, ty); 20357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller insn->setDef(0, dst); 20457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller insert(insn); 20557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (op == OP_DISCARD || op == OP_EXIT || 20657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller op == OP_JOIN || 20757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller op == OP_QUADON || op == OP_QUADPOP || 20857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller op == OP_EMIT || op == OP_RESTART) 20957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller insn->fixed = 1; 21057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return insn; 21157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 21257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 21357594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerinline LValue * 21457594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::mkOp1v(operation op, DataType ty, Value *dst, Value *src) 21557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 21657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller mkOp1(op, ty, dst, src); 21757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return dst->asLValue(); 21857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 21957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 22057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerinline LValue * 22157594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::mkOp2v(operation op, DataType ty, Value *dst, 22257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *src0, Value *src1) 22357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 22457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller mkOp2(op, ty, dst, src0, src1); 22557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return dst->asLValue(); 22657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 22757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 22857594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerinline LValue * 22957594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::mkOp3v(operation op, DataType ty, Value *dst, 23057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *src0, Value *src1, Value *src2) 23157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 23257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller mkOp3(op, ty, dst, src0, src1, src2); 23357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return dst->asLValue(); 23457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 23557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 23657594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerbool 23757594065c30feec9376be9b2132659f7d87362eeChristoph BumillerBuildUtil::DataArray::exists(unsigned int i, unsigned int c) 23857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 23957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller assert(i < arrayLen && c < vecDim); 24057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return !regOnly || values[i * vecDim + c]; 24157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 24257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 24357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} // namespace nv50_ir 24457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 24557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#endif // __NV50_IR_BUILD_UTIL_H__ 246