@@ -11,9 +11,7 @@ define signext i32 @ctlz_i32(i32 signext %a) nounwind {
11
11
; RV64I: # %bb.0:
12
12
; RV64I-NEXT: slli a1, a0, 32
13
13
; RV64I-NEXT: srli a1, a1, 32
14
- ; RV64I-NEXT: slli a2, zero, 32
15
- ; RV64I-NEXT: srli a2, a2, 32
16
- ; RV64I-NEXT: beq a1, a2, .LBB0_2
14
+ ; RV64I-NEXT: beqz a1, .LBB0_2
17
15
; RV64I-NEXT: # %bb.1: # %cond.false
18
16
; RV64I-NEXT: addi sp, sp, -16
19
17
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
@@ -72,10 +70,8 @@ define signext i32 @log2_i32(i32 signext %a) nounwind {
72
70
; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
73
71
; RV64I-NEXT: slli a1, a0, 32
74
72
; RV64I-NEXT: srli a1, a1, 32
75
- ; RV64I-NEXT: slli a2, zero, 32
76
- ; RV64I-NEXT: srli a2, a2, 32
77
73
; RV64I-NEXT: li s0, 31
78
- ; RV64I-NEXT: beq a1, a2 , .LBB1_2
74
+ ; RV64I-NEXT: beqz a1, .LBB1_2
79
75
; RV64I-NEXT: # %bb.1: # %cond.false
80
76
; RV64I-NEXT: srliw a1, a0, 1
81
77
; RV64I-NEXT: or a0, a0, a1
@@ -140,10 +136,8 @@ define signext i32 @log2_ceil_i32(i32 signext %a) nounwind {
140
136
; RV64I-NEXT: addi a0, a0, -1
141
137
; RV64I-NEXT: slli a1, a0, 32
142
138
; RV64I-NEXT: srli a2, a1, 32
143
- ; RV64I-NEXT: slli a1, zero, 32
144
- ; RV64I-NEXT: srli a3, a1, 32
145
139
; RV64I-NEXT: li a1, 32
146
- ; RV64I-NEXT: beq a2, a3 , .LBB2_2
140
+ ; RV64I-NEXT: beqz a2, .LBB2_2
147
141
; RV64I-NEXT: # %bb.1: # %cond.false
148
142
; RV64I-NEXT: srliw a1, a0, 1
149
143
; RV64I-NEXT: or a0, a0, a1
@@ -237,9 +231,7 @@ define signext i32 @findLastSet_i32(i32 signext %a) nounwind {
237
231
; RV64I-NEXT: call __muldi3
238
232
; RV64I-NEXT: slli s1, s1, 32
239
233
; RV64I-NEXT: srli s1, s1, 32
240
- ; RV64I-NEXT: slli a1, zero, 32
241
- ; RV64I-NEXT: srli a1, a1, 32
242
- ; RV64I-NEXT: beq s1, a1, .LBB3_2
234
+ ; RV64I-NEXT: beqz s1, .LBB3_2
243
235
; RV64I-NEXT: # %bb.1:
244
236
; RV64I-NEXT: srliw a0, a0, 24
245
237
; RV64I-NEXT: li a1, 32
@@ -257,10 +249,8 @@ define signext i32 @findLastSet_i32(i32 signext %a) nounwind {
257
249
; RV64ZBB: # %bb.0:
258
250
; RV64ZBB-NEXT: slli a1, a0, 32
259
251
; RV64ZBB-NEXT: srli a2, a1, 32
260
- ; RV64ZBB-NEXT: slli a1, zero, 32
261
- ; RV64ZBB-NEXT: srli a3, a1, 32
262
252
; RV64ZBB-NEXT: li a1, -1
263
- ; RV64ZBB-NEXT: beq a2, a3 , .LBB3_2
253
+ ; RV64ZBB-NEXT: beqz a2, .LBB3_2
264
254
; RV64ZBB-NEXT: # %bb.1:
265
255
; RV64ZBB-NEXT: clzw a0, a0
266
256
; RV64ZBB-NEXT: xori a1, a0, 31
@@ -280,9 +270,7 @@ define i32 @ctlz_lshr_i32(i32 signext %a) {
280
270
; RV64I-NEXT: srliw a0, a0, 1
281
271
; RV64I-NEXT: slli a1, a0, 32
282
272
; RV64I-NEXT: srli a1, a1, 32
283
- ; RV64I-NEXT: slli a2, zero, 32
284
- ; RV64I-NEXT: srli a2, a2, 32
285
- ; RV64I-NEXT: beq a1, a2, .LBB4_2
273
+ ; RV64I-NEXT: beqz a1, .LBB4_2
286
274
; RV64I-NEXT: # %bb.1: # %cond.false
287
275
; RV64I-NEXT: addi sp, sp, -16
288
276
; RV64I-NEXT: .cfi_def_cfa_offset 16
@@ -421,9 +409,7 @@ define signext i32 @cttz_i32(i32 signext %a) nounwind {
421
409
; RV64I: # %bb.0:
422
410
; RV64I-NEXT: slli a1, a0, 32
423
411
; RV64I-NEXT: srli a1, a1, 32
424
- ; RV64I-NEXT: slli a2, zero, 32
425
- ; RV64I-NEXT: srli a2, a2, 32
426
- ; RV64I-NEXT: beq a1, a2, .LBB6_2
412
+ ; RV64I-NEXT: beqz a1, .LBB6_2
427
413
; RV64I-NEXT: # %bb.1: # %cond.false
428
414
; RV64I-NEXT: addi sp, sp, -16
429
415
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
@@ -538,9 +524,7 @@ define signext i32 @findFirstSet_i32(i32 signext %a) nounwind {
538
524
; RV64I-NEXT: call __muldi3
539
525
; RV64I-NEXT: slli s1, s1, 32
540
526
; RV64I-NEXT: srli s1, s1, 32
541
- ; RV64I-NEXT: slli a1, zero, 32
542
- ; RV64I-NEXT: srli a1, a1, 32
543
- ; RV64I-NEXT: beq s1, a1, .LBB8_2
527
+ ; RV64I-NEXT: beqz s1, .LBB8_2
544
528
; RV64I-NEXT: # %bb.1:
545
529
; RV64I-NEXT: srliw s0, a0, 24
546
530
; RV64I-NEXT: .LBB8_2:
@@ -555,10 +539,8 @@ define signext i32 @findFirstSet_i32(i32 signext %a) nounwind {
555
539
; RV64ZBB: # %bb.0:
556
540
; RV64ZBB-NEXT: slli a1, a0, 32
557
541
; RV64ZBB-NEXT: srli a2, a1, 32
558
- ; RV64ZBB-NEXT: slli a1, zero, 32
559
- ; RV64ZBB-NEXT: srli a3, a1, 32
560
542
; RV64ZBB-NEXT: li a1, -1
561
- ; RV64ZBB-NEXT: beq a2, a3 , .LBB8_2
543
+ ; RV64ZBB-NEXT: beqz a2, .LBB8_2
562
544
; RV64ZBB-NEXT: # %bb.1:
563
545
; RV64ZBB-NEXT: ctzw a1, a0
564
546
; RV64ZBB-NEXT: .LBB8_2:
@@ -601,11 +583,9 @@ define signext i32 @ffs_i32(i32 signext %a) nounwind {
601
583
; RV64I-NEXT: call __muldi3
602
584
; RV64I-NEXT: slli s0, s0, 32
603
585
; RV64I-NEXT: srli s0, s0, 32
604
- ; RV64I-NEXT: slli a1, zero, 32
605
- ; RV64I-NEXT: srli a2, a1, 32
606
586
; RV64I-NEXT: mv a1, a0
607
587
; RV64I-NEXT: li a0, 0
608
- ; RV64I-NEXT: beq s0, a2 , .LBB9_2
588
+ ; RV64I-NEXT: beqz s0, .LBB9_2
609
589
; RV64I-NEXT: # %bb.1:
610
590
; RV64I-NEXT: srliw a0, a1, 24
611
591
; RV64I-NEXT: addiw a0, a0, 1
@@ -619,10 +599,8 @@ define signext i32 @ffs_i32(i32 signext %a) nounwind {
619
599
; RV64ZBB: # %bb.0:
620
600
; RV64ZBB-NEXT: slli a1, a0, 32
621
601
; RV64ZBB-NEXT: srli a2, a1, 32
622
- ; RV64ZBB-NEXT: slli a1, zero, 32
623
- ; RV64ZBB-NEXT: srli a3, a1, 32
624
602
; RV64ZBB-NEXT: li a1, 0
625
- ; RV64ZBB-NEXT: beq a2, a3 , .LBB9_2
603
+ ; RV64ZBB-NEXT: beqz a2, .LBB9_2
626
604
; RV64ZBB-NEXT: # %bb.1:
627
605
; RV64ZBB-NEXT: ctzw a1, a0
628
606
; RV64ZBB-NEXT: addiw a1, a1, 1
@@ -744,8 +722,6 @@ define i1 @ctpop_i32_ult_two(i32 signext %a) nounwind {
744
722
; RV64I: # %bb.0:
745
723
; RV64I-NEXT: addi sp, sp, -16
746
724
; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
747
- ; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
748
- ; RV64I-NEXT: li s0, 2
749
725
; RV64I-NEXT: srliw a1, a0, 1
750
726
; RV64I-NEXT: lui a2, 349525
751
727
; RV64I-NEXT: addi a2, a2, 1365
@@ -768,23 +744,17 @@ define i1 @ctpop_i32_ult_two(i32 signext %a) nounwind {
768
744
; RV64I-NEXT: srliw a0, a0, 24
769
745
; RV64I-NEXT: slli a0, a0, 32
770
746
; RV64I-NEXT: srli a0, a0, 32
771
- ; RV64I-NEXT: slli s0, s0, 32
772
- ; RV64I-NEXT: srli s0, s0, 32
773
- ; RV64I-NEXT: sltu a0, a0, s0
747
+ ; RV64I-NEXT: sltiu a0, a0, 2
774
748
; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
775
- ; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
776
749
; RV64I-NEXT: addi sp, sp, 16
777
750
; RV64I-NEXT: ret
778
751
;
779
752
; RV64ZBB-LABEL: ctpop_i32_ult_two:
780
753
; RV64ZBB: # %bb.0:
781
- ; RV64ZBB-NEXT: li a1, 2
782
754
; RV64ZBB-NEXT: cpopw a0, a0
783
755
; RV64ZBB-NEXT: slli a0, a0, 32
784
756
; RV64ZBB-NEXT: srli a0, a0, 32
785
- ; RV64ZBB-NEXT: slli a1, a1, 32
786
- ; RV64ZBB-NEXT: srli a1, a1, 32
787
- ; RV64ZBB-NEXT: sltu a0, a0, a1
757
+ ; RV64ZBB-NEXT: sltiu a0, a0, 2
788
758
; RV64ZBB-NEXT: ret
789
759
%1 = call i32 @llvm.ctpop.i32 (i32 %a )
790
760
%2 = icmp ult i32 %1 , 2
0 commit comments