[llvm] r205731 - R600: Match 24-bit arithmetic patterns in a Target DAGCombine

Matt Arsenault Matthew.Arsenault at amd.com
Wed Apr 9 14:20:17 PDT 2014


On 04/07/2014 12:45 PM, Tom Stellard wrote:
> +      if (Subtarget->hasMulU24() && isU24(N0, DAG) && isU24(N1, DAG)) {
> +        N0 = DAG.getZExtOrTrunc(N0, DL, MVT::i32);
> +        N1 = DAG.getZExtOrTrunc(N1, DL, MVT::i32);
> +        Mul = DAG.getNode(AMDGPUISD::MUL_U24, DL, MVT::i32, N0, N1);
> +      } else if (Subtarget->hasMulI24() && isI24(N0, DAG) && isI24(N1, DAG)) {
> +        N0 = DAG.getSExtOrTrunc(N0, DL, MVT::i32);
> +        N1 = DAG.getSExtOrTrunc(N1, DL, MVT::i32);
> +        Mul = DAG.getNode(AMDGPUISD::MUL_I24, DL, MVT::i32, N0, N1);
> +      } else {
> +        break;
> +      }
> +
> +      SDValue Reg = DAG.getSExtOrTrunc(Mul, DL, VT);
Using sext for the u24 case for the final result doesn't look right



More information about the llvm-commits mailing list