@@ -40,6 +40,55 @@ define i64 @sme_cntsd() {
4040 ret i64 %v
4141}
4242
43+ define i64 @sme_cntsb_mul () {
44+ ; CHECK-LABEL: sme_cntsb_mul:
45+ ; CHECK: // %bb.0:
46+ ; CHECK-NEXT: rdsvl x8, #1
47+ ; CHECK-NEXT: lsl x0, x8, #1
48+ ; CHECK-NEXT: ret
49+ %v = call i64 @llvm.aarch64.sme.cntsb ()
50+ %res = mul i64 %v , 2
51+ ret i64 %res
52+ }
53+
54+ define i64 @sme_cntsh_mul () {
55+ ; CHECK-LABEL: sme_cntsh_mul:
56+ ; CHECK: // %bb.0:
57+ ; CHECK-NEXT: rdsvl x8, #1
58+ ; CHECK-NEXT: lsr x8, x8, #1
59+ ; CHECK-NEXT: add x0, x8, x8, lsl #2
60+ ; CHECK-NEXT: ret
61+ %v = call i64 @llvm.aarch64.sme.cntsh ()
62+ %res = mul i64 %v , 5
63+ ret i64 %res
64+ }
65+
66+ define i64 @sme_cntsw_mul () {
67+ ; CHECK-LABEL: sme_cntsw_mul:
68+ ; CHECK: // %bb.0:
69+ ; CHECK-NEXT: rdsvl x8, #1
70+ ; CHECK-NEXT: lsr x8, x8, #2
71+ ; CHECK-NEXT: lsl x9, x8, #3
72+ ; CHECK-NEXT: sub x0, x9, x8
73+ ; CHECK-NEXT: ret
74+ %v = call i64 @llvm.aarch64.sme.cntsw ()
75+ %res = mul i64 %v , 7
76+ ret i64 %res
77+ }
78+
79+ define i64 @sme_cntsd_mul () {
80+ ; CHECK-LABEL: sme_cntsd_mul:
81+ ; CHECK: // %bb.0:
82+ ; CHECK-NEXT: rdsvl x8, #1
83+ ; CHECK-NEXT: lsr x8, x8, #3
84+ ; CHECK-NEXT: add x8, x8, x8, lsl #1
85+ ; CHECK-NEXT: lsl x0, x8, #2
86+ ; CHECK-NEXT: ret
87+ %v = call i64 @llvm.aarch64.sme.cntsd ()
88+ %res = mul i64 %v , 12
89+ ret i64 %res
90+ }
91+
4392declare i64 @llvm.aarch64.sme.cntsb ()
4493declare i64 @llvm.aarch64.sme.cntsh ()
4594declare i64 @llvm.aarch64.sme.cntsw ()
0 commit comments