[llvm] [AArch64] - Fold and and cmp into tst (PR #110347)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 30 23:32:10 PDT 2024
================
@@ -0,0 +1,74 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -O1 -mtriple=aarch64 | FileCheck %s
+
+define i1 @lt2_u8(i8 %0) {
+; CHECK-LABEL: lt2_u8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: tst w0, #0xfe
+; CHECK-NEXT: cset w0, eq
+; CHECK-NEXT: ret
+ %2 = icmp ult i8 %0, 2
+ ret i1 %2
+}
+
+define i1 @lt4_u8(i8 %0) {
+; CHECK-LABEL: lt4_u8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: tst w0, #0xfc
+; CHECK-NEXT: cset w0, eq
+; CHECK-NEXT: ret
+ %2 = icmp ult i8 %0, 4
+ ret i1 %2
+}
+
+define i1 @lt8_u8(i8 %0) {
+; CHECK-LABEL: lt8_u8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: tst w0, #0xf8
+; CHECK-NEXT: cset w0, eq
+; CHECK-NEXT: ret
+ %2 = icmp ult i8 %0, 8
+ ret i1 %2
+}
+
+define i1 @lt16_u8(i8 %0) {
+; CHECK-LABEL: lt16_u8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: tst w0, #0xf0
+; CHECK-NEXT: cset w0, eq
+; CHECK-NEXT: ret
+ %2 = icmp ult i8 %0, 16
+ ret i1 %2
+}
+
+define i1 @lt32_u8(i8 %0) {
+; CHECK-LABEL: lt32_u8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: tst w0, #0xe0
+; CHECK-NEXT: cset w0, eq
+; CHECK-NEXT: ret
+ %2 = icmp ult i8 %0, 32
+ ret i1 %2
+}
+
+define i1 @lt64_u8(i8 %0) {
----------------
davemgreen wrote:
Is it worth adding a test with i32/i64 input and an explicit `and`?
https://github.com/llvm/llvm-project/pull/110347
More information about the llvm-commits
mailing list