[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Analysis / CostModel / ARM / reduce-smax.ll
blob4ef35f1547896041d06b8488e50b44234b5d24ec
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2 ; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=thumbv8m.main < %s | FileCheck %s --check-prefix=V8M
3 ; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=armv8a-linux-gnueabihf < %s | FileCheck %s --check-prefix=NEON
4 ; RUN: opt -passes="print<cost-model>" 2>&1 -disable-output -mtriple=armv8.1m.main -mattr=+mve < %s | FileCheck %s --check-prefix=MVE
6 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
8 define i32 @reduce_i64(i32 %arg) {
9 ; V8M-LABEL: 'reduce_i64'
10 ; V8M-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
11 ; V8M-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V2 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
12 ; V8M-NEXT:  Cost Model: Found an estimated cost of 35 for instruction: %V4 = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
13 ; V8M-NEXT:  Cost Model: Found an estimated cost of 79 for instruction: %V8 = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
14 ; V8M-NEXT:  Cost Model: Found an estimated cost of 167 for instruction: %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
15 ; V8M-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
17 ; NEON-LABEL: 'reduce_i64'
18 ; NEON-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V1 = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
19 ; NEON-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V2 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
20 ; NEON-NEXT:  Cost Model: Found an estimated cost of 31 for instruction: %V4 = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
21 ; NEON-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %V8 = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
22 ; NEON-NEXT:  Cost Model: Found an estimated cost of 178 for instruction: %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
23 ; NEON-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
25 ; MVE-LABEL: 'reduce_i64'
26 ; MVE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V1 = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
27 ; MVE-NEXT:  Cost Model: Found an estimated cost of 110 for instruction: %V2 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
28 ; MVE-NEXT:  Cost Model: Found an estimated cost of 212 for instruction: %V4 = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
29 ; MVE-NEXT:  Cost Model: Found an estimated cost of 416 for instruction: %V8 = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
30 ; MVE-NEXT:  Cost Model: Found an estimated cost of 824 for instruction: %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
31 ; MVE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
33   %V1  = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
34   %V2  = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
35   %V4  = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
36   %V8  = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
37   %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
38   ret i32 undef
41 define i32 @reduce_i32(i32 %arg) {
42 ; V8M-LABEL: 'reduce_i32'
43 ; V8M-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
44 ; V8M-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V4 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
45 ; V8M-NEXT:  Cost Model: Found an estimated cost of 43 for instruction: %V8 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
46 ; V8M-NEXT:  Cost Model: Found an estimated cost of 91 for instruction: %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
47 ; V8M-NEXT:  Cost Model: Found an estimated cost of 187 for instruction: %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
48 ; V8M-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
50 ; NEON-LABEL: 'reduce_i32'
51 ; NEON-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V2 = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
52 ; NEON-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
53 ; NEON-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
54 ; NEON-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
55 ; NEON-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
56 ; NEON-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
58 ; MVE-LABEL: 'reduce_i32'
59 ; MVE-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %V2 = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
60 ; MVE-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
61 ; MVE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V8 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
62 ; MVE-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
63 ; MVE-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
64 ; MVE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
66   %V2  = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
67   %V4  = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
68   %V8  = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
69   %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
70   %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
71   ret i32 undef
74 define i32 @reduce_i16(i32 %arg) {
75 ; V8M-LABEL: 'reduce_i16'
76 ; V8M-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
77 ; V8M-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V4 = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
78 ; V8M-NEXT:  Cost Model: Found an estimated cost of 43 for instruction: %V8 = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
79 ; V8M-NEXT:  Cost Model: Found an estimated cost of 91 for instruction: %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
80 ; V8M-NEXT:  Cost Model: Found an estimated cost of 187 for instruction: %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
81 ; V8M-NEXT:  Cost Model: Found an estimated cost of 379 for instruction: %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
82 ; V8M-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
84 ; NEON-LABEL: 'reduce_i16'
85 ; NEON-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V2 = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
86 ; NEON-NEXT:  Cost Model: Found an estimated cost of 55 for instruction: %V4 = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
87 ; NEON-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
88 ; NEON-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
89 ; NEON-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
90 ; NEON-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
91 ; NEON-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
93 ; MVE-LABEL: 'reduce_i16'
94 ; MVE-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %V2 = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
95 ; MVE-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
96 ; MVE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
97 ; MVE-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
98 ; MVE-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
99 ; MVE-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
100 ; MVE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
102   %V2  = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
103   %V4  = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
104   %V8  = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
105   %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
106   %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
107   %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
108   ret i32 undef
111 define i32 @reduce_i8(i32 %arg) {
112 ; V8M-LABEL: 'reduce_i8'
113 ; V8M-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V2 = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
114 ; V8M-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %V4 = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
115 ; V8M-NEXT:  Cost Model: Found an estimated cost of 43 for instruction: %V8 = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
116 ; V8M-NEXT:  Cost Model: Found an estimated cost of 91 for instruction: %V16 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
117 ; V8M-NEXT:  Cost Model: Found an estimated cost of 187 for instruction: %V32 = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
118 ; V8M-NEXT:  Cost Model: Found an estimated cost of 379 for instruction: %V64 = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
119 ; V8M-NEXT:  Cost Model: Found an estimated cost of 763 for instruction: %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
120 ; V8M-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
122 ; NEON-LABEL: 'reduce_i8'
123 ; NEON-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %V2 = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
124 ; NEON-NEXT:  Cost Model: Found an estimated cost of 55 for instruction: %V4 = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
125 ; NEON-NEXT:  Cost Model: Found an estimated cost of 153 for instruction: %V8 = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
126 ; NEON-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
127 ; NEON-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
128 ; NEON-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
129 ; NEON-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
130 ; NEON-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
132 ; MVE-LABEL: 'reduce_i8'
133 ; MVE-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %V2 = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
134 ; MVE-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4 = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
135 ; MVE-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V8 = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
136 ; MVE-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V16 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
137 ; MVE-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %V32 = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
138 ; MVE-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %V64 = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
139 ; MVE-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
140 ; MVE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
142   %V2   = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
143   %V4   = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
144   %V8   = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
145   %V16  = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
146   %V32  = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
147   %V64  = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
148   %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
149   ret i32 undef
152 declare i64 @llvm.vector.reduce.smax.v1i64(<1 x i64>)
153 declare i64 @llvm.vector.reduce.smax.v2i64(<2 x i64>)
154 declare i64 @llvm.vector.reduce.smax.v4i64(<4 x i64>)
155 declare i64 @llvm.vector.reduce.smax.v8i64(<8 x i64>)
156 declare i64 @llvm.vector.reduce.smax.v16i64(<16 x i64>)
158 declare i32 @llvm.vector.reduce.smax.v2i32(<2 x i32>)
159 declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>)
160 declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32>)
161 declare i32 @llvm.vector.reduce.smax.v16i32(<16 x i32>)
162 declare i32 @llvm.vector.reduce.smax.v32i32(<32 x i32>)
164 declare i16 @llvm.vector.reduce.smax.v2i16(<2 x i16>)
165 declare i16 @llvm.vector.reduce.smax.v4i16(<4 x i16>)
166 declare i16 @llvm.vector.reduce.smax.v8i16(<8 x i16>)
167 declare i16 @llvm.vector.reduce.smax.v16i16(<16 x i16>)
168 declare i16 @llvm.vector.reduce.smax.v32i16(<32 x i16>)
169 declare i16 @llvm.vector.reduce.smax.v64i16(<64 x i16>)
171 declare i8 @llvm.vector.reduce.smax.v2i8(<2 x i8>)
172 declare i8 @llvm.vector.reduce.smax.v4i8(<4 x i8>)
173 declare i8 @llvm.vector.reduce.smax.v8i8(<8 x i8>)
174 declare i8 @llvm.vector.reduce.smax.v16i8(<16 x i8>)
175 declare i8 @llvm.vector.reduce.smax.v32i8(<32 x i8>)
176 declare i8 @llvm.vector.reduce.smax.v64i8(<64 x i8>)
177 declare i8 @llvm.vector.reduce.smax.v128i8(<128 x i8>)