Skip to content

Commit 140b571

Browse files
committed
Pre-commit test
1 parent 1943c9e commit 140b571

File tree

2 files changed

+86
-18
lines changed

2 files changed

+86
-18
lines changed

llvm/test/CodeGen/RISCV/rv32zbs.ll

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,40 @@ define i32 @bclr_i32_no_mask(i32 %a, i32 %b) nounwind {
4545
ret i32 %and1
4646
}
4747

48+
define i32 @bclr_i32_mask_multiple(i32 %a, i32 %b, i32 %shamt) nounwind {
49+
; RV32I-LABEL: bclr_i32_mask_multiple:
50+
; RV32I: # %bb.0:
51+
; RV32I-NEXT: li a3, 1
52+
; RV32I-NEXT: sll a2, a3, a2
53+
; RV32I-NEXT: not a3, a2
54+
; RV32I-NEXT: and a0, a3, a0
55+
; RV32I-NEXT: or a1, a1, a2
56+
; RV32I-NEXT: add a0, a0, a1
57+
; RV32I-NEXT: ret
58+
;
59+
; RV32ZBSNOZBB-LABEL: bclr_i32_mask_multiple:
60+
; RV32ZBSNOZBB: # %bb.0:
61+
; RV32ZBSNOZBB-NEXT: bclr a0, a0, a2
62+
; RV32ZBSNOZBB-NEXT: bset a1, a1, a2
63+
; RV32ZBSNOZBB-NEXT: add a0, a0, a1
64+
; RV32ZBSNOZBB-NEXT: ret
65+
;
66+
; RV32ZBSZBB-LABEL: bclr_i32_mask_multiple:
67+
; RV32ZBSZBB: # %bb.0:
68+
; RV32ZBSZBB-NEXT: andi a3, a2, 63
69+
; RV32ZBSZBB-NEXT: bclr a0, a0, a3
70+
; RV32ZBSZBB-NEXT: bset a1, a1, a2
71+
; RV32ZBSZBB-NEXT: add a0, a0, a1
72+
; RV32ZBSZBB-NEXT: ret
73+
%shamt_masked = and i32 %shamt, 63
74+
%shl = shl nuw i32 1, %shamt_masked
75+
%neg = xor i32 %shl, -1
76+
%and = and i32 %neg, %a
77+
%or = or i32 %b, %shl
78+
%c = add i32 %and, %or
79+
ret i32 %c
80+
}
81+
4882
define i64 @bclr_i64(i64 %a, i64 %b) nounwind {
4983
; RV32I-LABEL: bclr_i64:
5084
; RV32I: # %bb.0:
@@ -301,17 +335,17 @@ define i64 @bext_i64(i64 %a, i64 %b) nounwind {
301335
; CHECK: # %bb.0:
302336
; CHECK-NEXT: andi a3, a2, 63
303337
; CHECK-NEXT: addi a4, a3, -32
304-
; CHECK-NEXT: bltz a4, .LBB12_2
338+
; CHECK-NEXT: bltz a4, .LBB13_2
305339
; CHECK-NEXT: # %bb.1:
306340
; CHECK-NEXT: srl a0, a1, a3
307-
; CHECK-NEXT: j .LBB12_3
308-
; CHECK-NEXT: .LBB12_2:
341+
; CHECK-NEXT: j .LBB13_3
342+
; CHECK-NEXT: .LBB13_2:
309343
; CHECK-NEXT: srl a0, a0, a2
310344
; CHECK-NEXT: slli a1, a1, 1
311345
; CHECK-NEXT: not a2, a3
312346
; CHECK-NEXT: sll a1, a1, a2
313347
; CHECK-NEXT: or a0, a0, a1
314-
; CHECK-NEXT: .LBB12_3:
348+
; CHECK-NEXT: .LBB13_3:
315349
; CHECK-NEXT: andi a0, a0, 1
316350
; CHECK-NEXT: li a1, 0
317351
; CHECK-NEXT: ret
@@ -789,17 +823,17 @@ define i64 @bset_trailing_ones_i64_mask(i64 %a) nounwind {
789823
; CHECK-NEXT: li a3, -1
790824
; CHECK-NEXT: addi a1, a2, -32
791825
; CHECK-NEXT: sll a0, a3, a0
792-
; CHECK-NEXT: bltz a1, .LBB43_2
826+
; CHECK-NEXT: bltz a1, .LBB44_2
793827
; CHECK-NEXT: # %bb.1:
794828
; CHECK-NEXT: sll a2, a3, a2
795-
; CHECK-NEXT: j .LBB43_3
796-
; CHECK-NEXT: .LBB43_2:
829+
; CHECK-NEXT: j .LBB44_3
830+
; CHECK-NEXT: .LBB44_2:
797831
; CHECK-NEXT: not a2, a2
798832
; CHECK-NEXT: lui a3, 524288
799833
; CHECK-NEXT: addi a3, a3, -1
800834
; CHECK-NEXT: srl a2, a3, a2
801835
; CHECK-NEXT: or a2, a0, a2
802-
; CHECK-NEXT: .LBB43_3:
836+
; CHECK-NEXT: .LBB44_3:
803837
; CHECK-NEXT: srai a1, a1, 31
804838
; CHECK-NEXT: and a0, a1, a0
805839
; CHECK-NEXT: not a1, a2
@@ -817,17 +851,17 @@ define i64 @bset_trailing_ones_i64_no_mask(i64 %a) nounwind {
817851
; CHECK-NEXT: li a1, -1
818852
; CHECK-NEXT: addi a2, a0, -32
819853
; CHECK-NEXT: sll a1, a1, a0
820-
; CHECK-NEXT: bltz a2, .LBB44_2
854+
; CHECK-NEXT: bltz a2, .LBB45_2
821855
; CHECK-NEXT: # %bb.1:
822856
; CHECK-NEXT: mv a0, a1
823-
; CHECK-NEXT: j .LBB44_3
824-
; CHECK-NEXT: .LBB44_2:
857+
; CHECK-NEXT: j .LBB45_3
858+
; CHECK-NEXT: .LBB45_2:
825859
; CHECK-NEXT: not a0, a0
826860
; CHECK-NEXT: lui a3, 524288
827861
; CHECK-NEXT: addi a3, a3, -1
828862
; CHECK-NEXT: srl a0, a3, a0
829863
; CHECK-NEXT: or a0, a1, a0
830-
; CHECK-NEXT: .LBB44_3:
864+
; CHECK-NEXT: .LBB45_3:
831865
; CHECK-NEXT: srai a2, a2, 31
832866
; CHECK-NEXT: and a2, a2, a1
833867
; CHECK-NEXT: not a1, a0

llvm/test/CodeGen/RISCV/rv64zbs.ll

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
33
; RUN: | FileCheck %s -check-prefixes=CHECK,RV64I
44
; RUN: llc -mtriple=riscv64 -mattr=+zbs -verify-machineinstrs < %s \
5-
; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBS
5+
; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBS,RV64ZBSNOZBB
66
; RUN: llc -mtriple=riscv64 -mattr=+zbs,+zbb -verify-machineinstrs < %s \
7-
; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBS
7+
; RUN: | FileCheck %s -check-prefixes=CHECK,RV64ZBS,RV64ZBSZBB
88

99
define signext i32 @bclr_i32(i32 signext %a, i32 signext %b) nounwind {
1010
; RV64I-LABEL: bclr_i32:
@@ -110,6 +110,40 @@ define i64 @bclr_i64_no_mask(i64 %a, i64 %b) nounwind {
110110
ret i64 %and1
111111
}
112112

113+
define i64 @bclr_i64_mask_multiple(i64 %a, i64 %b, i64 %shamt) nounwind {
114+
; RV64I-LABEL: bclr_i64_mask_multiple:
115+
; RV64I: # %bb.0:
116+
; RV64I-NEXT: li a3, 1
117+
; RV64I-NEXT: sll a2, a3, a2
118+
; RV64I-NEXT: not a3, a2
119+
; RV64I-NEXT: and a0, a3, a0
120+
; RV64I-NEXT: or a1, a1, a2
121+
; RV64I-NEXT: add a0, a0, a1
122+
; RV64I-NEXT: ret
123+
;
124+
; RV64ZBSNOZBB-LABEL: bclr_i64_mask_multiple:
125+
; RV64ZBSNOZBB: # %bb.0:
126+
; RV64ZBSNOZBB-NEXT: bclr a0, a0, a2
127+
; RV64ZBSNOZBB-NEXT: bset a1, a1, a2
128+
; RV64ZBSNOZBB-NEXT: add a0, a0, a1
129+
; RV64ZBSNOZBB-NEXT: ret
130+
;
131+
; RV64ZBSZBB-LABEL: bclr_i64_mask_multiple:
132+
; RV64ZBSZBB: # %bb.0:
133+
; RV64ZBSZBB-NEXT: andi a3, a2, 63
134+
; RV64ZBSZBB-NEXT: bclr a0, a0, a3
135+
; RV64ZBSZBB-NEXT: bset a1, a1, a2
136+
; RV64ZBSZBB-NEXT: add a0, a0, a1
137+
; RV64ZBSZBB-NEXT: ret
138+
%shamt_masked = and i64 %shamt, 63
139+
%shl = shl nuw i64 1, %shamt_masked
140+
%neg = xor i64 %shl, -1
141+
%and = and i64 %neg, %a
142+
%or = or i64 %b, %shl
143+
%c = add i64 %and, %or
144+
ret i64 %c
145+
}
146+
113147
define signext i32 @bset_i32(i32 signext %a, i32 signext %b) nounwind {
114148
; RV64I-LABEL: bset_i32:
115149
; RV64I: # %bb.0:
@@ -372,19 +406,19 @@ define void @bext_i32_trunc(i32 signext %0, i32 signext %1) {
372406
; RV64I: # %bb.0:
373407
; RV64I-NEXT: srlw a0, a0, a1
374408
; RV64I-NEXT: andi a0, a0, 1
375-
; RV64I-NEXT: beqz a0, .LBB19_2
409+
; RV64I-NEXT: beqz a0, .LBB20_2
376410
; RV64I-NEXT: # %bb.1:
377411
; RV64I-NEXT: ret
378-
; RV64I-NEXT: .LBB19_2:
412+
; RV64I-NEXT: .LBB20_2:
379413
; RV64I-NEXT: tail bar
380414
;
381415
; RV64ZBS-LABEL: bext_i32_trunc:
382416
; RV64ZBS: # %bb.0:
383417
; RV64ZBS-NEXT: bext a0, a0, a1
384-
; RV64ZBS-NEXT: beqz a0, .LBB19_2
418+
; RV64ZBS-NEXT: beqz a0, .LBB20_2
385419
; RV64ZBS-NEXT: # %bb.1:
386420
; RV64ZBS-NEXT: ret
387-
; RV64ZBS-NEXT: .LBB19_2:
421+
; RV64ZBS-NEXT: .LBB20_2:
388422
; RV64ZBS-NEXT: tail bar
389423
%3 = shl i32 1, %1
390424
%4 = and i32 %3, %0

0 commit comments

Comments
 (0)