Lines Matching refs:src

95 // swaps $rX <-> $rY, i.e. do not create live range overlaps of phi src and def.
107 if (mov->def(0).getFile() != mov->src(0).getFile())
165 return ld && ld->op == OP_LOAD && ld->src(0).getFile() == FILE_MEMORY_CONST;
177 return ld->src(0).getImmediate(val) && !val.isInteger(0);
186 (ld->src(0).getFile() == FILE_SHADER_INPUT ||
187 ld->src(0).getFile() == FILE_MEMORY_SHARED)));
205 if (insn->src(1).getFile() != FILE_GPR)
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);
286 if (ld->src(0).isIndirect(0))
320 if (!i->src(s).isIndirect(0))
326 if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) ||
327 !insn->src(1).getImmediate(imm) ||
332 i->src(s).get()->reg.data.offset += imm.reg.data.u32;
334 if (insn->src(0).getFile() != targ->nativeFile(FILE_ADDRESS) ||
335 !insn->src(1).getImmediate(imm) ||
340 i->src(s).get()->reg.data.offset -= imm.reg.data.u32;
342 if (!insn->src(0).getImmediate(imm) ||
347 i->src(s).get()->reg.data.offset += imm.reg.data.u32;
349 if (!insn->src(2).getImmediate(imm) ||
355 i->src(s).get()->reg.data.offset += imm.reg.data.u32;
419 i->src(0).getImmediate(src0) &&
420 i->src(1).getImmediate(src1) &&
421 i->src(2).getImmediate(src2)) {
425 i->src(0).getImmediate(src0) && i->src(1).getImmediate(src1)) {
428 if (i->srcExists(0) && i->src(0).getImmediate(src0)) {
432 if (i->srcExists(1) && i->src(1).getImmediate(src1)) {
436 if (i->srcExists(2) && i->src(2).getImmediate(src2))
464 if (!insn->src(s).getImmediate(imm)) {
466 if (!insn->src(s).getImmediate(imm))
472 if (insn->src(!s).mod != Modifier(0))
742 i->src(0).mod = Modifier(0);
743 i->src(1).mod = Modifier(0);
766 i->src(0).mod = i->src(2).mod;
769 if (i->src(0).getImmediate(src0))
859 i->src(0).mod = Modifier(0);
860 i->src(1).mod = Modifier(0);
861 i->src(2).mod = Modifier(0);
902 i->src(0).mod = Modifier(0);
920 if (!mul2->src(t).mod && insn->op == OP_MUL && insn->dType == TYPE_F32)
925 if (mul1->src(s1 = 0).getImmediate(imm1) ||
926 mul1->src(s1 = 1).getImmediate(imm1)) {
931 mul1->src(s1).mod = Modifier(0);
941 mul1->src(0).mod *= Modifier(NV50_IR_MOD_NEG);
959 if (!insn->src(s2).mod && !insn->src(t2).getImmediate(imm1))
963 mul2->setSrc(s2, mul1->src(t));
965 mul2->src(s2).mod *= Modifier(NV50_IR_MOD_NEG);
1028 insn->src(0).mod = Modifier(NV50_IR_MOD_NEG);
1030 insn->src(2).mod = Modifier(NV50_IR_MOD_NEG);
1099 i->src(0).mod = Modifier(0);
1108 i->src(0).mod = i->src(t).mod;
1110 i->src(1).mod = 0;
1117 i->src(0).mod = Modifier(0);
1123 i->src(t).mod = i->src(t).mod ^ Modifier(NV50_IR_MOD_NEG);
1125 i->op = i->src(t).mod.getOp();
1128 i->src(0).mod = i->src(1).mod;
1129 i->src(1).mod = 0;
1132 i->src(0).mod = 0;
1137 i->src(t).mod = i->src(t).mod ^ Modifier(NV50_IR_MOD_NEG);
1141 i->src(s).mod = i->src(t).mod;
1143 if (!isFloatType(i->dType) && !i->src(t).mod) {
1162 i->src(0).mod = i->src(2).mod;
1166 i->op = i->src(0).mod.getOp();
1168 i->src(0).mod = 0;
1173 i->src(t).mod = i->src(t).mod ^ Modifier(NV50_IR_MOD_NEG);
1176 i->src(0).mod = i->src(1).mod;
1179 i->src(1).mod = i->src(2).mod;
1184 if (!isFloatType(i->dType) && !i->subOp && !i->src(t).mod && !i->src(2).mod) {
1204 i->src(0).mod = i->src(1).mod;
1206 i->src(0).mod = i->src(0).mod ^ Modifier(NV50_IR_MOD_NEG);
1209 i->op = i->src(0).mod.getOp();
1211 i->src(0).mod = Modifier(0);
1339 newi->src(1).mod = Modifier(NV50_IR_MOD_NEG);
1364 if (i->src(t).mod.neg())
1389 i->setSrc(0, si->src(0));
1390 i->setSrc(1, si->src(1));
1392 i->setSrc(2, si->src(2));
1399 Instruction *src = i->getSrc(t)->getInsn();
1404 i->src(0).mod = Modifier(0);
1407 i->op = i->src(t).mod.getOp();
1410 i->src(0).mod = i->src(t).mod;
1413 } else if (src->asCmp()) {
1414 CmpInstruction *cmp = src->asCmp();
1425 if (i->src(t).mod != Modifier(0)) {
1426 assert(i->src(t).mod == Modifier(NV50_IR_MOD_NOT));
1427 i->src(t).mod = Modifier(0);
1437 src->op == OP_SHR &&
1438 src->src(1).getImmediate(imm1) &&
1439 i->src(t).mod == Modifier(0) &&
1444 i->setSrc(0, src->getSrc(0));
1446 } else if (src->op == OP_SHL &&
1447 src->src(1).getImmediate(imm1) &&
1448 i->src(t).mod == Modifier(0) &&
1463 if (s != 1 || i->src(0).mod != Modifier(0))
1478 if (si->src(1).getImmediate(imm1)) {
1485 if (si->src(1).getImmediate(imm1) && imm0.reg.data.u32 == imm1.reg.data.u32) {
1498 if (si->src(1).getImmediate(imm1))
1500 else if (si->src(0).getImmediate(imm1))
1518 if (si->op != OP_SUB && si->src(0).getImmediate(imm1))
1520 else if (si->src(1).getImmediate(imm1))
1524 if (si->src(!adds).mod != Modifier(0))
1698 i->src(0).mod = Modifier(0); /* Clear the already applied modifier */
1711 if (newi->src(0).getImmediate(tmp))
1743 i->src(0).mod = i->src(0).mod ^ Modifier(NV50_IR_MOD_NEG);
1763 mod *= mi->src(0).mod;
1765 if ((i->op == OP_ABS) || i->src(s).mod.abs()) {
1782 i->src(s).mod *= mod;
1844 sub->src(0).getFile() != FILE_GPR || sub->src(0).mod ||
1845 sub->src(1).getFile() != FILE_GPR || sub->src(1).mod)
1898 Value *src;
1914 src = add->getSrc(s);
1916 if (src->getUniqueInsn() && src->getUniqueInsn()->bb != add->bb)
1919 if (src->getInsn()->saturate || src->getInsn()->postFactor ||
1920 src->getInsn()->dnz || src->getInsn()->precise)
1925 if (!src->getInsn()->src(2).getImmediate(imm))
1931 if (typeSizeof(add->dType) != typeSizeof(src->getInsn()->dType) ||
1932 isFloatType(add->dType) != isFloatType(src->getInsn()->dType))
1935 mod[0] = add->src(0).mod;
1936 mod[1] = add->src(1).mod;
1937 mod[2] = src->getUniqueInsn()->src(0).mod;
1938 mod[3] = src->getUniqueInsn()->src(1).mod;
1944 add->subOp = src->getInsn()->subOp; // potentially mul-high
1945 add->dnz = src->getInsn()->dnz;
1946 add->dType = src->getInsn()->dType; // sign matters for imad hi
1947 add->sType = src->getInsn()->sType;
1949 add->setSrc(2, add->src(s ? 0 : 1));
1951 add->setSrc(0, src->getInsn()->getSrc(0));
1952 add->src(0).mod = mod[2] ^ mod[s];
1953 add->setSrc(1, src->getInsn()->getSrc(1));
1954 add->src(1).mod = mod[3];
1967 if (minmax->src(0).mod == minmax->src(1).mod) {
1968 if (minmax->def(0).mayReplace(minmax->src(0))) {
1969 minmax->def(0).replace(minmax->src(0), false);
1997 Modifier mod = rcp->src(0).mod * si->src(0).mod;
2003 rcp->src(0).mod = rcp->src(0).mod * si->src(0).mod;
2033 logop->def(0).mayReplace(logop->src(0))) {
2034 logop->def(0).replace(logop->src(0), false);
2094 cvt->dType != TYPE_S32 || cvt->src(0).mod != Modifier(0))
2098 if (insn->src(0).mod != Modifier(0))
2108 insn->src(0).mod)
2163 cvt->src(0).mod *= insn->src(0).mod;
2184 if (insn->op == OP_EXTBF && insn->src(1).getImmediate(imm)) {
2197 if (insn->src(0).getImmediate(imm))
2199 else if (insn->src(1).getImmediate(imm))
2216 shift->src(1).getImmediate(imm) &&
2227 insn->src(1).getImmediate(imm)) {
2247 shift->src(1).getImmediate(imm) &&
2277 assert(insn->srcExists(0) && insn->src(0).getFile() == FILE_GPR);
2290 if (add->src(s).getImmediate(imm))
2300 if (add->src(s).getFile() != FILE_GPR || add->src(s).mod != Modifier(0))
2312 Instruction *src = i->getSrc(0)->getInsn();
2316 if (isFloatType(i->sType) || !src || src->op != OP_AND)
2319 if (src->src(0).getImmediate(imm))
2321 else if (src->src(1).getImmediate(imm))
2329 Instruction *set = src->getSrc(b)->getInsn();
2350 if (!i->src(1).getImmediate(imm))
2461 Value *src;
2476 src = add->getSrc(s);
2477 shl = src->getUniqueInsn();
2479 if (shl->bb != add->bb || shl->usesFlags() || shl->subOp || shl->src(0).mod)
2482 if (!shl->src(1).getImmediate(imm))
2486 add->setSrc(2, add->src(!s));
2491 add->src(0).mod = add->src(1).mod;
2493 add->src(1).mod = Modifier(0);
2511 assert(!i->src(0).mod);
2512 assert(!i->src(1).mod);
2513 assert(i->op == OP_MUL ? 1 : !i->src(2).mod);
2844 Value *src[4]; // no modifiers in ValueRef allowed for st
2877 src[s] = st->getSrc(s + 1);
2886 st->setSrc(k++, src[j]);
2945 return &loads[insn->src(0).getFile()];
2946 return &stores[insn->src(0).getFile()];
3017 ld->def(d).replace(st->src(s), false);
3130 for (Record *r = stores[ld->src(0).getFile()]; r; r = r->next)
3142 f = st->src(0).getFile();
3178 purgeRecords(ldst, ldst->src(0).getFile());
3189 purgeRecords(ldst, ldst->src(0).getFile());
3193 ldst->src(1).getFile() == FILE_GPR &&
3210 if (ldst->src(0).getFile() == FILE_MEMORY_GLOBAL) {
3215 purgeRecords(NULL, ldst->src(0).getFile());
3229 DataFile file = ldst->src(0).getFile();
3308 if (ld->src(0).isIndirect(0))
3310 file = ld->src(0).getFile();
3312 file = insn->src(s).getFile();
3454 (typeSizeof(insn->dType) <= 4 && !insn->src(0).isIndirect(0))) &&
3559 i->src(0).getFile() != FILE_GPR ||
3560 i->src(1).getFile() != FILE_GPR ||
3561 i->src(2).getFile() != FILE_GPR ||
3580 if (def && def->op == OP_MOV && def->src(0).getFile() == FILE_IMMEDIATE) {
3588 ASSERTED bool ret = def->src(0).getImmediate(val);
3600 Value *src = vtmp->getInsn()->getSrc(0);
3605 if (src->getInsn() && post_ra_dead(src->getInsn()))
3606 delete_Instruction(prog, src->getInsn());
3615 i->src(0).getFile() != FILE_GPR ||
3616 i->src(1).getFile() != FILE_GPR ||
3617 i->src(2).getFile() != FILE_GPR ||
3625 if ((i->src(2).mod | Modifier(NV50_IR_MOD_NEG)) != Modifier(NV50_IR_MOD_NEG))
3631 if (i->src(0).getImmediate(val))
3633 else if (i->src(1).getImmediate(val))
3638 if ((i->src(s).mod | Modifier(NV50_IR_MOD_NEG)) != Modifier(NV50_IR_MOD_NEG))
3761 if (this->src(s).mod != that->src(s).mod)
3770 switch (src(0).getFile()) {
3861 Value *src = NULL;
3872 if (!src || ir->getSrc(s)->refCount() < src->refCount())
3873 src = ir->getSrc(s);
3875 if (src) {
3876 for (Value::UseIterator it = src->uses.begin();
3877 it != src->uses.end(); ++it) {