1; RUN: llc < %s -march=arm -mattr=+neon > %t 2; RUN: grep {vshl\\.s8} %t | count 2 3; RUN: grep {vshl\\.s16} %t | count 2 4; RUN: grep {vshl\\.s32} %t | count 2 5; RUN: grep {vshl\\.s64} %t | count 2 6; RUN: grep {vshl\\.u8} %t | count 4 7; RUN: grep {vshl\\.u16} %t | count 4 8; RUN: grep {vshl\\.u32} %t | count 4 9; RUN: grep {vshl\\.u64} %t | count 4 10; RUN: grep {vshl\\.i8} %t | count 2 11; RUN: grep {vshl\\.i16} %t | count 2 12; RUN: grep {vshl\\.i32} %t | count 2 13; RUN: grep {vshl\\.i64} %t | count 2 14; RUN: grep {vshr\\.u8} %t | count 2 15; RUN: grep {vshr\\.u16} %t | count 2 16; RUN: grep {vshr\\.u32} %t | count 2 17; RUN: grep {vshr\\.u64} %t | count 2 18; RUN: grep {vshr\\.s8} %t | count 2 19; RUN: grep {vshr\\.s16} %t | count 2 20; RUN: grep {vshr\\.s32} %t | count 2 21; RUN: grep {vshr\\.s64} %t | count 2 22; RUN: grep {vneg\\.s8} %t | count 4 23; RUN: grep {vneg\\.s16} %t | count 4 24; RUN: grep {vneg\\.s32} %t | count 4 25; RUN: grep {vsub\\.i64} %t | count 4 26 27define <8 x i8> @vshls8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 28 %tmp1 = load <8 x i8>* %A 29 %tmp2 = load <8 x i8>* %B 30 %tmp3 = shl <8 x i8> %tmp1, %tmp2 31 ret <8 x i8> %tmp3 32} 33 34define <4 x i16> @vshls16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 35 %tmp1 = load <4 x i16>* %A 36 %tmp2 = load <4 x i16>* %B 37 %tmp3 = shl <4 x i16> %tmp1, %tmp2 38 ret <4 x i16> %tmp3 39} 40 41define <2 x i32> @vshls32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 42 %tmp1 = load <2 x i32>* %A 43 %tmp2 = load <2 x i32>* %B 44 %tmp3 = shl <2 x i32> %tmp1, %tmp2 45 ret <2 x i32> %tmp3 46} 47 48define <1 x i64> @vshls64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 49 %tmp1 = load <1 x i64>* %A 50 %tmp2 = load <1 x i64>* %B 51 %tmp3 = shl <1 x i64> %tmp1, %tmp2 52 ret <1 x i64> %tmp3 53} 54 55define <8 x i8> @vshli8(<8 x i8>* %A) nounwind { 56 %tmp1 = load <8 x i8>* %A 57 %tmp2 = shl <8 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 58 ret <8 x i8> %tmp2 59} 60 61define <4 x i16> @vshli16(<4 x i16>* %A) nounwind { 62 %tmp1 = load <4 x i16>* %A 63 %tmp2 = shl <4 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15 > 64 ret <4 x i16> %tmp2 65} 66 67define <2 x i32> @vshli32(<2 x i32>* %A) nounwind { 68 %tmp1 = load <2 x i32>* %A 69 %tmp2 = shl <2 x i32> %tmp1, < i32 31, i32 31 > 70 ret <2 x i32> %tmp2 71} 72 73define <1 x i64> @vshli64(<1 x i64>* %A) nounwind { 74 %tmp1 = load <1 x i64>* %A 75 %tmp2 = shl <1 x i64> %tmp1, < i64 63 > 76 ret <1 x i64> %tmp2 77} 78 79define <16 x i8> @vshlQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 80 %tmp1 = load <16 x i8>* %A 81 %tmp2 = load <16 x i8>* %B 82 %tmp3 = shl <16 x i8> %tmp1, %tmp2 83 ret <16 x i8> %tmp3 84} 85 86define <8 x i16> @vshlQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 87 %tmp1 = load <8 x i16>* %A 88 %tmp2 = load <8 x i16>* %B 89 %tmp3 = shl <8 x i16> %tmp1, %tmp2 90 ret <8 x i16> %tmp3 91} 92 93define <4 x i32> @vshlQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 94 %tmp1 = load <4 x i32>* %A 95 %tmp2 = load <4 x i32>* %B 96 %tmp3 = shl <4 x i32> %tmp1, %tmp2 97 ret <4 x i32> %tmp3 98} 99 100define <2 x i64> @vshlQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 101 %tmp1 = load <2 x i64>* %A 102 %tmp2 = load <2 x i64>* %B 103 %tmp3 = shl <2 x i64> %tmp1, %tmp2 104 ret <2 x i64> %tmp3 105} 106 107define <16 x i8> @vshlQi8(<16 x i8>* %A) nounwind { 108 %tmp1 = load <16 x i8>* %A 109 %tmp2 = shl <16 x i8> %tmp1, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 > 110 ret <16 x i8> %tmp2 111} 112 113define <8 x i16> @vshlQi16(<8 x i16>* %A) nounwind { 114 %tmp1 = load <8 x i16>* %A 115 %tmp2 = shl <8 x i16> %tmp1, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 > 116 ret <8 x i16> %tmp2 117} 118 119define <4 x i32> @vshlQi32(<4 x i32>* %A) nounwind { 120 %tmp1 = load <4 x i32>* %A 121 %tmp2 = shl <4 x i32> %tmp1, < i32 31, i32 31, i32 31, i32 31 > 122 ret <4 x i32> %tmp2 123} 124 125define <2 x i64> @vshlQi64(<2 x i64>* %A) nounwind { 126 %tmp1 = load <2 x i64>* %A 127 %tmp2 = shl <2 x i64> %tmp1, < i64 63, i64 63 > 128 ret <2 x i64> %tmp2 129} 130 131define <8 x i8> @vlshru8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 132 %tmp1 = load <8 x i8>* %A 133 %tmp2 = load <8 x i8>* %B 134 %tmp3 = lshr <8 x i8> %tmp1, %tmp2 135 ret <8 x i8> %tmp3 136} 137 138define <4 x i16> @vlshru16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 139 %tmp1 = load <4 x i16>* %A 140 %tmp2 = load <4 x i16>* %B 141 %tmp3 = lshr <4 x i16> %tmp1, %tmp2 142 ret <4 x i16> %tmp3 143} 144 145define <2 x i32> @vlshru32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 146 %tmp1 = load <2 x i32>* %A 147 %tmp2 = load <2 x i32>* %B 148 %tmp3 = lshr <2 x i32> %tmp1, %tmp2 149 ret <2 x i32> %tmp3 150} 151 152define <1 x i64> @vlshru64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 153 %tmp1 = load <1 x i64>* %A 154 %tmp2 = load <1 x i64>* %B 155 %tmp3 = lshr <1 x i64> %tmp1, %tmp2 156 ret <1 x i64> %tmp3 157} 158 159define <8 x i8> @vlshri8(<8 x i8>* %A) nounwind { 160 %tmp1 = load <8 x i8>* %A 161 %tmp2 = lshr <8 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 162 ret <8 x i8> %tmp2 163} 164 165define <4 x i16> @vlshri16(<4 x i16>* %A) nounwind { 166 %tmp1 = load <4 x i16>* %A 167 %tmp2 = lshr <4 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16 > 168 ret <4 x i16> %tmp2 169} 170 171define <2 x i32> @vlshri32(<2 x i32>* %A) nounwind { 172 %tmp1 = load <2 x i32>* %A 173 %tmp2 = lshr <2 x i32> %tmp1, < i32 32, i32 32 > 174 ret <2 x i32> %tmp2 175} 176 177define <1 x i64> @vlshri64(<1 x i64>* %A) nounwind { 178 %tmp1 = load <1 x i64>* %A 179 %tmp2 = lshr <1 x i64> %tmp1, < i64 64 > 180 ret <1 x i64> %tmp2 181} 182 183define <16 x i8> @vlshrQu8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 184 %tmp1 = load <16 x i8>* %A 185 %tmp2 = load <16 x i8>* %B 186 %tmp3 = lshr <16 x i8> %tmp1, %tmp2 187 ret <16 x i8> %tmp3 188} 189 190define <8 x i16> @vlshrQu16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 191 %tmp1 = load <8 x i16>* %A 192 %tmp2 = load <8 x i16>* %B 193 %tmp3 = lshr <8 x i16> %tmp1, %tmp2 194 ret <8 x i16> %tmp3 195} 196 197define <4 x i32> @vlshrQu32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 198 %tmp1 = load <4 x i32>* %A 199 %tmp2 = load <4 x i32>* %B 200 %tmp3 = lshr <4 x i32> %tmp1, %tmp2 201 ret <4 x i32> %tmp3 202} 203 204define <2 x i64> @vlshrQu64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 205 %tmp1 = load <2 x i64>* %A 206 %tmp2 = load <2 x i64>* %B 207 %tmp3 = lshr <2 x i64> %tmp1, %tmp2 208 ret <2 x i64> %tmp3 209} 210 211define <16 x i8> @vlshrQi8(<16 x i8>* %A) nounwind { 212 %tmp1 = load <16 x i8>* %A 213 %tmp2 = lshr <16 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 214 ret <16 x i8> %tmp2 215} 216 217define <8 x i16> @vlshrQi16(<8 x i16>* %A) nounwind { 218 %tmp1 = load <8 x i16>* %A 219 %tmp2 = lshr <8 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 > 220 ret <8 x i16> %tmp2 221} 222 223define <4 x i32> @vlshrQi32(<4 x i32>* %A) nounwind { 224 %tmp1 = load <4 x i32>* %A 225 %tmp2 = lshr <4 x i32> %tmp1, < i32 32, i32 32, i32 32, i32 32 > 226 ret <4 x i32> %tmp2 227} 228 229define <2 x i64> @vlshrQi64(<2 x i64>* %A) nounwind { 230 %tmp1 = load <2 x i64>* %A 231 %tmp2 = lshr <2 x i64> %tmp1, < i64 64, i64 64 > 232 ret <2 x i64> %tmp2 233} 234 235define <8 x i8> @vashrs8(<8 x i8>* %A, <8 x i8>* %B) nounwind { 236 %tmp1 = load <8 x i8>* %A 237 %tmp2 = load <8 x i8>* %B 238 %tmp3 = ashr <8 x i8> %tmp1, %tmp2 239 ret <8 x i8> %tmp3 240} 241 242define <4 x i16> @vashrs16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 243 %tmp1 = load <4 x i16>* %A 244 %tmp2 = load <4 x i16>* %B 245 %tmp3 = ashr <4 x i16> %tmp1, %tmp2 246 ret <4 x i16> %tmp3 247} 248 249define <2 x i32> @vashrs32(<2 x i32>* %A, <2 x i32>* %B) nounwind { 250 %tmp1 = load <2 x i32>* %A 251 %tmp2 = load <2 x i32>* %B 252 %tmp3 = ashr <2 x i32> %tmp1, %tmp2 253 ret <2 x i32> %tmp3 254} 255 256define <1 x i64> @vashrs64(<1 x i64>* %A, <1 x i64>* %B) nounwind { 257 %tmp1 = load <1 x i64>* %A 258 %tmp2 = load <1 x i64>* %B 259 %tmp3 = ashr <1 x i64> %tmp1, %tmp2 260 ret <1 x i64> %tmp3 261} 262 263define <8 x i8> @vashri8(<8 x i8>* %A) nounwind { 264 %tmp1 = load <8 x i8>* %A 265 %tmp2 = ashr <8 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 266 ret <8 x i8> %tmp2 267} 268 269define <4 x i16> @vashri16(<4 x i16>* %A) nounwind { 270 %tmp1 = load <4 x i16>* %A 271 %tmp2 = ashr <4 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16 > 272 ret <4 x i16> %tmp2 273} 274 275define <2 x i32> @vashri32(<2 x i32>* %A) nounwind { 276 %tmp1 = load <2 x i32>* %A 277 %tmp2 = ashr <2 x i32> %tmp1, < i32 32, i32 32 > 278 ret <2 x i32> %tmp2 279} 280 281define <1 x i64> @vashri64(<1 x i64>* %A) nounwind { 282 %tmp1 = load <1 x i64>* %A 283 %tmp2 = ashr <1 x i64> %tmp1, < i64 64 > 284 ret <1 x i64> %tmp2 285} 286 287define <16 x i8> @vashrQs8(<16 x i8>* %A, <16 x i8>* %B) nounwind { 288 %tmp1 = load <16 x i8>* %A 289 %tmp2 = load <16 x i8>* %B 290 %tmp3 = ashr <16 x i8> %tmp1, %tmp2 291 ret <16 x i8> %tmp3 292} 293 294define <8 x i16> @vashrQs16(<8 x i16>* %A, <8 x i16>* %B) nounwind { 295 %tmp1 = load <8 x i16>* %A 296 %tmp2 = load <8 x i16>* %B 297 %tmp3 = ashr <8 x i16> %tmp1, %tmp2 298 ret <8 x i16> %tmp3 299} 300 301define <4 x i32> @vashrQs32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 302 %tmp1 = load <4 x i32>* %A 303 %tmp2 = load <4 x i32>* %B 304 %tmp3 = ashr <4 x i32> %tmp1, %tmp2 305 ret <4 x i32> %tmp3 306} 307 308define <2 x i64> @vashrQs64(<2 x i64>* %A, <2 x i64>* %B) nounwind { 309 %tmp1 = load <2 x i64>* %A 310 %tmp2 = load <2 x i64>* %B 311 %tmp3 = ashr <2 x i64> %tmp1, %tmp2 312 ret <2 x i64> %tmp3 313} 314 315define <16 x i8> @vashrQi8(<16 x i8>* %A) nounwind { 316 %tmp1 = load <16 x i8>* %A 317 %tmp2 = ashr <16 x i8> %tmp1, < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 > 318 ret <16 x i8> %tmp2 319} 320 321define <8 x i16> @vashrQi16(<8 x i16>* %A) nounwind { 322 %tmp1 = load <8 x i16>* %A 323 %tmp2 = ashr <8 x i16> %tmp1, < i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16 > 324 ret <8 x i16> %tmp2 325} 326 327define <4 x i32> @vashrQi32(<4 x i32>* %A) nounwind { 328 %tmp1 = load <4 x i32>* %A 329 %tmp2 = ashr <4 x i32> %tmp1, < i32 32, i32 32, i32 32, i32 32 > 330 ret <4 x i32> %tmp2 331} 332 333define <2 x i64> @vashrQi64(<2 x i64>* %A) nounwind { 334 %tmp1 = load <2 x i64>* %A 335 %tmp2 = ashr <2 x i64> %tmp1, < i64 64, i64 64 > 336 ret <2 x i64> %tmp2 337} 338