[llvm] [AArch64] Fix a presumed typo in isFPImmLegal limit. NFC (PR #106716)

via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 30 04:50:14 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: Marina Taylor (citymarina)

<details>
<summary>Changes</summary>

The worst possible case for a double literal goes like:

```
  mov ...
  movk ..., lsl #<!-- -->16
  movk ..., lsl #<!-- -->32
  movk ..., lsl #<!-- -->48
  fmov ...
```

The limit of 5 in the code gives the impression that  `Insn` includes all instructions including the `fmov`, but that's not true. It only counts the integer moves. This led me astray on some other work in this area.

---
Full diff: https://github.com/llvm/llvm-project/pull/106716.diff


1 Files Affected:

- (modified) llvm/lib/Target/AArch64/AArch64ISelLowering.cpp (+2-1) 


``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 02390e0a85c0a5..98f6f30112a8c7 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -11463,7 +11463,8 @@ bool AArch64TargetLowering::isFPImmLegal(const APFloat &Imm, EVT VT,
     // movw+movk is fused). So we limit up to 2 instrdduction at most.
     SmallVector<AArch64_IMM::ImmInsnModel, 4> Insn;
     AArch64_IMM::expandMOVImm(ImmInt.getZExtValue(), VT.getSizeInBits(), Insn);
-    unsigned Limit = (OptForSize ? 1 : (Subtarget->hasFuseLiterals() ? 5 : 2));
+    assert(Insn.size() <= 4);
+    unsigned Limit = (OptForSize ? 1 : (Subtarget->hasFuseLiterals() ? 4 : 2));
     IsLegal = Insn.size() <= Limit;
   }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/106716


More information about the llvm-commits mailing list