@@ -114,9 +114,8 @@ define i32 @utest_f64i32(double %x) {
114114; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
115115; RV32IF-NEXT: .cfi_offset ra, -4
116116; RV32IF-NEXT: call __fixunsdfdi
117+ ; RV32IF-NEXT: seqz a1, a1
117118; RV32IF-NEXT: sltiu a2, a0, -1
118- ; RV32IF-NEXT: snez a1, a1
119- ; RV32IF-NEXT: addi a1, a1, -1
120119; RV32IF-NEXT: and a1, a1, a2
121120; RV32IF-NEXT: addi a1, a1, -1
122121; RV32IF-NEXT: or a0, a1, a0
@@ -430,9 +429,8 @@ define i32 @utesth_f16i32(half %x) {
430429; RV32-NEXT: .cfi_offset ra, -4
431430; RV32-NEXT: call __extendhfsf2
432431; RV32-NEXT: call __fixunssfdi
432+ ; RV32-NEXT: seqz a1, a1
433433; RV32-NEXT: sltiu a2, a0, -1
434- ; RV32-NEXT: snez a1, a1
435- ; RV32-NEXT: addi a1, a1, -1
436434; RV32-NEXT: and a1, a1, a2
437435; RV32-NEXT: addi a1, a1, -1
438436; RV32-NEXT: or a0, a1, a0
@@ -1229,10 +1227,8 @@ define i64 @utest_f64i64(double %x) {
12291227; RV32IF-NEXT: lw a1, 20(sp)
12301228; RV32IF-NEXT: lw a2, 12(sp)
12311229; RV32IF-NEXT: lw a3, 8(sp)
1232- ; RV32IF-NEXT: seqz a4, a0
1233- ; RV32IF-NEXT: snez a5, a1
1234- ; RV32IF-NEXT: addi a5, a5, -1
1235- ; RV32IF-NEXT: and a4, a5, a4
1230+ ; RV32IF-NEXT: or a4, a1, a0
1231+ ; RV32IF-NEXT: seqz a4, a4
12361232; RV32IF-NEXT: xori a0, a0, 1
12371233; RV32IF-NEXT: or a0, a0, a1
12381234; RV32IF-NEXT: seqz a0, a0
@@ -1271,10 +1267,8 @@ define i64 @utest_f64i64(double %x) {
12711267; RV32IFD-NEXT: lw a1, 20(sp)
12721268; RV32IFD-NEXT: lw a2, 12(sp)
12731269; RV32IFD-NEXT: lw a3, 8(sp)
1274- ; RV32IFD-NEXT: seqz a4, a0
1275- ; RV32IFD-NEXT: snez a5, a1
1276- ; RV32IFD-NEXT: addi a5, a5, -1
1277- ; RV32IFD-NEXT: and a4, a5, a4
1270+ ; RV32IFD-NEXT: or a4, a1, a0
1271+ ; RV32IFD-NEXT: seqz a4, a4
12781272; RV32IFD-NEXT: xori a0, a0, 1
12791273; RV32IFD-NEXT: or a0, a0, a1
12801274; RV32IFD-NEXT: seqz a0, a0
@@ -1324,8 +1318,8 @@ define i64 @ustest_f64i64(double %x) {
13241318; RV32IF-NEXT: # %bb.4: # %entry
13251319; RV32IF-NEXT: li a0, 1
13261320; RV32IF-NEXT: .LBB20_5: # %entry
1327- ; RV32IF-NEXT: lw a4 , 8(sp)
1328- ; RV32IF-NEXT: lw a3 , 12(sp)
1321+ ; RV32IF-NEXT: lw a3 , 8(sp)
1322+ ; RV32IF-NEXT: lw a4 , 12(sp)
13291323; RV32IF-NEXT: and a5, a2, a1
13301324; RV32IF-NEXT: beqz a5, .LBB20_7
13311325; RV32IF-NEXT: # %bb.6: # %entry
@@ -1334,18 +1328,17 @@ define i64 @ustest_f64i64(double %x) {
13341328; RV32IF-NEXT: .LBB20_7:
13351329; RV32IF-NEXT: snez a1, a0
13361330; RV32IF-NEXT: .LBB20_8: # %entry
1337- ; RV32IF-NEXT: and a3 , a2, a3
1331+ ; RV32IF-NEXT: and a4 , a2, a4
13381332; RV32IF-NEXT: or a0, a0, a5
1339- ; RV32IF-NEXT: and a2, a2, a4
1333+ ; RV32IF-NEXT: and a2, a2, a3
13401334; RV32IF-NEXT: bnez a0, .LBB20_10
13411335; RV32IF-NEXT: # %bb.9:
1342- ; RV32IF-NEXT: snez a0, a3
1343- ; RV32IF-NEXT: snez a1, a2
1344- ; RV32IF-NEXT: or a1, a1, a0
1336+ ; RV32IF-NEXT: or a0, a2, a4
1337+ ; RV32IF-NEXT: snez a1, a0
13451338; RV32IF-NEXT: .LBB20_10: # %entry
13461339; RV32IF-NEXT: neg a1, a1
13471340; RV32IF-NEXT: and a0, a1, a2
1348- ; RV32IF-NEXT: and a1, a1, a3
1341+ ; RV32IF-NEXT: and a1, a1, a4
13491342; RV32IF-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
13501343; RV32IF-NEXT: addi sp, sp, 32
13511344; RV32IF-NEXT: ret
@@ -1404,8 +1397,8 @@ define i64 @ustest_f64i64(double %x) {
14041397; RV32IFD-NEXT: # %bb.4: # %entry
14051398; RV32IFD-NEXT: li a0, 1
14061399; RV32IFD-NEXT: .LBB20_5: # %entry
1407- ; RV32IFD-NEXT: lw a4 , 8(sp)
1408- ; RV32IFD-NEXT: lw a3 , 12(sp)
1400+ ; RV32IFD-NEXT: lw a3 , 8(sp)
1401+ ; RV32IFD-NEXT: lw a4 , 12(sp)
14091402; RV32IFD-NEXT: and a5, a2, a1
14101403; RV32IFD-NEXT: beqz a5, .LBB20_7
14111404; RV32IFD-NEXT: # %bb.6: # %entry
@@ -1414,18 +1407,17 @@ define i64 @ustest_f64i64(double %x) {
14141407; RV32IFD-NEXT: .LBB20_7:
14151408; RV32IFD-NEXT: snez a1, a0
14161409; RV32IFD-NEXT: .LBB20_8: # %entry
1417- ; RV32IFD-NEXT: and a3 , a2, a3
1410+ ; RV32IFD-NEXT: and a4 , a2, a4
14181411; RV32IFD-NEXT: or a0, a0, a5
1419- ; RV32IFD-NEXT: and a2, a2, a4
1412+ ; RV32IFD-NEXT: and a2, a2, a3
14201413; RV32IFD-NEXT: bnez a0, .LBB20_10
14211414; RV32IFD-NEXT: # %bb.9:
1422- ; RV32IFD-NEXT: snez a0, a3
1423- ; RV32IFD-NEXT: snez a1, a2
1424- ; RV32IFD-NEXT: or a1, a1, a0
1415+ ; RV32IFD-NEXT: or a0, a2, a4
1416+ ; RV32IFD-NEXT: snez a1, a0
14251417; RV32IFD-NEXT: .LBB20_10: # %entry
14261418; RV32IFD-NEXT: neg a1, a1
14271419; RV32IFD-NEXT: and a0, a1, a2
1428- ; RV32IFD-NEXT: and a1, a1, a3
1420+ ; RV32IFD-NEXT: and a1, a1, a4
14291421; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
14301422; RV32IFD-NEXT: addi sp, sp, 32
14311423; RV32IFD-NEXT: ret
@@ -1531,10 +1523,8 @@ define i64 @utest_f32i64(float %x) {
15311523; RV32-NEXT: lw a1, 20(sp)
15321524; RV32-NEXT: lw a2, 12(sp)
15331525; RV32-NEXT: lw a3, 8(sp)
1534- ; RV32-NEXT: seqz a4, a0
1535- ; RV32-NEXT: snez a5, a1
1536- ; RV32-NEXT: addi a5, a5, -1
1537- ; RV32-NEXT: and a4, a5, a4
1526+ ; RV32-NEXT: or a4, a1, a0
1527+ ; RV32-NEXT: seqz a4, a4
15381528; RV32-NEXT: xori a0, a0, 1
15391529; RV32-NEXT: or a0, a0, a1
15401530; RV32-NEXT: seqz a0, a0
@@ -1596,8 +1586,8 @@ define i64 @ustest_f32i64(float %x) {
15961586; RV32-NEXT: # %bb.4: # %entry
15971587; RV32-NEXT: li a0, 1
15981588; RV32-NEXT: .LBB23_5: # %entry
1599- ; RV32-NEXT: lw a4 , 8(sp)
1600- ; RV32-NEXT: lw a3 , 12(sp)
1589+ ; RV32-NEXT: lw a3 , 8(sp)
1590+ ; RV32-NEXT: lw a4 , 12(sp)
16011591; RV32-NEXT: and a5, a2, a1
16021592; RV32-NEXT: beqz a5, .LBB23_7
16031593; RV32-NEXT: # %bb.6: # %entry
@@ -1606,18 +1596,17 @@ define i64 @ustest_f32i64(float %x) {
16061596; RV32-NEXT: .LBB23_7:
16071597; RV32-NEXT: snez a1, a0
16081598; RV32-NEXT: .LBB23_8: # %entry
1609- ; RV32-NEXT: and a3 , a2, a3
1599+ ; RV32-NEXT: and a4 , a2, a4
16101600; RV32-NEXT: or a0, a0, a5
1611- ; RV32-NEXT: and a2, a2, a4
1601+ ; RV32-NEXT: and a2, a2, a3
16121602; RV32-NEXT: bnez a0, .LBB23_10
16131603; RV32-NEXT: # %bb.9:
1614- ; RV32-NEXT: snez a0, a3
1615- ; RV32-NEXT: snez a1, a2
1616- ; RV32-NEXT: or a1, a1, a0
1604+ ; RV32-NEXT: or a0, a2, a4
1605+ ; RV32-NEXT: snez a1, a0
16171606; RV32-NEXT: .LBB23_10: # %entry
16181607; RV32-NEXT: neg a1, a1
16191608; RV32-NEXT: and a0, a1, a2
1620- ; RV32-NEXT: and a1, a1, a3
1609+ ; RV32-NEXT: and a1, a1, a4
16211610; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
16221611; RV32-NEXT: addi sp, sp, 32
16231612; RV32-NEXT: ret
@@ -1783,10 +1772,8 @@ define i64 @utesth_f16i64(half %x) {
17831772; RV32-NEXT: lw a1, 20(sp)
17841773; RV32-NEXT: lw a2, 12(sp)
17851774; RV32-NEXT: lw a3, 8(sp)
1786- ; RV32-NEXT: seqz a4, a0
1787- ; RV32-NEXT: snez a5, a1
1788- ; RV32-NEXT: addi a5, a5, -1
1789- ; RV32-NEXT: and a4, a5, a4
1775+ ; RV32-NEXT: or a4, a1, a0
1776+ ; RV32-NEXT: seqz a4, a4
17901777; RV32-NEXT: xori a0, a0, 1
17911778; RV32-NEXT: or a0, a0, a1
17921779; RV32-NEXT: seqz a0, a0
@@ -1850,8 +1837,8 @@ define i64 @ustest_f16i64(half %x) {
18501837; RV32-NEXT: # %bb.4: # %entry
18511838; RV32-NEXT: li a0, 1
18521839; RV32-NEXT: .LBB26_5: # %entry
1853- ; RV32-NEXT: lw a4 , 8(sp)
1854- ; RV32-NEXT: lw a3 , 12(sp)
1840+ ; RV32-NEXT: lw a3 , 8(sp)
1841+ ; RV32-NEXT: lw a4 , 12(sp)
18551842; RV32-NEXT: and a5, a2, a1
18561843; RV32-NEXT: beqz a5, .LBB26_7
18571844; RV32-NEXT: # %bb.6: # %entry
@@ -1860,18 +1847,17 @@ define i64 @ustest_f16i64(half %x) {
18601847; RV32-NEXT: .LBB26_7:
18611848; RV32-NEXT: snez a1, a0
18621849; RV32-NEXT: .LBB26_8: # %entry
1863- ; RV32-NEXT: and a3 , a2, a3
1850+ ; RV32-NEXT: and a4 , a2, a4
18641851; RV32-NEXT: or a0, a0, a5
1865- ; RV32-NEXT: and a2, a2, a4
1852+ ; RV32-NEXT: and a2, a2, a3
18661853; RV32-NEXT: bnez a0, .LBB26_10
18671854; RV32-NEXT: # %bb.9:
1868- ; RV32-NEXT: snez a0, a3
1869- ; RV32-NEXT: snez a1, a2
1870- ; RV32-NEXT: or a1, a1, a0
1855+ ; RV32-NEXT: or a0, a2, a4
1856+ ; RV32-NEXT: snez a1, a0
18711857; RV32-NEXT: .LBB26_10: # %entry
18721858; RV32-NEXT: neg a1, a1
18731859; RV32-NEXT: and a0, a1, a2
1874- ; RV32-NEXT: and a1, a1, a3
1860+ ; RV32-NEXT: and a1, a1, a4
18751861; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
18761862; RV32-NEXT: addi sp, sp, 32
18771863; RV32-NEXT: ret
@@ -3087,10 +3073,8 @@ define i64 @utest_f64i64_mm(double %x) {
30873073; RV32IF-NEXT: lw a1, 20(sp)
30883074; RV32IF-NEXT: lw a2, 12(sp)
30893075; RV32IF-NEXT: lw a3, 8(sp)
3090- ; RV32IF-NEXT: seqz a4, a0
3091- ; RV32IF-NEXT: snez a5, a1
3092- ; RV32IF-NEXT: addi a5, a5, -1
3093- ; RV32IF-NEXT: and a4, a5, a4
3076+ ; RV32IF-NEXT: or a4, a1, a0
3077+ ; RV32IF-NEXT: seqz a4, a4
30943078; RV32IF-NEXT: xori a0, a0, 1
30953079; RV32IF-NEXT: or a0, a0, a1
30963080; RV32IF-NEXT: seqz a0, a0
@@ -3129,10 +3113,8 @@ define i64 @utest_f64i64_mm(double %x) {
31293113; RV32IFD-NEXT: lw a1, 20(sp)
31303114; RV32IFD-NEXT: lw a2, 12(sp)
31313115; RV32IFD-NEXT: lw a3, 8(sp)
3132- ; RV32IFD-NEXT: seqz a4, a0
3133- ; RV32IFD-NEXT: snez a5, a1
3134- ; RV32IFD-NEXT: addi a5, a5, -1
3135- ; RV32IFD-NEXT: and a4, a5, a4
3116+ ; RV32IFD-NEXT: or a4, a1, a0
3117+ ; RV32IFD-NEXT: seqz a4, a4
31363118; RV32IFD-NEXT: xori a0, a0, 1
31373119; RV32IFD-NEXT: or a0, a0, a1
31383120; RV32IFD-NEXT: seqz a0, a0
@@ -3345,10 +3327,8 @@ define i64 @utest_f32i64_mm(float %x) {
33453327; RV32-NEXT: lw a1, 20(sp)
33463328; RV32-NEXT: lw a2, 12(sp)
33473329; RV32-NEXT: lw a3, 8(sp)
3348- ; RV32-NEXT: seqz a4, a0
3349- ; RV32-NEXT: snez a5, a1
3350- ; RV32-NEXT: addi a5, a5, -1
3351- ; RV32-NEXT: and a4, a5, a4
3330+ ; RV32-NEXT: or a4, a1, a0
3331+ ; RV32-NEXT: seqz a4, a4
33523332; RV32-NEXT: xori a0, a0, 1
33533333; RV32-NEXT: or a0, a0, a1
33543334; RV32-NEXT: seqz a0, a0
@@ -3570,10 +3550,8 @@ define i64 @utesth_f16i64_mm(half %x) {
35703550; RV32-NEXT: lw a1, 20(sp)
35713551; RV32-NEXT: lw a2, 12(sp)
35723552; RV32-NEXT: lw a3, 8(sp)
3573- ; RV32-NEXT: seqz a4, a0
3574- ; RV32-NEXT: snez a5, a1
3575- ; RV32-NEXT: addi a5, a5, -1
3576- ; RV32-NEXT: and a4, a5, a4
3553+ ; RV32-NEXT: or a4, a1, a0
3554+ ; RV32-NEXT: seqz a4, a4
35773555; RV32-NEXT: xori a0, a0, 1
35783556; RV32-NEXT: or a0, a0, a1
35793557; RV32-NEXT: seqz a0, a0
0 commit comments