Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/WebAssembly/simd-arith.ll
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 13,492 Lines • ▼ Show 20 Lines | ; NO-SIMD128-FAST-NEXT: return | ||||
ret <4 x float> %a | ret <4 x float> %a | ||||
} | } | ||||
declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>) | declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>) | ||||
define <4 x float> @minnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | define <4 x float> @minnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | ||||
; SIMD128-LABEL: minnum_intrinsic_v4f32: | ; SIMD128-LABEL: minnum_intrinsic_v4f32: | ||||
; SIMD128: .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128: .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-NEXT: # %bb.0: | ; SIMD128-NEXT: # %bb.0: | ||||
; SIMD128-NEXT: f32x4.min $push0=, $0, $1 | ; SIMD128-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-NEXT: return $pop0 | ; SIMD128-NEXT: local.tee $push26=, $3=, $pop27 | ||||
; SIMD128-NEXT: f32x4.extract_lane $push25=, $1, 0 | |||||
; SIMD128-NEXT: local.tee $push24=, $2=, $pop25 | |||||
; SIMD128-NEXT: f32.lt $push2=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push3=, $pop26, $pop24, $pop2 | |||||
; SIMD128-NEXT: f32x4.splat $push4=, $pop3 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push23=, $0, 1 | |||||
; SIMD128-NEXT: local.tee $push22=, $3=, $pop23 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push21=, $1, 1 | |||||
; SIMD128-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-NEXT: f32.lt $push0=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push1=, $pop22, $pop20, $pop0 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push5=, $pop4, 1, $pop1 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push19=, $0, 2 | |||||
; SIMD128-NEXT: local.tee $push18=, $3=, $pop19 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push17=, $1, 2 | |||||
; SIMD128-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-NEXT: f32.lt $push6=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push7=, $pop18, $pop16, $pop6 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push8=, $pop5, 2, $pop7 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push15=, $0, 3 | |||||
; SIMD128-NEXT: local.tee $push14=, $3=, $pop15 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push13=, $1, 3 | |||||
; SIMD128-NEXT: local.tee $push12=, $2=, $pop13 | |||||
; SIMD128-NEXT: f32.lt $push9=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push10=, $pop14, $pop12, $pop9 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push11=, $pop8, 3, $pop10 | |||||
; SIMD128-NEXT: return $pop11 | |||||
; | ; | ||||
; SIMD128-FAST-LABEL: minnum_intrinsic_v4f32: | ; SIMD128-FAST-LABEL: minnum_intrinsic_v4f32: | ||||
; SIMD128-FAST: .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128-FAST: .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-FAST-NEXT: # %bb.0: | ; SIMD128-FAST-NEXT: # %bb.0: | ||||
; SIMD128-FAST-NEXT: f32x4.min $push0=, $0, $1 | ; SIMD128-FAST-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-FAST-NEXT: local.tee $push26=, $3=, $pop27 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push25=, $1, 0 | |||||
; SIMD128-FAST-NEXT: local.tee $push24=, $2=, $pop25 | |||||
; SIMD128-FAST-NEXT: f32.lt $push3=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push4=, $pop26, $pop24, $pop3 | |||||
; SIMD128-FAST-NEXT: f32x4.splat $push5=, $pop4 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push23=, $0, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push22=, $3=, $pop23 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push21=, $1, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-FAST-NEXT: f32.lt $push1=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push2=, $pop22, $pop20, $pop1 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push6=, $pop5, 1, $pop2 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push19=, $0, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push18=, $3=, $pop19 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push17=, $1, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-FAST-NEXT: f32.lt $push7=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push8=, $pop18, $pop16, $pop7 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push9=, $pop6, 2, $pop8 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push15=, $0, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push14=, $3=, $pop15 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push13=, $1, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push12=, $2=, $pop13 | |||||
; SIMD128-FAST-NEXT: f32.lt $push10=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push11=, $pop14, $pop12, $pop10 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push0=, $pop9, 3, $pop11 | |||||
; SIMD128-FAST-NEXT: return $pop0 | ; SIMD128-FAST-NEXT: return $pop0 | ||||
; | ; | ||||
; NO-SIMD128-LABEL: minnum_intrinsic_v4f32: | ; NO-SIMD128-LABEL: minnum_intrinsic_v4f32: | ||||
; NO-SIMD128: .functype minnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ; NO-SIMD128: .functype minnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ||||
; NO-SIMD128-NEXT: # %bb.0: | ; NO-SIMD128-NEXT: # %bb.0: | ||||
; NO-SIMD128-NEXT: call $push0=, fminf, $3, $7 | ; NO-SIMD128-NEXT: call $push0=, fminf, $3, $7 | ||||
; NO-SIMD128-NEXT: f32.store 8($0), $pop0 | ; NO-SIMD128-NEXT: f32.store 8($0), $pop0 | ||||
; NO-SIMD128-NEXT: call $push1=, fminf, $2, $6 | ; NO-SIMD128-NEXT: call $push1=, fminf, $2, $6 | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | ; NO-SIMD128-FAST-NEXT: return | ||||
%a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float -1.0, float -1.0, float -1.0>) | %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float -1.0, float -1.0, float -1.0>) | ||||
ret <4 x float> %a | ret <4 x float> %a | ||||
} | } | ||||
define <4 x float> @fminnumv432_one_zero_intrinsic(<4 x float> %x) { | define <4 x float> @fminnumv432_one_zero_intrinsic(<4 x float> %x) { | ||||
; SIMD128-LABEL: fminnumv432_one_zero_intrinsic: | ; SIMD128-LABEL: fminnumv432_one_zero_intrinsic: | ||||
; SIMD128: .functype fminnumv432_one_zero_intrinsic (v128) -> (v128) | ; SIMD128: .functype fminnumv432_one_zero_intrinsic (v128) -> (v128) | ||||
; SIMD128-NEXT: # %bb.0: | ; SIMD128-NEXT: # %bb.0: | ||||
; SIMD128-NEXT: v128.const $push0=, -0x1p0, 0x0p0, -0x1p0, -0x1p0 | ; SIMD128-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-NEXT: f32x4.min $push1=, $0, $pop0 | ; SIMD128-NEXT: local.tee $push26=, $1=, $pop27 | ||||
; SIMD128-NEXT: return $pop1 | ; SIMD128-NEXT: f32.const $push3=, -0x1p0 | ||||
; SIMD128-NEXT: f32.const $push25=, -0x1p0 | |||||
; SIMD128-NEXT: f32.lt $push4=, $1, $pop25 | |||||
; SIMD128-NEXT: f32.select $push5=, $pop26, $pop3, $pop4 | |||||
; SIMD128-NEXT: f32x4.splat $push6=, $pop5 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push24=, $0, 1 | |||||
; SIMD128-NEXT: local.tee $push23=, $1=, $pop24 | |||||
; SIMD128-NEXT: f32.const $push0=, 0x0p0 | |||||
; SIMD128-NEXT: f32.const $push22=, 0x0p0 | |||||
; SIMD128-NEXT: f32.lt $push1=, $1, $pop22 | |||||
; SIMD128-NEXT: f32.select $push2=, $pop23, $pop0, $pop1 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push7=, $pop6, 1, $pop2 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push21=, $0, 2 | |||||
; SIMD128-NEXT: local.tee $push20=, $1=, $pop21 | |||||
; SIMD128-NEXT: f32.const $push19=, -0x1p0 | |||||
; SIMD128-NEXT: f32.const $push18=, -0x1p0 | |||||
; SIMD128-NEXT: f32.lt $push8=, $1, $pop18 | |||||
; SIMD128-NEXT: f32.select $push9=, $pop20, $pop19, $pop8 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push10=, $pop7, 2, $pop9 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push17=, $0, 3 | |||||
; SIMD128-NEXT: local.tee $push16=, $1=, $pop17 | |||||
; SIMD128-NEXT: f32.const $push15=, -0x1p0 | |||||
; SIMD128-NEXT: f32.const $push14=, -0x1p0 | |||||
; SIMD128-NEXT: f32.lt $push11=, $1, $pop14 | |||||
; SIMD128-NEXT: f32.select $push12=, $pop16, $pop15, $pop11 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push13=, $pop10, 3, $pop12 | |||||
; SIMD128-NEXT: return $pop13 | |||||
; | ; | ||||
; SIMD128-FAST-LABEL: fminnumv432_one_zero_intrinsic: | ; SIMD128-FAST-LABEL: fminnumv432_one_zero_intrinsic: | ||||
; SIMD128-FAST: .functype fminnumv432_one_zero_intrinsic (v128) -> (v128) | ; SIMD128-FAST: .functype fminnumv432_one_zero_intrinsic (v128) -> (v128) | ||||
; SIMD128-FAST-NEXT: # %bb.0: | ; SIMD128-FAST-NEXT: # %bb.0: | ||||
; SIMD128-FAST-NEXT: v128.const $push1=, -0x1p0, 0x0p0, -0x1p0, -0x1p0 | ; SIMD128-FAST-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-FAST-NEXT: f32x4.min $push0=, $0, $pop1 | ; SIMD128-FAST-NEXT: local.tee $push26=, $1=, $pop27 | ||||
; SIMD128-FAST-NEXT: f32.const $push4=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push25=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.lt $push5=, $1, $pop25 | |||||
; SIMD128-FAST-NEXT: f32.select $push6=, $pop26, $pop4, $pop5 | |||||
; SIMD128-FAST-NEXT: f32x4.splat $push7=, $pop6 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push24=, $0, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push23=, $1=, $pop24 | |||||
; SIMD128-FAST-NEXT: f32.const $push1=, 0x0p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push22=, 0x0p0 | |||||
; SIMD128-FAST-NEXT: f32.lt $push2=, $1, $pop22 | |||||
; SIMD128-FAST-NEXT: f32.select $push3=, $pop23, $pop1, $pop2 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push8=, $pop7, 1, $pop3 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push21=, $0, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push20=, $1=, $pop21 | |||||
; SIMD128-FAST-NEXT: f32.const $push19=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push18=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.lt $push9=, $1, $pop18 | |||||
; SIMD128-FAST-NEXT: f32.select $push10=, $pop20, $pop19, $pop9 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push11=, $pop8, 2, $pop10 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push17=, $0, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push16=, $1=, $pop17 | |||||
; SIMD128-FAST-NEXT: f32.const $push15=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push14=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.lt $push12=, $1, $pop14 | |||||
; SIMD128-FAST-NEXT: f32.select $push13=, $pop16, $pop15, $pop12 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push0=, $pop11, 3, $pop13 | |||||
; SIMD128-FAST-NEXT: return $pop0 | ; SIMD128-FAST-NEXT: return $pop0 | ||||
; | ; | ||||
; NO-SIMD128-LABEL: fminnumv432_one_zero_intrinsic: | ; NO-SIMD128-LABEL: fminnumv432_one_zero_intrinsic: | ||||
; NO-SIMD128: .functype fminnumv432_one_zero_intrinsic (i32, f32, f32, f32, f32) -> () | ; NO-SIMD128: .functype fminnumv432_one_zero_intrinsic (i32, f32, f32, f32, f32) -> () | ||||
; NO-SIMD128-NEXT: # %bb.0: | ; NO-SIMD128-NEXT: # %bb.0: | ||||
; NO-SIMD128-NEXT: f32.const $push0=, -0x1p0 | ; NO-SIMD128-NEXT: f32.const $push0=, -0x1p0 | ||||
; NO-SIMD128-NEXT: call $push1=, fminf, $3, $pop0 | ; NO-SIMD128-NEXT: call $push1=, fminf, $3, $pop0 | ||||
; NO-SIMD128-NEXT: f32.store 8($0), $pop1 | ; NO-SIMD128-NEXT: f32.store 8($0), $pop1 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | ; NO-SIMD128-FAST-NEXT: return | ||||
ret <4 x float> %a | ret <4 x float> %a | ||||
} | } | ||||
declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>) | declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>) | ||||
define <4 x float> @maxnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | define <4 x float> @maxnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | ||||
; SIMD128-LABEL: maxnum_intrinsic_v4f32: | ; SIMD128-LABEL: maxnum_intrinsic_v4f32: | ||||
; SIMD128: .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128: .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-NEXT: # %bb.0: | ; SIMD128-NEXT: # %bb.0: | ||||
; SIMD128-NEXT: f32x4.max $push0=, $0, $1 | ; SIMD128-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-NEXT: return $pop0 | ; SIMD128-NEXT: local.tee $push26=, $3=, $pop27 | ||||
; SIMD128-NEXT: f32x4.extract_lane $push25=, $1, 0 | |||||
; SIMD128-NEXT: local.tee $push24=, $2=, $pop25 | |||||
; SIMD128-NEXT: f32.gt $push2=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push3=, $pop26, $pop24, $pop2 | |||||
; SIMD128-NEXT: f32x4.splat $push4=, $pop3 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push23=, $0, 1 | |||||
; SIMD128-NEXT: local.tee $push22=, $3=, $pop23 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push21=, $1, 1 | |||||
; SIMD128-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-NEXT: f32.gt $push0=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push1=, $pop22, $pop20, $pop0 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push5=, $pop4, 1, $pop1 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push19=, $0, 2 | |||||
; SIMD128-NEXT: local.tee $push18=, $3=, $pop19 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push17=, $1, 2 | |||||
; SIMD128-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-NEXT: f32.gt $push6=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push7=, $pop18, $pop16, $pop6 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push8=, $pop5, 2, $pop7 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push15=, $0, 3 | |||||
; SIMD128-NEXT: local.tee $push14=, $3=, $pop15 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push13=, $1, 3 | |||||
; SIMD128-NEXT: local.tee $push12=, $2=, $pop13 | |||||
; SIMD128-NEXT: f32.gt $push9=, $3, $2 | |||||
; SIMD128-NEXT: f32.select $push10=, $pop14, $pop12, $pop9 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push11=, $pop8, 3, $pop10 | |||||
; SIMD128-NEXT: return $pop11 | |||||
; | ; | ||||
; SIMD128-FAST-LABEL: maxnum_intrinsic_v4f32: | ; SIMD128-FAST-LABEL: maxnum_intrinsic_v4f32: | ||||
; SIMD128-FAST: .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128-FAST: .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-FAST-NEXT: # %bb.0: | ; SIMD128-FAST-NEXT: # %bb.0: | ||||
; SIMD128-FAST-NEXT: f32x4.max $push0=, $0, $1 | ; SIMD128-FAST-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-FAST-NEXT: local.tee $push26=, $3=, $pop27 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push25=, $1, 0 | |||||
; SIMD128-FAST-NEXT: local.tee $push24=, $2=, $pop25 | |||||
; SIMD128-FAST-NEXT: f32.gt $push3=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push4=, $pop26, $pop24, $pop3 | |||||
; SIMD128-FAST-NEXT: f32x4.splat $push5=, $pop4 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push23=, $0, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push22=, $3=, $pop23 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push21=, $1, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-FAST-NEXT: f32.gt $push1=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push2=, $pop22, $pop20, $pop1 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push6=, $pop5, 1, $pop2 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push19=, $0, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push18=, $3=, $pop19 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push17=, $1, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-FAST-NEXT: f32.gt $push7=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push8=, $pop18, $pop16, $pop7 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push9=, $pop6, 2, $pop8 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push15=, $0, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push14=, $3=, $pop15 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push13=, $1, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push12=, $2=, $pop13 | |||||
; SIMD128-FAST-NEXT: f32.gt $push10=, $3, $2 | |||||
; SIMD128-FAST-NEXT: f32.select $push11=, $pop14, $pop12, $pop10 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push0=, $pop9, 3, $pop11 | |||||
; SIMD128-FAST-NEXT: return $pop0 | ; SIMD128-FAST-NEXT: return $pop0 | ||||
; | ; | ||||
; NO-SIMD128-LABEL: maxnum_intrinsic_v4f32: | ; NO-SIMD128-LABEL: maxnum_intrinsic_v4f32: | ||||
; NO-SIMD128: .functype maxnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ; NO-SIMD128: .functype maxnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ||||
; NO-SIMD128-NEXT: # %bb.0: | ; NO-SIMD128-NEXT: # %bb.0: | ||||
; NO-SIMD128-NEXT: call $push0=, fmaxf, $3, $7 | ; NO-SIMD128-NEXT: call $push0=, fmaxf, $3, $7 | ||||
; NO-SIMD128-NEXT: f32.store 8($0), $pop0 | ; NO-SIMD128-NEXT: f32.store 8($0), $pop0 | ||||
; NO-SIMD128-NEXT: call $push1=, fmaxf, $2, $6 | ; NO-SIMD128-NEXT: call $push1=, fmaxf, $2, $6 | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | ; NO-SIMD128-FAST-NEXT: return | ||||
%a = call nnan nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y) | %a = call nnan nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y) | ||||
ret <4 x float> %a | ret <4 x float> %a | ||||
} | } | ||||
define <4 x float> @maxnum_one_zero_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | define <4 x float> @maxnum_one_zero_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) { | ||||
; SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32: | ; SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32: | ||||
; SIMD128: .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128: .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-NEXT: # %bb.0: | ; SIMD128-NEXT: # %bb.0: | ||||
; SIMD128-NEXT: v128.const $push0=, -0x1p0, 0x0p0, -0x1p0, -0x1p0 | ; SIMD128-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-NEXT: f32x4.max $push1=, $0, $pop0 | ; SIMD128-NEXT: local.tee $push26=, $2=, $pop27 | ||||
; SIMD128-NEXT: return $pop1 | ; SIMD128-NEXT: f32.const $push3=, -0x1p0 | ||||
; SIMD128-NEXT: f32.const $push25=, -0x1p0 | |||||
; SIMD128-NEXT: f32.gt $push4=, $2, $pop25 | |||||
; SIMD128-NEXT: f32.select $push5=, $pop26, $pop3, $pop4 | |||||
; SIMD128-NEXT: f32x4.splat $push6=, $pop5 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push24=, $0, 1 | |||||
; SIMD128-NEXT: local.tee $push23=, $2=, $pop24 | |||||
; SIMD128-NEXT: f32.const $push0=, 0x0p0 | |||||
; SIMD128-NEXT: f32.const $push22=, 0x0p0 | |||||
; SIMD128-NEXT: f32.gt $push1=, $2, $pop22 | |||||
; SIMD128-NEXT: f32.select $push2=, $pop23, $pop0, $pop1 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push7=, $pop6, 1, $pop2 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push21=, $0, 2 | |||||
; SIMD128-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-NEXT: f32.const $push19=, -0x1p0 | |||||
; SIMD128-NEXT: f32.const $push18=, -0x1p0 | |||||
; SIMD128-NEXT: f32.gt $push8=, $2, $pop18 | |||||
; SIMD128-NEXT: f32.select $push9=, $pop20, $pop19, $pop8 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push10=, $pop7, 2, $pop9 | |||||
; SIMD128-NEXT: f32x4.extract_lane $push17=, $0, 3 | |||||
; SIMD128-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-NEXT: f32.const $push15=, -0x1p0 | |||||
; SIMD128-NEXT: f32.const $push14=, -0x1p0 | |||||
; SIMD128-NEXT: f32.gt $push11=, $2, $pop14 | |||||
; SIMD128-NEXT: f32.select $push12=, $pop16, $pop15, $pop11 | |||||
; SIMD128-NEXT: f32x4.replace_lane $push13=, $pop10, 3, $pop12 | |||||
; SIMD128-NEXT: return $pop13 | |||||
; | ; | ||||
; SIMD128-FAST-LABEL: maxnum_one_zero_intrinsic_v4f32: | ; SIMD128-FAST-LABEL: maxnum_one_zero_intrinsic_v4f32: | ||||
; SIMD128-FAST: .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128) | ; SIMD128-FAST: .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128) | ||||
; SIMD128-FAST-NEXT: # %bb.0: | ; SIMD128-FAST-NEXT: # %bb.0: | ||||
; SIMD128-FAST-NEXT: v128.const $push1=, -0x1p0, 0x0p0, -0x1p0, -0x1p0 | ; SIMD128-FAST-NEXT: f32x4.extract_lane $push27=, $0, 0 | ||||
; SIMD128-FAST-NEXT: f32x4.max $push0=, $0, $pop1 | ; SIMD128-FAST-NEXT: local.tee $push26=, $2=, $pop27 | ||||
; SIMD128-FAST-NEXT: f32.const $push4=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push25=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.gt $push5=, $2, $pop25 | |||||
; SIMD128-FAST-NEXT: f32.select $push6=, $pop26, $pop4, $pop5 | |||||
; SIMD128-FAST-NEXT: f32x4.splat $push7=, $pop6 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push24=, $0, 1 | |||||
; SIMD128-FAST-NEXT: local.tee $push23=, $2=, $pop24 | |||||
; SIMD128-FAST-NEXT: f32.const $push1=, 0x0p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push22=, 0x0p0 | |||||
; SIMD128-FAST-NEXT: f32.gt $push2=, $2, $pop22 | |||||
; SIMD128-FAST-NEXT: f32.select $push3=, $pop23, $pop1, $pop2 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push8=, $pop7, 1, $pop3 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push21=, $0, 2 | |||||
; SIMD128-FAST-NEXT: local.tee $push20=, $2=, $pop21 | |||||
; SIMD128-FAST-NEXT: f32.const $push19=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push18=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.gt $push9=, $2, $pop18 | |||||
; SIMD128-FAST-NEXT: f32.select $push10=, $pop20, $pop19, $pop9 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push11=, $pop8, 2, $pop10 | |||||
; SIMD128-FAST-NEXT: f32x4.extract_lane $push17=, $0, 3 | |||||
; SIMD128-FAST-NEXT: local.tee $push16=, $2=, $pop17 | |||||
; SIMD128-FAST-NEXT: f32.const $push15=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.const $push14=, -0x1p0 | |||||
; SIMD128-FAST-NEXT: f32.gt $push12=, $2, $pop14 | |||||
; SIMD128-FAST-NEXT: f32.select $push13=, $pop16, $pop15, $pop12 | |||||
; SIMD128-FAST-NEXT: f32x4.replace_lane $push0=, $pop11, 3, $pop13 | |||||
; SIMD128-FAST-NEXT: return $pop0 | ; SIMD128-FAST-NEXT: return $pop0 | ||||
; | ; | ||||
; NO-SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32: | ; NO-SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32: | ||||
; NO-SIMD128: .functype maxnum_one_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ; NO-SIMD128: .functype maxnum_one_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> () | ||||
; NO-SIMD128-NEXT: # %bb.0: | ; NO-SIMD128-NEXT: # %bb.0: | ||||
; NO-SIMD128-NEXT: f32.const $push0=, -0x1p0 | ; NO-SIMD128-NEXT: f32.const $push0=, -0x1p0 | ||||
; NO-SIMD128-NEXT: call $push1=, fmaxf, $3, $pop0 | ; NO-SIMD128-NEXT: call $push1=, fmaxf, $3, $pop0 | ||||
; NO-SIMD128-NEXT: f32.store 8($0), $pop1 | ; NO-SIMD128-NEXT: f32.store 8($0), $pop1 | ||||
▲ Show 20 Lines • Show All 1,427 Lines • Show Last 20 Lines |