Skip to content

Commit a456885

Browse files
authored
[SelectionDAG] Allow FREEZE to be hoisted before integer SETCC. (#84241)
Teach canCreateUndefOrPoison that ISD::SETCC with integer operands can never create undef/poison. FP SETCC is more complicated and will be handled in a future patch. Teach isGuaranteedNotToBeUndefOrPoison that ISD::CONDCODE is not poison/undef. Its a special constant only used by setcc/select_cc like nodes. This is needed since the hoisting will only hoist if exactly one operand might be poison. setcc has 3 operand including the condition code. Recovers some regression from #84232.
1 parent 5a95378 commit a456885

File tree

7 files changed

+128
-147
lines changed

7 files changed

+128
-147
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4998,6 +4998,7 @@ bool SelectionDAG::isGuaranteedNotToBeUndefOrPoison(SDValue Op,
49984998
return true;
49994999

50005000
switch (Opcode) {
5001+
case ISD::CONDCODE:
50015002
case ISD::VALUETYPE:
50025003
case ISD::FrameIndex:
50035004
case ISD::TargetFrameIndex:
@@ -5090,6 +5091,11 @@ bool SelectionDAG::canCreateUndefOrPoison(SDValue Op, const APInt &DemandedElts,
50905091
case ISD::BUILD_PAIR:
50915092
return false;
50925093

5094+
case ISD::SETCC:
5095+
// Integer setcc cannot create undef or poison.
5096+
// FIXME: Support FP.
5097+
return !Op.getOperand(0).getValueType().isInteger();
5098+
50935099
// Matches hasPoisonGeneratingFlags().
50945100
case ISD::ZERO_EXTEND:
50955101
return ConsiderFlags && Op->getFlags().hasNonNeg();

llvm/test/CodeGen/RISCV/alu64.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ define i64 @sltiu(i64 %a) nounwind {
5757
;
5858
; RV32I-LABEL: sltiu:
5959
; RV32I: # %bb.0:
60+
; RV32I-NEXT: seqz a1, a1
6061
; RV32I-NEXT: sltiu a0, a0, 3
61-
; RV32I-NEXT: snez a1, a1
62-
; RV32I-NEXT: addi a1, a1, -1
6362
; RV32I-NEXT: and a0, a1, a0
6463
; RV32I-NEXT: li a1, 0
6564
; RV32I-NEXT: ret

llvm/test/CodeGen/RISCV/double-convert.ll

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -868,32 +868,33 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
868868
; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill
869869
; RV32I-NEXT: sw s4, 8(sp) # 4-byte Folded Spill
870870
; RV32I-NEXT: sw s5, 4(sp) # 4-byte Folded Spill
871+
; RV32I-NEXT: sw s6, 0(sp) # 4-byte Folded Spill
871872
; RV32I-NEXT: mv s0, a1
872873
; RV32I-NEXT: mv s1, a0
873-
; RV32I-NEXT: lui a3, 278016
874-
; RV32I-NEXT: addi a3, a3, -1
875-
; RV32I-NEXT: li a2, -1
876-
; RV32I-NEXT: call __gtdf2
877-
; RV32I-NEXT: mv s2, a0
878874
; RV32I-NEXT: lui a3, 802304
879-
; RV32I-NEXT: mv a0, s1
880-
; RV32I-NEXT: mv a1, s0
881875
; RV32I-NEXT: li a2, 0
882876
; RV32I-NEXT: call __gedf2
883-
; RV32I-NEXT: mv s3, a0
877+
; RV32I-NEXT: mv s2, a0
884878
; RV32I-NEXT: mv a0, s1
885879
; RV32I-NEXT: mv a1, s0
886880
; RV32I-NEXT: call __fixdfdi
887-
; RV32I-NEXT: mv s4, a0
888-
; RV32I-NEXT: mv s5, a1
889-
; RV32I-NEXT: lui a0, 524288
890-
; RV32I-NEXT: bgez s3, .LBB12_2
881+
; RV32I-NEXT: mv s3, a0
882+
; RV32I-NEXT: mv s4, a1
883+
; RV32I-NEXT: lui s6, 524288
884+
; RV32I-NEXT: bgez s2, .LBB12_2
891885
; RV32I-NEXT: # %bb.1: # %start
892-
; RV32I-NEXT: lui s5, 524288
886+
; RV32I-NEXT: lui s4, 524288
893887
; RV32I-NEXT: .LBB12_2: # %start
894-
; RV32I-NEXT: blez s2, .LBB12_4
888+
; RV32I-NEXT: lui a3, 278016
889+
; RV32I-NEXT: addi a3, a3, -1
890+
; RV32I-NEXT: li a2, -1
891+
; RV32I-NEXT: mv a0, s1
892+
; RV32I-NEXT: mv a1, s0
893+
; RV32I-NEXT: call __gtdf2
894+
; RV32I-NEXT: mv s5, a0
895+
; RV32I-NEXT: blez a0, .LBB12_4
895896
; RV32I-NEXT: # %bb.3: # %start
896-
; RV32I-NEXT: addi s5, a0, -1
897+
; RV32I-NEXT: addi s4, s6, -1
897898
; RV32I-NEXT: .LBB12_4: # %start
898899
; RV32I-NEXT: mv a0, s1
899900
; RV32I-NEXT: mv a1, s0
@@ -902,11 +903,11 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
902903
; RV32I-NEXT: call __unorddf2
903904
; RV32I-NEXT: snez a0, a0
904905
; RV32I-NEXT: addi a0, a0, -1
905-
; RV32I-NEXT: and a1, a0, s5
906-
; RV32I-NEXT: slti a2, s3, 0
906+
; RV32I-NEXT: and a1, a0, s4
907+
; RV32I-NEXT: slti a2, s2, 0
907908
; RV32I-NEXT: addi a2, a2, -1
908-
; RV32I-NEXT: and a2, a2, s4
909-
; RV32I-NEXT: sgtz a3, s2
909+
; RV32I-NEXT: and a2, a2, s3
910+
; RV32I-NEXT: sgtz a3, s5
910911
; RV32I-NEXT: neg a3, a3
911912
; RV32I-NEXT: or a2, a3, a2
912913
; RV32I-NEXT: and a0, a0, a2
@@ -917,6 +918,7 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
917918
; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload
918919
; RV32I-NEXT: lw s4, 8(sp) # 4-byte Folded Reload
919920
; RV32I-NEXT: lw s5, 4(sp) # 4-byte Folded Reload
921+
; RV32I-NEXT: lw s6, 0(sp) # 4-byte Folded Reload
920922
; RV32I-NEXT: addi sp, sp, 32
921923
; RV32I-NEXT: ret
922924
;

llvm/test/CodeGen/RISCV/forced-atomics.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3567,8 +3567,8 @@ define i64 @rmw64_umax_seq_cst(ptr %p) nounwind {
35673567
; RV32-NEXT: # in Loop: Header=BB51_2 Depth=1
35683568
; RV32-NEXT: neg a3, a0
35693569
; RV32-NEXT: and a3, a3, a1
3570-
; RV32-NEXT: sw a4, 0(sp)
35713570
; RV32-NEXT: sw a1, 4(sp)
3571+
; RV32-NEXT: sw a4, 0(sp)
35723572
; RV32-NEXT: mv a1, sp
35733573
; RV32-NEXT: li a4, 5
35743574
; RV32-NEXT: li a5, 5
@@ -3659,8 +3659,8 @@ define i64 @rmw64_umin_seq_cst(ptr %p) nounwind {
36593659
; RV32-NEXT: # in Loop: Header=BB52_2 Depth=1
36603660
; RV32-NEXT: neg a3, a0
36613661
; RV32-NEXT: and a3, a3, a1
3662-
; RV32-NEXT: sw a4, 0(sp)
36633662
; RV32-NEXT: sw a1, 4(sp)
3663+
; RV32-NEXT: sw a4, 0(sp)
36643664
; RV32-NEXT: mv a1, sp
36653665
; RV32-NEXT: li a4, 5
36663666
; RV32-NEXT: li a5, 5
@@ -3672,8 +3672,7 @@ define i64 @rmw64_umin_seq_cst(ptr %p) nounwind {
36723672
; RV32-NEXT: .LBB52_2: # %atomicrmw.start
36733673
; RV32-NEXT: # =>This Inner Loop Header: Depth=1
36743674
; RV32-NEXT: sltiu a0, a4, 2
3675-
; RV32-NEXT: snez a2, a1
3676-
; RV32-NEXT: addi a2, a2, -1
3675+
; RV32-NEXT: seqz a2, a1
36773676
; RV32-NEXT: and a0, a2, a0
36783677
; RV32-NEXT: mv a2, a4
36793678
; RV32-NEXT: bnez a0, .LBB52_1

llvm/test/CodeGen/RISCV/fpclamptosat.ll

Lines changed: 46 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)