-
Notifications
You must be signed in to change notification settings - Fork 14.6k
[AArch64] Adjust comparison constant if adjusting it means less instructions #151024
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
AZero13
wants to merge
1
commit into
llvm:main
Choose a base branch
from
AZero13:immediates
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+260
−538
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…uctions Prefer constants that require less instructions to materialize, in both Global-ISel and Selection-DAG
@llvm/pr-subscribers-backend-aarch64 Author: AZero13 (AZero13) ChangesPrefer constants that require less instructions to materialize, in both Global-ISel and Selection-DAG Patch is 34.24 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/151024.diff 6 Files Affected:
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 7b49754ee7e1f..bdb14c2303f5e 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -3486,6 +3486,13 @@ bool isLegalCmpImmed(APInt C) {
return isLegalArithImmed(C.abs().getZExtValue());
}
+unsigned numberOfInstrToLoadImm(APInt C) {
+ uint64_t Imm = C.getZExtValue();
+ SmallVector<AArch64_IMM::ImmInsnModel> Insn;
+ AArch64_IMM::expandMOVImm(Imm, 32, Insn);
+ return Insn.size();
+}
+
static bool isSafeSignedCMN(SDValue Op, SelectionDAG &DAG) {
// 0 - INT_MIN sign wraps, so no signed wrap means cmn is safe.
if (Op->getFlags().hasNoSignedWrap())
@@ -3955,6 +3962,7 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
// CC has already been adjusted.
RHS = DAG.getConstant(0, DL, VT);
} else if (!isLegalCmpImmed(C)) {
+ unsigned NumImmForC = numberOfInstrToLoadImm(C);
// Constant does not fit, try adjusting it by one?
switch (CC) {
default:
@@ -3963,42 +3971,45 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
case ISD::SETGE:
if (!C.isMinSignedValue()) {
APInt CMinusOne = C - 1;
- if (isLegalCmpImmed(CMinusOne)) {
+ if (isLegalCmpImmed(CMinusOne) ||
+ (NumImmForC > numberOfInstrToLoadImm(CMinusOne))) {
CC = (CC == ISD::SETLT) ? ISD::SETLE : ISD::SETGT;
RHS = DAG.getConstant(CMinusOne, DL, VT);
}
}
break;
case ISD::SETULT:
- case ISD::SETUGE:
- if (!C.isZero()) {
- APInt CMinusOne = C - 1;
- if (isLegalCmpImmed(CMinusOne)) {
- CC = (CC == ISD::SETULT) ? ISD::SETULE : ISD::SETUGT;
- RHS = DAG.getConstant(CMinusOne, DL, VT);
- }
+ case ISD::SETUGE: {
+ // C is not 0 because it is a legal immediate.
+ APInt CMinusOne = C - 1;
+ if (isLegalCmpImmed(CMinusOne) ||
+ (NumImmForC > numberOfInstrToLoadImm(CMinusOne))) {
+ CC = (CC == ISD::SETULT) ? ISD::SETULE : ISD::SETUGT;
+ RHS = DAG.getConstant(CMinusOne, DL, VT);
}
- break;
+ } break;
case ISD::SETLE:
case ISD::SETGT:
if (!C.isMaxSignedValue()) {
APInt CPlusOne = C + 1;
- if (isLegalCmpImmed(CPlusOne)) {
+ if (isLegalCmpImmed(CPlusOne) ||
+ (NumImmForC > numberOfInstrToLoadImm(CPlusOne))) {
CC = (CC == ISD::SETLE) ? ISD::SETLT : ISD::SETGE;
RHS = DAG.getConstant(CPlusOne, DL, VT);
}
}
break;
case ISD::SETULE:
- case ISD::SETUGT:
- if (!C.isAllOnes()) {
- APInt CPlusOne = C + 1;
- if (isLegalCmpImmed(CPlusOne)) {
- CC = (CC == ISD::SETULE) ? ISD::SETULT : ISD::SETUGE;
- RHS = DAG.getConstant(CPlusOne, DL, VT);
- }
+ case ISD::SETUGT: {
+ // The maxmimum possible number, -1, is a legal cmp immediate, so no
+ // need to check for it.
+ APInt CPlusOne = C + 1;
+ if (isLegalCmpImmed(CPlusOne) ||
+ (NumImmForC > numberOfInstrToLoadImm(CPlusOne))) {
+ CC = (CC == ISD::SETULE) ? ISD::SETULT : ISD::SETUGE;
+ RHS = DAG.getConstant(CPlusOne, DL, VT);
}
- break;
+ } break;
}
}
}
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp b/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
index 3ba08c8c1d988..9b604f2fca46e 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
@@ -659,10 +659,10 @@ tryAdjustICmpImmAndPred(Register RHS, CmpInst::Predicate P,
auto IsMaterializableInSingleInstruction = [=](uint64_t Imm) {
SmallVector<AArch64_IMM::ImmInsnModel> Insn;
AArch64_IMM::expandMOVImm(Imm, 32, Insn);
- return Insn.size() == 1;
+ return Insn.size();
};
- if (!IsMaterializableInSingleInstruction(OriginalC) &&
+ if (IsMaterializableInSingleInstruction(OriginalC) >
IsMaterializableInSingleInstruction(C))
return {{C, P}};
diff --git a/llvm/test/CodeGen/AArch64/icmp-cst.ll b/llvm/test/CodeGen/AArch64/icmp-cst.ll
index b6f452bb42cec..b49da44920db0 100644
--- a/llvm/test/CodeGen/AArch64/icmp-cst.ll
+++ b/llvm/test/CodeGen/AArch64/icmp-cst.ll
@@ -1,687 +1,402 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
-; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 < %s | FileCheck %s --check-prefix=CHECK-SD
-; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=1 < %s | FileCheck %s --check-prefix=CHECK-GI
+; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=0 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD
+; RUN: llc -mtriple=aarch64-linux-gnu -global-isel=1 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI
define i1 @ule_11111111(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_11111111:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #4370 // =0x1112
-; CHECK-SD-NEXT: movk w8, #4369, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_11111111:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #286331153 // =0x11111111
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_11111111:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #286331153 // =0x11111111
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 286331154
ret i1 %out
}
define i1 @ule_22222222(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_22222222:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #8739 // =0x2223
-; CHECK-SD-NEXT: movk w8, #8738, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_22222222:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #572662306 // =0x22222222
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_22222222:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #572662306 // =0x22222222
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 572662307
ret i1 %out
}
define i1 @ule_33333333(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_33333333:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #13108 // =0x3334
-; CHECK-SD-NEXT: movk w8, #13107, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_33333333:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #858993459 // =0x33333333
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_33333333:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #858993459 // =0x33333333
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 858993460
ret i1 %out
}
define i1 @ule_44444444(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_44444444:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #17477 // =0x4445
-; CHECK-SD-NEXT: movk w8, #17476, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_44444444:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1145324612 // =0x44444444
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_44444444:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1145324612 // =0x44444444
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 1145324613
ret i1 %out
}
define i1 @ule_55555555(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_55555555:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #21846 // =0x5556
-; CHECK-SD-NEXT: movk w8, #21845, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_55555555:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1431655765 // =0x55555555
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_55555555:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1431655765 // =0x55555555
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 1431655766
ret i1 %out
}
define i1 @ule_66666666(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_66666666:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #26215 // =0x6667
-; CHECK-SD-NEXT: movk w8, #26214, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_66666666:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1717986918 // =0x66666666
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_66666666:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1717986918 // =0x66666666
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 1717986919
ret i1 %out
}
define i1 @ule_77777777(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_77777777:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #30584 // =0x7778
-; CHECK-SD-NEXT: movk w8, #30583, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_77777777:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #2004318071 // =0x77777777
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_77777777:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #2004318071 // =0x77777777
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, 2004318072
ret i1 %out
}
define i1 @ule_88888888(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_88888888:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #34953 // =0x8889
-; CHECK-SD-NEXT: movk w8, #34952, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_88888888:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #-2004318072 // =0x88888888
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_88888888:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #-2004318072 // =0x88888888
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, -2004318071
ret i1 %out
}
define i1 @ule_99999999(i32 noundef %in) {
-; CHECK-SD-LABEL: ule_99999999:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #39322 // =0x999a
-; CHECK-SD-NEXT: movk w8, #39321, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lo
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ule_99999999:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #-1717986919 // =0x99999999
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, ls
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ule_99999999:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #-1717986919 // =0x99999999
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, ls
+; CHECK-NEXT: ret
%out = icmp ult i32 %in, -1717986918
ret i1 %out
}
define i1 @uge_11111111(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_11111111:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #4368 // =0x1110
-; CHECK-SD-NEXT: movk w8, #4369, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_11111111:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #286331153 // =0x11111111
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_11111111:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #286331153 // =0x11111111
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 286331152
ret i1 %out
}
define i1 @uge_22222222(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_22222222:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #8737 // =0x2221
-; CHECK-SD-NEXT: movk w8, #8738, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_22222222:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #572662306 // =0x22222222
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_22222222:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #572662306 // =0x22222222
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 572662305
ret i1 %out
}
define i1 @uge_33333333(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_33333333:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #13106 // =0x3332
-; CHECK-SD-NEXT: movk w8, #13107, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_33333333:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #858993459 // =0x33333333
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_33333333:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #858993459 // =0x33333333
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 858993458
ret i1 %out
}
define i1 @uge_44444444(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_44444444:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #17475 // =0x4443
-; CHECK-SD-NEXT: movk w8, #17476, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_44444444:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1145324612 // =0x44444444
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_44444444:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1145324612 // =0x44444444
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 1145324611
ret i1 %out
}
define i1 @uge_55555555(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_55555555:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #21844 // =0x5554
-; CHECK-SD-NEXT: movk w8, #21845, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_55555555:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1431655765 // =0x55555555
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_55555555:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1431655765 // =0x55555555
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 1431655764
ret i1 %out
}
define i1 @uge_66666666(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_66666666:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #26213 // =0x6665
-; CHECK-SD-NEXT: movk w8, #26214, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_66666666:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1717986918 // =0x66666666
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_66666666:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #1717986918 // =0x66666666
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 1717986917
ret i1 %out
}
define i1 @uge_77777777(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_77777777:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #30582 // =0x7776
-; CHECK-SD-NEXT: movk w8, #30583, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_77777777:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #2004318071 // =0x77777777
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_77777777:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #2004318071 // =0x77777777
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, 2004318070
ret i1 %out
}
define i1 @uge_88888888(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_88888888:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #34951 // =0x8887
-; CHECK-SD-NEXT: movk w8, #34952, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_88888888:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #-2004318072 // =0x88888888
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_88888888:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #-2004318072 // =0x88888888
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, -2004318073
ret i1 %out
}
define i1 @uge_99999999(i32 noundef %in) {
-; CHECK-SD-LABEL: uge_99999999:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #39320 // =0x9998
-; CHECK-SD-NEXT: movk w8, #39321, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, hi
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: uge_99999999:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #-1717986919 // =0x99999999
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, hs
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: uge_99999999:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #-1717986919 // =0x99999999
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, hs
+; CHECK-NEXT: ret
%out = icmp ugt i32 %in, -1717986920
ret i1 %out
}
define i1 @sle_11111111(i32 noundef %in) {
-; CHECK-SD-LABEL: sle_11111111:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #4370 // =0x1112
-; CHECK-SD-NEXT: movk w8, #4369, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lt
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: sle_11111111:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #286331153 // =0x11111111
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, le
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: sle_11111111:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #286331153 // =0x11111111
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, le
+; CHECK-NEXT: ret
%out = icmp slt i32 %in, 286331154
ret i1 %out
}
define i1 @sle_22222222(i32 noundef %in) {
-; CHECK-SD-LABEL: sle_22222222:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #8739 // =0x2223
-; CHECK-SD-NEXT: movk w8, #8738, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lt
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: sle_22222222:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #572662306 // =0x22222222
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0, le
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: sle_22222222:
+; CHECK: // %bb.0:
+; CHECK-NEXT: mov w8, #572662306 // =0x22222222
+; CHECK-NEXT: cmp w0, w8
+; CHECK-NEXT: cset w0, le
+; CHECK-NEXT: ret
%out = icmp slt i32 %in, 572662307
ret i1 %out
}
define i1 @sle_33333333(i32 noundef %in) {
-; CHECK-SD-LABEL: sle_33333333:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: mov w8, #13108 // =0x3334
-; CHECK-SD-NEXT: movk w8, #13107, lsl #16
-; CHECK-SD-NEXT: cmp w0, w8
-; CHECK-SD-NEXT: cset w0, lt
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: sle_33333333:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #858993459 // =0x33333333
-; CHECK-GI-NEXT: cmp w0, w8
-; CHECK-GI-NEXT: cset w0,...
[truncated]
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Prefer constants that require less instructions to materialize, in both Global-ISel and Selection-DAG