[llvm] r272665 - [Thumb] Fix off-by-one error in r272007

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 14 07:19:59 PDT 2016


Ouch! Good catch! :-)
On 14 Jun 2016 2:39 p.m., "James Molloy via llvm-commits" <
llvm-commits at lists.llvm.org> wrote:

> Author: jamesm
> Date: Tue Jun 14 08:33:07 2016
> New Revision: 272665
>
> URL: http://llvm.org/viewvc/llvm-project?rev=272665&view=rev
> Log:
> [Thumb] Fix off-by-one error in r272007
>
> We can only generate immediates up to #510 with a MOV+ADD, not #511,
> because there's no such instruction as add #256.
>
> Found by Oliver Stannard and csmith!
>
> Modified:
>     llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp
>     llvm/trunk/lib/Target/ARM/ARMInstrThumb.td
>     llvm/trunk/test/CodeGen/Thumb/constants.ll
>
> Modified: llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp?rev=272665&r1=272664&r2=272665&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMISelDAGToDAG.cpp Tue Jun 14 08:33:07 2016
> @@ -485,7 +485,7 @@ unsigned ARMDAGToDAGISel::ConstantMateri
>    if (Subtarget->isThumb()) {
>      if (Val <= 255) return 1;                               // MOV
>      if (Subtarget->hasV6T2Ops() && Val <= 0xffff) return 1; // MOVW
> -    if (Val <= 511) return 2;                               // MOV + ADDi8
> +    if (Val <= 510) return 2;                               // MOV + ADDi8
>      if (~Val <= 255) return 2;                              // MOV + MVN
>      if (ARM_AM::isThumbImmShiftedVal(Val)) return 2;        // MOV + LSL
>    } else {
>
> Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb.td
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb.td?rev=272665&r1=272664&r2=272665&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMInstrThumb.td (original)
> +++ llvm/trunk/lib/Target/ARM/ARMInstrThumb.td Tue Jun 14 08:33:07 2016
> @@ -66,11 +66,11 @@ def thumb_immshifted_shamt : SDNodeXForm
>    return CurDAG->getTargetConstant(V, SDLoc(N), MVT::i32);
>  }]>;
>
> -def imm256_511 : ImmLeaf<i32, [{
> -  return Imm >= 256 && Imm < 512;
> +def imm256_510 : ImmLeaf<i32, [{
> +  return Imm >= 256 && Imm < 511;
>  }]>;
>
> -def thumb_imm256_511_addend : SDNodeXForm<imm, [{
> +def thumb_imm256_510_addend : SDNodeXForm<imm, [{
>    return CurDAG->getTargetConstant(N->getZExtValue() - 255, SDLoc(N),
> MVT::i32);
>  }]>;
>
> @@ -1497,9 +1497,9 @@ def : T1Pat<(i32 thumb_immshifted:$src),
>  def : T1Pat<(i32 imm0_255_comp:$src),
>              (tMVN (tMOVi8 (imm_comp_XFORM imm:$src)))>;
>
> -def : T1Pat<(i32 imm256_511:$src),
> +def : T1Pat<(i32 imm256_510:$src),
>              (tADDi8 (tMOVi8 255),
> -                    (thumb_imm256_511_addend imm:$src))>;
> +                    (thumb_imm256_510_addend imm:$src))>;
>
>  // Pseudo instruction that combines ldr from constpool and add pc. This
> should
>  // be expanded into two instructions late to allow if-conversion and
>
> Modified: llvm/trunk/test/CodeGen/Thumb/constants.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb/constants.ll?rev=272665&r1=272664&r2=272665&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/Thumb/constants.ll (original)
> +++ llvm/trunk/test/CodeGen/Thumb/constants.ll Tue Jun 14 08:33:07 2016
> @@ -9,3 +9,11 @@
>  define i32 @mov_and_add() {
>    ret i32 267
>  }
> +
> +; CHECK-T1-LABEL: @mov_and_add2
> +; CHECK-T2-LABEL: @mov_and_add2
> +; CHECK-T1: ldr r0,
> +; CHECK-T2: movw r0, #511
> +define i32 @mov_and_add2() {
> +  ret i32 511
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160614/c2d1769e/attachment.html>


More information about the llvm-commits mailing list