[llvm] d42f5eb - [AArch64] Add another switch clustering test with power-of-2 constants.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 26 13:52:19 PDT 2025


Author: Florian Hahn
Date: 2025-08-26T21:51:53+01:00
New Revision: d42f5eb5e73b8ae683da042ad16dc6047bc18348

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

LOG: [AArch64] Add another switch clustering test with power-of-2 constants.

Adds more test coverage for
https://github.com/llvm/llvm-project/pull/139736.

Added: 
    

Modified: 
    llvm/test/CodeGen/AArch64/switch-cases-to-branch-and.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AArch64/switch-cases-to-branch-and.ll b/llvm/test/CodeGen/AArch64/switch-cases-to-branch-and.ll
index e99ba4843c452..775ab3fe110e0 100644
--- a/llvm/test/CodeGen/AArch64/switch-cases-to-branch-and.ll
+++ b/llvm/test/CodeGen/AArch64/switch-cases-to-branch-and.ll
@@ -899,3 +899,90 @@ other.dst:
 pow2.dst:
   ret void
 }
+
+define void @switch_large_enough_for_clustering(i32 %x, ptr %dst) {
+; CHECK-LABEL: switch_large_enough_for_clustering:
+; CHECK:       ; %bb.0: ; %entry
+; CHECK-NEXT:    cmp w0, #1
+; CHECK-NEXT:    b.le LBB12_5
+; CHECK-NEXT:  ; %bb.1: ; %entry
+; CHECK-NEXT:    cmp w0, #7
+; CHECK-NEXT:    b.eq LBB12_9
+; CHECK-NEXT:  ; %bb.2: ; %entry
+; CHECK-NEXT:    cmp w0, #4
+; CHECK-NEXT:    b.eq LBB12_7
+; CHECK-NEXT:  ; %bb.3: ; %entry
+; CHECK-NEXT:    cmp w0, #2
+; CHECK-NEXT:    b.eq LBB12_8
+; CHECK-NEXT:  LBB12_4: ; %exit
+; CHECK-NEXT:    ret
+; CHECK-NEXT:  LBB12_5: ; %entry
+; CHECK-NEXT:    cbz w0, LBB12_8
+; CHECK-NEXT:  ; %bb.6: ; %entry
+; CHECK-NEXT:    cmp w0, #1
+; CHECK-NEXT:    b.ne LBB12_4
+; CHECK-NEXT:  LBB12_7: ; %succ.2
+; CHECK-NEXT:    str wzr, [x1]
+; CHECK-NEXT:    ret
+; CHECK-NEXT:  LBB12_8: ; %succ.1
+; CHECK-NEXT:    strb wzr, [x1]
+; CHECK-NEXT:    ret
+; CHECK-NEXT:  LBB12_9: ; %succ.3
+; CHECK-NEXT:    strh wzr, [x1]
+; CHECK-NEXT:    ret
+;
+; GISEL-LABEL: switch_large_enough_for_clustering:
+; GISEL:       ; %bb.0: ; %entry
+; GISEL-NEXT:    cmp w0, #2
+; GISEL-NEXT:    b.lt LBB12_5
+; GISEL-NEXT:  ; %bb.1: ; %entry
+; GISEL-NEXT:    cmp w0, #7
+; GISEL-NEXT:    b.eq LBB12_9
+; GISEL-NEXT:  ; %bb.2: ; %entry
+; GISEL-NEXT:    cmp w0, #4
+; GISEL-NEXT:    b.eq LBB12_7
+; GISEL-NEXT:  ; %bb.3: ; %entry
+; GISEL-NEXT:    cmp w0, #2
+; GISEL-NEXT:    b.eq LBB12_8
+; GISEL-NEXT:  LBB12_4: ; %exit
+; GISEL-NEXT:    ret
+; GISEL-NEXT:  LBB12_5: ; %entry
+; GISEL-NEXT:    cbz w0, LBB12_8
+; GISEL-NEXT:  ; %bb.6: ; %entry
+; GISEL-NEXT:    cmp w0, #1
+; GISEL-NEXT:    b.ne LBB12_4
+; GISEL-NEXT:  LBB12_7: ; %succ.2
+; GISEL-NEXT:    str wzr, [x1]
+; GISEL-NEXT:    ret
+; GISEL-NEXT:  LBB12_8: ; %succ.1
+; GISEL-NEXT:    strb wzr, [x1]
+; GISEL-NEXT:    ret
+; GISEL-NEXT:  LBB12_9: ; %succ.3
+; GISEL-NEXT:    strh wzr, [x1]
+; GISEL-NEXT:    ret
+entry:
+  switch i32 %x, label %exit [
+    i32 0, label %succ.1
+    i32 2, label %succ.1
+    i32 1, label %succ.2
+    i32 4, label %succ.2
+    i32 7, label %succ.3
+  ]
+
+succ.1:
+  store i8 0, ptr %dst
+  br label %exit
+
+succ.2:
+  call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 4, i1 false)
+  br label %exit
+
+succ.3:
+  call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 2, i1 false)
+  br label %exit
+
+exit:
+  ret void
+}
+
+declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg)


        


More information about the llvm-commits mailing list