[PATCH] DAGCombiner: Respect the result of TLI.getBooleanContents() when expanding SETCC

Duncan Sands baldrick at free.fr
Thu Feb 28 08:29:10 PST 2013


Hi Tom, this is OK with a testcase.

Ciao, Duncan.

On 28/02/13 00:16, Tom Stellard wrote:
> From: Tom Stellard <thomas.stellard at amd.com>
>
> ---
>   lib/CodeGen/SelectionDAG/LegalizeDAG.cpp |   14 +++++++++++++-
>   1 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> index f085e44..743a9da 100644
> --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> @@ -3632,8 +3632,20 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
>       // Otherwise, SETCC for the given comparison type must be completely
>       // illegal; expand it into a SELECT_CC.
>       EVT VT = Node->getValueType(0);
> +    int TrueValue;
> +    switch(TLI.getBooleanContents(VT.isVector())) {
> +    default: assert(!"Unhandled BooleanContent value");
> +    case TargetLowering::ZeroOrOneBooleanContent:
> +    case TargetLowering::UndefinedBooleanContent:
> +      TrueValue = 1;
> +      break;
> +    case TargetLowering::ZeroOrNegativeOneBooleanContent:
> +      TrueValue = -1;
> +      break;
> +    }
>       Tmp1 = DAG.getNode(ISD::SELECT_CC, dl, VT, Tmp1, Tmp2,
> -                       DAG.getConstant(1, VT), DAG.getConstant(0, VT), Tmp3);
> +                       DAG.getConstant(TrueValue, VT), DAG.getConstant(0, VT),
> +                       Tmp3);
>       Results.push_back(Tmp1);
>       break;
>     }
>




More information about the llvm-commits mailing list