Mercurial > hg > Members > tobaru > cbc > CbC_llvm
comparison test/CodeGen/AArch64/arm64-subvector-extend.ll @ 77:54457678186b
LLVM 3.6
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Sep 2014 22:06:00 +0900 |
parents | |
children | 1172e4bd9c6f |
comparison
equal
deleted
inserted
replaced
34:e874dbf0ad9d | 77:54457678186b |
---|---|
1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple -asm-verbose=false | FileCheck %s | |
2 | |
3 ; Test efficient codegen of vector extends up from legal type to 128 bit | |
4 ; and 256 bit vector types. | |
5 | |
6 ;----- | |
7 ; Vectors of i16. | |
8 ;----- | |
9 define <8 x i16> @func1(<8 x i8> %v0) nounwind { | |
10 ; CHECK-LABEL: func1: | |
11 ; CHECK-NEXT: ushll.8h v0, v0, #0 | |
12 ; CHECK-NEXT: ret | |
13 %r = zext <8 x i8> %v0 to <8 x i16> | |
14 ret <8 x i16> %r | |
15 } | |
16 | |
17 define <8 x i16> @func2(<8 x i8> %v0) nounwind { | |
18 ; CHECK-LABEL: func2: | |
19 ; CHECK-NEXT: sshll.8h v0, v0, #0 | |
20 ; CHECK-NEXT: ret | |
21 %r = sext <8 x i8> %v0 to <8 x i16> | |
22 ret <8 x i16> %r | |
23 } | |
24 | |
25 define <16 x i16> @func3(<16 x i8> %v0) nounwind { | |
26 ; CHECK-LABEL: func3: | |
27 ; CHECK-NEXT: ushll2.8h v1, v0, #0 | |
28 ; CHECK-NEXT: ushll.8h v0, v0, #0 | |
29 ; CHECK-NEXT: ret | |
30 %r = zext <16 x i8> %v0 to <16 x i16> | |
31 ret <16 x i16> %r | |
32 } | |
33 | |
34 define <16 x i16> @func4(<16 x i8> %v0) nounwind { | |
35 ; CHECK-LABEL: func4: | |
36 ; CHECK-NEXT: sshll2.8h v1, v0, #0 | |
37 ; CHECK-NEXT: sshll.8h v0, v0, #0 | |
38 ; CHECK-NEXT: ret | |
39 %r = sext <16 x i8> %v0 to <16 x i16> | |
40 ret <16 x i16> %r | |
41 } | |
42 | |
43 ;----- | |
44 ; Vectors of i32. | |
45 ;----- | |
46 | |
47 define <4 x i32> @afunc1(<4 x i16> %v0) nounwind { | |
48 ; CHECK-LABEL: afunc1: | |
49 ; CHECK-NEXT: ushll.4s v0, v0, #0 | |
50 ; CHECK-NEXT: ret | |
51 %r = zext <4 x i16> %v0 to <4 x i32> | |
52 ret <4 x i32> %r | |
53 } | |
54 | |
55 define <4 x i32> @afunc2(<4 x i16> %v0) nounwind { | |
56 ; CHECK-LABEL: afunc2: | |
57 ; CHECK-NEXT: sshll.4s v0, v0, #0 | |
58 ; CHECK-NEXT: ret | |
59 %r = sext <4 x i16> %v0 to <4 x i32> | |
60 ret <4 x i32> %r | |
61 } | |
62 | |
63 define <8 x i32> @afunc3(<8 x i16> %v0) nounwind { | |
64 ; CHECK-LABEL: afunc3: | |
65 ; CHECK-NEXT: ushll2.4s v1, v0, #0 | |
66 ; CHECK-NEXT: ushll.4s v0, v0, #0 | |
67 ; CHECK-NEXT: ret | |
68 %r = zext <8 x i16> %v0 to <8 x i32> | |
69 ret <8 x i32> %r | |
70 } | |
71 | |
72 define <8 x i32> @afunc4(<8 x i16> %v0) nounwind { | |
73 ; CHECK-LABEL: afunc4: | |
74 ; CHECK-NEXT: sshll2.4s v1, v0, #0 | |
75 ; CHECK-NEXT: sshll.4s v0, v0, #0 | |
76 ; CHECK-NEXT: ret | |
77 %r = sext <8 x i16> %v0 to <8 x i32> | |
78 ret <8 x i32> %r | |
79 } | |
80 | |
81 define <8 x i32> @bfunc1(<8 x i8> %v0) nounwind { | |
82 ; CHECK-LABEL: bfunc1: | |
83 ; CHECK-NEXT: ushll.8h v0, v0, #0 | |
84 ; CHECK-NEXT: ushll2.4s v1, v0, #0 | |
85 ; CHECK-NEXT: ushll.4s v0, v0, #0 | |
86 ; CHECK-NEXT: ret | |
87 %r = zext <8 x i8> %v0 to <8 x i32> | |
88 ret <8 x i32> %r | |
89 } | |
90 | |
91 define <8 x i32> @bfunc2(<8 x i8> %v0) nounwind { | |
92 ; CHECK-LABEL: bfunc2: | |
93 ; CHECK-NEXT: sshll.8h v0, v0, #0 | |
94 ; CHECK-NEXT: sshll2.4s v1, v0, #0 | |
95 ; CHECK-NEXT: sshll.4s v0, v0, #0 | |
96 ; CHECK-NEXT: ret | |
97 %r = sext <8 x i8> %v0 to <8 x i32> | |
98 ret <8 x i32> %r | |
99 } | |
100 | |
101 ;----- | |
102 ; Vectors of i64. | |
103 ;----- | |
104 | |
105 define <4 x i64> @zfunc1(<4 x i32> %v0) nounwind { | |
106 ; CHECK-LABEL: zfunc1: | |
107 ; CHECK-NEXT: ushll2.2d v1, v0, #0 | |
108 ; CHECK-NEXT: ushll.2d v0, v0, #0 | |
109 ; CHECK-NEXT: ret | |
110 %r = zext <4 x i32> %v0 to <4 x i64> | |
111 ret <4 x i64> %r | |
112 } | |
113 | |
114 define <4 x i64> @zfunc2(<4 x i32> %v0) nounwind { | |
115 ; CHECK-LABEL: zfunc2: | |
116 ; CHECK-NEXT: sshll2.2d v1, v0, #0 | |
117 ; CHECK-NEXT: sshll.2d v0, v0, #0 | |
118 ; CHECK-NEXT: ret | |
119 %r = sext <4 x i32> %v0 to <4 x i64> | |
120 ret <4 x i64> %r | |
121 } | |
122 | |
123 define <4 x i64> @bfunc3(<4 x i16> %v0) nounwind { | |
124 ; CHECK-LABEL: func3: | |
125 ; CHECK-NEXT: ushll.4s v0, v0, #0 | |
126 ; CHECK-NEXT: ushll2.2d v1, v0, #0 | |
127 ; CHECK-NEXT: ushll.2d v0, v0, #0 | |
128 ; CHECK-NEXT: ret | |
129 %r = zext <4 x i16> %v0 to <4 x i64> | |
130 ret <4 x i64> %r | |
131 } | |
132 | |
133 define <4 x i64> @cfunc4(<4 x i16> %v0) nounwind { | |
134 ; CHECK-LABEL: func4: | |
135 ; CHECK-NEXT: sshll.4s v0, v0, #0 | |
136 ; CHECK-NEXT: sshll2.2d v1, v0, #0 | |
137 ; CHECK-NEXT: sshll.2d v0, v0, #0 | |
138 ; CHECK-NEXT: ret | |
139 %r = sext <4 x i16> %v0 to <4 x i64> | |
140 ret <4 x i64> %r | |
141 } |