| ; RUN: llc -O0 -mtriple=hexagon < %s | FileCheck %s | |
| ; CHECK-LABEL: fminimum_vec32f32 | |
| define float @fminimum_vec32f32(<32 x float> %vec) { | |
| %res = call float @llvm.vector.reduce.fminimum.v32f32(<32 x float> %vec) | |
| ret float %res | |
| } | |
| ; CHECK: r{{[0-9]+}} = sfmin(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK-LABEL: fminimum_vec2f16 | |
| define half @fminimum_vec2f16(<2 x half> %vec) { | |
| %res = call half @llvm.vector.reduce.fminimum.v2f16(<2 x half> %vec) | |
| ret half %res | |
| } | |
| ; CHECK: call __extendhfsf2 | |
| ; CHECK: r{{[0-9]+}} = sfmin(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK-LABEL: fminimum_vec64f16 | |
| define half @fminimum_vec64f16(<64 x half> %vec) { | |
| %res = call half @llvm.vector.reduce.fminimum.v64f16(<64 x half> %vec) | |
| ret half %res | |
| } | |
| ; CHECK: call __extendhfsf2 | |
| ; CHECK: r{{[0-9]+}} = sfmin(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK-LABEL: fminimum_float | |
| define float @fminimum_float(float %a, float %b) { | |
| %res = call float @llvm.minimum.f32(float %a, float %b) | |
| ret float %res | |
| } | |
| ; CHECK: r{{[0-9]+}} = sfmin(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK-LABEL: fminimum_half | |
| define half @fminimum_half(half %a, half %b) { | |
| %res = call half @llvm.minimum.f16(half %a, half %b) | |
| ret half %res | |
| } | |
| ; CHECK: call __extendhfsf2 | |
| ; CHECK: r{{[0-9]+}} = sfmin(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: p{{[0-9]+}} = sfcmp.uo(r{{[0-9]+}},r{{[0-9]+}}) | |
| ; CHECK: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}}) | |
| declare float @llvm.vector.reduce.fminimum.v32f32(<32 x float> %vec) #0 | |
| declare half @llvm.vector.reduce.fminimum.v2f16(<2 x half> %vec) #0 | |
| declare half @llvm.vector.reduce.fminimum.v64f16(<64 x half> %vec) #0 | |
| declare float @llvm.minimum.f32(float %a, float %b) #0 | |
| declare half @llvm.minimum.f16(half %a, half %b) #0 | |
| attributes #0 = { nounwind "target-cpu"="hexagonv75" } |