Skip to content

Commit 8c2297d

Browse files
[PowerPC][CodeGen] Use SETUEQ in copysign expansion
1 parent 9df9c96 commit 8c2297d

File tree

4 files changed

+40
-34
lines changed

4 files changed

+40
-34
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ void DAGTypeLegalizer::ExpandFloatRes_FCOPYSIGN(SDNode *N,
17211721
// a double-double is Hi + Lo, so if Hi flips sign, so must Lo
17221722
Lo = DAG.getSelectCC(DL, Tmp, Hi, Lo,
17231723
DAG.getNode(ISD::FNEG, DL, Lo.getValueType(), Lo),
1724-
ISD::SETEQ);
1724+
ISD::SETUEQ);
17251725
}
17261726

17271727
void DAGTypeLegalizer::ExpandFloatRes_FCOS(SDNode *N,

llvm/test/CodeGen/PowerPC/copysignl.ll

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ define ppc_fp128 @foo_ll(double %a, ppc_fp128 %b) #0 {
4444
; CHECK-LABEL: foo_ll:
4545
; CHECK: # %bb.0: # %entry
4646
; CHECK-NEXT: fcpsgn 0, 2, 1
47-
; CHECK-NEXT: li 3, 0
48-
; CHECK-NEXT: li 4, 8
49-
; CHECK-NEXT: fcmpu 0, 1, 0
50-
; CHECK-NEXT: fmr 1, 0
51-
; CHECK-NEXT: iseleq 3, 4, 3
47+
; CHECK-NEXT: li 3, 8
5248
; CHECK-NEXT: addis 4, 2, .LCPI2_0@toc@ha
5349
; CHECK-NEXT: addi 4, 4, .LCPI2_0@toc@l
50+
; CHECK-NEXT: fcmpu 0, 1, 0
51+
; CHECK-NEXT: fmr 1, 0
52+
; CHECK-NEXT: crnor 20, 2, 3
53+
; CHECK-NEXT: isel 3, 0, 3, 20
5454
; CHECK-NEXT: lfdx 2, 4, 3
5555
; CHECK-NEXT: blr
5656
;
@@ -59,8 +59,9 @@ define ppc_fp128 @foo_ll(double %a, ppc_fp128 %b) #0 {
5959
; CHECK-VSX-NEXT: fmr 0, 1
6060
; CHECK-VSX-NEXT: xscpsgndp 1, 2, 1
6161
; CHECK-VSX-NEXT: xxlxor 2, 2, 2
62-
; CHECK-VSX-NEXT: xscmpudp 0, 0, 1
63-
; CHECK-VSX-NEXT: beqlr 0
62+
; CHECK-VSX-NEXT: fcmpu 0, 0, 1
63+
; CHECK-VSX-NEXT: cror 20, 2, 3
64+
; CHECK-VSX-NEXT: bclr 12, 20, 0
6465
; CHECK-VSX-NEXT: # %bb.1: # %entry
6566
; CHECK-VSX-NEXT: xsnegdp 2, 2
6667
; CHECK-VSX-NEXT: blr
@@ -74,13 +75,13 @@ define ppc_fp128 @foo_ld(double %a, double %b) #0 {
7475
; CHECK-LABEL: foo_ld:
7576
; CHECK: # %bb.0: # %entry
7677
; CHECK-NEXT: fcpsgn 0, 2, 1
77-
; CHECK-NEXT: li 3, 0
78-
; CHECK-NEXT: li 4, 8
79-
; CHECK-NEXT: fcmpu 0, 1, 0
80-
; CHECK-NEXT: fmr 1, 0
81-
; CHECK-NEXT: iseleq 3, 4, 3
78+
; CHECK-NEXT: li 3, 8
8279
; CHECK-NEXT: addis 4, 2, .LCPI3_0@toc@ha
8380
; CHECK-NEXT: addi 4, 4, .LCPI3_0@toc@l
81+
; CHECK-NEXT: fcmpu 0, 1, 0
82+
; CHECK-NEXT: fmr 1, 0
83+
; CHECK-NEXT: crnor 20, 2, 3
84+
; CHECK-NEXT: isel 3, 0, 3, 20
8485
; CHECK-NEXT: lfdx 2, 4, 3
8586
; CHECK-NEXT: blr
8687
;
@@ -89,8 +90,9 @@ define ppc_fp128 @foo_ld(double %a, double %b) #0 {
8990
; CHECK-VSX-NEXT: fmr 0, 1
9091
; CHECK-VSX-NEXT: xscpsgndp 1, 2, 1
9192
; CHECK-VSX-NEXT: xxlxor 2, 2, 2
92-
; CHECK-VSX-NEXT: xscmpudp 0, 0, 1
93-
; CHECK-VSX-NEXT: beqlr 0
93+
; CHECK-VSX-NEXT: fcmpu 0, 0, 1
94+
; CHECK-VSX-NEXT: cror 20, 2, 3
95+
; CHECK-VSX-NEXT: bclr 12, 20, 0
9496
; CHECK-VSX-NEXT: # %bb.1: # %entry
9597
; CHECK-VSX-NEXT: xsnegdp 2, 2
9698
; CHECK-VSX-NEXT: blr
@@ -105,13 +107,13 @@ define ppc_fp128 @foo_lf(double %a, float %b) #0 {
105107
; CHECK-LABEL: foo_lf:
106108
; CHECK: # %bb.0: # %entry
107109
; CHECK-NEXT: fcpsgn 0, 2, 1
108-
; CHECK-NEXT: li 3, 0
109-
; CHECK-NEXT: li 4, 8
110-
; CHECK-NEXT: fcmpu 0, 1, 0
111-
; CHECK-NEXT: fmr 1, 0
112-
; CHECK-NEXT: iseleq 3, 4, 3
110+
; CHECK-NEXT: li 3, 8
113111
; CHECK-NEXT: addis 4, 2, .LCPI4_0@toc@ha
114112
; CHECK-NEXT: addi 4, 4, .LCPI4_0@toc@l
113+
; CHECK-NEXT: fcmpu 0, 1, 0
114+
; CHECK-NEXT: fmr 1, 0
115+
; CHECK-NEXT: crnor 20, 2, 3
116+
; CHECK-NEXT: isel 3, 0, 3, 20
115117
; CHECK-NEXT: lfdx 2, 4, 3
116118
; CHECK-NEXT: blr
117119
;
@@ -120,8 +122,9 @@ define ppc_fp128 @foo_lf(double %a, float %b) #0 {
120122
; CHECK-VSX-NEXT: fmr 0, 1
121123
; CHECK-VSX-NEXT: fcpsgn 1, 2, 1
122124
; CHECK-VSX-NEXT: xxlxor 2, 2, 2
123-
; CHECK-VSX-NEXT: xscmpudp 0, 0, 1
124-
; CHECK-VSX-NEXT: beqlr 0
125+
; CHECK-VSX-NEXT: fcmpu 0, 0, 1
126+
; CHECK-VSX-NEXT: cror 20, 2, 3
127+
; CHECK-VSX-NEXT: bclr 12, 20, 0
125128
; CHECK-VSX-NEXT: # %bb.1: # %entry
126129
; CHECK-VSX-NEXT: xsnegdp 2, 2
127130
; CHECK-VSX-NEXT: blr

llvm/test/CodeGen/PowerPC/ctrloop-cpsgn.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ define ppc_fp128 @foo(ptr nocapture %n, ppc_fp128 %d) nounwind readonly {
5757
; CHECK-NEXT: .LBB0_5: # %for.body
5858
; CHECK-NEXT: #
5959
; CHECK-NEXT: fcmpu 0, 2, 3
60+
; CHECK-NEXT: cror 20, 2, 3
6061
; CHECK-NEXT: stfd 3, 56(1)
61-
; CHECK-NEXT: beq 0, .LBB0_1
62+
; CHECK-NEXT: bc 12, 20, .LBB0_1
6263
; CHECK-NEXT: # %bb.6: # %for.body
6364
; CHECK-NEXT: #
6465
; CHECK-NEXT: fneg 1, 1

llvm/test/CodeGen/PowerPC/fp128-bitcast-after-operation.ll

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,22 @@ define i128 @test_copysign(ppc_fp128 %x, ppc_fp128 %y) nounwind {
9292
; PPC64-P8-LABEL: test_copysign:
9393
; PPC64-P8: # %bb.0: # %entry
9494
; PPC64-P8-NEXT: xscpsgndp 0, 3, 1
95-
; PPC64-P8-NEXT: xscmpudp 0, 1, 0
96-
; PPC64-P8-NEXT: beq 0, .LBB2_2
95+
; PPC64-P8-NEXT: fcmpu 0, 1, 0
96+
; PPC64-P8-NEXT: cror 20, 2, 3
97+
; PPC64-P8-NEXT: bc 12, 20, .LBB2_2
9798
; PPC64-P8-NEXT: # %bb.1: # %entry
9899
; PPC64-P8-NEXT: xsnegdp 2, 2
99100
; PPC64-P8-NEXT: .LBB2_2: # %entry
100-
; PPC64-P8-NEXT: mffprd 3, 0
101101
; PPC64-P8-NEXT: mffprd 4, 2
102+
; PPC64-P8-NEXT: mffprd 3, 0
102103
; PPC64-P8-NEXT: blr
103104
;
104105
; PPC64-LABEL: test_copysign:
105106
; PPC64: # %bb.0: # %entry
106107
; PPC64-NEXT: xscpsgndp 0, 3, 1
107-
; PPC64-NEXT: xscmpudp 0, 1, 0
108-
; PPC64-NEXT: beq 0, .LBB2_2
108+
; PPC64-NEXT: fcmpu 0, 1, 0
109+
; PPC64-NEXT: cror 20, 2, 3
110+
; PPC64-NEXT: bc 12, 20, .LBB2_2
109111
; PPC64-NEXT: # %bb.1: # %entry
110112
; PPC64-NEXT: xsnegdp 2, 2
111113
; PPC64-NEXT: .LBB2_2: # %entry
@@ -125,16 +127,16 @@ define i128 @test_copysign(ppc_fp128 %x, ppc_fp128 %y) nounwind {
125127
; PPC32-NEXT: bc 12, 1, .LBB2_2
126128
; PPC32-NEXT: # %bb.1: # %entry
127129
; PPC32-NEXT: fabs 0, 1
128-
; PPC32-NEXT: fcmpu 0, 1, 0
129-
; PPC32-NEXT: bne 0, .LBB2_3
130-
; PPC32-NEXT: b .LBB2_4
130+
; PPC32-NEXT: b .LBB2_3
131131
; PPC32-NEXT: .LBB2_2:
132132
; PPC32-NEXT: fnabs 0, 1
133-
; PPC32-NEXT: fcmpu 0, 1, 0
134-
; PPC32-NEXT: beq 0, .LBB2_4
135133
; PPC32-NEXT: .LBB2_3: # %entry
134+
; PPC32-NEXT: fcmpu 0, 1, 0
135+
; PPC32-NEXT: cror 20, 2, 3
136+
; PPC32-NEXT: bc 12, 20, .LBB2_5
137+
; PPC32-NEXT: # %bb.4: # %entry
136138
; PPC32-NEXT: fneg 2, 2
137-
; PPC32-NEXT: .LBB2_4: # %entry
139+
; PPC32-NEXT: .LBB2_5: # %entry
138140
; PPC32-NEXT: stfd 0, 24(1)
139141
; PPC32-NEXT: stfd 2, 16(1)
140142
; PPC32-NEXT: lwz 3, 24(1)

0 commit comments

Comments
 (0)