Skip to content

Commit b22b103

Browse files
authored
[DAG] SelectionDAG::canCreateUndefOrPoison - add ISD::FCOPYSIGN (#148617)
### Summary This PR resolves #147694
1 parent 4177bfd commit b22b103

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5620,6 +5620,7 @@ bool SelectionDAG::canCreateUndefOrPoison(SDValue Op, const APInt &DemandedElts,
56205620
case ISD::FMUL:
56215621
case ISD::FDIV:
56225622
case ISD::FREM:
5623+
case ISD::FCOPYSIGN:
56235624
// No poison except from flags (which is handled above)
56245625
return false;
56255626

llvm/test/CodeGen/PowerPC/copysignl.ll

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,23 @@ entry:
2020
ret double %conv
2121
}
2222

23+
define double @foo_d_ll_freeze(ppc_fp128 %a, ppc_fp128 %b) #0 {
24+
; CHECK-LABEL: foo_d_ll_freeze:
25+
; CHECK: # %bb.0: # %entry
26+
; CHECK-NEXT: fcpsgn 1, 3, 1
27+
; CHECK-NEXT: blr
28+
;
29+
; CHECK-VSX-LABEL: foo_d_ll_freeze:
30+
; CHECK-VSX: # %bb.0: # %entry
31+
; CHECK-VSX-NEXT: xscpsgndp 1, 3, 1
32+
; CHECK-VSX-NEXT: blr
33+
entry:
34+
%call = tail call ppc_fp128 @copysignl(ppc_fp128 %a, ppc_fp128 %b) #0
35+
%freeze = freeze ppc_fp128 %call
36+
%conv = fptrunc ppc_fp128 %freeze to double
37+
ret double %conv
38+
}
39+
2340
declare ppc_fp128 @copysignl(ppc_fp128, ppc_fp128) #0
2441

2542
define double @foo_dl(double %a, ppc_fp128 %b) #0 {
@@ -46,9 +63,9 @@ define ppc_fp128 @foo_ll(double %a, ppc_fp128 %b) #0 {
4663
; CHECK-NEXT: mflr 0
4764
; CHECK-NEXT: stdu 1, -112(1)
4865
; CHECK-NEXT: fmr 3, 2
49-
; CHECK-NEXT: addis 3, 2, .LCPI2_0@toc@ha
66+
; CHECK-NEXT: addis 3, 2, .LCPI3_0@toc@ha
5067
; CHECK-NEXT: std 0, 128(1)
51-
; CHECK-NEXT: lfs 2, .LCPI2_0@toc@l(3)
68+
; CHECK-NEXT: lfs 2, .LCPI3_0@toc@l(3)
5269
; CHECK-NEXT: bl copysignl
5370
; CHECK-NEXT: nop
5471
; CHECK-NEXT: addi 1, 1, 112
@@ -81,9 +98,9 @@ define ppc_fp128 @foo_ld(double %a, double %b) #0 {
8198
; CHECK-NEXT: mflr 0
8299
; CHECK-NEXT: stdu 1, -112(1)
83100
; CHECK-NEXT: fmr 3, 2
84-
; CHECK-NEXT: addis 3, 2, .LCPI3_0@toc@ha
101+
; CHECK-NEXT: addis 3, 2, .LCPI4_0@toc@ha
85102
; CHECK-NEXT: std 0, 128(1)
86-
; CHECK-NEXT: lfs 2, .LCPI3_0@toc@l(3)
103+
; CHECK-NEXT: lfs 2, .LCPI4_0@toc@l(3)
87104
; CHECK-NEXT: bl copysignl
88105
; CHECK-NEXT: nop
89106
; CHECK-NEXT: addi 1, 1, 112
@@ -117,9 +134,9 @@ define ppc_fp128 @foo_lf(double %a, float %b) #0 {
117134
; CHECK-NEXT: mflr 0
118135
; CHECK-NEXT: stdu 1, -112(1)
119136
; CHECK-NEXT: fmr 3, 2
120-
; CHECK-NEXT: addis 3, 2, .LCPI4_0@toc@ha
137+
; CHECK-NEXT: addis 3, 2, .LCPI5_0@toc@ha
121138
; CHECK-NEXT: std 0, 128(1)
122-
; CHECK-NEXT: lfs 2, .LCPI4_0@toc@l(3)
139+
; CHECK-NEXT: lfs 2, .LCPI5_0@toc@l(3)
123140
; CHECK-NEXT: bl copysignl
124141
; CHECK-NEXT: nop
125142
; CHECK-NEXT: addi 1, 1, 112

0 commit comments

Comments
 (0)