[llvm] r207917 - [ARM64] Correctly select ANDWri in FastISel.

Eric Christopher echristo at gmail.com
Sun May 4 20:50:19 PDT 2014


These could probably use a comment as to why we need to constrain here
in these locations.

-eric

On Sat, May 3, 2014 at 10:27 AM, Joey Gouly <joey.gouly at gmail.com> wrote:
> Author: joey
> Date: Sat May  3 12:27:06 2014
> New Revision: 207917
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207917&view=rev
> Log:
> [ARM64] Correctly select ANDWri in FastISel.
>
> http://reviews.llvm.org/D3598
>
> Modified:
>     llvm/trunk/lib/Target/ARM64/ARM64FastISel.cpp
>     llvm/trunk/test/CodeGen/ARM64/fast-isel-fcmp.ll
>
> Modified: llvm/trunk/lib/Target/ARM64/ARM64FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM64/ARM64FastISel.cpp?rev=207917&r1=207916&r2=207917&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM64/ARM64FastISel.cpp (original)
> +++ llvm/trunk/lib/Target/ARM64/ARM64FastISel.cpp Sat May  3 12:27:06 2014
> @@ -577,7 +577,8 @@ bool ARM64FastISel::EmitLoad(MVT VT, uns
>
>    // Loading an i1 requires special handling.
>    if (VTIsi1) {
> -    unsigned ANDReg = createResultReg(&ARM64::GPR32RegClass);
> +    MRI.constrainRegClass(ResultReg, &ARM64::GPR32RegClass);
> +    unsigned ANDReg = createResultReg(&ARM64::GPR32spRegClass);
>      BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>              ANDReg)
>          .addReg(ResultReg)
> @@ -665,7 +666,8 @@ bool ARM64FastISel::EmitStore(MVT VT, un
>
>    // Storing an i1 requires special handling.
>    if (VTIsi1) {
> -    unsigned ANDReg = createResultReg(&ARM64::GPR32RegClass);
> +    MRI.constrainRegClass(SrcReg, &ARM64::GPR32RegClass);
> +    unsigned ANDReg = createResultReg(&ARM64::GPR32spRegClass);
>      BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>              ANDReg)
>          .addReg(SrcReg)
> @@ -788,7 +790,8 @@ bool ARM64FastISel::SelectBranch(const I
>          CondReg = FastEmitInst_extractsubreg(MVT::i32, CondReg, /*Kill=*/true,
>                                               ARM64::sub_32);
>
> -      unsigned ANDReg = createResultReg(&ARM64::GPR32RegClass);
> +      MRI.constrainRegClass(CondReg, &ARM64::GPR32RegClass);
> +      unsigned ANDReg = createResultReg(&ARM64::GPR32spRegClass);
>        BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>                ANDReg)
>            .addReg(CondReg)
> @@ -1030,7 +1033,9 @@ bool ARM64FastISel::SelectSelect(const I
>    if (FalseReg == 0)
>      return false;
>
> -  unsigned ANDReg = createResultReg(&ARM64::GPR32RegClass);
> +
> +  MRI.constrainRegClass(CondReg, &ARM64::GPR32RegClass);
> +  unsigned ANDReg = createResultReg(&ARM64::GPR32spRegClass);
>    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>            ANDReg)
>        .addReg(CondReg)
> @@ -1669,8 +1674,9 @@ bool ARM64FastISel::SelectTrunc(const In
>      // Issue an extract_subreg to get the lower 32-bits.
>      unsigned Reg32 = FastEmitInst_extractsubreg(MVT::i32, SrcReg, /*Kill=*/true,
>                                                  ARM64::sub_32);
> +    MRI.constrainRegClass(Reg32, &ARM64::GPR32RegClass);
>      // Create the AND instruction which performs the actual truncation.
> -    unsigned ANDReg = createResultReg(&ARM64::GPR32RegClass);
> +    unsigned ANDReg = createResultReg(&ARM64::GPR32spRegClass);
>      BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>              ANDReg)
>          .addReg(Reg32)
> @@ -1691,7 +1697,8 @@ unsigned ARM64FastISel::Emiti1Ext(unsign
>      DestVT = MVT::i32;
>
>    if (isZExt) {
> -    unsigned ResultReg = createResultReg(&ARM64::GPR32RegClass);
> +    MRI.constrainRegClass(SrcReg, &ARM64::GPR32RegClass);
> +    unsigned ResultReg = createResultReg(&ARM64::GPR32spRegClass);
>      BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(ARM64::ANDWri),
>              ResultReg)
>          .addReg(SrcReg)
>
> Modified: llvm/trunk/test/CodeGen/ARM64/fast-isel-fcmp.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM64/fast-isel-fcmp.ll?rev=207917&r1=207916&r2=207917&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM64/fast-isel-fcmp.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM64/fast-isel-fcmp.ll Sat May  3 12:27:06 2014
> @@ -1,4 +1,4 @@
> -; RUN: llc < %s -O0 -fast-isel-abort -mtriple=arm64-apple-darwin | FileCheck %s
> +; RUN: llc < %s -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin | FileCheck %s
>
>  define zeroext i1 @fcmp_float1(float %a) nounwind ssp {
>  entry:
>
>
> _______________________________________________
> 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