Skip to content

Commit e57c143

Browse files
committed
[DAGCombiner] Push freeze through SETCC and SELECT_CC
Allow pushing freeze through SETCC and SELECT_CC even if there are multiple "maybe poison" operands. In the past we have limited it to a single "maybe poison" operand, but it seems profitable to also allow the multiple operand scenario. One goal here is to avoid some regressions seen in review of #84924 when solving the select->and miscompiles described in #84653
1 parent a3e0033 commit e57c143

File tree

6 files changed

+98
-110
lines changed

6 files changed

+98
-110
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15582,6 +15582,8 @@ SDValue DAGCombiner::visitFREEZE(SDNode *N) {
1558215582
return SDValue();
1558315583

1558415584
bool AllowMultipleMaybePoisonOperands =
15585+
N0.getOpcode() == ISD::SELECT_CC ||
15586+
N0.getOpcode() == ISD::SETCC ||
1558515587
N0.getOpcode() == ISD::BUILD_VECTOR ||
1558615588
N0.getOpcode() == ISD::BUILD_PAIR ||
1558715589
N0.getOpcode() == ISD::VECTOR_SHUFFLE ||

llvm/test/CodeGen/PowerPC/pr40922.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ define i32 @a() {
2323
; CHECK-NEXT: li 5, 0
2424
; CHECK-NEXT: mr 30, 3
2525
; CHECK-NEXT: addic 6, 4, 6
26-
; CHECK-NEXT: rlwinm 6, 6, 0, 28, 26
2726
; CHECK-NEXT: addze 5, 5
28-
; CHECK-NEXT: cmplw 1, 6, 4
27+
; CHECK-NEXT: rlwinm 6, 6, 0, 28, 26
2928
; CHECK-NEXT: andi. 5, 5, 1
30-
; CHECK-NEXT: crnot 20, 4
31-
; CHECK-NEXT: cror 20, 1, 20
29+
; CHECK-NEXT: cmplw 1, 6, 4
30+
; CHECK-NEXT: crorc 20, 1, 4
3231
; CHECK-NEXT: bc 12, 20, .LBB0_2
3332
; CHECK-NEXT: # %bb.1: # %if.then
3433
; CHECK-NEXT: bl e

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,9 +742,8 @@ define i64 @fcvt_l_d_sat(double %a) nounwind {
742742
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI12_0)(a2)
743743
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
744744
; RV32IZFINXZDINX-NEXT: lui a5, 524288
745-
; RV32IZFINXZDINX-NEXT: li a4, 1
746745
; RV32IZFINXZDINX-NEXT: lui a3, 524288
747-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB12_2
746+
; RV32IZFINXZDINX-NEXT: beqz a2, .LBB12_2
748747
; RV32IZFINXZDINX-NEXT: # %bb.1: # %start
749748
; RV32IZFINXZDINX-NEXT: mv a3, a1
750749
; RV32IZFINXZDINX-NEXT: .LBB12_2: # %start

llvm/test/CodeGen/RISCV/double-round-conv-sat.ll

Lines changed: 84 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -102,30 +102,29 @@ define i64 @test_floor_si64(double %x) nounwind {
102102
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI1_0)
103103
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI1_0+4)(a2)
104104
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI1_0)(a2)
105-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
105+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI1_1)
106+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI1_1+4)(a4)
107+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI1_1)(a4)
108+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
109+
; RV32IZFINXZDINX-NEXT: neg a2, a6
110+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
111+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
112+
; RV32IZFINXZDINX-NEXT: neg a2, a4
113+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
114+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
115+
; RV32IZFINXZDINX-NEXT: neg a2, a2
106116
; RV32IZFINXZDINX-NEXT: lui a5, 524288
107-
; RV32IZFINXZDINX-NEXT: li a4, 1
108117
; RV32IZFINXZDINX-NEXT: lui a3, 524288
109-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB1_2
118+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB1_2
110119
; RV32IZFINXZDINX-NEXT: # %bb.1:
111120
; RV32IZFINXZDINX-NEXT: mv a3, a1
112121
; RV32IZFINXZDINX-NEXT: .LBB1_2:
113-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI1_1)
114-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI1_1)(a1)
115-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI1_1+4)(a1)
116-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
122+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
117123
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB1_4
118124
; RV32IZFINXZDINX-NEXT: # %bb.3:
119125
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
120126
; RV32IZFINXZDINX-NEXT: .LBB1_4:
121-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
122-
; RV32IZFINXZDINX-NEXT: neg a5, a1
123-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
124-
; RV32IZFINXZDINX-NEXT: neg a2, a2
125-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
126-
; RV32IZFINXZDINX-NEXT: neg a2, a4
127-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
128-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
127+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
129128
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
130129
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
131130
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -347,30 +346,29 @@ define i64 @test_ceil_si64(double %x) nounwind {
347346
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI5_0)
348347
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI5_0+4)(a2)
349348
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI5_0)(a2)
350-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
349+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI5_1)
350+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI5_1+4)(a4)
351+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI5_1)(a4)
352+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
353+
; RV32IZFINXZDINX-NEXT: neg a2, a6
354+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
355+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
356+
; RV32IZFINXZDINX-NEXT: neg a2, a4
357+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
358+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
359+
; RV32IZFINXZDINX-NEXT: neg a2, a2
351360
; RV32IZFINXZDINX-NEXT: lui a5, 524288
352-
; RV32IZFINXZDINX-NEXT: li a4, 1
353361
; RV32IZFINXZDINX-NEXT: lui a3, 524288
354-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB5_2
362+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB5_2
355363
; RV32IZFINXZDINX-NEXT: # %bb.1:
356364
; RV32IZFINXZDINX-NEXT: mv a3, a1
357365
; RV32IZFINXZDINX-NEXT: .LBB5_2:
358-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI5_1)
359-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI5_1)(a1)
360-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI5_1+4)(a1)
361-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
366+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
362367
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB5_4
363368
; RV32IZFINXZDINX-NEXT: # %bb.3:
364369
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
365370
; RV32IZFINXZDINX-NEXT: .LBB5_4:
366-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
367-
; RV32IZFINXZDINX-NEXT: neg a5, a1
368-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
369-
; RV32IZFINXZDINX-NEXT: neg a2, a2
370-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
371-
; RV32IZFINXZDINX-NEXT: neg a2, a4
372-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
373-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
371+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
374372
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
375373
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
376374
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -592,30 +590,29 @@ define i64 @test_trunc_si64(double %x) nounwind {
592590
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI9_0)
593591
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI9_0+4)(a2)
594592
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI9_0)(a2)
595-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
593+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI9_1)
594+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI9_1+4)(a4)
595+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI9_1)(a4)
596+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
597+
; RV32IZFINXZDINX-NEXT: neg a2, a6
598+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
599+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
600+
; RV32IZFINXZDINX-NEXT: neg a2, a4
601+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
602+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
603+
; RV32IZFINXZDINX-NEXT: neg a2, a2
596604
; RV32IZFINXZDINX-NEXT: lui a5, 524288
597-
; RV32IZFINXZDINX-NEXT: li a4, 1
598605
; RV32IZFINXZDINX-NEXT: lui a3, 524288
599-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB9_2
606+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB9_2
600607
; RV32IZFINXZDINX-NEXT: # %bb.1:
601608
; RV32IZFINXZDINX-NEXT: mv a3, a1
602609
; RV32IZFINXZDINX-NEXT: .LBB9_2:
603-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI9_1)
604-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI9_1)(a1)
605-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI9_1+4)(a1)
606-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
610+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
607611
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB9_4
608612
; RV32IZFINXZDINX-NEXT: # %bb.3:
609613
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
610614
; RV32IZFINXZDINX-NEXT: .LBB9_4:
611-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
612-
; RV32IZFINXZDINX-NEXT: neg a5, a1
613-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
614-
; RV32IZFINXZDINX-NEXT: neg a2, a2
615-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
616-
; RV32IZFINXZDINX-NEXT: neg a2, a4
617-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
618-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
615+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
619616
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
620617
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
621618
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -837,30 +834,29 @@ define i64 @test_round_si64(double %x) nounwind {
837834
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI13_0)
838835
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI13_0+4)(a2)
839836
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI13_0)(a2)
840-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
837+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI13_1)
838+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI13_1+4)(a4)
839+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI13_1)(a4)
840+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
841+
; RV32IZFINXZDINX-NEXT: neg a2, a6
842+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
843+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
844+
; RV32IZFINXZDINX-NEXT: neg a2, a4
845+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
846+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
847+
; RV32IZFINXZDINX-NEXT: neg a2, a2
841848
; RV32IZFINXZDINX-NEXT: lui a5, 524288
842-
; RV32IZFINXZDINX-NEXT: li a4, 1
843849
; RV32IZFINXZDINX-NEXT: lui a3, 524288
844-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB13_2
850+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB13_2
845851
; RV32IZFINXZDINX-NEXT: # %bb.1:
846852
; RV32IZFINXZDINX-NEXT: mv a3, a1
847853
; RV32IZFINXZDINX-NEXT: .LBB13_2:
848-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI13_1)
849-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI13_1)(a1)
850-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI13_1+4)(a1)
851-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
854+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
852855
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB13_4
853856
; RV32IZFINXZDINX-NEXT: # %bb.3:
854857
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
855858
; RV32IZFINXZDINX-NEXT: .LBB13_4:
856-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
857-
; RV32IZFINXZDINX-NEXT: neg a5, a1
858-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
859-
; RV32IZFINXZDINX-NEXT: neg a2, a2
860-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
861-
; RV32IZFINXZDINX-NEXT: neg a2, a4
862-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
863-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
859+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
864860
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
865861
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
866862
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -1082,30 +1078,29 @@ define i64 @test_roundeven_si64(double %x) nounwind {
10821078
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI17_0)
10831079
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI17_0+4)(a2)
10841080
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI17_0)(a2)
1085-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
1081+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI17_1)
1082+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI17_1+4)(a4)
1083+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI17_1)(a4)
1084+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
1085+
; RV32IZFINXZDINX-NEXT: neg a2, a6
1086+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
1087+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
1088+
; RV32IZFINXZDINX-NEXT: neg a2, a4
1089+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
1090+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
1091+
; RV32IZFINXZDINX-NEXT: neg a2, a2
10861092
; RV32IZFINXZDINX-NEXT: lui a5, 524288
1087-
; RV32IZFINXZDINX-NEXT: li a4, 1
10881093
; RV32IZFINXZDINX-NEXT: lui a3, 524288
1089-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB17_2
1094+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB17_2
10901095
; RV32IZFINXZDINX-NEXT: # %bb.1:
10911096
; RV32IZFINXZDINX-NEXT: mv a3, a1
10921097
; RV32IZFINXZDINX-NEXT: .LBB17_2:
1093-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI17_1)
1094-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI17_1)(a1)
1095-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI17_1+4)(a1)
1096-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
1098+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
10971099
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB17_4
10981100
; RV32IZFINXZDINX-NEXT: # %bb.3:
10991101
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
11001102
; RV32IZFINXZDINX-NEXT: .LBB17_4:
1101-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
1102-
; RV32IZFINXZDINX-NEXT: neg a5, a1
1103-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
1104-
; RV32IZFINXZDINX-NEXT: neg a2, a2
1105-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
1106-
; RV32IZFINXZDINX-NEXT: neg a2, a4
1107-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
1108-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
1103+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
11091104
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
11101105
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
11111106
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
@@ -1327,30 +1322,29 @@ define i64 @test_rint_si64(double %x) nounwind {
13271322
; RV32IZFINXZDINX-NEXT: lui a2, %hi(.LCPI21_0)
13281323
; RV32IZFINXZDINX-NEXT: lw a3, %lo(.LCPI21_0+4)(a2)
13291324
; RV32IZFINXZDINX-NEXT: lw a2, %lo(.LCPI21_0)(a2)
1330-
; RV32IZFINXZDINX-NEXT: fle.d a2, a2, s0
1325+
; RV32IZFINXZDINX-NEXT: lui a4, %hi(.LCPI21_1)
1326+
; RV32IZFINXZDINX-NEXT: lw a5, %lo(.LCPI21_1+4)(a4)
1327+
; RV32IZFINXZDINX-NEXT: lw a4, %lo(.LCPI21_1)(a4)
1328+
; RV32IZFINXZDINX-NEXT: fle.d a6, a2, s0
1329+
; RV32IZFINXZDINX-NEXT: neg a2, a6
1330+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
1331+
; RV32IZFINXZDINX-NEXT: flt.d a4, a4, s0
1332+
; RV32IZFINXZDINX-NEXT: neg a2, a4
1333+
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
1334+
; RV32IZFINXZDINX-NEXT: feq.d a2, s0, s0
1335+
; RV32IZFINXZDINX-NEXT: neg a2, a2
13311336
; RV32IZFINXZDINX-NEXT: lui a5, 524288
1332-
; RV32IZFINXZDINX-NEXT: li a4, 1
13331337
; RV32IZFINXZDINX-NEXT: lui a3, 524288
1334-
; RV32IZFINXZDINX-NEXT: bne a2, a4, .LBB21_2
1338+
; RV32IZFINXZDINX-NEXT: beqz a6, .LBB21_2
13351339
; RV32IZFINXZDINX-NEXT: # %bb.1:
13361340
; RV32IZFINXZDINX-NEXT: mv a3, a1
13371341
; RV32IZFINXZDINX-NEXT: .LBB21_2:
1338-
; RV32IZFINXZDINX-NEXT: lui a1, %hi(.LCPI21_1)
1339-
; RV32IZFINXZDINX-NEXT: lw a6, %lo(.LCPI21_1)(a1)
1340-
; RV32IZFINXZDINX-NEXT: lw a7, %lo(.LCPI21_1+4)(a1)
1341-
; RV32IZFINXZDINX-NEXT: flt.d a4, a6, s0
1342+
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
13421343
; RV32IZFINXZDINX-NEXT: beqz a4, .LBB21_4
13431344
; RV32IZFINXZDINX-NEXT: # %bb.3:
13441345
; RV32IZFINXZDINX-NEXT: addi a3, a5, -1
13451346
; RV32IZFINXZDINX-NEXT: .LBB21_4:
1346-
; RV32IZFINXZDINX-NEXT: feq.d a1, s0, s0
1347-
; RV32IZFINXZDINX-NEXT: neg a5, a1
1348-
; RV32IZFINXZDINX-NEXT: and a1, a5, a3
1349-
; RV32IZFINXZDINX-NEXT: neg a2, a2
1350-
; RV32IZFINXZDINX-NEXT: and a0, a2, a0
1351-
; RV32IZFINXZDINX-NEXT: neg a2, a4
1352-
; RV32IZFINXZDINX-NEXT: or a0, a2, a0
1353-
; RV32IZFINXZDINX-NEXT: and a0, a5, a0
1347+
; RV32IZFINXZDINX-NEXT: and a1, a2, a3
13541348
; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
13551349
; RV32IZFINXZDINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
13561350
; RV32IZFINXZDINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload

llvm/test/CodeGen/X86/vector-compare-all_of.ll

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,9 +1541,8 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
15411541
; SSE2-NEXT: movd %eax, %xmm1
15421542
; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
15431543
; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1544-
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[0,1,1,3,4,5,6,7]
1545-
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
1546-
; SSE2-NEXT: psllq $63, %xmm0
1544+
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[0,0,1,1,4,5,6,7]
1545+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
15471546
; SSE2-NEXT: movmskpd %xmm0, %eax
15481547
; SSE2-NEXT: cmpl $3, %eax
15491548
; SSE2-NEXT: sete %al
@@ -1556,8 +1555,7 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
15561555
; SSE42-NEXT: movzwl (%rsi), %eax
15571556
; SSE42-NEXT: movd %eax, %xmm1
15581557
; SSE42-NEXT: pcmpeqb %xmm0, %xmm1
1559-
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero
1560-
; SSE42-NEXT: psllq $63, %xmm0
1558+
; SSE42-NEXT: pmovsxbq %xmm1, %xmm0
15611559
; SSE42-NEXT: movmskpd %xmm0, %eax
15621560
; SSE42-NEXT: cmpl $3, %eax
15631561
; SSE42-NEXT: sete %al
@@ -1570,8 +1568,7 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
15701568
; AVX1OR2-NEXT: movzwl (%rsi), %eax
15711569
; AVX1OR2-NEXT: vmovd %eax, %xmm1
15721570
; AVX1OR2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
1573-
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
1574-
; AVX1OR2-NEXT: vpsllq $63, %xmm0, %xmm0
1571+
; AVX1OR2-NEXT: vpmovsxbq %xmm0, %xmm0
15751572
; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
15761573
; AVX1OR2-NEXT: vtestpd %xmm1, %xmm0
15771574
; AVX1OR2-NEXT: setb %al

llvm/test/CodeGen/X86/vector-compare-any_of.ll

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,9 +1424,8 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
14241424
; SSE2-NEXT: movd %eax, %xmm1
14251425
; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
14261426
; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1427-
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[0,1,1,3,4,5,6,7]
1428-
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
1429-
; SSE2-NEXT: psllq $63, %xmm0
1427+
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm1[0,0,1,1,4,5,6,7]
1428+
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
14301429
; SSE2-NEXT: movmskpd %xmm0, %eax
14311430
; SSE2-NEXT: testl %eax, %eax
14321431
; SSE2-NEXT: setne %al
@@ -1439,8 +1438,7 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
14391438
; SSE42-NEXT: movzwl (%rsi), %eax
14401439
; SSE42-NEXT: movd %eax, %xmm1
14411440
; SSE42-NEXT: pcmpeqb %xmm0, %xmm1
1442-
; SSE42-NEXT: pmovzxbq {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero
1443-
; SSE42-NEXT: psllq $63, %xmm0
1441+
; SSE42-NEXT: pmovsxbq %xmm1, %xmm0
14441442
; SSE42-NEXT: movmskpd %xmm0, %eax
14451443
; SSE42-NEXT: testl %eax, %eax
14461444
; SSE42-NEXT: setne %al
@@ -1453,8 +1451,7 @@ define i1 @select_v2i8(ptr %s0, ptr %s1) {
14531451
; AVX1OR2-NEXT: movzwl (%rsi), %eax
14541452
; AVX1OR2-NEXT: vmovd %eax, %xmm1
14551453
; AVX1OR2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
1456-
; AVX1OR2-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
1457-
; AVX1OR2-NEXT: vpsllq $63, %xmm0, %xmm0
1454+
; AVX1OR2-NEXT: vpmovsxbq %xmm0, %xmm0
14581455
; AVX1OR2-NEXT: vtestpd %xmm0, %xmm0
14591456
; AVX1OR2-NEXT: setne %al
14601457
; AVX1OR2-NEXT: retq

0 commit comments

Comments
 (0)