On May 14, 2007, at 10:57 PM, Chris Lattner wrote: >> PredicateOperand related bug fix. >> @@ -2899,7 +2901,7 @@ >> else if (NodeHasOptInFlag) >> EndAdjust = "-(HasInFlag?1:0)"; // May have a flag. >> >> - emitCode("for (unsigned i = " + utostr(NumInputs) + >> + emitCode("for (unsigned i = " + utostr(NumInputs - >> NumEAInputs) + >> ", e = N.getNumOperands()" + EndAdjust + "; i ! >> = e; ++i) {"); >> > > Out of curiousity, why is this needed? Did you hit a bug with > something when it got selected?
Yes. > If the bug was with ISD::Constant's, > this is a serious bug and this is not the right fix. Huh? It has nothing to do with ISD::Constants. Remember PredicateOperand with ExecuteAlways value is not part of the target independent DAG. So something like this: def BL : I<(ops i32imm:$func, pred:$p, variable_ops), ...> The input node should have 2 operands (plus one if it has the optional flag) plus the variable ops. The emit code has like this: for (unsigned i = 2, e = N.getNumOperands()-(HasInFlag?1:0); i != e; ++i) { AddToISelQueue(N.getOperand(i)); Ops0.push_back(N.getOperand(i)); } If we don't discount NumEAInputs (i.e. 1 in this case, to account for the single ExecuteAlways value), i's starting value is 3 and that's bad. Evan > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits