llvm/test/Object/ar-error.test: Don't check the message "No such file or directory".
[oota-llvm.git] / test / CodeGen / AArch64 / neon-scalar-ext.ll
1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
2 ; arm64 doesn't use <1 x iN> types, for N < 64.
3
4 define <1 x i64> @test_zext_v1i32_v1i64(<2 x i32> %v) nounwind readnone {
5 ; CHECK-LABEL: test_zext_v1i32_v1i64:
6 ; CHECK: ushll  v0.2d, v0.2s, #0
7   %1 = extractelement <2 x i32> %v, i32 0
8   %2 = insertelement <1 x i32> undef, i32 %1, i32 0
9   %3 = zext <1 x i32> %2 to <1 x i64>
10   ret <1 x i64> %3
11 }
12
13 define <1 x i32> @test_zext_v1i16_v1i32(<4 x i16> %v) nounwind readnone {
14 ; CHECK-LABEL: test_zext_v1i16_v1i32:
15 ; CHECK: ushll  v0.4s, v0.4h, #0
16   %1 = extractelement <4 x i16> %v, i32 0
17   %2 = insertelement <1 x i16> undef, i16 %1, i32 0
18   %3 = zext <1 x i16> %2 to <1 x i32>
19   ret <1 x i32> %3
20 }
21
22 define <1 x i16> @test_zext_v1i8_v1i16(<8 x i8> %v) nounwind readnone {
23 ; CHECK-LABEL: test_zext_v1i8_v1i16:
24 ; CHECK: ushll  v0.8h, v0.8b, #0
25   %1 = extractelement <8 x i8> %v, i32 0
26   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
27   %3 = zext <1 x i8> %2 to <1 x i16>
28   ret <1 x i16> %3
29 }
30
31 define <1 x i32> @test_zext_v1i8_v1i32(<8 x i8> %v) nounwind readnone {
32 ; CHECK-LABEL: test_zext_v1i8_v1i32:
33 ; CHECK: dup     b0, v0.b[0]
34   %1 = extractelement <8 x i8> %v, i32 0
35   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
36   %3 = zext <1 x i8> %2 to <1 x i32>
37   ret <1 x i32> %3
38 }
39
40 define <1 x i64> @test_zext_v1i16_v1i64(<4 x i16> %v) nounwind readnone {
41 ; CHECK-LABEL: test_zext_v1i16_v1i64:
42 ; CHECK: dup    h0, v0.h[0]
43   %1 = extractelement <4 x i16> %v, i32 0
44   %2 = insertelement <1 x i16> undef, i16 %1, i32 0
45   %3 = zext <1 x i16> %2 to <1 x i64>
46   ret <1 x i64> %3
47 }
48
49 define <1 x i64> @test_zext_v1i8_v1i64(<8 x i8> %v) nounwind readnone {
50 ; CHECK-LABEL: test_zext_v1i8_v1i64:
51 ; CHECK: dup    b0, v0.b[0]
52   %1 = extractelement <8 x i8> %v, i32 0
53   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
54   %3 = zext <1 x i8> %2 to <1 x i64>
55   ret <1 x i64> %3
56 }
57
58 define <1 x i64> @test_sext_v1i32_v1i64(<2 x i32> %v) nounwind readnone {
59 ; CHECK-LABEL: test_sext_v1i32_v1i64:
60 ; CHECK: sshll  v0.2d, v0.2s, #0
61   %1 = extractelement <2 x i32> %v, i32 0
62   %2 = insertelement <1 x i32> undef, i32 %1, i32 0
63   %3 = sext <1 x i32> %2 to <1 x i64>
64   ret <1 x i64> %3
65 }
66
67 define <1 x i32> @test_sext_v1i16_v1i32(<4 x i16> %v) nounwind readnone {
68 ; CHECK-LABEL: test_sext_v1i16_v1i32:
69 ; CHECK: sshll  v0.4s, v0.4h, #0
70   %1 = extractelement <4 x i16> %v, i32 0
71   %2 = insertelement <1 x i16> undef, i16 %1, i32 0
72   %3 = sext <1 x i16> %2 to <1 x i32>
73   ret <1 x i32> %3
74 }
75
76 define <1 x i16> @test_sext_v1i8_v1i16(<8 x i8> %v) nounwind readnone {
77 ; CHECK-LABEL: test_sext_v1i8_v1i16:
78 ; CHECK: sshll  v0.8h, v0.8b, #0
79   %1 = extractelement <8 x i8> %v, i32 0
80   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
81   %3 = sext <1 x i8> %2 to <1 x i16>
82   ret <1 x i16> %3
83 }
84
85 define <1 x i32> @test_sext_v1i8_v1i32(<8 x i8> %v) nounwind readnone {
86 ; CHECK-LABEL: test_sext_v1i8_v1i32:
87 ; CHECK: sshll  v0.8h, v0.8b, #0
88 ; CHECK: sshll  v0.4s, v0.4h, #0
89   %1 = extractelement <8 x i8> %v, i32 0
90   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
91   %3 = sext <1 x i8> %2 to <1 x i32>
92   ret <1 x i32> %3
93 }
94
95 define <1 x i64> @test_sext_v1i16_v1i64(<4 x i16> %v) nounwind readnone {
96 ; CHECK-LABEL: test_sext_v1i16_v1i64:
97 ; CHECK: sshll  v0.4s, v0.4h, #0
98 ; CHECK: sshll  v0.2d, v0.2s, #0
99   %1 = extractelement <4 x i16> %v, i32 0
100   %2 = insertelement <1 x i16> undef, i16 %1, i32 0
101   %3 = sext <1 x i16> %2 to <1 x i64>
102   ret <1 x i64> %3
103 }
104
105 define <1 x i64> @test_sext_v1i8_v1i64(<8 x i8> %v) nounwind readnone {
106 ; CHECK-LABEL: test_sext_v1i8_v1i64:
107 ; CHECK: sshll  v0.8h, v0.8b, #0
108 ; CHECK: sshll  v0.4s, v0.4h, #0
109 ; CHECK: sshll  v0.2d, v0.2s, #0
110   %1 = extractelement <8 x i8> %v, i32 0
111   %2 = insertelement <1 x i8> undef, i8 %1, i32 0
112   %3 = sext <1 x i8> %2 to <1 x i64>
113   ret <1 x i64> %3
114 }