Be nice to CellSPU: for this target getSetCCResultType

may return i8, which can result in SELECT nodes for
which the type of the condition is i8, but there are
no patterns for select with i8 condition.  Tweak the
LegalizeTypes logic to avoid this as much as possible.
This isn't a real fix because it is still perfectly
possible to end up with such select nodes - CellSPU
needs to be fixed IMHO.

llvm-svn: 57968
This commit is contained in:
Duncan Sands 2008-10-22 09:23:20 +00:00
parent ebf65ef3f9
commit 0d122150ce

View File

@ -811,10 +811,16 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
SDValue Cond = GetPromotedInteger(N->getOperand(0));
// Promote all the way up to SVT, the canonical SetCC type.
MVT SVT = TLI.getSetCCResultType(Cond);
// FIXME: Not clear what value to pass to getSetCCResultType.
// [This only matters for CellSPU since all other targets
// ignore the argument.] We used to pass Cond, resulting in
// SVT = MVT::i8, but CellSPU has no select patterns for i8,
// causing an abort later. Passing the result type works
// around the problem.
MVT SVT = TLI.getSetCCResultType(N->getOperand(1));
assert(isTypeLegal(SVT) && "Illegal SetCC type!");
assert(Cond.getValueSizeInBits() <= SVT.getSizeInBits() &&
"Integer type overpromoted?");
"Unexpected SetCC type!");
// Make sure the extra bits conform to getSetCCResultContents. There are
// two sets of extra bits: those in Cond, which come from type promotion,