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