[llvm] r181926 - Fix legalization of SETCC with promoted integer intrinsics
Duncan Sands
duncan.sands at gmail.com
Thu May 16 01:38:02 PDT 2013
Hi Hal,
On 15/05/13 23:37, Hal Finkel wrote:
> Author: hfinkel
> Date: Wed May 15 16:37:27 2013
> New Revision: 181926
>
> URL: http://llvm.org/viewvc/llvm-project?rev=181926&view=rev
> Log:
> Fix legalization of SETCC with promoted integer intrinsics
>
> If the input operands to SETCC are promoted, we need to make sure that we
> either use the promoted form of both operands (or neither); a mixture is not
> allowed. This can happen, for example, if a target has a custom promoted
> i1-returning intrinsic (where i1 is not a legal type). In this case, we need to
> use the promoted form of both operands.
>
> This change only augments the behavior of the existing logic in the case where
> the input types (which may or may not have already been legalized) disagree,
how can they disagree? If you are seeing different operand types then this
sounds like a bug somewhere else to me.
Ciao, Duncan.
> and should not affect existing target code because this case would otherwise
> cause an assert in the SETCC operand promotion code.
>
> This will be covered by (essentially all of the) tests for the new PPCCTRLoops
> infrastructure.
>
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=181926&r1=181925&r2=181926&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Wed May 15 16:37:27 2013
> @@ -521,9 +521,20 @@ SDValue DAGTypeLegalizer::PromoteIntRes_
> assert(SVT.isVector() == N->getOperand(0).getValueType().isVector() &&
> "Vector compare must return a vector result!");
>
> + SDValue LHS = N->getOperand(0);
> + SDValue RHS = N->getOperand(1);
> + if (LHS.getValueType() != RHS.getValueType()) {
> + if (getTypeAction(LHS.getValueType()) == TargetLowering::TypePromoteInteger &&
> + !LHS.getValueType().isVector())
> + LHS = GetPromotedInteger(LHS);
> + if (getTypeAction(RHS.getValueType()) == TargetLowering::TypePromoteInteger &&
> + !RHS.getValueType().isVector())
> + RHS = GetPromotedInteger(RHS);
> + }
> +
> // Get the SETCC result using the canonical SETCC type.
> - SDValue SetCC = DAG.getNode(N->getOpcode(), dl, SVT, N->getOperand(0),
> - N->getOperand(1), N->getOperand(2));
> + SDValue SetCC = DAG.getNode(N->getOpcode(), dl, SVT, LHS, RHS,
> + N->getOperand(2));
>
> assert(NVT.bitsLE(SVT) && "Integer type overpromoted?");
> // Convert to the expected type.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list