1d28ed29dSSam Parker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2d28ed29dSSam Parker; RUN: llc < %s -mtriple=wasm32 -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s --check-prefix=SIMD128 3d28ed29dSSam Parker 4d28ed29dSSam Parkerdefine i64 @pairwise_add_v2i64(<2 x i64> %arg) { 5d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v2i64: 6d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v2i64 (v128) -> (i64) 7d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 8d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 9d28ed29dSSam Parker; SIMD128-NEXT: i64x2.add $push1=, $0, $pop0 10d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 11d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 12d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.add.i64.v4i64(<2 x i64> %arg) 13d28ed29dSSam Parker ret i64 %res 14d28ed29dSSam Parker} 15d28ed29dSSam Parker 16d28ed29dSSam Parkerdefine i32 @pairwise_add_v4i32(<4 x i32> %arg) { 17d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v4i32: 18d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v4i32 (v128) -> (i32) 19d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 20d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 21d28ed29dSSam Parker; SIMD128-NEXT: i32x4.add $push5=, $0, $pop0 22d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 23d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 24d28ed29dSSam Parker; SIMD128-NEXT: i32x4.add $push2=, $pop4, $pop1 25d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 26d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 27d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %arg) 28d28ed29dSSam Parker ret i32 %res 29d28ed29dSSam Parker} 30d28ed29dSSam Parker 31d28ed29dSSam Parkerdefine i16 @pairwise_add_v8i16(<8 x i16> %arg) { 32d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v8i16: 33d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v8i16 (v128) -> (i32) 34d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 35d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 36d28ed29dSSam Parker; SIMD128-NEXT: i16x8.add $push8=, $0, $pop0 37d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 38d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 39d28ed29dSSam Parker; SIMD128-NEXT: i16x8.add $push6=, $pop7, $pop1 40d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 41d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 42d28ed29dSSam Parker; SIMD128-NEXT: i16x8.add $push3=, $pop5, $pop2 43d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 44d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 45d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %arg) 46d28ed29dSSam Parker ret i16 %res 47d28ed29dSSam Parker} 48d28ed29dSSam Parker 49d28ed29dSSam Parkerdefine i8 @pairwise_add_v16i8(<16 x i8> %arg) { 50d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v16i8: 51d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v16i8 (v128) -> (i32) 52d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 53d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 54d28ed29dSSam Parker; SIMD128-NEXT: i8x16.add $push11=, $0, $pop0 55d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 56d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 57d28ed29dSSam Parker; SIMD128-NEXT: i8x16.add $push9=, $pop10, $pop1 58d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 59d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 60d28ed29dSSam Parker; SIMD128-NEXT: i8x16.add $push7=, $pop8, $pop2 61d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 62d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 63d28ed29dSSam Parker; SIMD128-NEXT: i8x16.add $push4=, $pop6, $pop3 64d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 65d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 66d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.add.v16i8(<16 x i8> %arg) 67d28ed29dSSam Parker ret i8 %res 68d28ed29dSSam Parker} 69d28ed29dSSam Parker 70d28ed29dSSam Parkerdefine i64 @pairwise_mul_v2i64(<2 x i64> %arg) { 71d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v2i64: 72d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v2i64 (v128) -> (i64) 73d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 74d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 75d28ed29dSSam Parker; SIMD128-NEXT: i64x2.mul $push1=, $0, $pop0 76d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 77d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 78d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.mul.v2i64(<2 x i64> %arg) 79d28ed29dSSam Parker ret i64 %res 80d28ed29dSSam Parker} 81d28ed29dSSam Parker 82d28ed29dSSam Parkerdefine i32 @pairwise_mul_v4i32(<4 x i32> %arg) { 83d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v4i32: 84d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v4i32 (v128) -> (i32) 85d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 86d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 87d28ed29dSSam Parker; SIMD128-NEXT: i32x4.mul $push5=, $0, $pop0 88d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 89d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 90d28ed29dSSam Parker; SIMD128-NEXT: i32x4.mul $push2=, $pop4, $pop1 91d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 92d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 93d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %arg) 94d28ed29dSSam Parker ret i32 %res 95d28ed29dSSam Parker} 96d28ed29dSSam Parker 97d28ed29dSSam Parkerdefine i16 @pairwise_mul_v8i16(<8 x i16> %arg) { 98d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v8i16: 99d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v8i16 (v128) -> (i32) 100d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 101d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 102d28ed29dSSam Parker; SIMD128-NEXT: i16x8.mul $push8=, $0, $pop0 103d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 104d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 105d28ed29dSSam Parker; SIMD128-NEXT: i16x8.mul $push6=, $pop7, $pop1 106d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 107d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 108d28ed29dSSam Parker; SIMD128-NEXT: i16x8.mul $push3=, $pop5, $pop2 109d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 110d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 111d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.mul.v8i16(<8 x i16> %arg) 112d28ed29dSSam Parker ret i16 %res 113d28ed29dSSam Parker} 114d28ed29dSSam Parker 115d28ed29dSSam Parkerdefine i8 @pairwise_mul_v16i8(<16 x i8> %arg) { 116d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v16i8: 117d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v16i8 (v128) -> (i32) 118d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 119d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push26=, $0, 0 120d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push32=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 121d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push31=, $1=, $pop32 122d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push25=, $pop31, 0 123d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push27=, $pop26, $pop25 124d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push23=, $0, 4 125d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push22=, $1, 4 126d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push24=, $pop23, $pop22 127d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push28=, $pop27, $pop24 128d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push19=, $0, 2 129d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push18=, $1, 2 130d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push20=, $pop19, $pop18 131d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push16=, $0, 6 132d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push15=, $1, 6 133d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push17=, $pop16, $pop15 134d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push21=, $pop20, $pop17 135d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push29=, $pop28, $pop21 136d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push11=, $0, 1 137d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push10=, $1, 1 138d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push12=, $pop11, $pop10 139d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push8=, $0, 5 140d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push7=, $1, 5 141d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push9=, $pop8, $pop7 142d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push13=, $pop12, $pop9 143d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push4=, $0, 3 144d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push3=, $1, 3 145d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push5=, $pop4, $pop3 146d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push1=, $0, 7 147d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push0=, $1, 7 148d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push2=, $pop1, $pop0 149d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push6=, $pop5, $pop2 150d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push14=, $pop13, $pop6 151d28ed29dSSam Parker; SIMD128-NEXT: i32.mul $push30=, $pop29, $pop14 152d28ed29dSSam Parker; SIMD128-NEXT: return $pop30 153d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %arg) 154d28ed29dSSam Parker ret i8 %res 155d28ed29dSSam Parker} 156d28ed29dSSam Parker 157d28ed29dSSam Parkerdefine i64 @pairwise_and_v2i64(<2 x i64> %arg) { 158d28ed29dSSam Parker; SIMD128-LABEL: pairwise_and_v2i64: 159d28ed29dSSam Parker; SIMD128: .functype pairwise_and_v2i64 (v128) -> (i64) 160d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 161d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 162d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push1=, $0, $pop0 163d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 164d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 165d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.and.v2i64(<2 x i64> %arg) 166d28ed29dSSam Parker ret i64 %res 167d28ed29dSSam Parker} 168d28ed29dSSam Parker 169d28ed29dSSam Parkerdefine i32 @pairwise_and_v4i32(<4 x i32> %arg) { 170d28ed29dSSam Parker; SIMD128-LABEL: pairwise_and_v4i32: 171d28ed29dSSam Parker; SIMD128: .functype pairwise_and_v4i32 (v128) -> (i32) 172d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 173d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 174d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push5=, $0, $pop0 175d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 176d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 177d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push2=, $pop4, $pop1 178d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 179d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 180d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %arg) 181d28ed29dSSam Parker ret i32 %res 182d28ed29dSSam Parker} 183d28ed29dSSam Parker 184d28ed29dSSam Parkerdefine i16 @pairwise_and_v8i16(<8 x i16> %arg) { 185d28ed29dSSam Parker; SIMD128-LABEL: pairwise_and_v8i16: 186d28ed29dSSam Parker; SIMD128: .functype pairwise_and_v8i16 (v128) -> (i32) 187d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 188d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 189d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push8=, $0, $pop0 190d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 191d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 192d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push6=, $pop7, $pop1 193d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 194d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 195d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push3=, $pop5, $pop2 196d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 197d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 198d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %arg) 199d28ed29dSSam Parker ret i16 %res 200d28ed29dSSam Parker} 201d28ed29dSSam Parker 202d28ed29dSSam Parkerdefine i8 @pairwise_and_v16i8(<16 x i8> %arg) { 203d28ed29dSSam Parker; SIMD128-LABEL: pairwise_and_v16i8: 204d28ed29dSSam Parker; SIMD128: .functype pairwise_and_v16i8 (v128) -> (i32) 205d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 206d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 207d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push11=, $0, $pop0 208d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 209d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 210d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push9=, $pop10, $pop1 211d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 212d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 213d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push7=, $pop8, $pop2 214d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 215d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 216d28ed29dSSam Parker; SIMD128-NEXT: v128.and $push4=, $pop6, $pop3 217d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 218d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 219d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %arg) 220d28ed29dSSam Parker ret i8 %res 221d28ed29dSSam Parker} 222d28ed29dSSam Parker 223d28ed29dSSam Parkerdefine i64 @pairwise_or_v2i64(<2 x i64> %arg) { 224d28ed29dSSam Parker; SIMD128-LABEL: pairwise_or_v2i64: 225d28ed29dSSam Parker; SIMD128: .functype pairwise_or_v2i64 (v128) -> (i64) 226d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 227d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 228d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push1=, $0, $pop0 229d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 230d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 231d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.or.v2i64(<2 x i64> %arg) 232d28ed29dSSam Parker ret i64 %res 233d28ed29dSSam Parker} 234d28ed29dSSam Parker 235d28ed29dSSam Parkerdefine i32 @pairwise_or_v4i32(<4 x i32> %arg) { 236d28ed29dSSam Parker; SIMD128-LABEL: pairwise_or_v4i32: 237d28ed29dSSam Parker; SIMD128: .functype pairwise_or_v4i32 (v128) -> (i32) 238d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 239d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 240d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push5=, $0, $pop0 241d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 242d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 243d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push2=, $pop4, $pop1 244d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 245d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 246d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.or.v4i32(<4 x i32> %arg) 247d28ed29dSSam Parker ret i32 %res 248d28ed29dSSam Parker} 249d28ed29dSSam Parker 250d28ed29dSSam Parkerdefine i16 @pairwise_or_v8i16(<8 x i16> %arg) { 251d28ed29dSSam Parker; SIMD128-LABEL: pairwise_or_v8i16: 252d28ed29dSSam Parker; SIMD128: .functype pairwise_or_v8i16 (v128) -> (i32) 253d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 254d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 255d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push8=, $0, $pop0 256d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 257d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 258d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push6=, $pop7, $pop1 259d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 260d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 261d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push3=, $pop5, $pop2 262d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 263d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 264d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.or.v8i16(<8 x i16> %arg) 265d28ed29dSSam Parker ret i16 %res 266d28ed29dSSam Parker} 267d28ed29dSSam Parker 268d28ed29dSSam Parkerdefine i8 @pairwise_or_v16i8(<16 x i8> %arg) { 269d28ed29dSSam Parker; SIMD128-LABEL: pairwise_or_v16i8: 270d28ed29dSSam Parker; SIMD128: .functype pairwise_or_v16i8 (v128) -> (i32) 271d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 272d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 273d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push11=, $0, $pop0 274d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 275d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 276d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push9=, $pop10, $pop1 277d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 278d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 279d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push7=, $pop8, $pop2 280d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 281d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 282d28ed29dSSam Parker; SIMD128-NEXT: v128.or $push4=, $pop6, $pop3 283d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 284d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 285d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.or.v16i8(<16 x i8> %arg) 286d28ed29dSSam Parker ret i8 %res 287d28ed29dSSam Parker} 288d28ed29dSSam Parker 289d28ed29dSSam Parkerdefine i64 @pairwise_xor_v2i64(<2 x i64> %arg) { 290d28ed29dSSam Parker; SIMD128-LABEL: pairwise_xor_v2i64: 291d28ed29dSSam Parker; SIMD128: .functype pairwise_xor_v2i64 (v128) -> (i64) 292d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 293d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 294d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push1=, $0, $pop0 295d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 296d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 297d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.xor.v2i64(<2 x i64> %arg) 298d28ed29dSSam Parker ret i64 %res 299d28ed29dSSam Parker} 300d28ed29dSSam Parker 301d28ed29dSSam Parkerdefine i32 @pairwise_xor_v4i32(<4 x i32> %arg) { 302d28ed29dSSam Parker; SIMD128-LABEL: pairwise_xor_v4i32: 303d28ed29dSSam Parker; SIMD128: .functype pairwise_xor_v4i32 (v128) -> (i32) 304d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 305d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 306d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push5=, $0, $pop0 307d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 308d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 309d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push2=, $pop4, $pop1 310d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 311d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 312d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.xor.v4i32(<4 x i32> %arg) 313d28ed29dSSam Parker ret i32 %res 314d28ed29dSSam Parker} 315d28ed29dSSam Parker 316d28ed29dSSam Parkerdefine i16 @pairwise_xor_v8i16(<8 x i16> %arg) { 317d28ed29dSSam Parker; SIMD128-LABEL: pairwise_xor_v8i16: 318d28ed29dSSam Parker; SIMD128: .functype pairwise_xor_v8i16 (v128) -> (i32) 319d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 320d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 321d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push8=, $0, $pop0 322d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 323d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 324d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push6=, $pop7, $pop1 325d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 326d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 327d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push3=, $pop5, $pop2 328d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 329d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 330d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.xor.v8i16(<8 x i16> %arg) 331d28ed29dSSam Parker ret i16 %res 332d28ed29dSSam Parker} 333d28ed29dSSam Parker 334d28ed29dSSam Parkerdefine i8 @pairwise_xor_v16i8(<16 x i8> %arg) { 335d28ed29dSSam Parker; SIMD128-LABEL: pairwise_xor_v16i8: 336d28ed29dSSam Parker; SIMD128: .functype pairwise_xor_v16i8 (v128) -> (i32) 337d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 338d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 339d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push11=, $0, $pop0 340d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 341d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 342d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push9=, $pop10, $pop1 343d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 344d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 345d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push7=, $pop8, $pop2 346d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 347d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 348d28ed29dSSam Parker; SIMD128-NEXT: v128.xor $push4=, $pop6, $pop3 349d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 350d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 351d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.xor.v16i8(<16 x i8> %arg) 352d28ed29dSSam Parker ret i8 %res 353d28ed29dSSam Parker} 354d28ed29dSSam Parker 355d28ed29dSSam Parkerdefine i64 @pairwise_smax_v2i64(<2 x i64> %arg) { 356d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smax_v2i64: 357d28ed29dSSam Parker; SIMD128: .functype pairwise_smax_v2i64 (v128) -> (i64) 358d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 359d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push4=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 360d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push3=, $1=, $pop4 361d28ed29dSSam Parker; SIMD128-NEXT: i64x2.gt_s $push0=, $0, $1 362d28ed29dSSam Parker; SIMD128-NEXT: v128.bitselect $push1=, $0, $pop3, $pop0 363d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 364d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 365d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.smax.v2i64(<2 x i64> %arg) 366d28ed29dSSam Parker ret i64 %res 367d28ed29dSSam Parker} 368d28ed29dSSam Parker 369d28ed29dSSam Parkerdefine i32 @pairwise_smax_v4i32(<4 x i32> %arg) { 370d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smax_v4i32: 371d28ed29dSSam Parker; SIMD128: .functype pairwise_smax_v4i32 (v128) -> (i32) 372d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 373d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 374d28ed29dSSam Parker; SIMD128-NEXT: i32x4.max_s $push5=, $0, $pop0 375d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 376d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 377d28ed29dSSam Parker; SIMD128-NEXT: i32x4.max_s $push2=, $pop4, $pop1 378d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 379d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 380d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %arg) 381d28ed29dSSam Parker ret i32 %res 382d28ed29dSSam Parker} 383d28ed29dSSam Parker 384d28ed29dSSam Parkerdefine i16 @pairwise_smax_v8i16(<8 x i16> %arg) { 385d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smax_v8i16: 386d28ed29dSSam Parker; SIMD128: .functype pairwise_smax_v8i16 (v128) -> (i32) 387d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 388d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 389d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_s $push8=, $0, $pop0 390d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 391d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 392d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_s $push6=, $pop7, $pop1 393d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 394d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 395d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_s $push3=, $pop5, $pop2 396d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 397d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 398d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.smax.v8i16(<8 x i16> %arg) 399d28ed29dSSam Parker ret i16 %res 400d28ed29dSSam Parker} 401d28ed29dSSam Parker 402d28ed29dSSam Parkerdefine i8 @pairwise_smax_v16i8(<16 x i8> %arg) { 403d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smax_v16i8: 404d28ed29dSSam Parker; SIMD128: .functype pairwise_smax_v16i8 (v128) -> (i32) 405d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 406d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 407d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_s $push11=, $0, $pop0 408d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 409d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 410d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_s $push9=, $pop10, $pop1 411d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 412d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 413d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_s $push7=, $pop8, $pop2 414d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 415d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 416d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_s $push4=, $pop6, $pop3 417d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 418d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 419d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.smax.v16i8(<16 x i8> %arg) 420d28ed29dSSam Parker ret i8 %res 421d28ed29dSSam Parker} 422d28ed29dSSam Parker 423d28ed29dSSam Parkerdefine i64 @pairwise_smin_v2i64(<2 x i64> %arg) { 424d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smin_v2i64: 425d28ed29dSSam Parker; SIMD128: .functype pairwise_smin_v2i64 (v128) -> (i64) 426d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 427d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push4=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 428d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push3=, $1=, $pop4 429d28ed29dSSam Parker; SIMD128-NEXT: i64x2.lt_s $push0=, $0, $1 430d28ed29dSSam Parker; SIMD128-NEXT: v128.bitselect $push1=, $0, $pop3, $pop0 431d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push2=, $pop1, 0 432d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 433d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.smin.v2i64(<2 x i64> %arg) 434d28ed29dSSam Parker ret i64 %res 435d28ed29dSSam Parker} 436d28ed29dSSam Parker 437d28ed29dSSam Parkerdefine i32 @pairwise_smin_v4i32(<4 x i32> %arg) { 438d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smin_v4i32: 439d28ed29dSSam Parker; SIMD128: .functype pairwise_smin_v4i32 (v128) -> (i32) 440d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 441d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 442d28ed29dSSam Parker; SIMD128-NEXT: i32x4.min_s $push5=, $0, $pop0 443d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 444d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 445d28ed29dSSam Parker; SIMD128-NEXT: i32x4.min_s $push2=, $pop4, $pop1 446d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 447d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 448d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %arg) 449d28ed29dSSam Parker ret i32 %res 450d28ed29dSSam Parker} 451d28ed29dSSam Parker 452d28ed29dSSam Parkerdefine i16 @pairwise_smin_v8i16(<8 x i16> %arg) { 453d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smin_v8i16: 454d28ed29dSSam Parker; SIMD128: .functype pairwise_smin_v8i16 (v128) -> (i32) 455d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 456d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 457d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_s $push8=, $0, $pop0 458d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 459d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 460d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_s $push6=, $pop7, $pop1 461d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 462d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 463d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_s $push3=, $pop5, $pop2 464d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 465d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 466d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %arg) 467d28ed29dSSam Parker ret i16 %res 468d28ed29dSSam Parker} 469d28ed29dSSam Parker 470d28ed29dSSam Parkerdefine i8 @pairwise_smin_v16i8(<16 x i8> %arg) { 471d28ed29dSSam Parker; SIMD128-LABEL: pairwise_smin_v16i8: 472d28ed29dSSam Parker; SIMD128: .functype pairwise_smin_v16i8 (v128) -> (i32) 473d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 474d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 475d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_s $push11=, $0, $pop0 476d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 477d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 478d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_s $push9=, $pop10, $pop1 479d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 480d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 481d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_s $push7=, $pop8, $pop2 482d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 483d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 484d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_s $push4=, $pop6, $pop3 485d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 486d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 487d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.smin.v16i8(<16 x i8> %arg) 488d28ed29dSSam Parker ret i8 %res 489d28ed29dSSam Parker} 490d28ed29dSSam Parker 491d28ed29dSSam Parkerdefine i64 @pairwise_umax_v2i64(<2 x i64> %arg) { 492d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umax_v2i64: 493d28ed29dSSam Parker; SIMD128: .functype pairwise_umax_v2i64 (v128) -> (i64) 494d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 495d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push10=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 496d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push9=, $1=, $pop10 497d28ed29dSSam Parker; SIMD128-NEXT: i64.const $push4=, -1 498d28ed29dSSam Parker; SIMD128-NEXT: i64.const $push3=, 0 499d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push1=, $0, 0 500d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push0=, $1, 0 501d28ed29dSSam Parker; SIMD128-NEXT: i64.gt_u $push2=, $pop1, $pop0 502d28ed29dSSam Parker; SIMD128-NEXT: i64.select $push5=, $pop4, $pop3, $pop2 503d28ed29dSSam Parker; SIMD128-NEXT: i64x2.replace_lane $push6=, $0, 0, $pop5 504d28ed29dSSam Parker; SIMD128-NEXT: v128.bitselect $push7=, $0, $pop9, $pop6 505d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push8=, $pop7, 0 506d28ed29dSSam Parker; SIMD128-NEXT: return $pop8 507d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.umax.v2i64(<2 x i64> %arg) 508d28ed29dSSam Parker ret i64 %res 509d28ed29dSSam Parker} 510d28ed29dSSam Parker 511d28ed29dSSam Parkerdefine i32 @pairwise_umax_v4i32(<4 x i32> %arg) { 512d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umax_v4i32: 513d28ed29dSSam Parker; SIMD128: .functype pairwise_umax_v4i32 (v128) -> (i32) 514d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 515d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 516d28ed29dSSam Parker; SIMD128-NEXT: i32x4.max_u $push5=, $0, $pop0 517d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 518d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 519d28ed29dSSam Parker; SIMD128-NEXT: i32x4.max_u $push2=, $pop4, $pop1 520d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 521d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 522d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %arg) 523d28ed29dSSam Parker ret i32 %res 524d28ed29dSSam Parker} 525d28ed29dSSam Parker 526d28ed29dSSam Parkerdefine i16 @pairwise_umax_v8i16(<8 x i16> %arg) { 527d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umax_v8i16: 528d28ed29dSSam Parker; SIMD128: .functype pairwise_umax_v8i16 (v128) -> (i32) 529d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 530d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 531d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_u $push8=, $0, $pop0 532d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 533d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 534d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_u $push6=, $pop7, $pop1 535d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 536d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 537d28ed29dSSam Parker; SIMD128-NEXT: i16x8.max_u $push3=, $pop5, $pop2 538d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 539d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 540d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.umax.v8i16(<8 x i16> %arg) 541d28ed29dSSam Parker ret i16 %res 542d28ed29dSSam Parker} 543d28ed29dSSam Parker 544d28ed29dSSam Parkerdefine i8 @pairwise_umax_v16i8(<16 x i8> %arg) { 545d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umax_v16i8: 546d28ed29dSSam Parker; SIMD128: .functype pairwise_umax_v16i8 (v128) -> (i32) 547d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 548d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 549d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_u $push11=, $0, $pop0 550d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 551d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 552d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_u $push9=, $pop10, $pop1 553d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 554d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 555d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_u $push7=, $pop8, $pop2 556d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 557d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 558d28ed29dSSam Parker; SIMD128-NEXT: i8x16.max_u $push4=, $pop6, $pop3 559d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 560d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 561d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.umax.v16i8(<16 x i8> %arg) 562d28ed29dSSam Parker ret i8 %res 563d28ed29dSSam Parker} 564d28ed29dSSam Parker 565d28ed29dSSam Parkerdefine i64 @pairwise_umin_v2i64(<2 x i64> %arg) { 566d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umin_v2i64: 567d28ed29dSSam Parker; SIMD128: .functype pairwise_umin_v2i64 (v128) -> (i64) 568d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 569d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push10=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 570d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push9=, $1=, $pop10 571d28ed29dSSam Parker; SIMD128-NEXT: i64.const $push4=, -1 572d28ed29dSSam Parker; SIMD128-NEXT: i64.const $push3=, 0 573d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push1=, $0, 0 574d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push0=, $1, 0 575d28ed29dSSam Parker; SIMD128-NEXT: i64.lt_u $push2=, $pop1, $pop0 576d28ed29dSSam Parker; SIMD128-NEXT: i64.select $push5=, $pop4, $pop3, $pop2 577d28ed29dSSam Parker; SIMD128-NEXT: i64x2.replace_lane $push6=, $0, 0, $pop5 578d28ed29dSSam Parker; SIMD128-NEXT: v128.bitselect $push7=, $0, $pop9, $pop6 579d28ed29dSSam Parker; SIMD128-NEXT: i64x2.extract_lane $push8=, $pop7, 0 580d28ed29dSSam Parker; SIMD128-NEXT: return $pop8 581d28ed29dSSam Parker %res = tail call i64 @llvm.vector.reduce.umin.v2i64(<2 x i64> %arg) 582d28ed29dSSam Parker ret i64 %res 583d28ed29dSSam Parker} 584d28ed29dSSam Parker 585d28ed29dSSam Parkerdefine i32 @pairwise_umin_v4i32(<4 x i32> %arg) { 586d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umin_v4i32: 587d28ed29dSSam Parker; SIMD128: .functype pairwise_umin_v4i32 (v128) -> (i32) 588d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 589d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 590d28ed29dSSam Parker; SIMD128-NEXT: i32x4.min_u $push5=, $0, $pop0 591d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 592d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 593d28ed29dSSam Parker; SIMD128-NEXT: i32x4.min_u $push2=, $pop4, $pop1 594d28ed29dSSam Parker; SIMD128-NEXT: i32x4.extract_lane $push3=, $pop2, 0 595d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 596d28ed29dSSam Parker %res = tail call i32 @llvm.vector.reduce.umin.v4i32(<4 x i32> %arg) 597d28ed29dSSam Parker ret i32 %res 598d28ed29dSSam Parker} 599d28ed29dSSam Parker 600d28ed29dSSam Parkerdefine i16 @pairwise_umin_v8i16(<8 x i16> %arg) { 601d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umin_v8i16: 602d28ed29dSSam Parker; SIMD128: .functype pairwise_umin_v8i16 (v128) -> (i32) 603d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 604d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 1, 0, 1, 0, 1 605d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_u $push8=, $0, $pop0 606d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push7=, $0=, $pop8 607d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 608d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_u $push6=, $pop7, $pop1 609d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push5=, $0=, $pop6 610d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 611d28ed29dSSam Parker; SIMD128-NEXT: i16x8.min_u $push3=, $pop5, $pop2 612d28ed29dSSam Parker; SIMD128-NEXT: i16x8.extract_lane_u $push4=, $pop3, 0 613d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 614d28ed29dSSam Parker %res = tail call i16 @llvm.vector.reduce.umin.v8i16(<8 x i16> %arg) 615d28ed29dSSam Parker ret i16 %res 616d28ed29dSSam Parker} 617d28ed29dSSam Parker 618d28ed29dSSam Parkerdefine i8 @pairwise_umin_v16i8(<16 x i8> %arg) { 619d28ed29dSSam Parker; SIMD128-LABEL: pairwise_umin_v16i8: 620d28ed29dSSam Parker; SIMD128: .functype pairwise_umin_v16i8 (v128) -> (i32) 621d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 622d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0 623d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_u $push11=, $0, $pop0 624d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push10=, $0=, $pop11 625d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 626d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_u $push9=, $pop10, $pop1 627d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push8=, $0=, $pop9 628d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push2=, $0, $0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 629d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_u $push7=, $pop8, $pop2 630d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 631d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push3=, $0, $0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 632d28ed29dSSam Parker; SIMD128-NEXT: i8x16.min_u $push4=, $pop6, $pop3 633d28ed29dSSam Parker; SIMD128-NEXT: i8x16.extract_lane_u $push5=, $pop4, 0 634d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 635d28ed29dSSam Parker %res = tail call i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %arg) 636d28ed29dSSam Parker ret i8 %res 637d28ed29dSSam Parker} 638d28ed29dSSam Parker 639d28ed29dSSam Parkerdefine double @pairwise_add_v2f64(<2 x double> %arg) { 640d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v2f64: 641d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v2f64 (v128) -> (f64) 642d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 643d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 644d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 645d28ed29dSSam Parker; SIMD128-NEXT: f64.add $push2=, $pop1, $pop0 646d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 647d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fadd.v2f64(double -0.0, <2 x double> %arg) 648d28ed29dSSam Parker ret double%res 649d28ed29dSSam Parker} 650d28ed29dSSam Parker 651d28ed29dSSam Parkerdefine double @pairwise_add_v2f64_fast(<2 x double> %arg) { 652d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v2f64_fast: 653d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v2f64_fast (v128) -> (f64) 654d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 655d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 656d28ed29dSSam Parker; SIMD128-NEXT: f64x2.add $push1=, $0, $pop0 657d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push2=, $pop1, 0 658d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 659d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fadd.v2f64(double -0.0, <2 x double> %arg) 660d28ed29dSSam Parker ret double%res 661d28ed29dSSam Parker} 662d28ed29dSSam Parker 663d28ed29dSSam Parkerdefine float @pairwise_add_v4f32(<4 x float> %arg) { 664d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v4f32: 665d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v4f32 (v128) -> (f32) 666d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 667d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 668d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 669d28ed29dSSam Parker; SIMD128-NEXT: f32.add $push2=, $pop1, $pop0 670d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 671d28ed29dSSam Parker; SIMD128-NEXT: f32.add $push4=, $pop2, $pop3 672d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 673d28ed29dSSam Parker; SIMD128-NEXT: f32.add $push6=, $pop4, $pop5 674d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 675d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fadd.v4f32(float -0.0, <4 x float> %arg) 676d28ed29dSSam Parker ret float %res 677d28ed29dSSam Parker} 678d28ed29dSSam Parker 679d28ed29dSSam Parkerdefine float @pairwise_add_v4f32_fast(<4 x float> %arg) { 680d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v4f32_fast: 681d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v4f32_fast (v128) -> (f32) 682d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 683d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 0, 1, 2, 3 684d28ed29dSSam Parker; SIMD128-NEXT: f32x4.add $push5=, $0, $pop0 685d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 686d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 687d28ed29dSSam Parker; SIMD128-NEXT: f32x4.add $push2=, $pop4, $pop1 688d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $pop2, 0 689d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 690d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fadd.v4f32(float -0.0, <4 x float> %arg) 691d28ed29dSSam Parker ret float %res 692d28ed29dSSam Parker} 693d28ed29dSSam Parker 694d28ed29dSSam Parkerdefine float @pairwise_add_v4f32_reassoc(<4 x float> %arg) { 695d28ed29dSSam Parker; SIMD128-LABEL: pairwise_add_v4f32_reassoc: 696d28ed29dSSam Parker; SIMD128: .functype pairwise_add_v4f32_reassoc (v128) -> (f32) 697d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 698d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 0, 1, 2, 3 699d28ed29dSSam Parker; SIMD128-NEXT: f32x4.add $push5=, $0, $pop0 700d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 701d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 8, 9, 10, 11, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 702d28ed29dSSam Parker; SIMD128-NEXT: f32x4.add $push2=, $pop4, $pop1 703d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $pop2, 0 704d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 705d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fadd.v4f32(float -0.0, <4 x float> %arg) 706d28ed29dSSam Parker ret float %res 707d28ed29dSSam Parker} 708d28ed29dSSam Parker 709d28ed29dSSam Parkerdefine double @pairwise_mul_v2f64(<2 x double> %arg) { 710d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v2f64: 711d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v2f64 (v128) -> (f64) 712d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 713d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 0 714d28ed29dSSam Parker; SIMD128-NEXT: f64.const $push1=, -0x0p0 715d28ed29dSSam Parker; SIMD128-NEXT: f64.mul $push2=, $pop0, $pop1 716d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push3=, $0, 1 717d28ed29dSSam Parker; SIMD128-NEXT: f64.mul $push4=, $pop2, $pop3 718d28ed29dSSam Parker; SIMD128-NEXT: return $pop4 719d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fmul.v2f64(double -0.0, <2 x double> %arg) 720d28ed29dSSam Parker ret double%res 721d28ed29dSSam Parker} 722d28ed29dSSam Parker 723d28ed29dSSam Parkerdefine double @pairwise_mul_v2f64_fast(<2 x double> %arg) { 724d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v2f64_fast: 725d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v2f64_fast (v128) -> (f64) 726d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 727d28ed29dSSam Parker; SIMD128-NEXT: f64.const $push0=, 0x0p0 728d28ed29dSSam Parker; SIMD128-NEXT: return $pop0 729d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fmul.v2f64(double -0.0, <2 x double> %arg) 730d28ed29dSSam Parker ret double%res 731d28ed29dSSam Parker} 732d28ed29dSSam Parker 733d28ed29dSSam Parkerdefine float @pairwise_mul_v4f32(<4 x float> %arg) { 734d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v4f32: 735d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v4f32 (v128) -> (f32) 736d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 737d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 0 738d28ed29dSSam Parker; SIMD128-NEXT: f32.const $push1=, -0x0p0 739d28ed29dSSam Parker; SIMD128-NEXT: f32.mul $push2=, $pop0, $pop1 740d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 1 741d28ed29dSSam Parker; SIMD128-NEXT: f32.mul $push4=, $pop2, $pop3 742d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 2 743d28ed29dSSam Parker; SIMD128-NEXT: f32.mul $push6=, $pop4, $pop5 744d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push7=, $0, 3 745d28ed29dSSam Parker; SIMD128-NEXT: f32.mul $push8=, $pop6, $pop7 746d28ed29dSSam Parker; SIMD128-NEXT: return $pop8 747d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fmul.v4f32(float -0.0, <4 x float> %arg) 748d28ed29dSSam Parker ret float %res 749d28ed29dSSam Parker} 750d28ed29dSSam Parker 751d28ed29dSSam Parkerdefine float @pairwise_mul_v4f32_fast(<4 x float> %arg) { 752d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v4f32_fast: 753d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v4f32_fast (v128) -> (f32) 754d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 755d28ed29dSSam Parker; SIMD128-NEXT: f32.const $push0=, 0x0p0 756d28ed29dSSam Parker; SIMD128-NEXT: return $pop0 757d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fmul.v4f32(float -0.0, <4 x float> %arg) 758d28ed29dSSam Parker ret float %res 759d28ed29dSSam Parker} 760d28ed29dSSam Parker 761d28ed29dSSam Parkerdefine float @pairwise_mul_v4f32_reassoc(<4 x float> %arg) { 762d28ed29dSSam Parker; SIMD128-LABEL: pairwise_mul_v4f32_reassoc: 763d28ed29dSSam Parker; SIMD128: .functype pairwise_mul_v4f32_reassoc (v128) -> (f32) 764d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 765d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 766d28ed29dSSam Parker; SIMD128-NEXT: f32x4.mul $push7=, $0, $pop0 767d28ed29dSSam Parker; SIMD128-NEXT: local.tee $push6=, $0=, $pop7 768d28ed29dSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 769d28ed29dSSam Parker; SIMD128-NEXT: f32x4.mul $push2=, $pop6, $pop1 770d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $pop2, 0 771d28ed29dSSam Parker; SIMD128-NEXT: f32.const $push4=, -0x0p0 772d28ed29dSSam Parker; SIMD128-NEXT: f32.mul $push5=, $pop3, $pop4 773d28ed29dSSam Parker; SIMD128-NEXT: return $pop5 774d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fmul.v4f32(float -0.0, <4 x float> %arg) 775d28ed29dSSam Parker ret float %res 776d28ed29dSSam Parker} 777d28ed29dSSam Parker 778d28ed29dSSam Parkerdefine double @pairwise_max_v2f64(<2 x double> %arg) { 779d28ed29dSSam Parker; SIMD128-LABEL: pairwise_max_v2f64: 780d28ed29dSSam Parker; SIMD128: .functype pairwise_max_v2f64 (v128) -> (f64) 781d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 782d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 783d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 784d28ed29dSSam Parker; SIMD128-NEXT: call $push2=, fmax, $pop1, $pop0 785d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 786d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fmax.v2f64(<2 x double> %arg) 787d28ed29dSSam Parker ret double%res 788d28ed29dSSam Parker} 789d28ed29dSSam Parker 790d28ed29dSSam Parkerdefine double @pairwise_max_v2f64_fast(<2 x double> %arg) { 791d28ed29dSSam Parker; SIMD128-LABEL: pairwise_max_v2f64_fast: 792d28ed29dSSam Parker; SIMD128: .functype pairwise_max_v2f64_fast (v128) -> (f64) 793d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 794*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 795*a3de21caSSam Parker; SIMD128-NEXT: f64x2.pmax $push1=, $0, $pop0 796d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push2=, $pop1, 0 797d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 798d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fmax.v2f64(<2 x double> %arg) 799d28ed29dSSam Parker ret double%res 800d28ed29dSSam Parker} 801d28ed29dSSam Parker 802d28ed29dSSam Parkerdefine float @pairwise_max_v4f32(<4 x float> %arg) { 803d28ed29dSSam Parker; SIMD128-LABEL: pairwise_max_v4f32: 804d28ed29dSSam Parker; SIMD128: .functype pairwise_max_v4f32 (v128) -> (f32) 805d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 806d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 0 807d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push2=, $0, 1 808d28ed29dSSam Parker; SIMD128-NEXT: call $push4=, fmaxf, $pop3, $pop2 809d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 2 810d28ed29dSSam Parker; SIMD128-NEXT: call $push5=, fmaxf, $pop4, $pop1 811d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 3 812d28ed29dSSam Parker; SIMD128-NEXT: call $push6=, fmaxf, $pop5, $pop0 813d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 814d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fmax.v4f32(<4 x float> %arg) 815d28ed29dSSam Parker ret float %res 816d28ed29dSSam Parker} 817d28ed29dSSam Parker 818d28ed29dSSam Parkerdefine float @pairwise_max_v4f32_fast(<4 x float> %arg) { 819d28ed29dSSam Parker; SIMD128-LABEL: pairwise_max_v4f32_fast: 820d28ed29dSSam Parker; SIMD128: .functype pairwise_max_v4f32_fast (v128) -> (f32) 821d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 822*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 823*a3de21caSSam Parker; SIMD128-NEXT: f32x4.pmax $push5=, $0, $pop0 824*a3de21caSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 825*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 826*a3de21caSSam Parker; SIMD128-NEXT: f32x4.pmax $push2=, $pop4, $pop1 827d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $pop2, 0 828d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 829d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fmax.v4f32(<4 x float> %arg) 830d28ed29dSSam Parker ret float %res 831d28ed29dSSam Parker} 832d28ed29dSSam Parker 833d28ed29dSSam Parkerdefine float @pairwise_max_v4f32_reassoc(<4 x float> %arg) { 834d28ed29dSSam Parker; SIMD128-LABEL: pairwise_max_v4f32_reassoc: 835d28ed29dSSam Parker; SIMD128: .functype pairwise_max_v4f32_reassoc (v128) -> (f32) 836d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 837d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 0 838d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push2=, $0, 1 839d28ed29dSSam Parker; SIMD128-NEXT: call $push4=, fmaxf, $pop3, $pop2 840d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 2 841d28ed29dSSam Parker; SIMD128-NEXT: call $push5=, fmaxf, $pop4, $pop1 842d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 3 843d28ed29dSSam Parker; SIMD128-NEXT: call $push6=, fmaxf, $pop5, $pop0 844d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 845d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fmax.v4f32(<4 x float> %arg) 846d28ed29dSSam Parker ret float %res 847d28ed29dSSam Parker} 848d28ed29dSSam Parker 849d28ed29dSSam Parkerdefine double @pairwise_min_v2f64(<2 x double> %arg) { 850d28ed29dSSam Parker; SIMD128-LABEL: pairwise_min_v2f64: 851d28ed29dSSam Parker; SIMD128: .functype pairwise_min_v2f64 (v128) -> (f64) 852d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 853d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 854d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 855d28ed29dSSam Parker; SIMD128-NEXT: call $push2=, fmin, $pop1, $pop0 856d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 857d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fmin.v2f64(<2 x double> %arg) 858d28ed29dSSam Parker ret double%res 859d28ed29dSSam Parker} 860d28ed29dSSam Parker 861d28ed29dSSam Parkerdefine double @pairwise_min_v2f64_fast(<2 x double> %arg) { 862d28ed29dSSam Parker; SIMD128-LABEL: pairwise_min_v2f64_fast: 863d28ed29dSSam Parker; SIMD128: .functype pairwise_min_v2f64_fast (v128) -> (f64) 864d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 865*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 866*a3de21caSSam Parker; SIMD128-NEXT: f64x2.pmin $push1=, $0, $pop0 867d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push2=, $pop1, 0 868d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 869d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fmin.v2f64(<2 x double> %arg) 870d28ed29dSSam Parker ret double%res 871d28ed29dSSam Parker} 872d28ed29dSSam Parker 873d28ed29dSSam Parkerdefine float @pairwise_min_v4f32(<4 x float> %arg) { 874d28ed29dSSam Parker; SIMD128-LABEL: pairwise_min_v4f32: 875d28ed29dSSam Parker; SIMD128: .functype pairwise_min_v4f32 (v128) -> (f32) 876d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 877d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 0 878d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push2=, $0, 1 879d28ed29dSSam Parker; SIMD128-NEXT: call $push4=, fminf, $pop3, $pop2 880d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 2 881d28ed29dSSam Parker; SIMD128-NEXT: call $push5=, fminf, $pop4, $pop1 882d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 3 883d28ed29dSSam Parker; SIMD128-NEXT: call $push6=, fminf, $pop5, $pop0 884d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 885d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fmin.v4f32(<4 x float> %arg) 886d28ed29dSSam Parker ret float %res 887d28ed29dSSam Parker} 888d28ed29dSSam Parker 889d28ed29dSSam Parkerdefine float @pairwise_min_v4f32_fast(<4 x float> %arg) { 890d28ed29dSSam Parker; SIMD128-LABEL: pairwise_min_v4f32_fast: 891d28ed29dSSam Parker; SIMD128: .functype pairwise_min_v4f32_fast (v128) -> (f32) 892d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 893*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push0=, $0, $0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 0, 1, 2, 3 894*a3de21caSSam Parker; SIMD128-NEXT: f32x4.pmin $push5=, $0, $pop0 895*a3de21caSSam Parker; SIMD128-NEXT: local.tee $push4=, $0=, $pop5 896*a3de21caSSam Parker; SIMD128-NEXT: i8x16.shuffle $push1=, $0, $0, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 897*a3de21caSSam Parker; SIMD128-NEXT: f32x4.pmin $push2=, $pop4, $pop1 898d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $pop2, 0 899d28ed29dSSam Parker; SIMD128-NEXT: return $pop3 900d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fmin.v4f32(<4 x float> %arg) 901d28ed29dSSam Parker ret float %res 902d28ed29dSSam Parker} 903d28ed29dSSam Parker 904d28ed29dSSam Parkerdefine float @pairwise_min_v4f32_reassoc(<4 x float> %arg) { 905d28ed29dSSam Parker; SIMD128-LABEL: pairwise_min_v4f32_reassoc: 906d28ed29dSSam Parker; SIMD128: .functype pairwise_min_v4f32_reassoc (v128) -> (f32) 907d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 908d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 0 909d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push2=, $0, 1 910d28ed29dSSam Parker; SIMD128-NEXT: call $push4=, fminf, $pop3, $pop2 911d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 2 912d28ed29dSSam Parker; SIMD128-NEXT: call $push5=, fminf, $pop4, $pop1 913d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 3 914d28ed29dSSam Parker; SIMD128-NEXT: call $push6=, fminf, $pop5, $pop0 915d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 916d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fmin.v4f32(<4 x float> %arg) 917d28ed29dSSam Parker ret float %res 918d28ed29dSSam Parker} 919d28ed29dSSam Parker 920d28ed29dSSam Parkerdefine double @pairwise_maximum_v2f64(<2 x double> %arg) { 921d28ed29dSSam Parker; SIMD128-LABEL: pairwise_maximum_v2f64: 922d28ed29dSSam Parker; SIMD128: .functype pairwise_maximum_v2f64 (v128) -> (f64) 923d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 924d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 925d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 926d28ed29dSSam Parker; SIMD128-NEXT: f64.max $push2=, $pop1, $pop0 927d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 928d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fmaximum.v2f64(<2 x double> %arg) 929d28ed29dSSam Parker ret double%res 930d28ed29dSSam Parker} 931d28ed29dSSam Parker 932d28ed29dSSam Parkerdefine double @pairwise_maximum_v2f64_fast(<2 x double> %arg) { 933d28ed29dSSam Parker; SIMD128-LABEL: pairwise_maximum_v2f64_fast: 934d28ed29dSSam Parker; SIMD128: .functype pairwise_maximum_v2f64_fast (v128) -> (f64) 935d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 936d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 937d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 938d28ed29dSSam Parker; SIMD128-NEXT: f64.max $push2=, $pop1, $pop0 939d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 940d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fmaximum.v2f64(<2 x double> %arg) 941d28ed29dSSam Parker ret double%res 942d28ed29dSSam Parker} 943d28ed29dSSam Parker 944d28ed29dSSam Parkerdefine float @pairwise_maximum_v4f32(<4 x float> %arg) { 945d28ed29dSSam Parker; SIMD128-LABEL: pairwise_maximum_v4f32: 946d28ed29dSSam Parker; SIMD128: .functype pairwise_maximum_v4f32 (v128) -> (f32) 947d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 948d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 949d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 950d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push2=, $pop1, $pop0 951d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 952d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push4=, $pop2, $pop3 953d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 954d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push6=, $pop4, $pop5 955d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 956d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fmaximum.v4f32(<4 x float> %arg) 957d28ed29dSSam Parker ret float %res 958d28ed29dSSam Parker} 959d28ed29dSSam Parker 960d28ed29dSSam Parkerdefine float @pairwise_maximum_v4f32_fast(<4 x float> %arg) { 961d28ed29dSSam Parker; SIMD128-LABEL: pairwise_maximum_v4f32_fast: 962d28ed29dSSam Parker; SIMD128: .functype pairwise_maximum_v4f32_fast (v128) -> (f32) 963d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 964d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 965d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 966d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push2=, $pop1, $pop0 967d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 968d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push4=, $pop2, $pop3 969d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 970d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push6=, $pop4, $pop5 971d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 972d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fmaximum.v4f32(<4 x float> %arg) 973d28ed29dSSam Parker ret float %res 974d28ed29dSSam Parker} 975d28ed29dSSam Parker 976d28ed29dSSam Parkerdefine float @pairwise_maximum_v4f32_reassoc(<4 x float> %arg) { 977d28ed29dSSam Parker; SIMD128-LABEL: pairwise_maximum_v4f32_reassoc: 978d28ed29dSSam Parker; SIMD128: .functype pairwise_maximum_v4f32_reassoc (v128) -> (f32) 979d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 980d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 981d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 982d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push2=, $pop1, $pop0 983d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 984d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push4=, $pop2, $pop3 985d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 986d28ed29dSSam Parker; SIMD128-NEXT: f32.max $push6=, $pop4, $pop5 987d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 988d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fmaximum.v4f32(<4 x float> %arg) 989d28ed29dSSam Parker ret float %res 990d28ed29dSSam Parker} 991d28ed29dSSam Parker 992d28ed29dSSam Parkerdefine double @pairwise_minimum_v2f64(<2 x double> %arg) { 993d28ed29dSSam Parker; SIMD128-LABEL: pairwise_minimum_v2f64: 994d28ed29dSSam Parker; SIMD128: .functype pairwise_minimum_v2f64 (v128) -> (f64) 995d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 996d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 997d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 998d28ed29dSSam Parker; SIMD128-NEXT: f64.min $push2=, $pop1, $pop0 999d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 1000d28ed29dSSam Parker %res = tail call double @llvm.vector.reduce.fminimum.v2f64(<2 x double> %arg) 1001d28ed29dSSam Parker ret double%res 1002d28ed29dSSam Parker} 1003d28ed29dSSam Parker 1004d28ed29dSSam Parkerdefine double @pairwise_minimum_v2f64_fast(<2 x double> %arg) { 1005d28ed29dSSam Parker; SIMD128-LABEL: pairwise_minimum_v2f64_fast: 1006d28ed29dSSam Parker; SIMD128: .functype pairwise_minimum_v2f64_fast (v128) -> (f64) 1007d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 1008d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push1=, $0, 0 1009d28ed29dSSam Parker; SIMD128-NEXT: f64x2.extract_lane $push0=, $0, 1 1010d28ed29dSSam Parker; SIMD128-NEXT: f64.min $push2=, $pop1, $pop0 1011d28ed29dSSam Parker; SIMD128-NEXT: return $pop2 1012d28ed29dSSam Parker %res = tail call fast double @llvm.vector.reduce.fminimum.v2f64(<2 x double> %arg) 1013d28ed29dSSam Parker ret double%res 1014d28ed29dSSam Parker} 1015d28ed29dSSam Parker 1016d28ed29dSSam Parkerdefine float @pairwise_minimum_v4f32(<4 x float> %arg) { 1017d28ed29dSSam Parker; SIMD128-LABEL: pairwise_minimum_v4f32: 1018d28ed29dSSam Parker; SIMD128: .functype pairwise_minimum_v4f32 (v128) -> (f32) 1019d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 1020d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 1021d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 1022d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push2=, $pop1, $pop0 1023d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 1024d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push4=, $pop2, $pop3 1025d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 1026d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push6=, $pop4, $pop5 1027d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 1028d28ed29dSSam Parker %res = tail call float @llvm.vector.reduce.fminimum.v4f32(<4 x float> %arg) 1029d28ed29dSSam Parker ret float %res 1030d28ed29dSSam Parker} 1031d28ed29dSSam Parker 1032d28ed29dSSam Parkerdefine float @pairwise_minimum_v4f32_fast(<4 x float> %arg) { 1033d28ed29dSSam Parker; SIMD128-LABEL: pairwise_minimum_v4f32_fast: 1034d28ed29dSSam Parker; SIMD128: .functype pairwise_minimum_v4f32_fast (v128) -> (f32) 1035d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 1036d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 1037d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 1038d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push2=, $pop1, $pop0 1039d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 1040d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push4=, $pop2, $pop3 1041d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 1042d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push6=, $pop4, $pop5 1043d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 1044d28ed29dSSam Parker %res = tail call fast float @llvm.vector.reduce.fminimum.v4f32(<4 x float> %arg) 1045d28ed29dSSam Parker ret float %res 1046d28ed29dSSam Parker} 1047d28ed29dSSam Parker 1048d28ed29dSSam Parkerdefine float @pairwise_minimum_v4f32_reassoc(<4 x float> %arg) { 1049d28ed29dSSam Parker; SIMD128-LABEL: pairwise_minimum_v4f32_reassoc: 1050d28ed29dSSam Parker; SIMD128: .functype pairwise_minimum_v4f32_reassoc (v128) -> (f32) 1051d28ed29dSSam Parker; SIMD128-NEXT: # %bb.0: 1052d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push1=, $0, 0 1053d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push0=, $0, 1 1054d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push2=, $pop1, $pop0 1055d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push3=, $0, 2 1056d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push4=, $pop2, $pop3 1057d28ed29dSSam Parker; SIMD128-NEXT: f32x4.extract_lane $push5=, $0, 3 1058d28ed29dSSam Parker; SIMD128-NEXT: f32.min $push6=, $pop4, $pop5 1059d28ed29dSSam Parker; SIMD128-NEXT: return $pop6 1060d28ed29dSSam Parker %res = tail call reassoc float @llvm.vector.reduce.fminimum.v4f32(<4 x float> %arg) 1061d28ed29dSSam Parker ret float %res 1062d28ed29dSSam Parker} 1063