[llvm] r204737 - [DAG] Keep the opaque constant flag when performing unary constant folding operations.

Eric Christopher echristo at gmail.com
Mon Mar 31 16:14:33 PDT 2014


Testcase? What's this for etc?

-eric

On Tue, Mar 25, 2014 at 11:01 AM, Juergen Ributzka <juergen at apple.com> wrote:
> Author: ributzka
> Date: Tue Mar 25 13:01:20 2014
> New Revision: 204737
>
> URL: http://llvm.org/viewvc/llvm-project?rev=204737&view=rev
> Log:
> [DAG] Keep the opaque constant flag when performing unary constant folding operations.
>
> Usually opaque constants shouldn't be folded, unless they are simple unary
> operations that don't create new constants. Although this shouldn't drop the
> opaque constant flag. This commit fixes this.
>
> Related to <rdar://problem/14774662>
>
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=204737&r1=204736&r2=204737&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Tue Mar 25 13:01:20 2014
> @@ -2541,11 +2541,13 @@ SDValue SelectionDAG::getNode(unsigned O
>      switch (Opcode) {
>      default: break;
>      case ISD::SIGN_EXTEND:
> -      return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT);
> +      return getConstant(Val.sextOrTrunc(VT.getSizeInBits()), VT,
> +                         C->isTargetOpcode(), C->isOpaque());
>      case ISD::ANY_EXTEND:
>      case ISD::ZERO_EXTEND:
>      case ISD::TRUNCATE:
> -      return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT);
> +      return getConstant(Val.zextOrTrunc(VT.getSizeInBits()), VT,
> +                         C->isTargetOpcode(), C->isOpaque());
>      case ISD::UINT_TO_FP:
>      case ISD::SINT_TO_FP: {
>        APFloat apf(EVTToAPFloatSemantics(VT),
> @@ -2562,15 +2564,19 @@ SDValue SelectionDAG::getNode(unsigned O
>          return getConstantFP(APFloat(APFloat::IEEEdouble, Val), VT);
>        break;
>      case ISD::BSWAP:
> -      return getConstant(Val.byteSwap(), VT);
> +      return getConstant(Val.byteSwap(), VT, C->isTargetOpcode(),
> +                         C->isOpaque());
>      case ISD::CTPOP:
> -      return getConstant(Val.countPopulation(), VT);
> +      return getConstant(Val.countPopulation(), VT, C->isTargetOpcode(),
> +                         C->isOpaque());
>      case ISD::CTLZ:
>      case ISD::CTLZ_ZERO_UNDEF:
> -      return getConstant(Val.countLeadingZeros(), VT);
> +      return getConstant(Val.countLeadingZeros(), VT, C->isTargetOpcode(),
> +                         C->isOpaque());
>      case ISD::CTTZ:
>      case ISD::CTTZ_ZERO_UNDEF:
> -      return getConstant(Val.countTrailingZeros(), VT);
> +      return getConstant(Val.countTrailingZeros(), VT, C->isTargetOpcode(),
> +                         C->isOpaque());
>      }
>    }
>
>
>
> _______________________________________________
> 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