[llvm] d714be9 - [AArch64] Check for exact size when finding 1's for CMLE. (#76452)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 2 01:24:12 PST 2024
Author: David Green
Date: 2024-01-02T09:24:08Z
New Revision: d714be978cf48bc85cb7eacf57c3548c0606a5e4
URL: https://github.com/llvm/llvm-project/commit/d714be978cf48bc85cb7eacf57c3548c0606a5e4
DIFF: https://github.com/llvm/llvm-project/commit/d714be978cf48bc85cb7eacf57c3548c0606a5e4.diff
LOG: [AArch64] Check for exact size when finding 1's for CMLE. (#76452)
This is a fix for the second half of #75822, where smaller constants can
also be bitcast to larger types. We should be checking the size is what
we expect it to be when matching ones.
Added:
Modified:
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/test/CodeGen/AArch64/neon-compare-instructions.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index dffe69bdb900db..50658a855cfb37 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -13715,11 +13715,10 @@ static SDValue EmitVectorComparison(SDValue LHS, SDValue RHS,
bool IsCnst = BVN && BVN->isConstantSplat(SplatValue, SplatUndef,
SplatBitSize, HasAnyUndefs);
- bool IsSplatUniform =
- SrcVT.getVectorElementType().getSizeInBits() >= SplatBitSize;
- bool IsZero = IsCnst && SplatValue == 0 && IsSplatUniform;
- bool IsOne = IsCnst && SplatValue == 1 && IsSplatUniform;
- bool IsMinusOne = IsCnst && SplatValue.isAllOnes() && IsSplatUniform;
+ bool IsZero = IsCnst && SplatValue == 0;
+ bool IsOne =
+ IsCnst && SrcVT.getScalarSizeInBits() == SplatBitSize && SplatValue == 1;
+ bool IsMinusOne = IsCnst && SplatValue.isAllOnes();
if (SrcVT.getVectorElementType().isFloatingPoint()) {
switch (CC) {
diff --git a/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll b/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll
index af839d3b60836d..765c81e26e13ca 100644
--- a/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll
+++ b/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll
@@ -1792,7 +1792,8 @@ define <8 x i1> @not_cmle8xi8(<8 x i8> %0) {
define <4 x i1> @not_cmle16xi8(<4 x i32> %0) {
; CHECK-SD-LABEL: not_cmle16xi8:
; CHECK-SD: // %bb.0: // %entry
-; CHECK-SD-NEXT: cmle v0.4s, v0.4s, #0
+; CHECK-SD-NEXT: movi v1.8h, #1
+; CHECK-SD-NEXT: cmgt v0.4s, v1.4s, v0.4s
; CHECK-SD-NEXT: xtn v0.4h, v0.4s
; CHECK-SD-NEXT: ret
;
More information about the llvm-commits
mailing list