22; RUN: llc %s -mtriple=riscv64 -regalloc-csr-first-time-cost=0 | FileCheck %s -check-prefix=ZERO-COST
33; RUN: llc %s -mtriple=riscv64 | FileCheck %s -check-prefix=DEFAULT-COST
44
5- define fastcc void @Perl_sv_setnv (ptr %.str.54.3682 ) nounwind {
5+ define fastcc void @Perl_sv_setnv (i8 %c , ptr %.str.54.3682 ) nounwind {
66; ZERO-COST-LABEL: Perl_sv_setnv:
77; ZERO-COST: # %bb.0: # %entry
88; ZERO-COST-NEXT: addi sp, sp, -32
99; ZERO-COST-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
1010; ZERO-COST-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
1111; ZERO-COST-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
12- ; ZERO-COST-NEXT: bnez zero, .LBB0_5
12+ ; ZERO-COST-NEXT: andi a0, a0, 255
13+ ; ZERO-COST-NEXT: li a2, 2
14+ ; ZERO-COST-NEXT: blt a2, a0, .LBB0_3
1315; ZERO-COST-NEXT: # %bb.1: # %entry
16+ ; ZERO-COST-NEXT: beqz a0, .LBB0_4
17+ ; ZERO-COST-NEXT: # %bb.2: # %entry
18+ ; ZERO-COST-NEXT: mv s0, a1
1419; ZERO-COST-NEXT: li a1, 1
15- ; ZERO-COST-NEXT: bnez a1, .LBB0_6
16- ; ZERO-COST-NEXT: .LBB0_2: # %entry
17- ; ZERO-COST-NEXT: mv s0, a0
18- ; ZERO-COST-NEXT: beqz zero, .LBB0_4
19- ; ZERO-COST-NEXT: # %bb.3: # %sw.bb34.i
20+ ; ZERO-COST-NEXT: beq a0, a1, .LBB0_6
21+ ; ZERO-COST-NEXT: j .LBB0_7
22+ ; ZERO-COST-NEXT: .LBB0_3: # %entry
23+ ; ZERO-COST-NEXT: li a2, 3
24+ ; ZERO-COST-NEXT: bne a0, a2, .LBB0_5
25+ ; ZERO-COST-NEXT: .LBB0_4: # %sw.bb3
26+ ; ZERO-COST-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
27+ ; ZERO-COST-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
28+ ; ZERO-COST-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
29+ ; ZERO-COST-NEXT: addi sp, sp, 32
30+ ; ZERO-COST-NEXT: ret
31+ ; ZERO-COST-NEXT: .LBB0_5: # %entry
32+ ; ZERO-COST-NEXT: mv s0, a1
33+ ; ZERO-COST-NEXT: li a1, 12
34+ ; ZERO-COST-NEXT: bne a0, a1, .LBB0_7
35+ ; ZERO-COST-NEXT: .LBB0_6: # %sw.bb34.i
2036; ZERO-COST-NEXT: li s0, 0
21- ; ZERO-COST-NEXT: .LBB0_4 : # %Perl_sv_reftype.exit
37+ ; ZERO-COST-NEXT: .LBB0_7 : # %Perl_sv_reftype.exit
2238; ZERO-COST-NEXT: li s1, 0
2339; ZERO-COST-NEXT: li a0, 0
2440; ZERO-COST-NEXT: li a1, 0
@@ -27,30 +43,37 @@ define fastcc void @Perl_sv_setnv(ptr %.str.54.3682) nounwind {
2743; ZERO-COST-NEXT: mv a1, s0
2844; ZERO-COST-NEXT: li a2, 0
2945; ZERO-COST-NEXT: jalr s1
30- ; ZERO-COST-NEXT: .LBB0_5: # %entry
31- ; ZERO-COST-NEXT: beqz zero, .LBB0_2
32- ; ZERO-COST-NEXT: .LBB0_6: # %sw.bb3
33- ; ZERO-COST-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
34- ; ZERO-COST-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
35- ; ZERO-COST-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
36- ; ZERO-COST-NEXT: addi sp, sp, 32
37- ; ZERO-COST-NEXT: ret
3846;
3947; DEFAULT-COST-LABEL: Perl_sv_setnv:
4048; DEFAULT-COST: # %bb.0: # %entry
4149; DEFAULT-COST-NEXT: addi sp, sp, -32
4250; DEFAULT-COST-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
4351; DEFAULT-COST-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
44- ; DEFAULT-COST-NEXT: bnez zero, .LBB0_5
52+ ; DEFAULT-COST-NEXT: andi a0, a0, 255
53+ ; DEFAULT-COST-NEXT: li a2, 2
54+ ; DEFAULT-COST-NEXT: blt a2, a0, .LBB0_3
4555; DEFAULT-COST-NEXT: # %bb.1: # %entry
56+ ; DEFAULT-COST-NEXT: beqz a0, .LBB0_4
57+ ; DEFAULT-COST-NEXT: # %bb.2: # %entry
58+ ; DEFAULT-COST-NEXT: sd a1, 8(sp) # 8-byte Folded Spill
4659; DEFAULT-COST-NEXT: li a1, 1
47- ; DEFAULT-COST-NEXT: bnez a1, .LBB0_6
48- ; DEFAULT-COST-NEXT: .LBB0_2: # %entry
49- ; DEFAULT-COST-NEXT: sd a0, 8(sp) # 8-byte Folded Spill
50- ; DEFAULT-COST-NEXT: beqz zero, .LBB0_4
51- ; DEFAULT-COST-NEXT: # %bb.3: # %sw.bb34.i
60+ ; DEFAULT-COST-NEXT: beq a0, a1, .LBB0_6
61+ ; DEFAULT-COST-NEXT: j .LBB0_7
62+ ; DEFAULT-COST-NEXT: .LBB0_3: # %entry
63+ ; DEFAULT-COST-NEXT: li a2, 3
64+ ; DEFAULT-COST-NEXT: bne a0, a2, .LBB0_5
65+ ; DEFAULT-COST-NEXT: .LBB0_4: # %sw.bb3
66+ ; DEFAULT-COST-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
67+ ; DEFAULT-COST-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
68+ ; DEFAULT-COST-NEXT: addi sp, sp, 32
69+ ; DEFAULT-COST-NEXT: ret
70+ ; DEFAULT-COST-NEXT: .LBB0_5: # %entry
71+ ; DEFAULT-COST-NEXT: sd a1, 8(sp) # 8-byte Folded Spill
72+ ; DEFAULT-COST-NEXT: li a1, 12
73+ ; DEFAULT-COST-NEXT: bne a0, a1, .LBB0_7
74+ ; DEFAULT-COST-NEXT: .LBB0_6: # %sw.bb34.i
5275; DEFAULT-COST-NEXT: sd zero, 8(sp) # 8-byte Folded Spill
53- ; DEFAULT-COST-NEXT: .LBB0_4 : # %Perl_sv_reftype.exit
76+ ; DEFAULT-COST-NEXT: .LBB0_7 : # %Perl_sv_reftype.exit
5477; DEFAULT-COST-NEXT: li s0, 0
5578; DEFAULT-COST-NEXT: li a0, 0
5679; DEFAULT-COST-NEXT: li a1, 0
@@ -59,15 +82,8 @@ define fastcc void @Perl_sv_setnv(ptr %.str.54.3682) nounwind {
5982; DEFAULT-COST-NEXT: ld a1, 8(sp) # 8-byte Folded Reload
6083; DEFAULT-COST-NEXT: li a2, 0
6184; DEFAULT-COST-NEXT: jalr s0
62- ; DEFAULT-COST-NEXT: .LBB0_5: # %entry
63- ; DEFAULT-COST-NEXT: beqz zero, .LBB0_2
64- ; DEFAULT-COST-NEXT: .LBB0_6: # %sw.bb3
65- ; DEFAULT-COST-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
66- ; DEFAULT-COST-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
67- ; DEFAULT-COST-NEXT: addi sp, sp, 32
68- ; DEFAULT-COST-NEXT: ret
6985entry:
70- switch i8 0 , label %Perl_sv_reftype.exit [
86+ switch i8 %c , label %Perl_sv_reftype.exit [
7187 i8 1 , label %sw.bb4
7288 i8 12 , label %sw.bb34.i
7389 i8 3 , label %sw.bb3
0 commit comments