Skip to content

Commit 7efc861

Browse files
committed
[AArch64][GlobalISel] Add test coverage for fdiv-combine.ll. NFC
1 parent f3021e7 commit 7efc861

File tree

1 file changed

+105
-51
lines changed

1 file changed

+105
-51
lines changed

llvm/test/CodeGen/AArch64/fdiv-combine.ll

Lines changed: 105 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc -mtriple=aarch64-unknown-unknown < %s | FileCheck %s
2+
; RUN: llc -mtriple=aarch64-unknown-unknown < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3+
; RUN: llc -mtriple=aarch64-unknown-unknown < %s -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
4+
5+
; CHECK-GI: warning: Instruction selection used fallback path for splat_fdiv_nxv4f32
6+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for splat_three_fdiv_nxv4f32
7+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for splat_fdiv_nxv2f64
8+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for splat_two_fdiv_nxv2f64
39

410
; Following test cases check:
511
; a / D; b / D; c / D;
612
; =>
713
; recip = 1.0 / D; a * recip; b * recip; c * recip;
814
define void @three_fdiv_float(float %D, float %a, float %b, float %c) #0 {
9-
; CHECK-LABEL: three_fdiv_float:
10-
; CHECK: // %bb.0:
11-
; CHECK-NEXT: fmov s4, #1.00000000
12-
; CHECK-NEXT: fdiv s4, s4, s0
13-
; CHECK-NEXT: fmul s0, s1, s4
14-
; CHECK-NEXT: fmul s1, s2, s4
15-
; CHECK-NEXT: fmul s2, s3, s4
16-
; CHECK-NEXT: b foo_3f
15+
; CHECK-SD-LABEL: three_fdiv_float:
16+
; CHECK-SD: // %bb.0:
17+
; CHECK-SD-NEXT: fmov s4, #1.00000000
18+
; CHECK-SD-NEXT: fdiv s4, s4, s0
19+
; CHECK-SD-NEXT: fmul s0, s1, s4
20+
; CHECK-SD-NEXT: fmul s1, s2, s4
21+
; CHECK-SD-NEXT: fmul s2, s3, s4
22+
; CHECK-SD-NEXT: b foo_3f
23+
;
24+
; CHECK-GI-LABEL: three_fdiv_float:
25+
; CHECK-GI: // %bb.0:
26+
; CHECK-GI-NEXT: fdiv s4, s1, s0
27+
; CHECK-GI-NEXT: fdiv s1, s2, s0
28+
; CHECK-GI-NEXT: fdiv s2, s3, s0
29+
; CHECK-GI-NEXT: fmov s0, s4
30+
; CHECK-GI-NEXT: b foo_3f
1731
%div = fdiv float %a, %D
1832
%div1 = fdiv float %b, %D
1933
%div2 = fdiv float %c, %D
@@ -22,14 +36,22 @@ define void @three_fdiv_float(float %D, float %a, float %b, float %c) #0 {
2236
}
2337

2438
define void @three_fdiv_double(double %D, double %a, double %b, double %c) #0 {
25-
; CHECK-LABEL: three_fdiv_double:
26-
; CHECK: // %bb.0:
27-
; CHECK-NEXT: fmov d4, #1.00000000
28-
; CHECK-NEXT: fdiv d4, d4, d0
29-
; CHECK-NEXT: fmul d0, d1, d4
30-
; CHECK-NEXT: fmul d1, d2, d4
31-
; CHECK-NEXT: fmul d2, d3, d4
32-
; CHECK-NEXT: b foo_3d
39+
; CHECK-SD-LABEL: three_fdiv_double:
40+
; CHECK-SD: // %bb.0:
41+
; CHECK-SD-NEXT: fmov d4, #1.00000000
42+
; CHECK-SD-NEXT: fdiv d4, d4, d0
43+
; CHECK-SD-NEXT: fmul d0, d1, d4
44+
; CHECK-SD-NEXT: fmul d1, d2, d4
45+
; CHECK-SD-NEXT: fmul d2, d3, d4
46+
; CHECK-SD-NEXT: b foo_3d
47+
;
48+
; CHECK-GI-LABEL: three_fdiv_double:
49+
; CHECK-GI: // %bb.0:
50+
; CHECK-GI-NEXT: fdiv d4, d1, d0
51+
; CHECK-GI-NEXT: fdiv d1, d2, d0
52+
; CHECK-GI-NEXT: fdiv d2, d3, d0
53+
; CHECK-GI-NEXT: fmov d0, d4
54+
; CHECK-GI-NEXT: b foo_3d
3355
%div = fdiv double %a, %D
3456
%div1 = fdiv double %b, %D
3557
%div2 = fdiv double %c, %D
@@ -38,14 +60,22 @@ define void @three_fdiv_double(double %D, double %a, double %b, double %c) #0 {
3860
}
3961

4062
define void @three_fdiv_4xfloat(<4 x float> %D, <4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
41-
; CHECK-LABEL: three_fdiv_4xfloat:
42-
; CHECK: // %bb.0:
43-
; CHECK-NEXT: fmov v4.4s, #1.00000000
44-
; CHECK-NEXT: fdiv v4.4s, v4.4s, v0.4s
45-
; CHECK-NEXT: fmul v0.4s, v1.4s, v4.4s
46-
; CHECK-NEXT: fmul v1.4s, v2.4s, v4.4s
47-
; CHECK-NEXT: fmul v2.4s, v3.4s, v4.4s
48-
; CHECK-NEXT: b foo_3_4xf
63+
; CHECK-SD-LABEL: three_fdiv_4xfloat:
64+
; CHECK-SD: // %bb.0:
65+
; CHECK-SD-NEXT: fmov v4.4s, #1.00000000
66+
; CHECK-SD-NEXT: fdiv v4.4s, v4.4s, v0.4s
67+
; CHECK-SD-NEXT: fmul v0.4s, v1.4s, v4.4s
68+
; CHECK-SD-NEXT: fmul v1.4s, v2.4s, v4.4s
69+
; CHECK-SD-NEXT: fmul v2.4s, v3.4s, v4.4s
70+
; CHECK-SD-NEXT: b foo_3_4xf
71+
;
72+
; CHECK-GI-LABEL: three_fdiv_4xfloat:
73+
; CHECK-GI: // %bb.0:
74+
; CHECK-GI-NEXT: fdiv v4.4s, v1.4s, v0.4s
75+
; CHECK-GI-NEXT: fdiv v1.4s, v2.4s, v0.4s
76+
; CHECK-GI-NEXT: fdiv v2.4s, v3.4s, v0.4s
77+
; CHECK-GI-NEXT: mov v0.16b, v4.16b
78+
; CHECK-GI-NEXT: b foo_3_4xf
4979
%div = fdiv <4 x float> %a, %D
5080
%div1 = fdiv <4 x float> %b, %D
5181
%div2 = fdiv <4 x float> %c, %D
@@ -54,14 +84,22 @@ define void @three_fdiv_4xfloat(<4 x float> %D, <4 x float> %a, <4 x float> %b,
5484
}
5585

5686
define void @three_fdiv_2xdouble(<2 x double> %D, <2 x double> %a, <2 x double> %b, <2 x double> %c) #0 {
57-
; CHECK-LABEL: three_fdiv_2xdouble:
58-
; CHECK: // %bb.0:
59-
; CHECK-NEXT: fmov v4.2d, #1.00000000
60-
; CHECK-NEXT: fdiv v4.2d, v4.2d, v0.2d
61-
; CHECK-NEXT: fmul v0.2d, v1.2d, v4.2d
62-
; CHECK-NEXT: fmul v1.2d, v2.2d, v4.2d
63-
; CHECK-NEXT: fmul v2.2d, v3.2d, v4.2d
64-
; CHECK-NEXT: b foo_3_2xd
87+
; CHECK-SD-LABEL: three_fdiv_2xdouble:
88+
; CHECK-SD: // %bb.0:
89+
; CHECK-SD-NEXT: fmov v4.2d, #1.00000000
90+
; CHECK-SD-NEXT: fdiv v4.2d, v4.2d, v0.2d
91+
; CHECK-SD-NEXT: fmul v0.2d, v1.2d, v4.2d
92+
; CHECK-SD-NEXT: fmul v1.2d, v2.2d, v4.2d
93+
; CHECK-SD-NEXT: fmul v2.2d, v3.2d, v4.2d
94+
; CHECK-SD-NEXT: b foo_3_2xd
95+
;
96+
; CHECK-GI-LABEL: three_fdiv_2xdouble:
97+
; CHECK-GI: // %bb.0:
98+
; CHECK-GI-NEXT: fdiv v4.2d, v1.2d, v0.2d
99+
; CHECK-GI-NEXT: fdiv v1.2d, v2.2d, v0.2d
100+
; CHECK-GI-NEXT: fdiv v2.2d, v3.2d, v0.2d
101+
; CHECK-GI-NEXT: mov v0.16b, v4.16b
102+
; CHECK-GI-NEXT: b foo_3_2xd
65103
%div = fdiv <2 x double> %a, %D
66104
%div1 = fdiv <2 x double> %b, %D
67105
%div2 = fdiv <2 x double> %c, %D
@@ -98,16 +136,25 @@ define void @two_fdiv_double(double %D, double %a, double %b) #0 {
98136
}
99137

100138
define void @splat_three_fdiv_4xfloat(float %D, <4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
101-
; CHECK-LABEL: splat_three_fdiv_4xfloat:
102-
; CHECK: // %bb.0:
103-
; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0
104-
; CHECK-NEXT: fmov v4.4s, #1.00000000
105-
; CHECK-NEXT: dup v0.4s, v0.s[0]
106-
; CHECK-NEXT: fdiv v4.4s, v4.4s, v0.4s
107-
; CHECK-NEXT: fmul v0.4s, v1.4s, v4.4s
108-
; CHECK-NEXT: fmul v1.4s, v2.4s, v4.4s
109-
; CHECK-NEXT: fmul v2.4s, v3.4s, v4.4s
110-
; CHECK-NEXT: b foo_3_4xf
139+
; CHECK-SD-LABEL: splat_three_fdiv_4xfloat:
140+
; CHECK-SD: // %bb.0:
141+
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
142+
; CHECK-SD-NEXT: fmov v4.4s, #1.00000000
143+
; CHECK-SD-NEXT: dup v0.4s, v0.s[0]
144+
; CHECK-SD-NEXT: fdiv v4.4s, v4.4s, v0.4s
145+
; CHECK-SD-NEXT: fmul v0.4s, v1.4s, v4.4s
146+
; CHECK-SD-NEXT: fmul v1.4s, v2.4s, v4.4s
147+
; CHECK-SD-NEXT: fmul v2.4s, v3.4s, v4.4s
148+
; CHECK-SD-NEXT: b foo_3_4xf
149+
;
150+
; CHECK-GI-LABEL: splat_three_fdiv_4xfloat:
151+
; CHECK-GI: // %bb.0:
152+
; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
153+
; CHECK-GI-NEXT: dup v4.4s, v0.s[0]
154+
; CHECK-GI-NEXT: fdiv v0.4s, v1.4s, v4.4s
155+
; CHECK-GI-NEXT: fdiv v1.4s, v2.4s, v4.4s
156+
; CHECK-GI-NEXT: fdiv v2.4s, v3.4s, v4.4s
157+
; CHECK-GI-NEXT: b foo_3_4xf
111158
%D.ins = insertelement <4 x float> poison, float %D, i64 0
112159
%splat = shufflevector <4 x float> %D.ins, <4 x float> poison, <4 x i32> zeroinitializer
113160
%div = fdiv <4 x float> %a, %splat
@@ -118,14 +165,21 @@ define void @splat_three_fdiv_4xfloat(float %D, <4 x float> %a, <4 x float> %b,
118165
}
119166

120167
define <4 x float> @splat_fdiv_v4f32(float %D, <4 x float> %a) #1 {
121-
; CHECK-LABEL: splat_fdiv_v4f32:
122-
; CHECK: // %bb.0: // %entry
123-
; CHECK-NEXT: // kill: def $s0 killed $s0 def $q0
124-
; CHECK-NEXT: fmov v2.4s, #1.00000000
125-
; CHECK-NEXT: dup v0.4s, v0.s[0]
126-
; CHECK-NEXT: fdiv v0.4s, v2.4s, v0.4s
127-
; CHECK-NEXT: fmul v0.4s, v1.4s, v0.4s
128-
; CHECK-NEXT: ret
168+
; CHECK-SD-LABEL: splat_fdiv_v4f32:
169+
; CHECK-SD: // %bb.0: // %entry
170+
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
171+
; CHECK-SD-NEXT: fmov v2.4s, #1.00000000
172+
; CHECK-SD-NEXT: dup v0.4s, v0.s[0]
173+
; CHECK-SD-NEXT: fdiv v0.4s, v2.4s, v0.4s
174+
; CHECK-SD-NEXT: fmul v0.4s, v1.4s, v0.4s
175+
; CHECK-SD-NEXT: ret
176+
;
177+
; CHECK-GI-LABEL: splat_fdiv_v4f32:
178+
; CHECK-GI: // %bb.0: // %entry
179+
; CHECK-GI-NEXT: // kill: def $s0 killed $s0 def $q0
180+
; CHECK-GI-NEXT: dup v0.4s, v0.s[0]
181+
; CHECK-GI-NEXT: fdiv v0.4s, v1.4s, v0.4s
182+
; CHECK-GI-NEXT: ret
129183
entry:
130184
%D.ins = insertelement <4 x float> poison, float %D, i64 0
131185
%splat = shufflevector <4 x float> %D.ins, <4 x float> poison, <4 x i32> zeroinitializer

0 commit comments

Comments
 (0)