[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