xref: /llvm-project/llvm/test/Analysis/CostModel/RISCV/reduce-max.ll (revision 369c61744a435c52e3564398d9972fa556db022b)
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2; RUN: opt < %s -mtriple=riscv32 -mattr=+v -passes="print<cost-model>" -cost-kind=throughput 2>&1 -disable-output | FileCheck %s
3; RUN: opt < %s -mtriple=riscv64 -mattr=+v -passes="print<cost-model>" -cost-kind=throughput 2>&1 -disable-output | FileCheck %s
4; RUN: opt < %s -mtriple=riscv32 -mattr=+v -passes="print<cost-model>" -cost-kind=code-size 2>&1 -disable-output | FileCheck %s --check-prefix=SIZE
5; RUN: opt < %s -mtriple=riscv64 -mattr=+v -passes="print<cost-model>" -cost-kind=code-size 2>&1 -disable-output | FileCheck %s --check-prefix=SIZE
6
7define i32 @reduce_umin_i1(i32 %arg) {
8; CHECK-LABEL: 'reduce_umin_i1'
9; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i1 @llvm.vector.reduce.umax.v1i1(<1 x i1> undef)
10; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i1 @llvm.vector.reduce.umax.v2i1(<2 x i1> undef)
11; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i1 @llvm.vector.reduce.umax.v4i1(<4 x i1> undef)
12; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i1 @llvm.vector.reduce.umax.v8i1(<8 x i1> undef)
13; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i1 @llvm.vector.reduce.umax.v16i1(<16 x i1> undef)
14; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i1 @llvm.vector.reduce.umax.v32i1(<32 x i1> undef)
15; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i1 @llvm.vector.reduce.umax.v64i1(<64 x i1> undef)
16; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = call i1 @llvm.vector.reduce.umax.v128i1(<128 x i1> undef)
17; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
18;
19; SIZE-LABEL: 'reduce_umin_i1'
20; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i1 @llvm.vector.reduce.umax.v1i1(<1 x i1> undef)
21; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i1 @llvm.vector.reduce.umax.v2i1(<2 x i1> undef)
22; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i1 @llvm.vector.reduce.umax.v4i1(<4 x i1> undef)
23; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i1 @llvm.vector.reduce.umax.v8i1(<8 x i1> undef)
24; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i1 @llvm.vector.reduce.umax.v16i1(<16 x i1> undef)
25; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i1 @llvm.vector.reduce.umax.v32i1(<32 x i1> undef)
26; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i1 @llvm.vector.reduce.umax.v64i1(<64 x i1> undef)
27; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = call i1 @llvm.vector.reduce.umax.v128i1(<128 x i1> undef)
28; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
29;
30  %V1   = call i1 @llvm.vector.reduce.umax.v1i1(<1 x i1> undef)
31  %V2   = call i1 @llvm.vector.reduce.umax.v2i1(<2 x i1> undef)
32  %V4   = call i1 @llvm.vector.reduce.umax.v4i1(<4 x i1> undef)
33  %V8   = call i1 @llvm.vector.reduce.umax.v8i1(<8 x i1> undef)
34  %V16  = call i1 @llvm.vector.reduce.umax.v16i1(<16 x i1> undef)
35  %V32  = call i1 @llvm.vector.reduce.umax.v32i1(<32 x i1> undef)
36  %V64  = call i1 @llvm.vector.reduce.umax.v64i1(<64 x i1> undef)
37  %V128 = call i1 @llvm.vector.reduce.umax.v128i1(<128 x i1> undef)
38  ret i32 undef
39}
40
41define i32 @reduce_umax_i8(i32 %arg) {
42; CHECK-LABEL: 'reduce_umax_i8'
43; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i8 @llvm.vector.reduce.umax.v1i8(<1 x i8> undef)
44; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.vector.reduce.umax.v2i8(<2 x i8> undef)
45; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> undef)
46; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.vector.reduce.umax.v8i8(<8 x i8> undef)
47; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> undef)
48; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> undef)
49; CHECK-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V64 = call i8 @llvm.vector.reduce.umax.v64i8(<64 x i8> undef)
50; CHECK-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V128 = call i8 @llvm.vector.reduce.umax.v128i8(<128 x i8> undef)
51; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
52;
53; SIZE-LABEL: 'reduce_umax_i8'
54; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i8 @llvm.vector.reduce.umax.v1i8(<1 x i8> undef)
55; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.vector.reduce.umax.v2i8(<2 x i8> undef)
56; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> undef)
57; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.vector.reduce.umax.v8i8(<8 x i8> undef)
58; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> undef)
59; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> undef)
60; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.vector.reduce.umax.v64i8(<64 x i8> undef)
61; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = call i8 @llvm.vector.reduce.umax.v128i8(<128 x i8> undef)
62; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
63;
64  %V1   = call i8 @llvm.vector.reduce.umax.v1i8(<1 x i8> undef)
65  %V2   = call i8 @llvm.vector.reduce.umax.v2i8(<2 x i8> undef)
66  %V4   = call i8 @llvm.vector.reduce.umax.v4i8(<4 x i8> undef)
67  %V8   = call i8 @llvm.vector.reduce.umax.v8i8(<8 x i8> undef)
68  %V16  = call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> undef)
69  %V32  = call i8 @llvm.vector.reduce.umax.v32i8(<32 x i8> undef)
70  %V64  = call i8 @llvm.vector.reduce.umax.v64i8(<64 x i8> undef)
71  %V128 = call i8 @llvm.vector.reduce.umax.v128i8(<128 x i8> undef)
72  ret i32 undef
73}
74
75define i32 @reduce_umax_i16(i32 %arg) {
76; CHECK-LABEL: 'reduce_umax_i16'
77; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i16 @llvm.vector.reduce.umax.v1i16(<1 x i16> undef)
78; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.vector.reduce.umax.v2i16(<2 x i16> undef)
79; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.vector.reduce.umax.v4i16(<4 x i16> undef)
80; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> undef)
81; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> undef)
82; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i16 @llvm.vector.reduce.umax.v32i16(<32 x i16> undef)
83; CHECK-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V64 = call i16 @llvm.vector.reduce.umax.v64i16(<64 x i16> undef)
84; CHECK-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V128 = call i16 @llvm.vector.reduce.umax.v128i16(<128 x i16> undef)
85; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
86;
87; SIZE-LABEL: 'reduce_umax_i16'
88; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i16 @llvm.vector.reduce.umax.v1i16(<1 x i16> undef)
89; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.vector.reduce.umax.v2i16(<2 x i16> undef)
90; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i16 @llvm.vector.reduce.umax.v4i16(<4 x i16> undef)
91; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> undef)
92; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> undef)
93; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i16 @llvm.vector.reduce.umax.v32i16(<32 x i16> undef)
94; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i16 @llvm.vector.reduce.umax.v64i16(<64 x i16> undef)
95; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V128 = call i16 @llvm.vector.reduce.umax.v128i16(<128 x i16> undef)
96; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
97;
98  %V1   = call i16 @llvm.vector.reduce.umax.v1i16(<1 x i16> undef)
99  %V2   = call i16 @llvm.vector.reduce.umax.v2i16(<2 x i16> undef)
100  %V4   = call i16 @llvm.vector.reduce.umax.v4i16(<4 x i16> undef)
101  %V8   = call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> undef)
102  %V16  = call i16 @llvm.vector.reduce.umax.v16i16(<16 x i16> undef)
103  %V32  = call i16 @llvm.vector.reduce.umax.v32i16(<32 x i16> undef)
104  %V64  = call i16 @llvm.vector.reduce.umax.v64i16(<64 x i16> undef)
105  %V128 = call i16 @llvm.vector.reduce.umax.v128i16(<128 x i16> undef)
106  ret i32 undef
107}
108
109define i32 @reduce_umax_i32(i32 %arg) {
110; CHECK-LABEL: 'reduce_umax_i32'
111; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> undef)
112; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.vector.reduce.umax.v2i32(<2 x i32> undef)
113; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> undef)
114; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
115; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> undef)
116; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i32 @llvm.vector.reduce.umax.v32i32(<32 x i32> undef)
117; CHECK-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V64 = call i32 @llvm.vector.reduce.umax.v64i32(<64 x i32> undef)
118; CHECK-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %V128 = call i32 @llvm.vector.reduce.umax.v128i32(<128 x i32> undef)
119; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
120;
121; SIZE-LABEL: 'reduce_umax_i32'
122; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> undef)
123; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.vector.reduce.umax.v2i32(<2 x i32> undef)
124; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> undef)
125; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
126; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> undef)
127; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i32 @llvm.vector.reduce.umax.v32i32(<32 x i32> undef)
128; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V64 = call i32 @llvm.vector.reduce.umax.v64i32(<64 x i32> undef)
129; SIZE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V128 = call i32 @llvm.vector.reduce.umax.v128i32(<128 x i32> undef)
130; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
131;
132  %V1   = call i32 @llvm.vector.reduce.umax.v1i32(<1 x i32> undef)
133  %V2   = call i32 @llvm.vector.reduce.umax.v2i32(<2 x i32> undef)
134  %V4   = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> undef)
135  %V8   = call i32 @llvm.vector.reduce.umax.v8i32(<8 x i32> undef)
136  %V16  = call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> undef)
137  %V32  = call i32 @llvm.vector.reduce.umax.v32i32(<32 x i32> undef)
138  %V64  = call i32 @llvm.vector.reduce.umax.v64i32(<64 x i32> undef)
139  %V128 = call i32 @llvm.vector.reduce.umax.v128i32(<128 x i32> undef)
140  ret i32 undef
141}
142
143define i32 @reduce_umax_i64(i32 %arg) {
144; CHECK-LABEL: 'reduce_umax_i64'
145; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i64 @llvm.vector.reduce.umax.v1i64(<1 x i64> undef)
146; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i64 @llvm.vector.reduce.umax.v2i64(<2 x i64> undef)
147; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i64 @llvm.vector.reduce.umax.v4i64(<4 x i64> undef)
148; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> undef)
149; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i64 @llvm.vector.reduce.umax.v16i64(<16 x i64> undef)
150; CHECK-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V32 = call i64 @llvm.vector.reduce.umax.v32i64(<32 x i64> undef)
151; CHECK-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V64 = call i64 @llvm.vector.reduce.umax.v64i64(<64 x i64> undef)
152; CHECK-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V128 = call i64 @llvm.vector.reduce.umax.v128i64(<128 x i64> undef)
153; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
154;
155; SIZE-LABEL: 'reduce_umax_i64'
156; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i64 @llvm.vector.reduce.umax.v1i64(<1 x i64> undef)
157; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i64 @llvm.vector.reduce.umax.v2i64(<2 x i64> undef)
158; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i64 @llvm.vector.reduce.umax.v4i64(<4 x i64> undef)
159; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> undef)
160; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i64 @llvm.vector.reduce.umax.v16i64(<16 x i64> undef)
161; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V32 = call i64 @llvm.vector.reduce.umax.v32i64(<32 x i64> undef)
162; SIZE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V64 = call i64 @llvm.vector.reduce.umax.v64i64(<64 x i64> undef)
163; SIZE-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V128 = call i64 @llvm.vector.reduce.umax.v128i64(<128 x i64> undef)
164; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
165;
166  %V1   = call i64 @llvm.vector.reduce.umax.v1i64(<1 x i64> undef)
167  %V2   = call i64 @llvm.vector.reduce.umax.v2i64(<2 x i64> undef)
168  %V4   = call i64 @llvm.vector.reduce.umax.v4i64(<4 x i64> undef)
169  %V8   = call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> undef)
170  %V16  = call i64 @llvm.vector.reduce.umax.v16i64(<16 x i64> undef)
171  %V32  = call i64 @llvm.vector.reduce.umax.v32i64(<32 x i64> undef)
172  %V64  = call i64 @llvm.vector.reduce.umax.v64i64(<64 x i64> undef)
173  %V128 = call i64 @llvm.vector.reduce.umax.v128i64(<128 x i64> undef)
174  ret i32 undef
175}
176
177define i32 @reduce_smin_i1(i32 %arg) {
178; CHECK-LABEL: 'reduce_smin_i1'
179; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i1 @llvm.vector.reduce.smax.v1i1(<1 x i1> undef)
180; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i1 @llvm.vector.reduce.smax.v2i1(<2 x i1> undef)
181; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i1 @llvm.vector.reduce.smax.v4i1(<4 x i1> undef)
182; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i1 @llvm.vector.reduce.smax.v8i1(<8 x i1> undef)
183; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i1 @llvm.vector.reduce.smax.v16i1(<16 x i1> undef)
184; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V32 = call i1 @llvm.vector.reduce.smax.v32i1(<32 x i1> undef)
185; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V64 = call i1 @llvm.vector.reduce.smax.v64i1(<64 x i1> undef)
186; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V128 = call i1 @llvm.vector.reduce.smax.v128i1(<128 x i1> undef)
187; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
188;
189; SIZE-LABEL: 'reduce_smin_i1'
190; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i1 @llvm.vector.reduce.smax.v1i1(<1 x i1> undef)
191; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V2 = call i1 @llvm.vector.reduce.smax.v2i1(<2 x i1> undef)
192; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i1 @llvm.vector.reduce.smax.v4i1(<4 x i1> undef)
193; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V8 = call i1 @llvm.vector.reduce.smax.v8i1(<8 x i1> undef)
194; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V16 = call i1 @llvm.vector.reduce.smax.v16i1(<16 x i1> undef)
195; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V32 = call i1 @llvm.vector.reduce.smax.v32i1(<32 x i1> undef)
196; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V64 = call i1 @llvm.vector.reduce.smax.v64i1(<64 x i1> undef)
197; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V128 = call i1 @llvm.vector.reduce.smax.v128i1(<128 x i1> undef)
198; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
199;
200  %V1   = call i1 @llvm.vector.reduce.smax.v1i1(<1 x i1> undef)
201  %V2   = call i1 @llvm.vector.reduce.smax.v2i1(<2 x i1> undef)
202  %V4   = call i1 @llvm.vector.reduce.smax.v4i1(<4 x i1> undef)
203  %V8   = call i1 @llvm.vector.reduce.smax.v8i1(<8 x i1> undef)
204  %V16  = call i1 @llvm.vector.reduce.smax.v16i1(<16 x i1> undef)
205  %V32  = call i1 @llvm.vector.reduce.smax.v32i1(<32 x i1> undef)
206  %V64  = call i1 @llvm.vector.reduce.smax.v64i1(<64 x i1> undef)
207  %V128 = call i1 @llvm.vector.reduce.smax.v128i1(<128 x i1> undef)
208  ret i32 undef
209}
210
211define i32 @reduce_smax_i8(i32 %arg) {
212; CHECK-LABEL: 'reduce_smax_i8'
213; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i8 @llvm.vector.reduce.smax.v1i8(<1 x i8> undef)
214; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
215; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
216; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
217; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
218; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
219; CHECK-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V64 = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
220; CHECK-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
221; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
222;
223; SIZE-LABEL: 'reduce_smax_i8'
224; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i8 @llvm.vector.reduce.smax.v1i8(<1 x i8> undef)
225; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
226; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
227; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
228; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
229; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
230; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
231; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
232; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
233;
234  %V1   = call i8 @llvm.vector.reduce.smax.v1i8(<1 x i8> undef)
235  %V2   = call i8 @llvm.vector.reduce.smax.v2i8(<2 x i8> undef)
236  %V4   = call i8 @llvm.vector.reduce.smax.v4i8(<4 x i8> undef)
237  %V8   = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> undef)
238  %V16  = call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> undef)
239  %V32  = call i8 @llvm.vector.reduce.smax.v32i8(<32 x i8> undef)
240  %V64  = call i8 @llvm.vector.reduce.smax.v64i8(<64 x i8> undef)
241  %V128 = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> undef)
242  ret i32 undef
243}
244
245define i32 @reduce_smax_i16(i32 %arg) {
246; CHECK-LABEL: 'reduce_smax_i16'
247; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i16 @llvm.vector.reduce.smax.v1i16(<1 x i16> undef)
248; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
249; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
250; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
251; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
252; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
253; CHECK-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
254; CHECK-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %V128 = call i16 @llvm.vector.reduce.smax.v128i16(<128 x i16> undef)
255; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
256;
257; SIZE-LABEL: 'reduce_smax_i16'
258; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i16 @llvm.vector.reduce.smax.v1i16(<1 x i16> undef)
259; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
260; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
261; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
262; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
263; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
264; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V64 = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
265; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V128 = call i16 @llvm.vector.reduce.smax.v128i16(<128 x i16> undef)
266; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
267;
268  %V1   = call i16 @llvm.vector.reduce.smax.v1i16(<1 x i16> undef)
269  %V2   = call i16 @llvm.vector.reduce.smax.v2i16(<2 x i16> undef)
270  %V4   = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> undef)
271  %V8   = call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> undef)
272  %V16  = call i16 @llvm.vector.reduce.smax.v16i16(<16 x i16> undef)
273  %V32  = call i16 @llvm.vector.reduce.smax.v32i16(<32 x i16> undef)
274  %V64  = call i16 @llvm.vector.reduce.smax.v64i16(<64 x i16> undef)
275  %V128 = call i16 @llvm.vector.reduce.smax.v128i16(<128 x i16> undef)
276  ret i32 undef
277}
278
279define i32 @reduce_smax_i32(i32 %arg) {
280; CHECK-LABEL: 'reduce_smax_i32'
281; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> undef)
282; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
283; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
284; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
285; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
286; CHECK-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
287; CHECK-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %V64 = call i32 @llvm.vector.reduce.smax.v64i32(<64 x i32> undef)
288; CHECK-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %V128 = call i32 @llvm.vector.reduce.smax.v128i32(<128 x i32> undef)
289; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
290;
291; SIZE-LABEL: 'reduce_smax_i32'
292; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> undef)
293; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
294; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
295; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
296; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
297; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32 = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
298; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V64 = call i32 @llvm.vector.reduce.smax.v64i32(<64 x i32> undef)
299; SIZE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V128 = call i32 @llvm.vector.reduce.smax.v128i32(<128 x i32> undef)
300; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
301;
302  %V1   = call i32 @llvm.vector.reduce.smax.v1i32(<1 x i32> undef)
303  %V2   = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> undef)
304  %V4   = call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> undef)
305  %V8   = call i32 @llvm.vector.reduce.smax.v8i32(<8 x i32> undef)
306  %V16  = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> undef)
307  %V32  = call i32 @llvm.vector.reduce.smax.v32i32(<32 x i32> undef)
308  %V64  = call i32 @llvm.vector.reduce.smax.v64i32(<64 x i32> undef)
309  %V128 = call i32 @llvm.vector.reduce.smax.v128i32(<128 x i32> undef)
310  ret i32 undef
311}
312
313define i32 @reduce_smax_i64(i32 %arg) {
314; CHECK-LABEL: 'reduce_smax_i64'
315; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1 = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
316; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
317; CHECK-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V4 = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
318; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8 = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
319; CHECK-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
320; CHECK-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %V32 = call i64 @llvm.vector.reduce.smax.v32i64(<32 x i64> undef)
321; CHECK-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %V64 = call i64 @llvm.vector.reduce.smax.v64i64(<64 x i64> undef)
322; CHECK-NEXT:  Cost Model: Found an estimated cost of 61 for instruction: %V128 = call i64 @llvm.vector.reduce.smax.v128i64(<128 x i64> undef)
323; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 undef
324;
325; SIZE-LABEL: 'reduce_smax_i64'
326; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V1 = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
327; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2 = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
328; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V4 = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
329; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8 = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
330; SIZE-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16 = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
331; SIZE-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %V32 = call i64 @llvm.vector.reduce.smax.v32i64(<32 x i64> undef)
332; SIZE-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %V64 = call i64 @llvm.vector.reduce.smax.v64i64(<64 x i64> undef)
333; SIZE-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %V128 = call i64 @llvm.vector.reduce.smax.v128i64(<128 x i64> undef)
334; SIZE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 undef
335;
336  %V1   = call i64 @llvm.vector.reduce.smax.v1i64(<1 x i64> undef)
337  %V2   = call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> undef)
338  %V4   = call i64 @llvm.vector.reduce.smax.v4i64(<4 x i64> undef)
339  %V8   = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> undef)
340  %V16  = call i64 @llvm.vector.reduce.smax.v16i64(<16 x i64> undef)
341  %V32  = call i64 @llvm.vector.reduce.smax.v32i64(<32 x i64> undef)
342  %V64  = call i64 @llvm.vector.reduce.smax.v64i64(<64 x i64> undef)
343  %V128 = call i64 @llvm.vector.reduce.smax.v128i64(<128 x i64> undef)
344  ret i32 undef
345}
346
347
348declare i1 @llvm.vector.reduce.umax.v1i1(<1 x i1>)
349declare i1 @llvm.vector.reduce.umax.v2i1(<2 x i1>)
350declare i1 @llvm.vector.reduce.umax.v4i1(<4 x i1>)
351declare i1 @llvm.vector.reduce.umax.v8i1(<8 x i1>)
352declare i1 @llvm.vector.reduce.umax.v16i1(<16 x i1>)
353declare i1 @llvm.vector.reduce.umax.v32i1(<32 x i1>)
354declare i1 @llvm.vector.reduce.umax.v64i1(<64 x i1>)
355declare i1 @llvm.vector.reduce.umax.v128i1(<128 x i1>)
356declare i8 @llvm.vector.reduce.umax.v1i8(<1 x i8>)
357declare i8 @llvm.vector.reduce.umax.v2i8(<2 x i8>)
358declare i8 @llvm.vector.reduce.umax.v4i8(<4 x i8>)
359declare i8 @llvm.vector.reduce.umax.v8i8(<8 x i8>)
360declare i8 @llvm.vector.reduce.umax.v16i8(<16 x i8>)
361declare i8 @llvm.vector.reduce.umax.v32i8(<32 x i8>)
362declare i8 @llvm.vector.reduce.umax.v64i8(<64 x i8>)
363declare i8 @llvm.vector.reduce.umax.v128i8(<128 x i8>)
364declare i16 @llvm.vector.reduce.umax.v1i16(<1 x i16>)
365declare i16 @llvm.vector.reduce.umax.v2i16(<2 x i16>)
366declare i16 @llvm.vector.reduce.umax.v4i16(<4 x i16>)
367declare i16 @llvm.vector.reduce.umax.v8i16(<8 x i16>)
368declare i16 @llvm.vector.reduce.umax.v16i16(<16 x i16>)
369declare i16 @llvm.vector.reduce.umax.v32i16(<32 x i16>)
370declare i16 @llvm.vector.reduce.umax.v64i16(<64 x i16>)
371declare i16 @llvm.vector.reduce.umax.v128i16(<128 x i16>)
372declare i32 @llvm.vector.reduce.umax.v1i32(<1 x i32>)
373declare i32 @llvm.vector.reduce.umax.v2i32(<2 x i32>)
374declare i32 @llvm.vector.reduce.umax.v4i32(<4 x i32>)
375declare i32 @llvm.vector.reduce.umax.v8i32(<8 x i32>)
376declare i32 @llvm.vector.reduce.umax.v16i32(<16 x i32>)
377declare i32 @llvm.vector.reduce.umax.v32i32(<32 x i32>)
378declare i32 @llvm.vector.reduce.umax.v64i32(<64 x i32>)
379declare i32 @llvm.vector.reduce.umax.v128i32(<128 x i32>)
380declare i64 @llvm.vector.reduce.umax.v1i64(<1 x i64>)
381declare i64 @llvm.vector.reduce.umax.v2i64(<2 x i64>)
382declare i64 @llvm.vector.reduce.umax.v4i64(<4 x i64>)
383declare i64 @llvm.vector.reduce.umax.v8i64(<8 x i64>)
384declare i64 @llvm.vector.reduce.umax.v16i64(<16 x i64>)
385declare i64 @llvm.vector.reduce.umax.v32i64(<32 x i64>)
386declare i64 @llvm.vector.reduce.umax.v64i64(<64 x i64>)
387declare i64 @llvm.vector.reduce.umax.v128i64(<128 x i64>)
388declare i1 @llvm.vector.reduce.smax.v1i1(<1 x i1>)
389declare i1 @llvm.vector.reduce.smax.v2i1(<2 x i1>)
390declare i1 @llvm.vector.reduce.smax.v4i1(<4 x i1>)
391declare i1 @llvm.vector.reduce.smax.v8i1(<8 x i1>)
392declare i1 @llvm.vector.reduce.smax.v16i1(<16 x i1>)
393declare i1 @llvm.vector.reduce.smax.v32i1(<32 x i1>)
394declare i1 @llvm.vector.reduce.smax.v64i1(<64 x i1>)
395declare i1 @llvm.vector.reduce.smax.v128i1(<128 x i1>)
396declare i8 @llvm.vector.reduce.smax.v1i8(<1 x i8>)
397declare i8 @llvm.vector.reduce.smax.v2i8(<2 x i8>)
398declare i8 @llvm.vector.reduce.smax.v4i8(<4 x i8>)
399declare i8 @llvm.vector.reduce.smax.v8i8(<8 x i8>)
400declare i8 @llvm.vector.reduce.smax.v16i8(<16 x i8>)
401declare i8 @llvm.vector.reduce.smax.v32i8(<32 x i8>)
402declare i8 @llvm.vector.reduce.smax.v64i8(<64 x i8>)
403declare i8 @llvm.vector.reduce.smax.v128i8(<128 x i8>)
404declare i16 @llvm.vector.reduce.smax.v1i16(<1 x i16>)
405declare i16 @llvm.vector.reduce.smax.v2i16(<2 x i16>)
406declare i16 @llvm.vector.reduce.smax.v4i16(<4 x i16>)
407declare i16 @llvm.vector.reduce.smax.v8i16(<8 x i16>)
408declare i16 @llvm.vector.reduce.smax.v16i16(<16 x i16>)
409declare i16 @llvm.vector.reduce.smax.v32i16(<32 x i16>)
410declare i16 @llvm.vector.reduce.smax.v64i16(<64 x i16>)
411declare i16 @llvm.vector.reduce.smax.v128i16(<128 x i16>)
412declare i32 @llvm.vector.reduce.smax.v1i32(<1 x i32>)
413declare i32 @llvm.vector.reduce.smax.v2i32(<2 x i32>)
414declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>)
415declare i32 @llvm.vector.reduce.smax.v8i32(<8 x i32>)
416declare i32 @llvm.vector.reduce.smax.v16i32(<16 x i32>)
417declare i32 @llvm.vector.reduce.smax.v32i32(<32 x i32>)
418declare i32 @llvm.vector.reduce.smax.v64i32(<64 x i32>)
419declare i32 @llvm.vector.reduce.smax.v128i32(<128 x i32>)
420declare i64 @llvm.vector.reduce.smax.v1i64(<1 x i64>)
421declare i64 @llvm.vector.reduce.smax.v2i64(<2 x i64>)
422declare i64 @llvm.vector.reduce.smax.v4i64(<4 x i64>)
423declare i64 @llvm.vector.reduce.smax.v8i64(<8 x i64>)
424declare i64 @llvm.vector.reduce.smax.v16i64(<16 x i64>)
425declare i64 @llvm.vector.reduce.smax.v32i64(<32 x i64>)
426declare i64 @llvm.vector.reduce.smax.v64i64(<64 x i64>)
427declare i64 @llvm.vector.reduce.smax.v128i64(<128 x i64>)
428