SplitRes_SELECT improvement
Duncan Sands
baldrick at free.fr
Tue Mar 12 09:59:16 PDT 2013
Hi Richard,
On 12/03/13 17:55, Relph, Richard wrote:
>
> On Mar 12, 2013, at 9:30 AM, Nadav Rotem <nrotem at apple.com
> <mailto:nrotem at apple.com>>
> wrote:
>
>> Richard,
>>
>> The assertion that you suggested that we remove is about something different.
>> It checks that the result of the select node is legalized before the
>> condition. Can you show us the SDNode that fails on this assertion ?
>
> Not at the moment… ;-) With your fix to visitSIGN_EXTEND, this problem seems to
> have disappeared...
in that case can you please revert this patch if you applied it.
Thanks, Duncan.
>
>> Thanks,
>> Nadav
>>
>> On Mar 12, 2013, at 9:25 AM, Duncan Sands <baldrick at free.fr
>> <mailto:baldrick at free.fr>> wrote:
>>
>>> Hi Richard,
>>>
>>> On 12/03/13 16:00, Relph, Richard wrote:
>>>> DAGTypeLegalizer::SplitRes_SELECT() currently does an assert if the
>>>> condition is not of type MVT::i1. This patch uses the existing type of the
>>>> condition to generate the type for the split conditions instead of a fixed i1.
>>>> This is an issue for us when trying to legalize a 8x or 16x vector to a 4x
>>>> type… it isn't the case that we always have an MVT::i1 condition coming in.
>>>
>>> if the select condition is a vector then you should be using a vselect node
>>> rather than a select node. So I think this patch is wrong and the real problem
>>> is that the wrong select node type is being generated somewhere.
>>>
>>> Ciao, Duncan.
>>>
>>>>
>>>> Index: lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp
>>>> ===================================================================
>>>> --- lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp(revision 176837)
>>>> +++ lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp(working copy)
>>>> @@ -490,10 +490,10 @@
>>>> SDValue Cond = N->getOperand(0);
>>>> CL = CH = Cond;
>>>> if (Cond.getValueType().isVector()) {
>>>> - assert(Cond.getValueType().getVectorElementType() == MVT::i1 &&
>>>> - "Condition legalized before result?");
>>>> unsigned NumElements = Cond.getValueType().getVectorNumElements();
>>>> - EVT VCondTy = EVT::getVectorVT(*DAG.getContext(), MVT::i1, NumElements
>>>> / 2);
>>>> + EVT VCondTy = EVT::getVectorVT(*DAG.getContext(),
>>>> + Cond.getValueType().getVectorElementType(),
>>>> + NumElements / 2);
>>>> CL = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, VCondTy, Cond,
>>>> DAG.getIntPtrConstant(0));
>>>> CH = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, VCondTy, Cond,
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list