[llvm] c71f914 - [AArch64] Add a phase-ordering test for dividing vscale. NFC

David Green via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 18 02:48:54 PST 2025


Author: David Green
Date: 2025-02-18T10:48:50Z
New Revision: c71f9141a970b6f6d46d27d7c26c7747dd525275

URL: https://github.com/llvm/llvm-project/commit/c71f9141a970b6f6d46d27d7c26c7747dd525275
DIFF: https://github.com/llvm/llvm-project/commit/c71f9141a970b6f6d46d27d7c26c7747dd525275.diff

LOG: [AArch64] Add a phase-ordering test for dividing vscale. NFC

See #126411 / #127055, the test isn't expected to fold in a single instcombine
iteration, needing instcombine->cse->instcombine.

Added: 
    llvm/test/Transforms/PhaseOrdering/AArch64/vscale.ll

Modified: 
    llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-counting-elems.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-counting-elems.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-counting-elems.ll
index 4e7e9eeb7250b..46ca99f4bb27b 100644
--- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-counting-elems.ll
+++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-counting-elems.ll
@@ -240,6 +240,23 @@ define i64 @cntd_all() {
 }
 
 
+define i64 @udiv() vscale_range(1, 16) {
+; CHECK-LABEL: @udiv(
+; CHECK-NEXT:    [[TMP1:%.*]] = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    [[A:%.*]] = shl nuw nsw i64 [[TMP1]], 4
+; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @llvm.vscale.i64()
+; CHECK-NEXT:    [[B:%.*]] = shl nuw nsw i64 [[TMP2]], 2
+; CHECK-NEXT:    [[TMP3:%.*]] = call range(i64 2, 65) i64 @llvm.cttz.i64(i64 [[B]], i1 true)
+; CHECK-NEXT:    [[C1:%.*]] = lshr i64 [[A]], [[TMP3]]
+; CHECK-NEXT:    ret i64 [[C1]]
+;
+  %a = call i64 @llvm.aarch64.sve.cntb(i32 31)
+  %b = call i64 @llvm.aarch64.sve.cntw(i32 31)
+  %c = udiv i64 %a, %b
+  ret i64 %c
+}
+
+
 declare i64 @llvm.aarch64.sve.cntb(i32 %pattern)
 declare i64 @llvm.aarch64.sve.cnth(i32 %pattern)
 declare i64 @llvm.aarch64.sve.cntw(i32 %pattern)

diff  --git a/llvm/test/Transforms/PhaseOrdering/AArch64/vscale.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/vscale.ll
new file mode 100644
index 0000000000000..7aa50ddf61468
--- /dev/null
+++ b/llvm/test/Transforms/PhaseOrdering/AArch64/vscale.ll
@@ -0,0 +1,15 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -passes="default<O1>" -mattr=+sve -S -o - %s | FileCheck %s
+
+target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64"
+
+define i64 @udiv() vscale_range(1, 16) {
+; CHECK-LABEL: @udiv(
+; CHECK-NEXT:    ret i64 4
+;
+  %a = call i64 @llvm.aarch64.sve.cntb(i32 31)
+  %b = call i64 @llvm.aarch64.sve.cntw(i32 31)
+  %c = udiv i64 %a, %b
+  ret i64 %c
+}


        


More information about the llvm-commits mailing list