Lines Matching defs:insn

191 LoadPropagation::checkSwapSrc01(Instruction *insn)
194 if (!targ->getOpInfo(insn).commutative) {
195 if (insn->op != OP_SET && insn->op != OP_SLCT &&
196 insn->op != OP_SUB && insn->op != OP_XMAD)
199 if (insn->op == OP_XMAD &&
200 (insn->subOp & NV50_IR_SUBOP_XMAD_CMODE_MASK) == NV50_IR_SUBOP_XMAD_CBCC)
202 if (insn->op == OP_XMAD && (insn->subOp & NV50_IR_SUBOP_XMAD_MRG))
205 if (insn->src(1).getFile() != FILE_GPR)
209 if (insn->op == OP_SET && insn->subOp)
212 Instruction *i0 = insn->getSrc(0)->getInsn();
213 Instruction *i1 = insn->getSrc(1)->getInsn();
217 int i0refs = insn->getSrc(0)->refCount();
218 int i1refs = insn->getSrc(1)->refCount();
220 if ((isCSpaceLoad(i0) || isImmdLoad(i0)) && targ->insnCanLoad(insn, 1, i0)) {
222 !targ->insnCanLoad(insn, 1, i1) ||
224 insn->swapSources(0, 1);
230 insn->swapSources(0, 1);
237 if (insn->op == OP_SET || insn->op == OP_SET_AND ||
238 insn->op == OP_SET_OR || insn->op == OP_SET_XOR)
239 insn->asCmp()->setCond = reverseCondCode(insn->asCmp()->setCond);
241 if (insn->op == OP_SLCT)
242 insn->asCmp()->setCond = inverseCondCode(insn->asCmp()->setCond);
244 if (insn->op == OP_SUB) {
245 insn->src(0).mod = insn->src(0).mod ^ Modifier(NV50_IR_MOD_NEG);
246 insn->src(1).mod = insn->src(1).mod ^ Modifier(NV50_IR_MOD_NEG);
248 if (insn->op == OP_XMAD) {
250 uint16_t h1 = (insn->subOp >> 1 & NV50_IR_SUBOP_XMAD_H1(0)) |
251 (insn->subOp << 1 & NV50_IR_SUBOP_XMAD_H1(1));
252 insn->subOp = (insn->subOp & ~NV50_IR_SUBOP_XMAD_H1_MASK) | h1;
318 Instruction *insn;
322 insn = i->getIndirect(s, 0)->getInsn();
323 if (!insn)
325 if (insn->op == OP_ADD && !isFloatType(insn->dType)) {
326 if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) ||
327 !insn->src(1).getImmediate(imm) ||
330 i->setIndirect(s, 0, insn->getSrc(0));
333 } else if (insn->op == OP_SUB && !isFloatType(insn->dType)) {
334 if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) ||
335 !insn->src(1).getImmediate(imm) ||
338 i->setIndirect(s, 0, insn->getSrc(0));
341 } else if (insn->op == OP_MOV) {
342 if (!insn->src(0).getImmediate(imm) ||
348 } else if (insn->op == OP_SHLADD) {
349 if (!insn->src(2).getImmediate(imm) ||
353 OP_SHL, TYPE_U32, bld.getSSA(), insn->getSrc(0), insn->getSrc(1)));
447 Instruction *insn = value->getInsn();
448 if (!insn)
451 if (insn->asCmp() && insn->op != OP_SLCT)
452 return insn->asCmp();
457 if (insn->op == OP_MOV)
458 return findOriginForTestWithZero(insn->getSrc(0));
461 if (insn->op == OP_AND) {
464 if (!insn->src(s).getImmediate(imm)) {
466 if (!insn->src(s).getImmediate(imm))
472 if (insn->src(!s).mod != Modifier(0))
474 return findOriginForTestWithZero(insn->getSrc(!s));
910 Instruction *insn;
919 insn = mul2->getSrc(t)->getInsn();
920 if (!mul2->src(t).mod && insn->op == OP_MUL && insn->dType == TYPE_F32)
921 mul1 = insn;
951 insn = (*mul2->getDef(0)->uses.begin())->getInsn();
952 if (!insn)
956 s2 = insn->getSrc(0) == mul1->getDef(0) ? 0 : 1;
958 if (insn->op == OP_MUL && insn->dType == TYPE_F32)
959 if (!insn->src(s2).mod && !insn->src(t2).getImmediate(imm1))
960 mul2 = insn;
1026 Instruction *insn = bld.mkOp3(OP_SHLADD, TYPE_U32, res, a, bld.mkImm(shl), a);
1028 insn->src(0).mod = Modifier(NV50_IR_MOD_NEG);
1030 insn->src(2).mod = Modifier(NV50_IR_MOD_NEG);
1771 // neg as both opcode and modifier on same insn is prohibited
2092 Instruction *insn = cvt->getSrc(0)->getInsn();
2096 if (!insn || insn->op != OP_NEG || insn->dType != TYPE_F32)
2098 if (insn->src(0).mod != Modifier(0))
2100 insn = insn->getSrc(0)->getInsn();
2103 if (insn && insn->op == OP_CVT &&
2104 insn->dType == TYPE_F32 &&
2105 insn->sType == TYPE_S32) {
2106 insn = insn->getSrc(0)->getInsn();
2107 if (!insn || insn->op != OP_ABS || insn->sType != TYPE_S32 ||
2108 insn->src(0).mod)
2110 insn = insn->getSrc(0)->getInsn();
2111 if (!insn || insn->op != OP_SET || insn->dType != TYPE_U32)
2114 if (!insn || insn->op != OP_SET || insn->dType != TYPE_F32) {
2118 Instruction *bset = cloneShallow(func, insn);
2132 Instruction *insn = cvt->getSrc(0)->getInsn();
2134 if (!insn ||
2135 insn->saturate ||
2136 insn->subOp ||
2137 insn->dType != insn->sType ||
2138 insn->dType != cvt->sType)
2141 RoundMode rnd = insn->rnd;
2142 switch (insn->op) {
2158 if (!isFloatType(cvt->dType) || !isFloatType(insn->sType))
2162 cvt->setSrc(0, insn->getSrc(0));
2163 cvt->src(0).mod *= insn->src(0).mod;
2164 cvt->sType = insn->sType;
2178 Instruction *insn = cvt->getSrc(0)->getInsn();
2182 if ((cvt->sType != TYPE_U32 && cvt->sType != TYPE_S32) || !insn)
2184 if (insn->op == OP_EXTBF && insn->src(1).getImmediate(imm)) {
2187 arg = insn->getSrc(0);
2195 } else if (insn->op == OP_AND) {
2197 if (insn->src(0).getImmediate(imm))
2199 else if (insn->src(1).getImmediate(imm))
2211 arg = insn->getSrc(!s);
2225 } else if (insn->op == OP_SHR &&
2226 insn->sType == cvt->sType &&
2227 insn->src(1).getImmediate(imm)) {
2228 arg = insn->getSrc(0);
2270 AlgebraicOpt::handleSUCLAMP(Instruction *insn)
2273 int32_t val = insn->getSrc(2)->asImm()->reg.data.s32;
2277 assert(insn->srcExists(0) && insn->src(0).getFile() == FILE_GPR);
2280 if (insn->getSrc(0)->refCount() > 1)
2282 add = insn->getSrc(0)->getInsn();
2303 bld.setPosition(insn, false); // make sure bld is init'ed
2305 insn->setSrc(2, bld.mkImm(val));
2306 insn->setSrc(0, add->getSrc(s));
2524 Instruction *insn = bld.mkOp3(OP_XMAD, TYPE_U32, tmp0, b, a, c);
2525 insn->setPredicate(i->cc, i->getPredicate());
2527 insn = bld.mkOp3(OP_XMAD, TYPE_U32, tmp1, b, a, bld.mkImm(0));
2528 insn->setPredicate(i->cc, i->getPredicate());
2529 insn->subOp = NV50_IR_SUBOP_XMAD_MRG | NV50_IR_SUBOP_XMAD_H1(1);
2698 Instruction *insn;
2730 // merge @insn into load/store instruction from @rec
2801 for (j = 0; sizeRc; sizeRc -= rec->insn->getDef(j)->reg.size, ++j);
2807 // j: nr of definitions in rec->insn, move:
2809 rec->insn->setDef(d, rec->insn->getDef(j - 1));
2811 if (rec->insn->getSrc(0)->refCount() > 1)
2812 rec->insn->setSrc(0, cloneShallow(func, rec->insn->getSrc(0)));
2813 rec->offset = rec->insn->getSrc(0)->reg.data.offset = offLd;
2819 // move definitions of @ld to @rec->insn
2822 rec->insn->setDef(d, ld->getDef(j));
2826 rec->insn->getSrc(0)->reg.size = size;
2827 rec->insn->setType(typeOfSize(size));
2881 sizeRc -= rec->insn->getSrc(j)->reg.size;
2882 st->setSrc(j, rec->insn->getSrc(j));
2893 sizeRc -= rec->insn->getSrc(s)->reg.size;
2894 st->setSrc(j, rec->insn->getSrc(s));
2900 delete_Instruction(prog, rec->insn);
2901 rec->insn = st;
2903 rec->insn->getSrc(0)->reg.size = size;
2904 rec->insn->setType(typeOfSize(size));
2942 MemoryOpt::getList(const Instruction *insn)
2944 if (insn->op == OP_LOAD || insn->op == OP_VFETCH)
2945 return &loads[insn->src(0).getFile()];
2946 return &stores[insn->src(0).getFile()];
2957 it->insn = i;
2962 MemoryOpt::findRecord(const Instruction *insn, bool load, bool& isAdj) const
2964 const Symbol *sym = insn->getSrc(0)->asSym();
2965 const int size = typeSizeof(insn->sType);
2970 if (it->locked && insn->op != OP_LOAD && insn->op != OP_VFETCH)
2973 it->rel[0] != insn->getIndirect(0, 0) ||
2975 it->rel[1] != insn->getIndirect(0, 1))
3002 Instruction *st = rec->insn;
3026 Instruction *ldR = rec->insn;
3050 const Instruction *const ri = rec->insn;
3092 delete_Instruction(prog, rec->insn);
3094 rec->insn = st;
3297 Instruction *insn = pred->getUniqueInsn();
3298 assert(insn);
3299 if (insn->op != OP_SET || insn->srcExists(2))
3302 for (int s = 0; s < 2 && insn->srcExists(s); ++s) {
3303 Instruction *ld = insn->getSrc(s)->getUniqueInsn();
3312 file = insn->src(s).getFile();
3316 Value *v = insn->getSrc(s);
3330 FlatteningPass::removeFlow(Instruction *insn)
3332 FlowInstruction *term = insn ? insn->asFlow() : NULL;
3370 FlatteningPass::mayPredicate(const Instruction *insn, const Value *pred) const
3372 if (insn->isPseudo())
3376 if (!prog->getTarget()->mayPredicate(insn, pred))
3378 for (int d = 0; insn->defExists(d); ++d)
3379 if (insn->getDef(d)->equals(pred))
3442 Instruction *insn = bb->getExit();
3443 if (insn && insn->op == OP_JOIN && !insn->getPredicate()) {
3444 insn = insn->prev;
3445 if (insn && !insn->getPredicate() &&
3446 !insn->asFlow() &&
3447 insn->op != OP_DISCARD &&
3448 insn->op != OP_TEXBAR &&
3449 !isTextureOp(insn->op) && // probably just nve4
3450 !isSurfaceOp(insn->op) && // not confirmed
3451 insn->op != OP_LINTERP && // probably just nve4
3452 insn->op != OP_PINTERP && // probably just nve4
3453 ((insn->op != OP_LOAD && insn->op != OP_STORE && insn->op != OP_ATOM) ||
3454 (typeSizeof(insn->dType) <= 4 && !insn->src(0).isIndirect(0))) &&
3455 !insn->isNop()) {
3456 insn->join = 1;
3473 Instruction *insn;
3491 for (insn = bL->getEntry(); insn; insn = insn->next, ++nL)
3492 if (!mayPredicate(insn, pred))
3501 for (insn = bR->getEntry(); insn; insn = insn->next, ++nR)
3502 if (!mayPredicate(insn, pred))