Skip to content

Commit f596ebc

Browse files
committed
[SDAG] Remove special handling for fp min/max libcalls
1 parent 86097dd commit f596ebc

File tree

7 files changed

+130
-313
lines changed

7 files changed

+130
-313
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9590,34 +9590,6 @@ void SelectionDAGBuilder::visitCall(const CallInst &I) {
95909590
if (visitUnaryFloatCall(I, ISD::FABS))
95919591
return;
95929592
break;
9593-
case LibFunc_fmin:
9594-
case LibFunc_fminf:
9595-
case LibFunc_fminl:
9596-
// TODO: Remove this, already canonicalized by the middle-end.
9597-
if (visitBinaryFloatCall(I, ISD::FMINNUM))
9598-
return;
9599-
break;
9600-
case LibFunc_fmax:
9601-
case LibFunc_fmaxf:
9602-
case LibFunc_fmaxl:
9603-
// TODO: Remove this, already canonicalized by the middle-end.
9604-
if (visitBinaryFloatCall(I, ISD::FMAXNUM))
9605-
return;
9606-
break;
9607-
case LibFunc_fminimum_num:
9608-
case LibFunc_fminimum_numf:
9609-
case LibFunc_fminimum_numl:
9610-
// TODO: Remove this, already canonicalized by the middle-end.
9611-
if (visitBinaryFloatCall(I, ISD::FMINIMUMNUM))
9612-
return;
9613-
break;
9614-
case LibFunc_fmaximum_num:
9615-
case LibFunc_fmaximum_numf:
9616-
case LibFunc_fmaximum_numl:
9617-
// TODO: Remove this, already canonicalized by the middle-end.
9618-
if (visitBinaryFloatCall(I, ISD::FMAXIMUMNUM))
9619-
return;
9620-
break;
96219593
case LibFunc_sin:
96229594
case LibFunc_sinf:
96239595
case LibFunc_sinl:

llvm/test/CodeGen/PowerPC/ctr-minmaxnum.ll

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22

33
declare float @fabsf(float)
44

5-
declare float @fminf(float, float)
6-
declare double @fmin(double, double)
75
declare float @llvm.minnum.f32(float, float)
86
declare double @llvm.minnum.f64(double, double)
97

10-
declare float @fmaxf(float, float)
11-
declare double @fmax(double, double)
128
declare float @llvm.maxnum.f32(float, float)
139
declare double @llvm.maxnum.f64(double, double)
1410

@@ -63,29 +59,6 @@ loop_exit:
6359
; CHECK-NOT: xsmindp
6460
; CHECK: blr
6561

66-
define void @test1a(float %f, ptr %fp) {
67-
entry:
68-
br label %loop_body
69-
70-
loop_body:
71-
%invar_address.dim.0.01 = phi i64 [ 0, %entry ], [ %1, %loop_body ]
72-
%0 = call float @fminf(float %f, float 1.0) readnone
73-
store float %0, ptr %fp, align 4
74-
%1 = add i64 %invar_address.dim.0.01, 1
75-
%2 = icmp eq i64 %1, 2
76-
br i1 %2, label %loop_exit, label %loop_body
77-
78-
loop_exit:
79-
ret void
80-
}
81-
82-
; CHECK-LABEL: test1a:
83-
; CHECK-NOT: mtctr
84-
; CHECK: xsmindp
85-
; CHECK-NOT: xsmindp
86-
; CHECK-NOT: mtctr
87-
; CHECK: blr
88-
8962
define void @test2(float %f, ptr %fp) {
9063
entry:
9164
br label %loop_body
@@ -133,29 +106,6 @@ loop_exit:
133106
; CHECK-NOT: xsmaxdp
134107
; CHECK: blr
135108

136-
define void @test2a(float %f, ptr %fp) {
137-
entry:
138-
br label %loop_body
139-
140-
loop_body:
141-
%invar_address.dim.0.01 = phi i64 [ 0, %entry ], [ %1, %loop_body ]
142-
%0 = call float @fmaxf(float %f, float 1.0) readnone
143-
store float %0, ptr %fp, align 4
144-
%1 = add i64 %invar_address.dim.0.01, 1
145-
%2 = icmp eq i64 %1, 2
146-
br i1 %2, label %loop_exit, label %loop_body
147-
148-
loop_exit:
149-
ret void
150-
}
151-
152-
; CHECK-LABEL: test2a:
153-
; CHECK-NOT: mtctr
154-
; CHECK: xsmaxdp
155-
; CHECK-NOT: xsmaxdp
156-
; CHECK-NOT: mtctr
157-
; CHECK: blr
158-
159109
define void @test3(double %f, ptr %fp) {
160110
entry:
161111
br label %loop_body
@@ -179,29 +129,6 @@ loop_exit:
179129
; CHECK-NOT: mtctr
180130
; CHECK: blr
181131

182-
define void @test3a(double %f, ptr %fp) {
183-
entry:
184-
br label %loop_body
185-
186-
loop_body:
187-
%invar_address.dim.0.01 = phi i64 [ 0, %entry ], [ %1, %loop_body ]
188-
%0 = call double @fmin(double %f, double 1.0) readnone
189-
store double %0, ptr %fp, align 8
190-
%1 = add i64 %invar_address.dim.0.01, 1
191-
%2 = icmp eq i64 %1, 2
192-
br i1 %2, label %loop_exit, label %loop_body
193-
194-
loop_exit:
195-
ret void
196-
}
197-
198-
; CHECK-LABEL: test3a:
199-
; CHECK-NOT: mtctr
200-
; CHECK: xsmindp
201-
; CHECK-NOT: xsmindp
202-
; CHECK-NOT: mtctr
203-
; CHECK: blr
204-
205132
define void @test4(double %f, ptr %fp) {
206133
entry:
207134
br label %loop_body
@@ -224,27 +151,3 @@ loop_exit:
224151
; CHECK-NOT: xsmaxdp
225152
; CHECK-NOT: mtctr
226153
; CHECK: blr
227-
228-
define void @test4a(double %f, ptr %fp) {
229-
entry:
230-
br label %loop_body
231-
232-
loop_body:
233-
%invar_address.dim.0.01 = phi i64 [ 0, %entry ], [ %1, %loop_body ]
234-
%0 = call double @fmax(double %f, double 1.0) readnone
235-
store double %0, ptr %fp, align 8
236-
%1 = add i64 %invar_address.dim.0.01, 1
237-
%2 = icmp eq i64 %1, 2
238-
br i1 %2, label %loop_exit, label %loop_body
239-
240-
loop_exit:
241-
ret void
242-
}
243-
244-
; CHECK-LABEL: test4a:
245-
; CHECK-NOT: mtctr
246-
; CHECK: xsmaxdp
247-
; CHECK-NOT: xsmaxdp
248-
; CHECK-NOT: mtctr
249-
; CHECK: blr
250-

llvm/test/CodeGen/PowerPC/fminnum.ll

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -54,43 +54,43 @@ define ppc_fp128 @test_fminl(ppc_fp128 %x, ppc_fp128 %y) {
5454
; CHECK-NEXT: stw 0, 116(1)
5555
; CHECK-NEXT: .cfi_def_cfa_offset 112
5656
; CHECK-NEXT: .cfi_offset lr, 4
57-
; CHECK-NEXT: stfd 1, 40(1)
58-
; CHECK-NEXT: lwz 3, 44(1)
59-
; CHECK-NEXT: stfd 2, 32(1)
60-
; CHECK-NEXT: stw 3, 60(1)
61-
; CHECK-NEXT: lwz 3, 40(1)
62-
; CHECK-NEXT: stfd 3, 72(1)
63-
; CHECK-NEXT: stw 3, 56(1)
64-
; CHECK-NEXT: lwz 3, 36(1)
65-
; CHECK-NEXT: stfd 4, 64(1)
66-
; CHECK-NEXT: stw 3, 52(1)
67-
; CHECK-NEXT: lwz 3, 32(1)
68-
; CHECK-NEXT: lfd 1, 56(1)
69-
; CHECK-NEXT: stw 3, 48(1)
70-
; CHECK-NEXT: lwz 3, 76(1)
71-
; CHECK-NEXT: lfd 2, 48(1)
72-
; CHECK-NEXT: stw 3, 92(1)
73-
; CHECK-NEXT: lwz 3, 72(1)
74-
; CHECK-NEXT: stw 3, 88(1)
75-
; CHECK-NEXT: lwz 3, 68(1)
76-
; CHECK-NEXT: lfd 3, 88(1)
77-
; CHECK-NEXT: stw 3, 84(1)
78-
; CHECK-NEXT: lwz 3, 64(1)
79-
; CHECK-NEXT: stw 3, 80(1)
80-
; CHECK-NEXT: lfd 4, 80(1)
81-
; CHECK-NEXT: bl fminl
82-
; CHECK-NEXT: stfd 1, 16(1)
83-
; CHECK-NEXT: lwz 3, 20(1)
84-
; CHECK-NEXT: stfd 2, 24(1)
57+
; CHECK-NEXT: stfd 1, 88(1)
58+
; CHECK-NEXT: lwz 3, 92(1)
59+
; CHECK-NEXT: stfd 2, 80(1)
8560
; CHECK-NEXT: stw 3, 108(1)
86-
; CHECK-NEXT: lwz 3, 16(1)
61+
; CHECK-NEXT: lwz 3, 88(1)
62+
; CHECK-NEXT: stfd 3, 56(1)
8763
; CHECK-NEXT: stw 3, 104(1)
88-
; CHECK-NEXT: lwz 3, 28(1)
89-
; CHECK-NEXT: lfd 1, 104(1)
64+
; CHECK-NEXT: lwz 3, 84(1)
65+
; CHECK-NEXT: stfd 4, 48(1)
9066
; CHECK-NEXT: stw 3, 100(1)
91-
; CHECK-NEXT: lwz 3, 24(1)
67+
; CHECK-NEXT: lwz 3, 80(1)
68+
; CHECK-NEXT: lfd 1, 104(1)
9269
; CHECK-NEXT: stw 3, 96(1)
70+
; CHECK-NEXT: lwz 3, 60(1)
9371
; CHECK-NEXT: lfd 2, 96(1)
72+
; CHECK-NEXT: stw 3, 76(1)
73+
; CHECK-NEXT: lwz 3, 56(1)
74+
; CHECK-NEXT: stw 3, 72(1)
75+
; CHECK-NEXT: lwz 3, 52(1)
76+
; CHECK-NEXT: lfd 3, 72(1)
77+
; CHECK-NEXT: stw 3, 68(1)
78+
; CHECK-NEXT: lwz 3, 48(1)
79+
; CHECK-NEXT: stw 3, 64(1)
80+
; CHECK-NEXT: lfd 4, 64(1)
81+
; CHECK-NEXT: bl fminl
82+
; CHECK-NEXT: stfd 1, 24(1)
83+
; CHECK-NEXT: lwz 3, 28(1)
84+
; CHECK-NEXT: stfd 2, 16(1)
85+
; CHECK-NEXT: stw 3, 44(1)
86+
; CHECK-NEXT: lwz 3, 24(1)
87+
; CHECK-NEXT: stw 3, 40(1)
88+
; CHECK-NEXT: lwz 3, 20(1)
89+
; CHECK-NEXT: lfd 1, 40(1)
90+
; CHECK-NEXT: stw 3, 36(1)
91+
; CHECK-NEXT: lwz 3, 16(1)
92+
; CHECK-NEXT: stw 3, 32(1)
93+
; CHECK-NEXT: lfd 2, 32(1)
9494
; CHECK-NEXT: lwz 0, 116(1)
9595
; CHECK-NEXT: addi 1, 1, 112
9696
; CHECK-NEXT: mtlr 0

llvm/test/CodeGen/SystemZ/vec-max-05.ll

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@ declare fp128 @llvm.maxnum.f128(fp128, fp128)
2222
declare fp128 @llvm.maximum.f128(fp128, fp128)
2323

2424
; Test the fmax library function.
25-
define double @f1(double %dummy, double %val1, double %val2) {
25+
define double @f1(double %dummy, double %val1, double %val2) nounwind {
2626
; CHECK-LABEL: f1:
2727
; CHECK: # %bb.0:
28-
; CHECK-NEXT: wfmaxdb %f0, %f2, %f4, 4
28+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
29+
; CHECK-NEXT: aghi %r15, -160
30+
; CHECK-NEXT: ldr %f0, %f2
31+
; CHECK-NEXT: ldr %f2, %f4
32+
; CHECK-NEXT: brasl %r14, fmax@PLT
33+
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
2934
; CHECK-NEXT: br %r14
3035
%ret = call double @fmax(double %val1, double %val2) readnone
3136
ret double %ret
@@ -99,10 +104,15 @@ define <2 x double> @f7(<2 x double> %dummy, <2 x double> %val1, <2 x double> %v
99104
}
100105

101106
; Test the fmaxf library function.
102-
define float @f11(float %dummy, float %val1, float %val2) {
107+
define float @f11(float %dummy, float %val1, float %val2) nounwind {
103108
; CHECK-LABEL: f11:
104109
; CHECK: # %bb.0:
105-
; CHECK-NEXT: wfmaxsb %f0, %f2, %f4, 4
110+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
111+
; CHECK-NEXT: aghi %r15, -160
112+
; CHECK-NEXT: ldr %f0, %f2
113+
; CHECK-NEXT: ldr %f2, %f4
114+
; CHECK-NEXT: brasl %r14, fmaxf@PLT
115+
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
106116
; CHECK-NEXT: br %r14
107117
%ret = call float @fmaxf(float %val1, float %val2) readnone
108118
ret float %ret
@@ -207,13 +217,23 @@ define <4 x float> @f17(<4 x float> %dummy, <4 x float> %val1,
207217
}
208218

209219
; Test the fmaxl library function.
210-
define void @f21(ptr %ptr1, ptr %ptr2, ptr %dst) {
220+
define void @f21(ptr %ptr1, ptr %ptr2, ptr %dst) nounwind {
211221
; CHECK-LABEL: f21:
212222
; CHECK: # %bb.0:
223+
; CHECK-NEXT: stmg %r13, %r15, 104(%r15)
224+
; CHECK-NEXT: aghi %r15, -208
213225
; CHECK-NEXT: vl %v0, 0(%r2), 3
214226
; CHECK-NEXT: vl %v1, 0(%r3), 3
215-
; CHECK-NEXT: wfmaxxb %v0, %v0, %v1, 4
216-
; CHECK-NEXT: vst %v0, 0(%r4), 3
227+
; CHECK-NEXT: lgr %r13, %r4
228+
; CHECK-NEXT: la %r2, 192(%r15)
229+
; CHECK-NEXT: la %r3, 176(%r15)
230+
; CHECK-NEXT: la %r4, 160(%r15)
231+
; CHECK-NEXT: vst %v1, 160(%r15), 3
232+
; CHECK-NEXT: vst %v0, 176(%r15), 3
233+
; CHECK-NEXT: brasl %r14, fmaxl@PLT
234+
; CHECK-NEXT: vl %v0, 192(%r15), 3
235+
; CHECK-NEXT: vst %v0, 0(%r13), 3
236+
; CHECK-NEXT: lmg %r13, %r15, 312(%r15)
217237
; CHECK-NEXT: br %r14
218238
%val1 = load fp128, ptr %ptr1
219239
%val2 = load fp128, ptr %ptr2

llvm/test/CodeGen/SystemZ/vec-min-05.ll

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@ declare fp128 @llvm.minnum.f128(fp128, fp128)
2222
declare fp128 @llvm.minimum.f128(fp128, fp128)
2323

2424
; Test the fmin library function.
25-
define double @f1(double %dummy, double %val1, double %val2) {
25+
define double @f1(double %dummy, double %val1, double %val2) nounwind {
2626
; CHECK-LABEL: f1:
2727
; CHECK: # %bb.0:
28-
; CHECK-NEXT: wfmindb %f0, %f2, %f4, 4
28+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
29+
; CHECK-NEXT: aghi %r15, -160
30+
; CHECK-NEXT: ldr %f0, %f2
31+
; CHECK-NEXT: ldr %f2, %f4
32+
; CHECK-NEXT: brasl %r14, fmin@PLT
33+
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
2934
; CHECK-NEXT: br %r14
3035
%ret = call double @fmin(double %val1, double %val2) readnone
3136
ret double %ret
@@ -99,10 +104,15 @@ define <2 x double> @f7(<2 x double> %dummy, <2 x double> %val1, <2 x double> %v
99104
}
100105

101106
; Test the fminf library function.
102-
define float @f11(float %dummy, float %val1, float %val2) {
107+
define float @f11(float %dummy, float %val1, float %val2) nounwind {
103108
; CHECK-LABEL: f11:
104109
; CHECK: # %bb.0:
105-
; CHECK-NEXT: wfminsb %f0, %f2, %f4, 4
110+
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
111+
; CHECK-NEXT: aghi %r15, -160
112+
; CHECK-NEXT: ldr %f0, %f2
113+
; CHECK-NEXT: ldr %f2, %f4
114+
; CHECK-NEXT: brasl %r14, fminf@PLT
115+
; CHECK-NEXT: lmg %r14, %r15, 272(%r15)
106116
; CHECK-NEXT: br %r14
107117
%ret = call float @fminf(float %val1, float %val2) readnone
108118
ret float %ret
@@ -207,13 +217,23 @@ define <4 x float> @f17(<4 x float> %dummy, <4 x float> %val1,
207217
}
208218

209219
; Test the fminl library function.
210-
define void @f21(ptr %ptr1, ptr %ptr2, ptr %dst) {
220+
define void @f21(ptr %ptr1, ptr %ptr2, ptr %dst) nounwind {
211221
; CHECK-LABEL: f21:
212222
; CHECK: # %bb.0:
223+
; CHECK-NEXT: stmg %r13, %r15, 104(%r15)
224+
; CHECK-NEXT: aghi %r15, -208
213225
; CHECK-NEXT: vl %v0, 0(%r2), 3
214226
; CHECK-NEXT: vl %v1, 0(%r3), 3
215-
; CHECK-NEXT: wfminxb %v0, %v0, %v1, 4
216-
; CHECK-NEXT: vst %v0, 0(%r4), 3
227+
; CHECK-NEXT: lgr %r13, %r4
228+
; CHECK-NEXT: la %r2, 192(%r15)
229+
; CHECK-NEXT: la %r3, 176(%r15)
230+
; CHECK-NEXT: la %r4, 160(%r15)
231+
; CHECK-NEXT: vst %v1, 160(%r15), 3
232+
; CHECK-NEXT: vst %v0, 176(%r15), 3
233+
; CHECK-NEXT: brasl %r14, fminl@PLT
234+
; CHECK-NEXT: vl %v0, 192(%r15), 3
235+
; CHECK-NEXT: vst %v0, 0(%r13), 3
236+
; CHECK-NEXT: lmg %r13, %r15, 312(%r15)
217237
; CHECK-NEXT: br %r14
218238
%val1 = load fp128, ptr %ptr1
219239
%val2 = load fp128, ptr %ptr2

0 commit comments

Comments
 (0)