1
+ ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2
+
3
+ define <4 x i32 > @copyTuple.QPair (i8* %a , i8* %b ) {
4
+ ; CHECK-LABEL: copyTuple.QPair:
5
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
6
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
7
+ ; CHECK: ld2 {{{v[0-9]+}}.s, {{v[0-9]+}}.s}[{{[0-9]+}}], [x{{[0-9]+|sp}}]
8
+ entry:
9
+ %vld = tail call { <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld2lane.v4i32 (i8* %a , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, <4 x i32 > <i32 2 , i32 2 , i32 2 , i32 2 >, i32 0 , i32 4 )
10
+ %extract = extractvalue { <4 x i32 >, <4 x i32 > } %vld , 0
11
+ %vld1 = tail call { <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld2lane.v4i32 (i8* %b , <4 x i32 > %extract , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, i32 1 , i32 4 )
12
+ %vld1.fca.0.extract = extractvalue { <4 x i32 >, <4 x i32 > } %vld1 , 0
13
+ ret <4 x i32 > %vld1.fca.0.extract
14
+ }
15
+
16
+ define <4 x i32 > @copyTuple.QTriple (i8* %a , i8* %b , <4 x i32 > %c ) {
17
+ ; CHECK-LABEL: copyTuple.QTriple:
18
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
19
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
20
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
21
+ ; CHECK: ld3 {{{v[0-9]+}}.s, {{v[0-9]+}}.s, {{v[0-9]+}}.s}[{{[0-9]+}}], [x{{[0-9]+|sp}}]
22
+ entry:
23
+ %vld = tail call { <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld3lane.v4i32 (i8* %a , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, <4 x i32 > %c , <4 x i32 > %c , i32 0 , i32 4 )
24
+ %extract = extractvalue { <4 x i32 >, <4 x i32 >, <4 x i32 > } %vld , 0
25
+ %vld1 = tail call { <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld3lane.v4i32 (i8* %b , <4 x i32 > %extract , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, <4 x i32 > %c , i32 1 , i32 4 )
26
+ %vld1.fca.0.extract = extractvalue { <4 x i32 >, <4 x i32 >, <4 x i32 > } %vld1 , 0
27
+ ret <4 x i32 > %vld1.fca.0.extract
28
+ }
29
+
30
+ define <4 x i32 > @copyTuple.QQuad (i8* %a , i8* %b , <4 x i32 > %c ) {
31
+ ; CHECK-LABEL: copyTuple.QQuad:
32
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
33
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
34
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
35
+ ; CHECK: orr v{{[0-9]+}}.16b, v{{[0-9]+}}.16b, v{{[0-9]+}}.16b
36
+ ; CHECK: ld4 {{{v[0-9]+}}.s, {{v[0-9]+}}.s, {{v[0-9]+}}.s, {{v[0-9]+}}.s}[{{[0-9]+}}], [x{{[0-9]+|sp}}]
37
+ entry:
38
+ %vld = tail call { <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld4lane.v4i32 (i8* %a , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, <4 x i32 > %c , <4 x i32 > %c , <4 x i32 > %c , i32 0 , i32 4 )
39
+ %extract = extractvalue { <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 > } %vld , 0
40
+ %vld1 = tail call { <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld4lane.v4i32 (i8* %b , <4 x i32 > %extract , <4 x i32 > <i32 -1 , i32 -1 , i32 -1 , i32 -1 >, <4 x i32 > %c , <4 x i32 > %c , i32 1 , i32 4 )
41
+ %vld1.fca.0.extract = extractvalue { <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 > } %vld1 , 0
42
+ ret <4 x i32 > %vld1.fca.0.extract
43
+ }
44
+
45
+ declare { <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld2lane.v4i32 (i8* , <4 x i32 >, <4 x i32 >, i32 , i32 )
46
+ declare { <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld3lane.v4i32 (i8* , <4 x i32 >, <4 x i32 >, <4 x i32 >, i32 , i32 )
47
+ declare { <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 > } @llvm.arm.neon.vld4lane.v4i32 (i8* , <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 >, i32 , i32 )
0 commit comments