source: icGREP/icgrep-devel/llvm-3.8.0.src/test/CodeGen/AArch64/aarch64-addv.ll @ 5027

Last change on this file since 5027 was 5027, checked in by cameron, 3 years ago

Upgrade to llvm 3.8

File size: 5.7 KB
Line 
1; RUN: llc -march=aarch64 -aarch64-neon-syntax=generic < %s | FileCheck %s
2
3define i8 @add_B(<16 x i8>* %arr)  {
4; CHECK-LABEL: add_B
5; CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.16b
6  %bin.rdx = load <16 x i8>, <16 x i8>* %arr
7  %rdx.shuf0 = shufflevector <16 x i8> %bin.rdx, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
8  %bin.rdx0 = add <16 x i8> %bin.rdx, %rdx.shuf0
9  %rdx.shuf = shufflevector <16 x i8> %bin.rdx0, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef >
10  %bin.rdx11 = add <16 x i8> %bin.rdx0, %rdx.shuf
11  %rdx.shuf12 = shufflevector <16 x i8> %bin.rdx11, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef>
12  %bin.rdx13 = add <16 x i8> %bin.rdx11, %rdx.shuf12
13  %rdx.shuf13 = shufflevector <16 x i8> %bin.rdx13, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef>
14  %bin.rdx14 = add <16 x i8> %bin.rdx13, %rdx.shuf13
15  %r = extractelement <16 x i8> %bin.rdx14, i32 0
16  ret i8 %r
17}
18
19define i16 @add_H(<8 x i16>* %arr)  {
20; CHECK-LABEL: add_H
21; CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.8h
22  %bin.rdx = load <8 x i16>, <8 x i16>* %arr
23  %rdx.shuf = shufflevector <8 x i16> %bin.rdx, <8 x i16> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef,i32 undef, i32 undef>
24  %bin.rdx11 = add <8 x i16> %bin.rdx, %rdx.shuf
25  %rdx.shuf12 = shufflevector <8 x i16> %bin.rdx11, <8 x i16> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
26  %bin.rdx13 = add <8 x i16> %bin.rdx11, %rdx.shuf12
27  %rdx.shuf13 = shufflevector <8 x i16> %bin.rdx13, <8 x i16> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
28  %bin.rdx14 = add <8 x i16> %bin.rdx13, %rdx.shuf13
29  %r = extractelement <8 x i16> %bin.rdx14, i32 0
30  ret i16 %r
31}
32
33define i32 @add_S( <4 x i32>* %arr)  {
34; CHECK-LABEL: add_S
35; CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s
36  %bin.rdx = load <4 x i32>, <4 x i32>* %arr
37  %rdx.shuf = shufflevector <4 x i32> %bin.rdx, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
38  %bin.rdx11 = add <4 x i32> %bin.rdx, %rdx.shuf
39  %rdx.shuf12 = shufflevector <4 x i32> %bin.rdx11, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
40  %bin.rdx13 = add <4 x i32> %bin.rdx11, %rdx.shuf12
41  %r = extractelement <4 x i32> %bin.rdx13, i32 0
42  ret i32 %r
43}
44
45define i64 @add_D(<2 x i64>* %arr)  {
46; CHECK-LABEL: add_D
47; CHECK-NOT: addv
48  %bin.rdx = load <2 x i64>, <2 x i64>* %arr
49  %rdx.shuf0 = shufflevector <2 x i64> %bin.rdx, <2 x i64> undef, <2 x i32> <i32 1, i32 undef>
50  %bin.rdx0 = add <2 x i64> %bin.rdx, %rdx.shuf0
51  %r = extractelement <2 x i64> %bin.rdx0, i32 0
52  ret i64 %r
53}
54
55define i32 @oversized_ADDV_256(i8* noalias nocapture readonly %arg1, i8* noalias nocapture readonly %arg2) {
56; CHECK-LABEL: oversized_ADDV_256
57; CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s
58entry:
59  %0 = bitcast i8* %arg1 to <8 x i8>*
60  %1 = load <8 x i8>, <8 x i8>* %0, align 1
61  %2 = zext <8 x i8> %1 to <8 x i32>
62  %3 = bitcast i8* %arg2 to <8 x i8>*
63  %4 = load <8 x i8>, <8 x i8>* %3, align 1
64  %5 = zext <8 x i8> %4 to <8 x i32>
65  %6 = sub nsw <8 x i32> %2, %5
66  %7 = icmp slt <8 x i32> %6, zeroinitializer
67  %8 = sub nsw <8 x i32> zeroinitializer, %6
68  %9 = select <8 x i1> %7, <8 x i32> %8, <8 x i32> %6
69  %rdx.shuf = shufflevector <8 x i32> %9, <8 x i32> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
70  %bin.rdx = add <8 x i32> %9, %rdx.shuf
71  %rdx.shuf1 = shufflevector <8 x i32> %bin.rdx, <8 x i32> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
72  %bin.rdx2 = add <8 x i32> %bin.rdx, %rdx.shuf1
73  %rdx.shuf3 = shufflevector <8 x i32> %bin.rdx2, <8 x i32> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
74  %bin.rdx4 = add <8 x i32> %bin.rdx2, %rdx.shuf3
75  %10 = extractelement <8 x i32> %bin.rdx4, i32 0
76  ret i32 %10
77}
78
79define i32 @oversized_ADDV_512(<16 x i32>* %arr)  {
80; CHECK-LABEL: oversized_ADDV_512
81; CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s
82  %bin.rdx = load <16 x i32>, <16 x i32>* %arr
83
84  %rdx.shuf0 = shufflevector <16 x i32> %bin.rdx, <16 x i32> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
85  %bin.rdx0 = add <16 x i32> %bin.rdx, %rdx.shuf0
86
87  %rdx.shuf = shufflevector <16 x i32> %bin.rdx0, <16 x i32> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef >
88  %bin.rdx11 = add <16 x i32> %bin.rdx0, %rdx.shuf
89
90  %rdx.shuf12 = shufflevector <16 x i32> %bin.rdx11, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef>
91  %bin.rdx13 = add <16 x i32> %bin.rdx11, %rdx.shuf12
92
93  %rdx.shuf13 = shufflevector <16 x i32> %bin.rdx13, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef>
94  %bin.rdx14 = add <16 x i32> %bin.rdx13, %rdx.shuf13
95
96  %r = extractelement <16 x i32> %bin.rdx14, i32 0
97  ret i32 %r
98}
Note: See TracBrowser for help on using the repository browser.