[RISCV][VLOPT] Add vector narrowing integer right shift instructions to isSupportedIn...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / shl-to-add.ll
blobde24998545aa0c682c081a9de25a6656fe90e1fb
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=aarch64-none-linux-gnu < %s -o - | FileCheck %s
4 define <16 x i8> @shl_v16i8(<16 x i8> %a) {
5 ; CHECK-LABEL: shl_v16i8:
6 ; CHECK:       // %bb.0: // %entry
7 ; CHECK-NEXT:    add v0.16b, v0.16b, v0.16b
8 ; CHECK-NEXT:    ret
9 entry:
10   %add.i = shl <16 x i8> %a, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
11   ret <16 x i8> %add.i
14 define <8 x i16> @shl_v8i16(<8 x i16> %a) {
15 ; CHECK-LABEL: shl_v8i16:
16 ; CHECK:       // %bb.0: // %entry
17 ; CHECK-NEXT:    add v0.8h, v0.8h, v0.8h
18 ; CHECK-NEXT:    ret
19 entry:
20   %add.i = shl <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
21   ret <8 x i16> %add.i
24 define <4 x i32> @shl_v4i32(<4 x i32> %a) {
25 ; CHECK-LABEL: shl_v4i32:
26 ; CHECK:       // %bb.0: // %entry
27 ; CHECK-NEXT:    add v0.4s, v0.4s, v0.4s
28 ; CHECK-NEXT:    ret
29 entry:
30   %add.i = shl <4 x i32> %a, <i32 1, i32 1, i32 1, i32 1>
31   ret <4 x i32> %add.i
34 define <2 x i64> @shl_v2i64(<2 x i64> %a) {
35 ; CHECK-LABEL: shl_v2i64:
36 ; CHECK:       // %bb.0: // %entry
37 ; CHECK-NEXT:    add v0.2d, v0.2d, v0.2d
38 ; CHECK-NEXT:    ret
39 entry:
40   %add.i = shl <2 x i64> %a, <i64 1, i64 1>
41   ret <2 x i64> %add.i
44 define <8 x i8> @shl_v8i8(<8 x i8> %a) {
45 ; CHECK-LABEL: shl_v8i8:
46 ; CHECK:       // %bb.0: // %entry
47 ; CHECK-NEXT:    add v0.8b, v0.8b, v0.8b
48 ; CHECK-NEXT:    ret
49 entry:
50   %add.i = shl <8 x i8> %a, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
51   ret <8 x i8> %add.i
54 define <4 x i16> @shl_v4i16(<4 x i16> %a) {
55 ; CHECK-LABEL: shl_v4i16:
56 ; CHECK:       // %bb.0: // %entry
57 ; CHECK-NEXT:    add v0.4h, v0.4h, v0.4h
58 ; CHECK-NEXT:    ret
59 entry:
60   %add.i = shl <4 x i16> %a, <i16 1, i16 1, i16 1, i16 1>
61   ret <4 x i16> %add.i
64 define <2 x i32> @shl_v2i32(<2 x i32> %a) {
65 ; CHECK-LABEL: shl_v2i32:
66 ; CHECK:       // %bb.0: // %entry
67 ; CHECK-NEXT:    add v0.2s, v0.2s, v0.2s
68 ; CHECK-NEXT:    ret
69 entry:
70   %add.i = shl <2 x i32> %a, <i32 1, i32 1>
71   ret <2 x i32> %add.i
74 define <8 x i16> @sshll_v8i8(<8 x i8> %a) {
75 ; CHECK-LABEL: sshll_v8i8:
76 ; CHECK:       // %bb.0:
77 ; CHECK-NEXT:    sshll v0.8h, v0.8b, #1
78 ; CHECK-NEXT:    ret
79   %1 = sext <8 x i8> %a to <8 x i16>
80   %tmp = shl <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
81   ret <8 x i16> %tmp
84 define <4 x i32> @sshll_v4i16(<4 x i16> %a) {
85 ; CHECK-LABEL: sshll_v4i16:
86 ; CHECK:       // %bb.0:
87 ; CHECK-NEXT:    sshll v0.4s, v0.4h, #1
88 ; CHECK-NEXT:    ret
89   %1 = sext <4 x i16> %a to <4 x i32>
90   %tmp = shl <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1>
91   ret <4 x i32> %tmp
94 define <2 x i64> @sshll_v2i32(<2 x i32> %a) {
95 ; CHECK-LABEL: sshll_v2i32:
96 ; CHECK:       // %bb.0:
97 ; CHECK-NEXT:    sshll v0.2d, v0.2s, #1
98 ; CHECK-NEXT:    ret
99   %1 = sext <2 x i32> %a to <2 x i64>
100   %tmp = shl <2 x i64> %1, <i64 1, i64 1>
101   ret <2 x i64> %tmp
104 define <8 x i16> @ushll_v8i8(<8 x i8> %a) {
105 ; CHECK-LABEL: ushll_v8i8:
106 ; CHECK:       // %bb.0:
107 ; CHECK-NEXT:    ushll v0.8h, v0.8b, #1
108 ; CHECK-NEXT:    ret
109   %1 = zext <8 x i8> %a to <8 x i16>
110   %tmp = shl <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
111   ret <8 x i16> %tmp
114 define <4 x i32> @ushll_v4i16(<4 x i16> %a) {
115 ; CHECK-LABEL: ushll_v4i16:
116 ; CHECK:       // %bb.0:
117 ; CHECK-NEXT:    ushll v0.4s, v0.4h, #1
118 ; CHECK-NEXT:    ret
119   %1 = zext <4 x i16> %a to <4 x i32>
120   %tmp = shl <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1>
121   ret <4 x i32> %tmp
124 define <2 x i64> @ushll_v2i32(<2 x i32> %a) {
125 ; CHECK-LABEL: ushll_v2i32:
126 ; CHECK:       // %bb.0:
127 ; CHECK-NEXT:    ushll v0.2d, v0.2s, #1
128 ; CHECK-NEXT:    ret
129   %1 = zext <2 x i32> %a to <2 x i64>
130   %tmp = shl <2 x i64> %1, <i64 1, i64 1>
131   ret <2 x i64> %tmp