Skip to content

Commit 3ee87a9

Browse files
committed
Precommit test updates
1 parent 559f919 commit 3ee87a9

File tree

3 files changed

+491
-57
lines changed

3 files changed

+491
-57
lines changed
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc --mtriple=aarch64 -mattr=+fullfp16 < %s | FileCheck %s
3+
; RUN: llc --mtriple=aarch64 < %s | FileCheck %s --check-prefix=CHECKNOFP16
4+
5+
define half @faddp_2xhalf(<2 x half> %a) {
6+
; CHECK-LABEL: faddp_2xhalf:
7+
; CHECK: // %bb.0: // %entry
8+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
9+
; CHECK-NEXT: dup v1.4h, v0.h[1]
10+
; CHECK-NEXT: fadd v0.4h, v0.4h, v1.4h
11+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
12+
; CHECK-NEXT: ret
13+
;
14+
; CHECKNOFP16-LABEL: faddp_2xhalf:
15+
; CHECKNOFP16: // %bb.0: // %entry
16+
; CHECKNOFP16-NEXT: // kill: def $d0 killed $d0 def $q0
17+
; CHECKNOFP16-NEXT: dup v1.4h, v0.h[1]
18+
; CHECKNOFP16-NEXT: fcvtl v1.4s, v1.4h
19+
; CHECKNOFP16-NEXT: fcvtl v0.4s, v0.4h
20+
; CHECKNOFP16-NEXT: fadd v0.4s, v0.4s, v1.4s
21+
; CHECKNOFP16-NEXT: fcvtn v0.4h, v0.4s
22+
; CHECKNOFP16-NEXT: // kill: def $h0 killed $h0 killed $q0
23+
; CHECKNOFP16-NEXT: ret
24+
entry:
25+
%shift = shufflevector <2 x half> %a, <2 x half> undef, <2 x i32> <i32 1, i32 undef>
26+
%0 = fadd <2 x half> %a, %shift
27+
%1 = extractelement <2 x half> %0, i32 0
28+
ret half %1
29+
}
30+
31+
define half @faddp_2xhalf_commute(<2 x half> %a) {
32+
; CHECK-LABEL: faddp_2xhalf_commute:
33+
; CHECK: // %bb.0: // %entry
34+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
35+
; CHECK-NEXT: dup v1.4h, v0.h[1]
36+
; CHECK-NEXT: fadd v0.4h, v1.4h, v0.4h
37+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
38+
; CHECK-NEXT: ret
39+
;
40+
; CHECKNOFP16-LABEL: faddp_2xhalf_commute:
41+
; CHECKNOFP16: // %bb.0: // %entry
42+
; CHECKNOFP16-NEXT: // kill: def $d0 killed $d0 def $q0
43+
; CHECKNOFP16-NEXT: dup v1.4h, v0.h[1]
44+
; CHECKNOFP16-NEXT: fcvtl v1.4s, v1.4h
45+
; CHECKNOFP16-NEXT: fcvtl v0.4s, v0.4h
46+
; CHECKNOFP16-NEXT: fadd v0.4s, v1.4s, v0.4s
47+
; CHECKNOFP16-NEXT: fcvtn v0.4h, v0.4s
48+
; CHECKNOFP16-NEXT: // kill: def $h0 killed $h0 killed $q0
49+
; CHECKNOFP16-NEXT: ret
50+
entry:
51+
%shift = shufflevector <2 x half> %a, <2 x half> undef, <2 x i32> <i32 1, i32 undef>
52+
%0 = fadd <2 x half> %shift, %a
53+
%1 = extractelement <2 x half> %0, i32 0
54+
ret half %1
55+
}
56+
57+
define half @faddp_4xhalf(<4 x half> %a) {
58+
; CHECK-LABEL: faddp_4xhalf:
59+
; CHECK: // %bb.0: // %entry
60+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
61+
; CHECK-NEXT: dup v1.4h, v0.h[1]
62+
; CHECK-NEXT: fadd v0.4h, v0.4h, v1.4h
63+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
64+
; CHECK-NEXT: ret
65+
;
66+
; CHECKNOFP16-LABEL: faddp_4xhalf:
67+
; CHECKNOFP16: // %bb.0: // %entry
68+
; CHECKNOFP16-NEXT: // kill: def $d0 killed $d0 def $q0
69+
; CHECKNOFP16-NEXT: dup v1.4h, v0.h[1]
70+
; CHECKNOFP16-NEXT: fcvtl v1.4s, v1.4h
71+
; CHECKNOFP16-NEXT: fcvtl v0.4s, v0.4h
72+
; CHECKNOFP16-NEXT: fadd v0.4s, v0.4s, v1.4s
73+
; CHECKNOFP16-NEXT: fcvtn v0.4h, v0.4s
74+
; CHECKNOFP16-NEXT: // kill: def $h0 killed $h0 killed $q0
75+
; CHECKNOFP16-NEXT: ret
76+
entry:
77+
%shift = shufflevector <4 x half> %a, <4 x half> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
78+
%0 = fadd <4 x half> %a, %shift
79+
%1 = extractelement <4 x half> %0, i32 0
80+
ret half %1
81+
}
82+
83+
define half @faddp_4xhalf_commute(<4 x half> %a) {
84+
; CHECK-LABEL: faddp_4xhalf_commute:
85+
; CHECK: // %bb.0: // %entry
86+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
87+
; CHECK-NEXT: dup v1.4h, v0.h[1]
88+
; CHECK-NEXT: fadd v0.4h, v1.4h, v0.4h
89+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
90+
; CHECK-NEXT: ret
91+
;
92+
; CHECKNOFP16-LABEL: faddp_4xhalf_commute:
93+
; CHECKNOFP16: // %bb.0: // %entry
94+
; CHECKNOFP16-NEXT: // kill: def $d0 killed $d0 def $q0
95+
; CHECKNOFP16-NEXT: dup v1.4h, v0.h[1]
96+
; CHECKNOFP16-NEXT: fcvtl v1.4s, v1.4h
97+
; CHECKNOFP16-NEXT: fcvtl v0.4s, v0.4h
98+
; CHECKNOFP16-NEXT: fadd v0.4s, v1.4s, v0.4s
99+
; CHECKNOFP16-NEXT: fcvtn v0.4h, v0.4s
100+
; CHECKNOFP16-NEXT: // kill: def $h0 killed $h0 killed $q0
101+
; CHECKNOFP16-NEXT: ret
102+
entry:
103+
%shift = shufflevector <4 x half> %a, <4 x half> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
104+
%0 = fadd <4 x half> %shift, %a
105+
%1 = extractelement <4 x half> %0, i32 0
106+
ret half %1
107+
}
108+
109+
define half @faddp_8xhalf(<8 x half> %a) {
110+
; CHECK-LABEL: faddp_8xhalf:
111+
; CHECK: // %bb.0: // %entry
112+
; CHECK-NEXT: dup v1.8h, v0.h[1]
113+
; CHECK-NEXT: fadd v0.8h, v0.8h, v1.8h
114+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
115+
; CHECK-NEXT: ret
116+
;
117+
; CHECKNOFP16-LABEL: faddp_8xhalf:
118+
; CHECKNOFP16: // %bb.0: // %entry
119+
; CHECKNOFP16-NEXT: dup v1.8h, v0.h[1]
120+
; CHECKNOFP16-NEXT: fcvt s0, h0
121+
; CHECKNOFP16-NEXT: fcvt s1, h1
122+
; CHECKNOFP16-NEXT: fadd s0, s0, s1
123+
; CHECKNOFP16-NEXT: fcvt h0, s0
124+
; CHECKNOFP16-NEXT: ret
125+
entry:
126+
%shift = shufflevector <8 x half> %a, <8 x half> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
127+
%0 = fadd <8 x half> %a, %shift
128+
%1 = extractelement <8 x half> %0, i32 0
129+
ret half %1
130+
}
131+
132+
define half @faddp_8xhalf_commute(<8 x half> %a) {
133+
; CHECK-LABEL: faddp_8xhalf_commute:
134+
; CHECK: // %bb.0: // %entry
135+
; CHECK-NEXT: dup v1.8h, v0.h[1]
136+
; CHECK-NEXT: fadd v0.8h, v1.8h, v0.8h
137+
; CHECK-NEXT: // kill: def $h0 killed $h0 killed $q0
138+
; CHECK-NEXT: ret
139+
;
140+
; CHECKNOFP16-LABEL: faddp_8xhalf_commute:
141+
; CHECKNOFP16: // %bb.0: // %entry
142+
; CHECKNOFP16-NEXT: dup v1.8h, v0.h[1]
143+
; CHECKNOFP16-NEXT: fcvt s0, h0
144+
; CHECKNOFP16-NEXT: fcvt s1, h1
145+
; CHECKNOFP16-NEXT: fadd s0, s1, s0
146+
; CHECKNOFP16-NEXT: fcvt h0, s0
147+
; CHECKNOFP16-NEXT: ret
148+
entry:
149+
%shift = shufflevector <8 x half> %a, <8 x half> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
150+
%0 = fadd <8 x half> %shift, %a
151+
%1 = extractelement <8 x half> %0, i32 0
152+
ret half %1
153+
}

llvm/test/CodeGen/AArch64/faddp.ll

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc --mtriple aarch64 < %s | FileCheck %s
3+
4+
define float @faddp_2xfloat(<2 x float> %a) {
5+
; CHECK-LABEL: faddp_2xfloat:
6+
; CHECK: // %bb.0: // %entry
7+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
8+
; CHECK-NEXT: dup v1.2s, v0.s[1]
9+
; CHECK-NEXT: fadd v0.2s, v0.2s, v1.2s
10+
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
11+
; CHECK-NEXT: ret
12+
entry:
13+
%shift = shufflevector <2 x float> %a, <2 x float> undef, <2 x i32> <i32 1, i32 undef>
14+
%0 = fadd <2 x float> %a, %shift
15+
%1 = extractelement <2 x float> %0, i32 0
16+
ret float %1
17+
}
18+
19+
define float @faddp_4xfloat(<4 x float> %a) {
20+
; CHECK-LABEL: faddp_4xfloat:
21+
; CHECK: // %bb.0: // %entry
22+
; CHECK-NEXT: dup v1.4s, v0.s[1]
23+
; CHECK-NEXT: fadd v0.4s, v0.4s, v1.4s
24+
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
25+
; CHECK-NEXT: ret
26+
entry:
27+
%shift = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
28+
%0 = fadd <4 x float> %a, %shift
29+
%1 = extractelement <4 x float> %0, i32 0
30+
ret float %1
31+
}
32+
33+
define float @faddp_4xfloat_commute(<4 x float> %a) {
34+
; CHECK-LABEL: faddp_4xfloat_commute:
35+
; CHECK: // %bb.0: // %entry
36+
; CHECK-NEXT: dup v1.4s, v0.s[1]
37+
; CHECK-NEXT: fadd v0.4s, v1.4s, v0.4s
38+
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
39+
; CHECK-NEXT: ret
40+
entry:
41+
%shift = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
42+
%0 = fadd <4 x float> %shift, %a
43+
%1 = extractelement <4 x float> %0, i32 0
44+
ret float %1
45+
}
46+
47+
define float @faddp_2xfloat_commute(<2 x float> %a) {
48+
; CHECK-LABEL: faddp_2xfloat_commute:
49+
; CHECK: // %bb.0: // %entry
50+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
51+
; CHECK-NEXT: dup v1.2s, v0.s[1]
52+
; CHECK-NEXT: fadd v0.2s, v1.2s, v0.2s
53+
; CHECK-NEXT: // kill: def $s0 killed $s0 killed $q0
54+
; CHECK-NEXT: ret
55+
entry:
56+
%shift = shufflevector <2 x float> %a, <2 x float> undef, <2 x i32> <i32 1, i32 undef>
57+
%0 = fadd <2 x float> %shift, %a
58+
%1 = extractelement <2 x float> %0, i32 0
59+
ret float %1
60+
}
61+
62+
define double @faddp_2xdouble(<2 x double> %a) {
63+
; CHECK-LABEL: faddp_2xdouble:
64+
; CHECK: // %bb.0: // %entry
65+
; CHECK-NEXT: dup v1.2d, v0.d[1]
66+
; CHECK-NEXT: fadd v0.2d, v0.2d, v1.2d
67+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
68+
; CHECK-NEXT: ret
69+
entry:
70+
%shift = shufflevector <2 x double> %a, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
71+
%0 = fadd <2 x double> %a, %shift
72+
%1 = extractelement <2 x double> %0, i32 0
73+
ret double %1
74+
}
75+
76+
define double @faddp_2xdouble_commute(<2 x double> %a) {
77+
; CHECK-LABEL: faddp_2xdouble_commute:
78+
; CHECK: // %bb.0: // %entry
79+
; CHECK-NEXT: dup v1.2d, v0.d[1]
80+
; CHECK-NEXT: fadd v0.2d, v1.2d, v0.2d
81+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
82+
; CHECK-NEXT: ret
83+
entry:
84+
%shift = shufflevector <2 x double> %a, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
85+
%0 = fadd <2 x double> %shift, %a
86+
%1 = extractelement <2 x double> %0, i32 0
87+
ret double %1
88+
}
89+
90+
define i64 @addp_2xi64(<2 x i64> %a) {
91+
; CHECK-LABEL: addp_2xi64:
92+
; CHECK: // %bb.0: // %entry
93+
; CHECK-NEXT: dup v1.2d, v0.d[1]
94+
; CHECK-NEXT: add v0.2d, v0.2d, v1.2d
95+
; CHECK-NEXT: fmov x0, d0
96+
; CHECK-NEXT: ret
97+
entry:
98+
%shift = shufflevector <2 x i64> %a, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
99+
%0 = add <2 x i64> %a, %shift
100+
%1 = extractelement <2 x i64> %0, i32 0
101+
ret i64 %1
102+
}
103+
104+
define i64 @addp_2xi64_commute(<2 x i64> %a) {
105+
; CHECK-LABEL: addp_2xi64_commute:
106+
; CHECK: // %bb.0: // %entry
107+
; CHECK-NEXT: dup v1.2d, v0.d[1]
108+
; CHECK-NEXT: add v0.2d, v1.2d, v0.2d
109+
; CHECK-NEXT: fmov x0, d0
110+
; CHECK-NEXT: ret
111+
entry:
112+
%shift = shufflevector <2 x i64> %a, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
113+
%0 = add <2 x i64> %shift, %a
114+
%1 = extractelement <2 x i64> %0, i32 0
115+
ret i64 %1
116+
}

0 commit comments

Comments
 (0)