[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