xref: /llvm-project/llvm/test/Analysis/CostModel/AArch64/min-max.ll (revision 2a859b20146108af84c741a509dc0e534e045768)
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2; RUN: opt < %s -mtriple=aarch64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=throughput | FileCheck %s --check-prefixes=CHECK,CHECK-NOF16
3; RUN: opt < %s -mtriple=aarch64-unknown-linux-gnu -mattr=+fullfp16 -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=throughput | FileCheck %s --check-prefixes=CHECK,CHECK-F16
4
5target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
6
7define void @umin() {
8; CHECK-LABEL: 'umin'
9; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i8 = call i8 @llvm.umin.i8(i8 undef, i8 undef)
10; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i16 = call i16 @llvm.umin.i16(i16 undef, i16 undef)
11; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i32 = call i32 @llvm.umin.i32(i32 undef, i32 undef)
12; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i64 = call i64 @llvm.umin.i64(i64 undef, i64 undef)
13; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1i8 = call <1 x i8> @llvm.umin.v1i8(<1 x i8> undef, <1 x i8> undef)
14; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V3i8 = call <3 x i8> @llvm.umin.v3i8(<3 x i8> undef, <3 x i8> undef)
15; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i8 = call <4 x i8> @llvm.umin.v4i8(<4 x i8> undef, <4 x i8> undef)
16; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i8 = call <8 x i8> @llvm.umin.v8i8(<8 x i8> undef, <8 x i8> undef)
17; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16i8 = call <16 x i8> @llvm.umin.v16i8(<16 x i8> undef, <16 x i8> undef)
18; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32i8 = call <32 x i8> @llvm.umin.v32i8(<32 x i8> undef, <32 x i8> undef)
19; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64i8 = call <64 x i8> @llvm.umin.v64i8(<64 x i8> undef, <64 x i8> undef)
20; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i16 = call <2 x i16> @llvm.umin.v2i16(<2 x i16> undef, <2 x i16> undef)
21; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i16 = call <4 x i16> @llvm.umin.v4i16(<4 x i16> undef, <4 x i16> undef)
22; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i16 = call <8 x i16> @llvm.umin.v8i16(<8 x i16> undef, <8 x i16> undef)
23; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16i16 = call <16 x i16> @llvm.umin.v16i16(<16 x i16> undef, <16 x i16> undef)
24; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i32 = call <2 x i32> @llvm.umin.v2i32(<2 x i32> undef, <2 x i32> undef)
25; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i32 = call <4 x i32> @llvm.umin.v4i32(<4 x i32> undef, <4 x i32> undef)
26; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8i32 = call <8 x i32> @llvm.umin.v8i32(<8 x i32> undef, <8 x i32> undef)
27; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2i64 = call <2 x i64> @llvm.umin.v2i64(<2 x i64> undef, <2 x i64> undef)
28; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4i64 = call <4 x i64> @llvm.umin.v4i64(<4 x i64> undef, <4 x i64> undef)
29; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
30;
31  %i8 = call i8 @llvm.umin.i8(i8 undef, i8 undef)
32  %i16 = call i16 @llvm.umin.i16(i16 undef, i16 undef)
33  %i32 = call i32 @llvm.umin.i32(i32 undef, i32 undef)
34  %i64 = call i64 @llvm.umin.i64(i64 undef, i64 undef)
35  %V1i8 = call <1 x i8> @llvm.umin.v1i8(<1 x i8> undef, <1 x i8> undef)
36  %V3i8 = call <3 x i8> @llvm.umin.v3i8(<3 x i8> undef, <3 x i8> undef)
37  %V4i8 = call <4 x i8> @llvm.umin.v4i8(<4 x i8> undef, <4 x i8> undef)
38  %V8i8 = call <8 x i8> @llvm.umin.v8i8(<8 x i8> undef, <8 x i8> undef)
39  %V16i8 = call <16 x i8> @llvm.umin.v16i8(<16 x i8> undef, <16 x i8> undef)
40  %V32i8 = call <32 x i8> @llvm.umin.v32i8(<32 x i8> undef, <32 x i8> undef)
41  %V64i8 = call <64 x i8> @llvm.umin.v64i8(<64 x i8> undef, <64 x i8> undef)
42  %V2i16 = call <2 x i16> @llvm.umin.v2i16(<2 x i16> undef, <2 x i16> undef)
43  %V4i16 = call <4 x i16> @llvm.umin.v4i16(<4 x i16> undef, <4 x i16> undef)
44  %V8i16 = call <8 x i16> @llvm.umin.v8i16(<8 x i16> undef, <8 x i16> undef)
45  %V16i16 = call <16 x i16> @llvm.umin.v16i16(<16 x i16> undef, <16 x i16> undef)
46  %V2i32 = call <2 x i32> @llvm.umin.v2i32(<2 x i32> undef, <2 x i32> undef)
47  %V4i32 = call <4 x i32> @llvm.umin.v4i32(<4 x i32> undef, <4 x i32> undef)
48  %V8i32 = call <8 x i32> @llvm.umin.v8i32(<8 x i32> undef, <8 x i32> undef)
49  %V2i64 = call <2 x i64> @llvm.umin.v2i64(<2 x i64> undef, <2 x i64> undef)
50  %V4i64 = call <4 x i64> @llvm.umin.v4i64(<4 x i64> undef, <4 x i64> undef)
51  ret void
52}
53
54define void @umax() {
55; CHECK-LABEL: 'umax'
56; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i8 = call i8 @llvm.umax.i8(i8 undef, i8 undef)
57; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i16 = call i16 @llvm.umax.i16(i16 undef, i16 undef)
58; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i32 = call i32 @llvm.umax.i32(i32 undef, i32 undef)
59; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i64 = call i64 @llvm.umax.i64(i64 undef, i64 undef)
60; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1i8 = call <1 x i8> @llvm.umax.v1i8(<1 x i8> undef, <1 x i8> undef)
61; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V3i8 = call <3 x i8> @llvm.umax.v3i8(<3 x i8> undef, <3 x i8> undef)
62; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i8 = call <4 x i8> @llvm.umax.v4i8(<4 x i8> undef, <4 x i8> undef)
63; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i8 = call <8 x i8> @llvm.umax.v8i8(<8 x i8> undef, <8 x i8> undef)
64; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16i8 = call <16 x i8> @llvm.umax.v16i8(<16 x i8> undef, <16 x i8> undef)
65; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32i8 = call <32 x i8> @llvm.umax.v32i8(<32 x i8> undef, <32 x i8> undef)
66; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64i8 = call <64 x i8> @llvm.umax.v64i8(<64 x i8> undef, <64 x i8> undef)
67; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i16 = call <2 x i16> @llvm.umax.v2i16(<2 x i16> undef, <2 x i16> undef)
68; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i16 = call <4 x i16> @llvm.umax.v4i16(<4 x i16> undef, <4 x i16> undef)
69; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i16 = call <8 x i16> @llvm.umax.v8i16(<8 x i16> undef, <8 x i16> undef)
70; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16i16 = call <16 x i16> @llvm.umax.v16i16(<16 x i16> undef, <16 x i16> undef)
71; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i32 = call <2 x i32> @llvm.umax.v2i32(<2 x i32> undef, <2 x i32> undef)
72; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i32 = call <4 x i32> @llvm.umax.v4i32(<4 x i32> undef, <4 x i32> undef)
73; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8i32 = call <8 x i32> @llvm.umax.v8i32(<8 x i32> undef, <8 x i32> undef)
74; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2i64 = call <2 x i64> @llvm.umax.v2i64(<2 x i64> undef, <2 x i64> undef)
75; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4i64 = call <4 x i64> @llvm.umax.v4i64(<4 x i64> undef, <4 x i64> undef)
76; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
77;
78  %i8 = call i8 @llvm.umax.i8(i8 undef, i8 undef)
79  %i16 = call i16 @llvm.umax.i16(i16 undef, i16 undef)
80  %i32 = call i32 @llvm.umax.i32(i32 undef, i32 undef)
81  %i64 = call i64 @llvm.umax.i64(i64 undef, i64 undef)
82  %V1i8 = call <1 x i8> @llvm.umax.v1i8(<1 x i8> undef, <1 x i8> undef)
83  %V3i8 = call <3 x i8> @llvm.umax.v3i8(<3 x i8> undef, <3 x i8> undef)
84  %V4i8 = call <4 x i8> @llvm.umax.v4i8(<4 x i8> undef, <4 x i8> undef)
85  %V8i8 = call <8 x i8> @llvm.umax.v8i8(<8 x i8> undef, <8 x i8> undef)
86  %V16i8 = call <16 x i8> @llvm.umax.v16i8(<16 x i8> undef, <16 x i8> undef)
87  %V32i8 = call <32 x i8> @llvm.umax.v32i8(<32 x i8> undef, <32 x i8> undef)
88  %V64i8 = call <64 x i8> @llvm.umax.v64i8(<64 x i8> undef, <64 x i8> undef)
89  %V2i16 = call <2 x i16> @llvm.umax.v2i16(<2 x i16> undef, <2 x i16> undef)
90  %V4i16 = call <4 x i16> @llvm.umax.v4i16(<4 x i16> undef, <4 x i16> undef)
91  %V8i16 = call <8 x i16> @llvm.umax.v8i16(<8 x i16> undef, <8 x i16> undef)
92  %V16i16 = call <16 x i16> @llvm.umax.v16i16(<16 x i16> undef, <16 x i16> undef)
93  %V2i32 = call <2 x i32> @llvm.umax.v2i32(<2 x i32> undef, <2 x i32> undef)
94  %V4i32 = call <4 x i32> @llvm.umax.v4i32(<4 x i32> undef, <4 x i32> undef)
95  %V8i32 = call <8 x i32> @llvm.umax.v8i32(<8 x i32> undef, <8 x i32> undef)
96  %V2i64 = call <2 x i64> @llvm.umax.v2i64(<2 x i64> undef, <2 x i64> undef)
97  %V4i64 = call <4 x i64> @llvm.umax.v4i64(<4 x i64> undef, <4 x i64> undef)
98  ret void
99}
100
101define void @smin() {
102; CHECK-LABEL: 'smin'
103; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i8 = call i8 @llvm.smin.i8(i8 undef, i8 undef)
104; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i16 = call i16 @llvm.smin.i16(i16 undef, i16 undef)
105; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i32 = call i32 @llvm.smin.i32(i32 undef, i32 undef)
106; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i64 = call i64 @llvm.smin.i64(i64 undef, i64 undef)
107; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1i8 = call <1 x i8> @llvm.smin.v1i8(<1 x i8> undef, <1 x i8> undef)
108; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V3i8 = call <3 x i8> @llvm.smin.v3i8(<3 x i8> undef, <3 x i8> undef)
109; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i8 = call <4 x i8> @llvm.smin.v4i8(<4 x i8> undef, <4 x i8> undef)
110; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i8 = call <8 x i8> @llvm.smin.v8i8(<8 x i8> undef, <8 x i8> undef)
111; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16i8 = call <16 x i8> @llvm.smin.v16i8(<16 x i8> undef, <16 x i8> undef)
112; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32i8 = call <32 x i8> @llvm.smin.v32i8(<32 x i8> undef, <32 x i8> undef)
113; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64i8 = call <64 x i8> @llvm.smin.v64i8(<64 x i8> undef, <64 x i8> undef)
114; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i16 = call <2 x i16> @llvm.smin.v2i16(<2 x i16> undef, <2 x i16> undef)
115; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i16 = call <4 x i16> @llvm.smin.v4i16(<4 x i16> undef, <4 x i16> undef)
116; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i16 = call <8 x i16> @llvm.smin.v8i16(<8 x i16> undef, <8 x i16> undef)
117; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16i16 = call <16 x i16> @llvm.smin.v16i16(<16 x i16> undef, <16 x i16> undef)
118; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i32 = call <2 x i32> @llvm.smin.v2i32(<2 x i32> undef, <2 x i32> undef)
119; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i32 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> undef, <4 x i32> undef)
120; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8i32 = call <8 x i32> @llvm.smin.v8i32(<8 x i32> undef, <8 x i32> undef)
121; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2i64 = call <2 x i64> @llvm.smin.v2i64(<2 x i64> undef, <2 x i64> undef)
122; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4i64 = call <4 x i64> @llvm.smin.v4i64(<4 x i64> undef, <4 x i64> undef)
123; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
124;
125  %i8 = call i8 @llvm.smin.i8(i8 undef, i8 undef)
126  %i16 = call i16 @llvm.smin.i16(i16 undef, i16 undef)
127  %i32 = call i32 @llvm.smin.i32(i32 undef, i32 undef)
128  %i64 = call i64 @llvm.smin.i64(i64 undef, i64 undef)
129  %V1i8 = call <1 x i8> @llvm.smin.v1i8(<1 x i8> undef, <1 x i8> undef)
130  %V3i8 = call <3 x i8> @llvm.smin.v3i8(<3 x i8> undef, <3 x i8> undef)
131  %V4i8 = call <4 x i8> @llvm.smin.v4i8(<4 x i8> undef, <4 x i8> undef)
132  %V8i8 = call <8 x i8> @llvm.smin.v8i8(<8 x i8> undef, <8 x i8> undef)
133  %V16i8 = call <16 x i8> @llvm.smin.v16i8(<16 x i8> undef, <16 x i8> undef)
134  %V32i8 = call <32 x i8> @llvm.smin.v32i8(<32 x i8> undef, <32 x i8> undef)
135  %V64i8 = call <64 x i8> @llvm.smin.v64i8(<64 x i8> undef, <64 x i8> undef)
136  %V2i16 = call <2 x i16> @llvm.smin.v2i16(<2 x i16> undef, <2 x i16> undef)
137  %V4i16 = call <4 x i16> @llvm.smin.v4i16(<4 x i16> undef, <4 x i16> undef)
138  %V8i16 = call <8 x i16> @llvm.smin.v8i16(<8 x i16> undef, <8 x i16> undef)
139  %V16i16 = call <16 x i16> @llvm.smin.v16i16(<16 x i16> undef, <16 x i16> undef)
140  %V2i32 = call <2 x i32> @llvm.smin.v2i32(<2 x i32> undef, <2 x i32> undef)
141  %V4i32 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> undef, <4 x i32> undef)
142  %V8i32 = call <8 x i32> @llvm.smin.v8i32(<8 x i32> undef, <8 x i32> undef)
143  %V2i64 = call <2 x i64> @llvm.smin.v2i64(<2 x i64> undef, <2 x i64> undef)
144  %V4i64 = call <4 x i64> @llvm.smin.v4i64(<4 x i64> undef, <4 x i64> undef)
145  ret void
146}
147
148define void @smax() {
149; CHECK-LABEL: 'smax'
150; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i8 = call i8 @llvm.smax.i8(i8 undef, i8 undef)
151; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i16 = call i16 @llvm.smax.i16(i16 undef, i16 undef)
152; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i32 = call i32 @llvm.smax.i32(i32 undef, i32 undef)
153; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %i64 = call i64 @llvm.smax.i64(i64 undef, i64 undef)
154; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V1i8 = call <1 x i8> @llvm.smax.v1i8(<1 x i8> undef, <1 x i8> undef)
155; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V3i8 = call <3 x i8> @llvm.smax.v3i8(<3 x i8> undef, <3 x i8> undef)
156; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i8 = call <4 x i8> @llvm.smax.v4i8(<4 x i8> undef, <4 x i8> undef)
157; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i8 = call <8 x i8> @llvm.smax.v8i8(<8 x i8> undef, <8 x i8> undef)
158; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V16i8 = call <16 x i8> @llvm.smax.v16i8(<16 x i8> undef, <16 x i8> undef)
159; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V32i8 = call <32 x i8> @llvm.smax.v32i8(<32 x i8> undef, <32 x i8> undef)
160; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V64i8 = call <64 x i8> @llvm.smax.v64i8(<64 x i8> undef, <64 x i8> undef)
161; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i16 = call <2 x i16> @llvm.smax.v2i16(<2 x i16> undef, <2 x i16> undef)
162; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i16 = call <4 x i16> @llvm.smax.v4i16(<4 x i16> undef, <4 x i16> undef)
163; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8i16 = call <8 x i16> @llvm.smax.v8i16(<8 x i16> undef, <8 x i16> undef)
164; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V16i16 = call <16 x i16> @llvm.smax.v16i16(<16 x i16> undef, <16 x i16> undef)
165; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2i32 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> undef, <2 x i32> undef)
166; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4i32 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> undef, <4 x i32> undef)
167; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V8i32 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> undef, <8 x i32> undef)
168; CHECK-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %V2i64 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> undef, <2 x i64> undef)
169; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4i64 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> undef, <4 x i64> undef)
170; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
171;
172  %i8 = call i8 @llvm.smax.i8(i8 undef, i8 undef)
173  %i16 = call i16 @llvm.smax.i16(i16 undef, i16 undef)
174  %i32 = call i32 @llvm.smax.i32(i32 undef, i32 undef)
175  %i64 = call i64 @llvm.smax.i64(i64 undef, i64 undef)
176  %V1i8 = call <1 x i8> @llvm.smax.v1i8(<1 x i8> undef, <1 x i8> undef)
177  %V3i8 = call <3 x i8> @llvm.smax.v3i8(<3 x i8> undef, <3 x i8> undef)
178  %V4i8 = call <4 x i8> @llvm.smax.v4i8(<4 x i8> undef, <4 x i8> undef)
179  %V8i8 = call <8 x i8> @llvm.smax.v8i8(<8 x i8> undef, <8 x i8> undef)
180  %V16i8 = call <16 x i8> @llvm.smax.v16i8(<16 x i8> undef, <16 x i8> undef)
181  %V32i8 = call <32 x i8> @llvm.smax.v32i8(<32 x i8> undef, <32 x i8> undef)
182  %V64i8 = call <64 x i8> @llvm.smax.v64i8(<64 x i8> undef, <64 x i8> undef)
183  %V2i16 = call <2 x i16> @llvm.smax.v2i16(<2 x i16> undef, <2 x i16> undef)
184  %V4i16 = call <4 x i16> @llvm.smax.v4i16(<4 x i16> undef, <4 x i16> undef)
185  %V8i16 = call <8 x i16> @llvm.smax.v8i16(<8 x i16> undef, <8 x i16> undef)
186  %V16i16 = call <16 x i16> @llvm.smax.v16i16(<16 x i16> undef, <16 x i16> undef)
187  %V2i32 = call <2 x i32> @llvm.smax.v2i32(<2 x i32> undef, <2 x i32> undef)
188  %V4i32 = call <4 x i32> @llvm.smax.v4i32(<4 x i32> undef, <4 x i32> undef)
189  %V8i32 = call <8 x i32> @llvm.smax.v8i32(<8 x i32> undef, <8 x i32> undef)
190  %V2i64 = call <2 x i64> @llvm.smax.v2i64(<2 x i64> undef, <2 x i64> undef)
191  %V4i64 = call <4 x i64> @llvm.smax.v4i64(<4 x i64> undef, <4 x i64> undef)
192  ret void
193}
194
195define void @minnum16() {
196; CHECK-NOF16-LABEL: 'minnum16'
197; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.minnum.f16(half undef, half undef)
198; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2f16 = call <2 x half> @llvm.minnum.v2f16(<2 x half> undef, <2 x half> undef)
199; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V4f16 = call <4 x half> @llvm.minnum.v4f16(<4 x half> undef, <4 x half> undef)
200; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V8f16 = call <8 x half> @llvm.minnum.v8f16(<8 x half> undef, <8 x half> undef)
201; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %V16f16 = call <16 x half> @llvm.minnum.v16f16(<16 x half> undef, <16 x half> undef)
202; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
203;
204; CHECK-F16-LABEL: 'minnum16'
205; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.minnum.f16(half undef, half undef)
206; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f16 = call <2 x half> @llvm.minnum.v2f16(<2 x half> undef, <2 x half> undef)
207; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f16 = call <4 x half> @llvm.minnum.v4f16(<4 x half> undef, <4 x half> undef)
208; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8f16 = call <8 x half> @llvm.minnum.v8f16(<8 x half> undef, <8 x half> undef)
209; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16f16 = call <16 x half> @llvm.minnum.v16f16(<16 x half> undef, <16 x half> undef)
210; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
211;
212  %f16 = call half @llvm.minnum.f16(half undef, half undef)
213  %V2f16 = call <2 x half> @llvm.minnum.v2f16(<2 x half> undef, <2 x half> undef)
214  %V4f16 = call <4 x half> @llvm.minnum.v4f16(<4 x half> undef, <4 x half> undef)
215  %V8f16 = call <8 x half> @llvm.minnum.v8f16(<8 x half> undef, <8 x half> undef)
216  %V16f16 = call <16 x half> @llvm.minnum.v16f16(<16 x half> undef, <16 x half> undef)
217  ret void
218}
219
220define void @maxnum16() {
221; CHECK-NOF16-LABEL: 'maxnum16'
222; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.maxnum.f16(half undef, half undef)
223; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2f16 = call <2 x half> @llvm.maxnum.v2f16(<2 x half> undef, <2 x half> undef)
224; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V4f16 = call <4 x half> @llvm.maxnum.v4f16(<4 x half> undef, <4 x half> undef)
225; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V8f16 = call <8 x half> @llvm.maxnum.v8f16(<8 x half> undef, <8 x half> undef)
226; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %V16f16 = call <16 x half> @llvm.maxnum.v16f16(<16 x half> undef, <16 x half> undef)
227; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
228;
229; CHECK-F16-LABEL: 'maxnum16'
230; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.maxnum.f16(half undef, half undef)
231; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f16 = call <2 x half> @llvm.maxnum.v2f16(<2 x half> undef, <2 x half> undef)
232; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f16 = call <4 x half> @llvm.maxnum.v4f16(<4 x half> undef, <4 x half> undef)
233; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8f16 = call <8 x half> @llvm.maxnum.v8f16(<8 x half> undef, <8 x half> undef)
234; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16f16 = call <16 x half> @llvm.maxnum.v16f16(<16 x half> undef, <16 x half> undef)
235; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
236;
237  %f16 = call half @llvm.maxnum.f16(half undef, half undef)
238  %V2f16 = call <2 x half> @llvm.maxnum.v2f16(<2 x half> undef, <2 x half> undef)
239  %V4f16 = call <4 x half> @llvm.maxnum.v4f16(<4 x half> undef, <4 x half> undef)
240  %V8f16 = call <8 x half> @llvm.maxnum.v8f16(<8 x half> undef, <8 x half> undef)
241  %V16f16 = call <16 x half> @llvm.maxnum.v16f16(<16 x half> undef, <16 x half> undef)
242  ret void
243}
244
245define void @minnum() {
246; CHECK-LABEL: 'minnum'
247; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f32 = call float @llvm.minnum.f32(float undef, float undef)
248; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f64 = call double @llvm.minnum.f64(double undef, double undef)
249; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f32 = call <2 x float> @llvm.minnum.v2f32(<2 x float> undef, <2 x float> undef)
250; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f32 = call <4 x float> @llvm.minnum.v4f32(<4 x float> undef, <4 x float> undef)
251; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8f32 = call <8 x float> @llvm.minnum.v8f32(<8 x float> undef, <8 x float> undef)
252; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f64 = call <2 x double> @llvm.minnum.v2f64(<2 x double> undef, <2 x double> undef)
253; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4f64 = call <4 x double> @llvm.minnum.v4f64(<4 x double> undef, <4 x double> undef)
254; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
255;
256  %f32 = call float @llvm.minnum.f32(float undef, float undef)
257  %f64 = call double @llvm.minnum.f64(double undef, double undef)
258  %V2f32 = call <2 x float> @llvm.minnum.v2f32(<2 x float> undef, <2 x float> undef)
259  %V4f32 = call <4 x float> @llvm.minnum.v4f32(<4 x float> undef, <4 x float> undef)
260  %V8f32 = call <8 x float> @llvm.minnum.v8f32(<8 x float> undef, <8 x float> undef)
261  %V2f64 = call <2 x double> @llvm.minnum.v2f64(<2 x double> undef, <2 x double> undef)
262  %V4f64 = call <4 x double> @llvm.minnum.v4f64(<4 x double> undef, <4 x double> undef)
263  ret void
264}
265
266define void @maxnum() {
267; CHECK-LABEL: 'maxnum'
268; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f32 = call float @llvm.maxnum.f32(float undef, float undef)
269; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f64 = call double @llvm.maxnum.f64(double undef, double undef)
270; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f32 = call <2 x float> @llvm.maxnum.v2f32(<2 x float> undef, <2 x float> undef)
271; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f32 = call <4 x float> @llvm.maxnum.v4f32(<4 x float> undef, <4 x float> undef)
272; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8f32 = call <8 x float> @llvm.maxnum.v8f32(<8 x float> undef, <8 x float> undef)
273; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f64 = call <2 x double> @llvm.maxnum.v2f64(<2 x double> undef, <2 x double> undef)
274; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4f64 = call <4 x double> @llvm.maxnum.v4f64(<4 x double> undef, <4 x double> undef)
275; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
276;
277  %f32 = call float @llvm.maxnum.f32(float undef, float undef)
278  %f64 = call double @llvm.maxnum.f64(double undef, double undef)
279  %V2f32 = call <2 x float> @llvm.maxnum.v2f32(<2 x float> undef, <2 x float> undef)
280  %V4f32 = call <4 x float> @llvm.maxnum.v4f32(<4 x float> undef, <4 x float> undef)
281  %V8f32 = call <8 x float> @llvm.maxnum.v8f32(<8 x float> undef, <8 x float> undef)
282  %V2f64 = call <2 x double> @llvm.maxnum.v2f64(<2 x double> undef, <2 x double> undef)
283  %V4f64 = call <4 x double> @llvm.maxnum.v4f64(<4 x double> undef, <4 x double> undef)
284  ret void
285}
286
287
288define void @minimum16() {
289; CHECK-NOF16-LABEL: 'minimum16'
290; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.minimum.f16(half undef, half undef)
291; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2f16 = call <2 x half> @llvm.minimum.v2f16(<2 x half> undef, <2 x half> undef)
292; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V4f16 = call <4 x half> @llvm.minimum.v4f16(<4 x half> undef, <4 x half> undef)
293; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V8f16 = call <8 x half> @llvm.minimum.v8f16(<8 x half> undef, <8 x half> undef)
294; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %V16f16 = call <16 x half> @llvm.minimum.v16f16(<16 x half> undef, <16 x half> undef)
295; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
296;
297; CHECK-F16-LABEL: 'minimum16'
298; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.minimum.f16(half undef, half undef)
299; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f16 = call <2 x half> @llvm.minimum.v2f16(<2 x half> undef, <2 x half> undef)
300; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f16 = call <4 x half> @llvm.minimum.v4f16(<4 x half> undef, <4 x half> undef)
301; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8f16 = call <8 x half> @llvm.minimum.v8f16(<8 x half> undef, <8 x half> undef)
302; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16f16 = call <16 x half> @llvm.minimum.v16f16(<16 x half> undef, <16 x half> undef)
303; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
304;
305  %f16 = call half @llvm.minimum.f16(half undef, half undef)
306  %V2f16 = call <2 x half> @llvm.minimum.v2f16(<2 x half> undef, <2 x half> undef)
307  %V4f16 = call <4 x half> @llvm.minimum.v4f16(<4 x half> undef, <4 x half> undef)
308  %V8f16 = call <8 x half> @llvm.minimum.v8f16(<8 x half> undef, <8 x half> undef)
309  %V16f16 = call <16 x half> @llvm.minimum.v16f16(<16 x half> undef, <16 x half> undef)
310  ret void
311}
312
313define void @maximum16() {
314; CHECK-NOF16-LABEL: 'maximum16'
315; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.maximum.f16(half undef, half undef)
316; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V2f16 = call <2 x half> @llvm.maximum.v2f16(<2 x half> undef, <2 x half> undef)
317; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %V4f16 = call <4 x half> @llvm.maximum.v4f16(<4 x half> undef, <4 x half> undef)
318; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %V8f16 = call <8 x half> @llvm.maximum.v8f16(<8 x half> undef, <8 x half> undef)
319; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %V16f16 = call <16 x half> @llvm.maximum.v16f16(<16 x half> undef, <16 x half> undef)
320; CHECK-NOF16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
321;
322; CHECK-F16-LABEL: 'maximum16'
323; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f16 = call half @llvm.maximum.f16(half undef, half undef)
324; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f16 = call <2 x half> @llvm.maximum.v2f16(<2 x half> undef, <2 x half> undef)
325; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f16 = call <4 x half> @llvm.maximum.v4f16(<4 x half> undef, <4 x half> undef)
326; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V8f16 = call <8 x half> @llvm.maximum.v8f16(<8 x half> undef, <8 x half> undef)
327; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V16f16 = call <16 x half> @llvm.maximum.v16f16(<16 x half> undef, <16 x half> undef)
328; CHECK-F16-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
329;
330  %f16 = call half @llvm.maximum.f16(half undef, half undef)
331  %V2f16 = call <2 x half> @llvm.maximum.v2f16(<2 x half> undef, <2 x half> undef)
332  %V4f16 = call <4 x half> @llvm.maximum.v4f16(<4 x half> undef, <4 x half> undef)
333  %V8f16 = call <8 x half> @llvm.maximum.v8f16(<8 x half> undef, <8 x half> undef)
334  %V16f16 = call <16 x half> @llvm.maximum.v16f16(<16 x half> undef, <16 x half> undef)
335  ret void
336}
337
338define void @minimum() {
339; CHECK-LABEL: 'minimum'
340; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f32 = call float @llvm.minimum.f32(float undef, float undef)
341; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f64 = call double @llvm.minimum.f64(double undef, double undef)
342; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f32 = call <2 x float> @llvm.minimum.v2f32(<2 x float> undef, <2 x float> undef)
343; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f32 = call <4 x float> @llvm.minimum.v4f32(<4 x float> undef, <4 x float> undef)
344; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8f32 = call <8 x float> @llvm.minimum.v8f32(<8 x float> undef, <8 x float> undef)
345; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f64 = call <2 x double> @llvm.minimum.v2f64(<2 x double> undef, <2 x double> undef)
346; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4f64 = call <4 x double> @llvm.minimum.v4f64(<4 x double> undef, <4 x double> undef)
347; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
348;
349  %f32 = call float @llvm.minimum.f32(float undef, float undef)
350  %f64 = call double @llvm.minimum.f64(double undef, double undef)
351  %V2f32 = call <2 x float> @llvm.minimum.v2f32(<2 x float> undef, <2 x float> undef)
352  %V4f32 = call <4 x float> @llvm.minimum.v4f32(<4 x float> undef, <4 x float> undef)
353  %V8f32 = call <8 x float> @llvm.minimum.v8f32(<8 x float> undef, <8 x float> undef)
354  %V2f64 = call <2 x double> @llvm.minimum.v2f64(<2 x double> undef, <2 x double> undef)
355  %V4f64 = call <4 x double> @llvm.minimum.v4f64(<4 x double> undef, <4 x double> undef)
356  ret void
357}
358
359define void @maximum() {
360; CHECK-LABEL: 'maximum'
361; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f32 = call float @llvm.maximum.f32(float undef, float undef)
362; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %f64 = call double @llvm.maximum.f64(double undef, double undef)
363; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f32 = call <2 x float> @llvm.maximum.v2f32(<2 x float> undef, <2 x float> undef)
364; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V4f32 = call <4 x float> @llvm.maximum.v4f32(<4 x float> undef, <4 x float> undef)
365; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V8f32 = call <8 x float> @llvm.maximum.v8f32(<8 x float> undef, <8 x float> undef)
366; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %V2f64 = call <2 x double> @llvm.maximum.v2f64(<2 x double> undef, <2 x double> undef)
367; CHECK-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %V4f64 = call <4 x double> @llvm.maximum.v4f64(<4 x double> undef, <4 x double> undef)
368; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret void
369;
370  %f32 = call float @llvm.maximum.f32(float undef, float undef)
371  %f64 = call double @llvm.maximum.f64(double undef, double undef)
372  %V2f32 = call <2 x float> @llvm.maximum.v2f32(<2 x float> undef, <2 x float> undef)
373  %V4f32 = call <4 x float> @llvm.maximum.v4f32(<4 x float> undef, <4 x float> undef)
374  %V8f32 = call <8 x float> @llvm.maximum.v8f32(<8 x float> undef, <8 x float> undef)
375  %V2f64 = call <2 x double> @llvm.maximum.v2f64(<2 x double> undef, <2 x double> undef)
376  %V4f64 = call <4 x double> @llvm.maximum.v4f64(<4 x double> undef, <4 x double> undef)
377  ret void
378}
379
380declare i8 @llvm.umin.i8(i8, i8)
381declare i16 @llvm.umin.i16(i16, i16)
382declare i32 @llvm.umin.i32(i32, i32)
383declare i64 @llvm.umin.i64(i64, i64)
384declare <1 x i8> @llvm.umin.v1i8(<1 x i8>, <1 x i8>)
385declare <3 x i8> @llvm.umin.v3i8(<3 x i8>, <3 x i8>)
386declare <4 x i8> @llvm.umin.v4i8(<4 x i8>, <4 x i8>)
387declare <8 x i8> @llvm.umin.v8i8(<8 x i8>, <8 x i8>)
388declare <16 x i8> @llvm.umin.v16i8(<16 x i8>, <16 x i8>)
389declare <32 x i8> @llvm.umin.v32i8(<32 x i8>, <32 x i8>)
390declare <64 x i8> @llvm.umin.v64i8(<64 x i8>, <64 x i8>)
391declare <2 x i16> @llvm.umin.v2i16(<2 x i16>, <2 x i16>)
392declare <4 x i16> @llvm.umin.v4i16(<4 x i16>, <4 x i16>)
393declare <8 x i16> @llvm.umin.v8i16(<8 x i16>, <8 x i16>)
394declare <16 x i16> @llvm.umin.v16i16(<16 x i16>, <16 x i16>)
395declare <2 x i32> @llvm.umin.v2i32(<2 x i32>, <2 x i32>)
396declare <4 x i32> @llvm.umin.v4i32(<4 x i32>, <4 x i32>)
397declare <8 x i32> @llvm.umin.v8i32(<8 x i32>, <8 x i32>)
398declare <2 x i64> @llvm.umin.v2i64(<2 x i64>, <2 x i64>)
399declare <4 x i64> @llvm.umin.v4i64(<4 x i64>, <4 x i64>)
400
401declare i8 @llvm.umax.i8(i8, i8)
402declare i16 @llvm.umax.i16(i16, i16)
403declare i32 @llvm.umax.i32(i32, i32)
404declare i64 @llvm.umax.i64(i64, i64)
405declare <1 x i8> @llvm.umax.v1i8(<1 x i8>, <1 x i8>)
406declare <3 x i8> @llvm.umax.v3i8(<3 x i8>, <3 x i8>)
407declare <4 x i8> @llvm.umax.v4i8(<4 x i8>, <4 x i8>)
408declare <8 x i8> @llvm.umax.v8i8(<8 x i8>, <8 x i8>)
409declare <16 x i8> @llvm.umax.v16i8(<16 x i8>, <16 x i8>)
410declare <32 x i8> @llvm.umax.v32i8(<32 x i8>, <32 x i8>)
411declare <64 x i8> @llvm.umax.v64i8(<64 x i8>, <64 x i8>)
412declare <2 x i16> @llvm.umax.v2i16(<2 x i16>, <2 x i16>)
413declare <4 x i16> @llvm.umax.v4i16(<4 x i16>, <4 x i16>)
414declare <8 x i16> @llvm.umax.v8i16(<8 x i16>, <8 x i16>)
415declare <16 x i16> @llvm.umax.v16i16(<16 x i16>, <16 x i16>)
416declare <2 x i32> @llvm.umax.v2i32(<2 x i32>, <2 x i32>)
417declare <4 x i32> @llvm.umax.v4i32(<4 x i32>, <4 x i32>)
418declare <8 x i32> @llvm.umax.v8i32(<8 x i32>, <8 x i32>)
419declare <2 x i64> @llvm.umax.v2i64(<2 x i64>, <2 x i64>)
420declare <4 x i64> @llvm.umax.v4i64(<4 x i64>, <4 x i64>)
421
422declare i8 @llvm.smin.i8(i8, i8)
423declare i16 @llvm.smin.i16(i16, i16)
424declare i32 @llvm.smin.i32(i32, i32)
425declare i64 @llvm.smin.i64(i64, i64)
426declare <1 x i8> @llvm.smin.v1i8(<1 x i8>, <1 x i8>)
427declare <3 x i8> @llvm.smin.v3i8(<3 x i8>, <3 x i8>)
428declare <4 x i8> @llvm.smin.v4i8(<4 x i8>, <4 x i8>)
429declare <8 x i8> @llvm.smin.v8i8(<8 x i8>, <8 x i8>)
430declare <16 x i8> @llvm.smin.v16i8(<16 x i8>, <16 x i8>)
431declare <32 x i8> @llvm.smin.v32i8(<32 x i8>, <32 x i8>)
432declare <64 x i8> @llvm.smin.v64i8(<64 x i8>, <64 x i8>)
433declare <2 x i16> @llvm.smin.v2i16(<2 x i16>, <2 x i16>)
434declare <4 x i16> @llvm.smin.v4i16(<4 x i16>, <4 x i16>)
435declare <8 x i16> @llvm.smin.v8i16(<8 x i16>, <8 x i16>)
436declare <16 x i16> @llvm.smin.v16i16(<16 x i16>, <16 x i16>)
437declare <2 x i32> @llvm.smin.v2i32(<2 x i32>, <2 x i32>)
438declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>)
439declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>)
440declare <2 x i64> @llvm.smin.v2i64(<2 x i64>, <2 x i64>)
441declare <4 x i64> @llvm.smin.v4i64(<4 x i64>, <4 x i64>)
442
443declare i8 @llvm.smax.i8(i8, i8)
444declare i16 @llvm.smax.i16(i16, i16)
445declare i32 @llvm.smax.i32(i32, i32)
446declare i64 @llvm.smax.i64(i64, i64)
447declare <1 x i8> @llvm.smax.v1i8(<1 x i8>, <1 x i8>)
448declare <3 x i8> @llvm.smax.v3i8(<3 x i8>, <3 x i8>)
449declare <4 x i8> @llvm.smax.v4i8(<4 x i8>, <4 x i8>)
450declare <8 x i8> @llvm.smax.v8i8(<8 x i8>, <8 x i8>)
451declare <16 x i8> @llvm.smax.v16i8(<16 x i8>, <16 x i8>)
452declare <32 x i8> @llvm.smax.v32i8(<32 x i8>, <32 x i8>)
453declare <64 x i8> @llvm.smax.v64i8(<64 x i8>, <64 x i8>)
454declare <2 x i16> @llvm.smax.v2i16(<2 x i16>, <2 x i16>)
455declare <4 x i16> @llvm.smax.v4i16(<4 x i16>, <4 x i16>)
456declare <8 x i16> @llvm.smax.v8i16(<8 x i16>, <8 x i16>)
457declare <16 x i16> @llvm.smax.v16i16(<16 x i16>, <16 x i16>)
458declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>)
459declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>)
460declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>)
461declare <2 x i64> @llvm.smax.v2i64(<2 x i64>, <2 x i64>)
462declare <4 x i64> @llvm.smax.v4i64(<4 x i64>, <4 x i64>)
463
464declare half @llvm.minnum.f16(half, half)
465declare float @llvm.minnum.f32(float, float)
466declare double @llvm.minnum.f64(double, double)
467declare <2 x half> @llvm.minnum.v2f16(<2 x half>, <2 x half>)
468declare <4 x half> @llvm.minnum.v4f16(<4 x half>, <4 x half>)
469declare <8 x half> @llvm.minnum.v8f16(<8 x half>, <8 x half>)
470declare <16 x half> @llvm.minnum.v16f16(<16 x half>, <16 x half>)
471declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)
472declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)
473declare <8 x float> @llvm.minnum.v8f32(<8 x float>, <8 x float>)
474declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)
475declare <4 x double> @llvm.minnum.v4f64(<4 x double>, <4 x double>)
476
477declare half @llvm.maxnum.f16(half, half)
478declare float @llvm.maxnum.f32(float, float)
479declare double @llvm.maxnum.f64(double, double)
480declare <2 x half> @llvm.maxnum.v2f16(<2 x half>, <2 x half>)
481declare <4 x half> @llvm.maxnum.v4f16(<4 x half>, <4 x half>)
482declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)
483declare <16 x half> @llvm.maxnum.v16f16(<16 x half>, <16 x half>)
484declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>)
485declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)
486declare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>)
487declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)
488declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>)
489
490declare half @llvm.minimum.f16(half, half)
491declare float @llvm.minimum.f32(float, float)
492declare double @llvm.minimum.f64(double, double)
493declare <2 x half> @llvm.minimum.v2f16(<2 x half>, <2 x half>)
494declare <4 x half> @llvm.minimum.v4f16(<4 x half>, <4 x half>)
495declare <8 x half> @llvm.minimum.v8f16(<8 x half>, <8 x half>)
496declare <16 x half> @llvm.minimum.v16f16(<16 x half>, <16 x half>)
497declare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>)
498declare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>)
499declare <8 x float> @llvm.minimum.v8f32(<8 x float>, <8 x float>)
500declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)
501declare <4 x double> @llvm.minimum.v4f64(<4 x double>, <4 x double>)
502
503declare half @llvm.maximum.f16(half, half)
504declare float @llvm.maximum.f32(float, float)
505declare double @llvm.maximum.f64(double, double)
506declare <2 x half> @llvm.maximum.v2f16(<2 x half>, <2 x half>)
507declare <4 x half> @llvm.maximum.v4f16(<4 x half>, <4 x half>)
508declare <8 x half> @llvm.maximum.v8f16(<8 x half>, <8 x half>)
509declare <16 x half> @llvm.maximum.v16f16(<16 x half>, <16 x half>)
510declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>)
511declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)
512declare <8 x float> @llvm.maximum.v8f32(<8 x float>, <8 x float>)
513declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)
514declare <4 x double> @llvm.maximum.v4f64(<4 x double>, <4 x double>)
515