xref: /llvm-project/llvm/test/CodeGen/VE/Vector/vec_add.ll (revision 44a679eaa40cf234c79c241012607ed5f7bada77)
1b955c7e6SSimon Moll; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
2b955c7e6SSimon Moll
3b955c7e6SSimon Moll; <256 x i32>
4b955c7e6SSimon Moll
5b955c7e6SSimon Moll; Function Attrs: nounwind
6b955c7e6SSimon Molldefine fastcc <256 x i32> @add_vv_v256i32(<256 x i32> %x, <256 x i32> %y) {
7b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i32:
8b955c7e6SSimon Moll; CHECK:       # %bb.0:
9b955c7e6SSimon Moll; CHECK-NEXT:    lea %s0, 256
10b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s0
11b955c7e6SSimon Moll; CHECK-NEXT:    vadds.w.sx %v0, %v0, %v1
12b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
13b955c7e6SSimon Moll  %z = add <256 x i32> %x, %y
14b955c7e6SSimon Moll  ret <256 x i32> %z
15b955c7e6SSimon Moll}
16b955c7e6SSimon Moll
17b955c7e6SSimon Moll; Function Attrs: nounwind
18b955c7e6SSimon Molldefine fastcc <256 x i32> @add_sv_v256i32(i32 %x, <256 x i32> %y) {
19b955c7e6SSimon Moll; CHECK-LABEL: add_sv_v256i32:
20b955c7e6SSimon Moll; CHECK:       # %bb.0:
21*44a679eaSKazushi (Jam) Marukawa; CHECK-NEXT:    and %s0, %s0, (32)0
22b955c7e6SSimon Moll; CHECK-NEXT:    lea %s1, 256
23b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s1
24b955c7e6SSimon Moll; CHECK-NEXT:    vadds.w.sx %v0, %s0, %v0
25b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
26b955c7e6SSimon Moll  %xins = insertelement <256 x i32> undef, i32 %x, i32 0
27b955c7e6SSimon Moll  %vx = shufflevector <256 x i32> %xins, <256 x i32> undef, <256 x i32> zeroinitializer
28b955c7e6SSimon Moll  %z = add <256 x i32> %vx, %y
29b955c7e6SSimon Moll  ret <256 x i32> %z
30b955c7e6SSimon Moll}
31b955c7e6SSimon Moll
32b955c7e6SSimon Moll; Function Attrs: nounwind
33b955c7e6SSimon Molldefine fastcc <256 x i32> @add_vs_v256i32(<256 x i32> %x, i32 %y) {
34b955c7e6SSimon Moll; CHECK-LABEL: add_vs_v256i32:
35b955c7e6SSimon Moll; CHECK:       # %bb.0:
36*44a679eaSKazushi (Jam) Marukawa; CHECK-NEXT:    and %s0, %s0, (32)0
37b955c7e6SSimon Moll; CHECK-NEXT:    lea %s1, 256
38b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s1
39b955c7e6SSimon Moll; CHECK-NEXT:    vadds.w.sx %v0, %s0, %v0
40b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
41b955c7e6SSimon Moll  %yins = insertelement <256 x i32> undef, i32 %y, i32 0
42b955c7e6SSimon Moll  %vy = shufflevector <256 x i32> %yins, <256 x i32> undef, <256 x i32> zeroinitializer
43b955c7e6SSimon Moll  %z = add <256 x i32> %x, %vy
44b955c7e6SSimon Moll  ret <256 x i32> %z
45b955c7e6SSimon Moll}
46b955c7e6SSimon Moll
47b955c7e6SSimon Moll
48b955c7e6SSimon Moll
49b955c7e6SSimon Moll; <256 x i64>
50b955c7e6SSimon Moll
51b955c7e6SSimon Moll; Function Attrs: nounwind
52b955c7e6SSimon Molldefine fastcc <256 x i64> @add_vv_v256i64(<256 x i64> %x, <256 x i64> %y) {
53b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i64:
54b955c7e6SSimon Moll; CHECK:       # %bb.0:
55b955c7e6SSimon Moll; CHECK-NEXT:    lea %s0, 256
56b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s0
57b955c7e6SSimon Moll; CHECK-NEXT:    vadds.l %v0, %v0, %v1
58b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
59b955c7e6SSimon Moll  %z = add <256 x i64> %x, %y
60b955c7e6SSimon Moll  ret <256 x i64> %z
61b955c7e6SSimon Moll}
62b955c7e6SSimon Moll
63b955c7e6SSimon Moll; Function Attrs: nounwind
64b955c7e6SSimon Molldefine fastcc <256 x i64> @add_sv_v256i64(i64 %x, <256 x i64> %y) {
65b955c7e6SSimon Moll; CHECK-LABEL: add_sv_v256i64:
66b955c7e6SSimon Moll; CHECK:       # %bb.0:
67b955c7e6SSimon Moll; CHECK-NEXT:    lea %s1, 256
68b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s1
69b955c7e6SSimon Moll; CHECK-NEXT:    vadds.l %v0, %s0, %v0
70b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
71b955c7e6SSimon Moll  %xins = insertelement <256 x i64> undef, i64 %x, i32 0
72b955c7e6SSimon Moll  %vx = shufflevector <256 x i64> %xins, <256 x i64> undef, <256 x i32> zeroinitializer
73b955c7e6SSimon Moll  %z = add <256 x i64> %vx, %y
74b955c7e6SSimon Moll  ret <256 x i64> %z
75b955c7e6SSimon Moll}
76b955c7e6SSimon Moll
77b955c7e6SSimon Moll; Function Attrs: nounwind
78b955c7e6SSimon Molldefine fastcc <256 x i64> @add_vs_v256i64(<256 x i64> %x, i64 %y) {
79b955c7e6SSimon Moll; CHECK-LABEL: add_vs_v256i64:
80b955c7e6SSimon Moll; CHECK:       # %bb.0:
81b955c7e6SSimon Moll; CHECK-NEXT:    lea %s1, 256
82b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s1
83b955c7e6SSimon Moll; CHECK-NEXT:    vadds.l %v0, %s0, %v0
84b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
85b955c7e6SSimon Moll  %yins = insertelement <256 x i64> undef, i64 %y, i32 0
86b955c7e6SSimon Moll  %vy = shufflevector <256 x i64> %yins, <256 x i64> undef, <256 x i32> zeroinitializer
87b955c7e6SSimon Moll  %z = add <256 x i64> %x, %vy
88b955c7e6SSimon Moll  ret <256 x i64> %z
89b955c7e6SSimon Moll}
90b955c7e6SSimon Moll
91b955c7e6SSimon Moll; <128 x i64>
92b955c7e6SSimon Moll; We expect this to be widened.
93b955c7e6SSimon Moll
94b955c7e6SSimon Moll; Function Attrs: nounwind
95b955c7e6SSimon Molldefine fastcc <128 x i64> @add_vv_v128i64(<128 x i64> %x, <128 x i64> %y) {
96b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v128i64:
97b955c7e6SSimon Moll; CHECK:       # %bb.0:
98b955c7e6SSimon Moll; CHECK-NEXT:    lea %s0, 256
99b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s0
100b955c7e6SSimon Moll; CHECK-NEXT:    vadds.l %v0, %v0, %v1
101b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
102b955c7e6SSimon Moll  %z = add <128 x i64> %x, %y
103b955c7e6SSimon Moll  ret <128 x i64> %z
104b955c7e6SSimon Moll}
105b955c7e6SSimon Moll
106b955c7e6SSimon Moll; <256 x i16>
107b955c7e6SSimon Moll; We expect promotion.
108b955c7e6SSimon Moll
109b955c7e6SSimon Moll; Function Attrs: nounwind
110b955c7e6SSimon Molldefine fastcc <256 x i16> @add_vv_v256i16(<256 x i16> %x, <256 x i16> %y) {
111b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v256i16:
112b955c7e6SSimon Moll; CHECK:       # %bb.0:
113b955c7e6SSimon Moll; CHECK-NEXT:    lea %s0, 256
114b955c7e6SSimon Moll; CHECK-NEXT:    lvl %s0
115b955c7e6SSimon Moll; CHECK-NEXT:    vadds.w.sx %v0, %v0, %v1
116b955c7e6SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
117b955c7e6SSimon Moll  %z = add <256 x i16> %x, %y
118b955c7e6SSimon Moll  ret <256 x i16> %z
119b955c7e6SSimon Moll}
120b955c7e6SSimon Moll
121b955c7e6SSimon Moll; <128 x i16>
122b955c7e6SSimon Moll; We expect this to be scalarized (for now).
123b955c7e6SSimon Moll
124b955c7e6SSimon Moll; Function Attrs: nounwind
125b955c7e6SSimon Molldefine fastcc <128 x i16> @add_vv_v128i16(<128 x i16> %x, <128 x i16> %y) {
126b955c7e6SSimon Moll; CHECK-LABEL: add_vv_v128i16:
127b955c7e6SSimon Moll; CHECK-NOT:     vadd
128b955c7e6SSimon Moll  %z = add <128 x i16> %x, %y
129b955c7e6SSimon Moll  ret <128 x i16> %z
130b955c7e6SSimon Moll}
131b955c7e6SSimon Moll
132