Skip to content

Commit d42f5eb

Browse files
committed
[AArch64] Add another switch clustering test with power-of-2 constants.
Adds more test coverage for #139736.
1 parent ffd0f5f commit d42f5eb

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

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

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,3 +899,90 @@ other.dst:
899899
pow2.dst:
900900
ret void
901901
}
902+
903+
define void @switch_large_enough_for_clustering(i32 %x, ptr %dst) {
904+
; CHECK-LABEL: switch_large_enough_for_clustering:
905+
; CHECK: ; %bb.0: ; %entry
906+
; CHECK-NEXT: cmp w0, #1
907+
; CHECK-NEXT: b.le LBB12_5
908+
; CHECK-NEXT: ; %bb.1: ; %entry
909+
; CHECK-NEXT: cmp w0, #7
910+
; CHECK-NEXT: b.eq LBB12_9
911+
; CHECK-NEXT: ; %bb.2: ; %entry
912+
; CHECK-NEXT: cmp w0, #4
913+
; CHECK-NEXT: b.eq LBB12_7
914+
; CHECK-NEXT: ; %bb.3: ; %entry
915+
; CHECK-NEXT: cmp w0, #2
916+
; CHECK-NEXT: b.eq LBB12_8
917+
; CHECK-NEXT: LBB12_4: ; %exit
918+
; CHECK-NEXT: ret
919+
; CHECK-NEXT: LBB12_5: ; %entry
920+
; CHECK-NEXT: cbz w0, LBB12_8
921+
; CHECK-NEXT: ; %bb.6: ; %entry
922+
; CHECK-NEXT: cmp w0, #1
923+
; CHECK-NEXT: b.ne LBB12_4
924+
; CHECK-NEXT: LBB12_7: ; %succ.2
925+
; CHECK-NEXT: str wzr, [x1]
926+
; CHECK-NEXT: ret
927+
; CHECK-NEXT: LBB12_8: ; %succ.1
928+
; CHECK-NEXT: strb wzr, [x1]
929+
; CHECK-NEXT: ret
930+
; CHECK-NEXT: LBB12_9: ; %succ.3
931+
; CHECK-NEXT: strh wzr, [x1]
932+
; CHECK-NEXT: ret
933+
;
934+
; GISEL-LABEL: switch_large_enough_for_clustering:
935+
; GISEL: ; %bb.0: ; %entry
936+
; GISEL-NEXT: cmp w0, #2
937+
; GISEL-NEXT: b.lt LBB12_5
938+
; GISEL-NEXT: ; %bb.1: ; %entry
939+
; GISEL-NEXT: cmp w0, #7
940+
; GISEL-NEXT: b.eq LBB12_9
941+
; GISEL-NEXT: ; %bb.2: ; %entry
942+
; GISEL-NEXT: cmp w0, #4
943+
; GISEL-NEXT: b.eq LBB12_7
944+
; GISEL-NEXT: ; %bb.3: ; %entry
945+
; GISEL-NEXT: cmp w0, #2
946+
; GISEL-NEXT: b.eq LBB12_8
947+
; GISEL-NEXT: LBB12_4: ; %exit
948+
; GISEL-NEXT: ret
949+
; GISEL-NEXT: LBB12_5: ; %entry
950+
; GISEL-NEXT: cbz w0, LBB12_8
951+
; GISEL-NEXT: ; %bb.6: ; %entry
952+
; GISEL-NEXT: cmp w0, #1
953+
; GISEL-NEXT: b.ne LBB12_4
954+
; GISEL-NEXT: LBB12_7: ; %succ.2
955+
; GISEL-NEXT: str wzr, [x1]
956+
; GISEL-NEXT: ret
957+
; GISEL-NEXT: LBB12_8: ; %succ.1
958+
; GISEL-NEXT: strb wzr, [x1]
959+
; GISEL-NEXT: ret
960+
; GISEL-NEXT: LBB12_9: ; %succ.3
961+
; GISEL-NEXT: strh wzr, [x1]
962+
; GISEL-NEXT: ret
963+
entry:
964+
switch i32 %x, label %exit [
965+
i32 0, label %succ.1
966+
i32 2, label %succ.1
967+
i32 1, label %succ.2
968+
i32 4, label %succ.2
969+
i32 7, label %succ.3
970+
]
971+
972+
succ.1:
973+
store i8 0, ptr %dst
974+
br label %exit
975+
976+
succ.2:
977+
call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 4, i1 false)
978+
br label %exit
979+
980+
succ.3:
981+
call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 2, i1 false)
982+
br label %exit
983+
984+
exit:
985+
ret void
986+
}
987+
988+
declare void @llvm.memset.p0.i64(ptr writeonly captures(none), i8, i64, i1 immarg)

0 commit comments

Comments
 (0)