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