mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-07 16:54:48 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57968 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
29a2822f28
commit
f9410141f7
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user