[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / VE / Vector / extract_elt.ll
blobc9c2228f74b0fcbe809491100b650572d3720a56
1 ; RUN: llc < %s -mtriple=ve-unknown-unknown -mattr=+vpu | FileCheck %s
4 ;;; <256 x i64>
6 define fastcc i64 @extract_rr_v256i64(i32 signext %idx, <256 x i64> %v) {
7 ; CHECK-LABEL: extract_rr_v256i64:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
10 ; CHECK-NEXT:    b.l.t (, %s10)
11   %ret = extractelement <256 x i64> %v, i32 %idx
12   ret i64 %ret
15 define fastcc i64 @extract_ri7_v256i64(<256 x i64> %v) {
16 ; CHECK-LABEL: extract_ri7_v256i64:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    lvs %s0, %v0(127)
19 ; CHECK-NEXT:    b.l.t (, %s10)
20   %ret = extractelement <256 x i64> %v, i32 127
21   ret i64 %ret
24 define fastcc i64 @extract_ri8_v256i64(<256 x i64> %v) {
25 ; CHECK-LABEL: extract_ri8_v256i64:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    lea %s0, 128
28 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
29 ; CHECK-NEXT:    b.l.t (, %s10)
30   %ret = extractelement <256 x i64> %v, i32 128
31   ret i64 %ret
34 define fastcc i64 @extract_ri_v512i64(<512 x i64> %v) {
35 ; CHECK-LABEL: extract_ri_v512i64:
36 ; CHECK:       # %bb.0:
37 ; CHECK-NEXT:    lvs %s0, %v1(116)
38 ; CHECK-NEXT:    b.l.t (, %s10)
39   %ret = extractelement <512 x i64> %v, i32 372
40   ret i64 %ret
43 ;;; <256 x i32>
45 define fastcc i32 @extract_rr_v256i32(i32 signext %idx, <256 x i32> %v) {
46 ; CHECK-LABEL: extract_rr_v256i32:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
49 ; CHECK-NEXT:    b.l.t (, %s10)
50   %ret = extractelement <256 x i32> %v, i32 %idx
51   ret i32 %ret
54 define fastcc i32 @extract_ri7_v256i32(<256 x i32> %v) {
55 ; CHECK-LABEL: extract_ri7_v256i32:
56 ; CHECK:       # %bb.0:
57 ; CHECK-NEXT:    lvs %s0, %v0(127)
58 ; CHECK-NEXT:    b.l.t (, %s10)
59   %ret = extractelement <256 x i32> %v, i32 127
60   ret i32 %ret
63 define fastcc i32 @extract_ri8_v256i32(<256 x i32> %v) {
64 ; CHECK-LABEL: extract_ri8_v256i32:
65 ; CHECK:       # %bb.0:
66 ; CHECK-NEXT:    lea %s0, 128
67 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
68 ; CHECK-NEXT:    b.l.t (, %s10)
69   %ret = extractelement <256 x i32> %v, i32 128
70   ret i32 %ret
73 define fastcc i32 @extract_ri_v512i32(<512 x i32> %v) {
74 ; CHECK-LABEL: extract_ri_v512i32:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    lea %s0, 186
77 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
78 ; CHECK-NEXT:    srl %s0, %s0, 32
79 ; CHECK-NEXT:    b.l.t (, %s10)
80   %ret = extractelement <512 x i32> %v, i32 372
81   ret i32 %ret
84 define fastcc i32 @extract_rr_v512i32(<512 x i32> %v, i32 signext %idx) {
85 ; CHECK-LABEL: extract_rr_v512i32:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    srl %s1, %s0, 1
88 ; CHECK-NEXT:    lvs %s1, %v0(%s1)
89 ; CHECK-NEXT:    nnd %s0, %s0, (63)0
90 ; CHECK-NEXT:    sla.w.sx %s0, %s0, 5
91 ; CHECK-NEXT:    srl %s0, %s1, %s0
92 ; CHECK-NEXT:    and %s0, %s0, (32)0
93 ; CHECK-NEXT:    b.l.t (, %s10)
94   %ret = extractelement <512 x i32> %v, i32 %idx
95   ret i32 %ret
98 ;;; <256 x double>
100 define fastcc double @extract_rr_v256f64(i32 signext %idx, <256 x double> %v) {
101 ; CHECK-LABEL: extract_rr_v256f64:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
104 ; CHECK-NEXT:    b.l.t (, %s10)
105   %ret = extractelement <256 x double> %v, i32 %idx
106   ret double %ret
109 define fastcc double @extract_ri7_v256f64(<256 x double> %v) {
110 ; CHECK-LABEL: extract_ri7_v256f64:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    lvs %s0, %v0(127)
113 ; CHECK-NEXT:    b.l.t (, %s10)
114   %ret = extractelement <256 x double> %v, i32 127
115   ret double %ret
118 define fastcc double @extract_ri8_v256f64(<256 x double> %v) {
119 ; CHECK-LABEL: extract_ri8_v256f64:
120 ; CHECK:       # %bb.0:
121 ; CHECK-NEXT:    lea %s0, 128
122 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
123 ; CHECK-NEXT:    b.l.t (, %s10)
124   %ret = extractelement <256 x double> %v, i32 128
125   ret double %ret
128 define fastcc double @extract_ri_v512f64(<512 x double> %v) {
129 ; CHECK-LABEL: extract_ri_v512f64:
130 ; CHECK:       # %bb.0:
131 ; CHECK-NEXT:    lvs %s0, %v1(116)
132 ; CHECK-NEXT:    b.l.t (, %s10)
133   %ret = extractelement <512 x double> %v, i32 372
134   ret double %ret
137 ;;; <256 x float>
139 define fastcc float @extract_rr_v256f32(i32 signext %idx, <256 x float> %v) {
140 ; CHECK-LABEL: extract_rr_v256f32:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
143 ; CHECK-NEXT:    b.l.t (, %s10)
144   %ret = extractelement <256 x float> %v, i32 %idx
145   ret float %ret
148 define fastcc float @extract_ri7_v256f32(<256 x float> %v) {
149 ; CHECK-LABEL: extract_ri7_v256f32:
150 ; CHECK:       # %bb.0:
151 ; CHECK-NEXT:    lvs %s0, %v0(127)
152 ; CHECK-NEXT:    b.l.t (, %s10)
153   %ret = extractelement <256 x float> %v, i32 127
154   ret float %ret
157 define fastcc float @extract_ri8_v256f32(<256 x float> %v) {
158 ; CHECK-LABEL: extract_ri8_v256f32:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    lea %s0, 128
161 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
162 ; CHECK-NEXT:    b.l.t (, %s10)
163   %ret = extractelement <256 x float> %v, i32 128
164   ret float %ret
167 define fastcc float @extract_ri_v512f32(<512 x float> %v) {
168 ; CHECK-LABEL: extract_ri_v512f32:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    lea %s0, 186
171 ; CHECK-NEXT:    lvs %s0, %v0(%s0)
172 ; CHECK-NEXT:    srl %s0, %s0, 32
173 ; CHECK-NEXT:    sll %s0, %s0, 32
174 ; CHECK-NEXT:    b.l.t (, %s10)
175   %ret = extractelement <512 x float> %v, i32 372
176   ret float %ret
179 define fastcc float @extract_rr_v512f32(<512 x float> %v, i32 signext %idx) {
180 ; CHECK-LABEL: extract_rr_v512f32:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    srl %s1, %s0, 1
183 ; CHECK-NEXT:    lvs %s1, %v0(%s1)
184 ; CHECK-NEXT:    nnd %s0, %s0, (63)0
185 ; CHECK-NEXT:    sla.w.sx %s0, %s0, 5
186 ; CHECK-NEXT:    srl %s0, %s1, %s0
187 ; CHECK-NEXT:    and %s0, %s0, (32)0
188 ; CHECK-NEXT:    sll %s0, %s0, 32
189 ; CHECK-NEXT:    b.l.t (, %s10)
190   %ret = extractelement <512 x float> %v, i32 %idx
191   ret float %ret