blob: 238411ab49e8a5c0597ca09d60817330893bab1b [file]
; 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" }