; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc -mtriple=hexagon < %s | FileCheck %s define i32 @fptoui.sat.i32.f32(float %x) { ; CHECK-LABEL: fptoui.sat.i32.f32: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r1 = convert_sf2uw(r0):chop ; CHECK-NEXT: r3:2 = combine(##1333788671,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = sfcmp.gt(r2,r0) ; CHECK-NEXT: p1 = sfcmp.uo(r2,r0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = or(p1,p0) ; CHECK-NEXT: p2 = sfcmp.uo(r0,r3) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p3 = sfcmp.gt(r0,r3) ; CHECK-NEXT: if (p0) r1 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = and(p3,!p2) ; CHECK-NEXT: if (p1.new) r1 = #-1 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = r1 ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i32 @llvm.fptoui.sat(float %x) ret i32 %res } define i16 @fptoui.sat.i16.f32(float %x) { ; CHECK-LABEL: fptoui.sat.i16.f32: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r2 = ##1199570688 ; CHECK-NEXT: r1 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = sfmax(r0,r1) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = sfmin(r0,r2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = convert_sf2uw(r0):chop ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i16 @llvm.fptoui.sat(float %x) ret i16 %res } define i64 @fptoui.sat.i64.f64(double %x) { ; CHECK-LABEL: fptoui.sat.i64.f64: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r9:8 = convert_df2ud(r1:0):chop ; CHECK-NEXT: r3:2 = combine(#0,#0) ; CHECK-NEXT: r5:4 = CONST64(#4895412794951729151) ; CHECK-NEXT: r6 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = dfcmp.gt(r3:2,r1:0) ; CHECK-NEXT: p2 = dfcmp.uo(r3:2,r1:0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = or(p2,p0) ; CHECK-NEXT: p1 = dfcmp.gt(r1:0,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p2 = dfcmp.uo(r1:0,r5:4) ; CHECK-NEXT: r1 = #-1 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = and(p1,!p2) ; CHECK-NEXT: r2 = mux(p0,r6,r8) ; CHECK-NEXT: r3 = mux(p0,r6,r9) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = mux(p1,r1,r2) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: if (!p1) r1 = add(r3,#0) ; CHECK-NEXT: } %res = call i64 @llvm.fptoui.sat(double %x) ret i64 %res } define i32 @fptoui.sat.i32.f64(double %x) { ; CHECK-LABEL: fptoui.sat.i32.f64: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r3:2 = combine(#0,#0) ; CHECK-NEXT: r5:4 = CONST64(#4751297606873776128) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1:0 = dfmax(r1:0,r3:2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1:0 = dfmin(r1:0,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = convert_df2uw(r1:0):chop ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i32 @llvm.fptoui.sat(double %x) ret i32 %res } define i32 @fptosi.sat.i32.f32(float %x) { ; CHECK-LABEL: fptosi.sat.i32.f32: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r2 = ##-822083584 ; CHECK-NEXT: r3 = ##1325400063 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = convert_sf2w(r0):chop ; CHECK-NEXT: p1 = sfcmp.gt(r2,r0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p2 = sfcmp.uo(r2,r0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = or(p2,p1) ; CHECK-NEXT: p0 = sfcmp.uo(r0,r3) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p2 = sfcmp.gt(r0,r3) ; CHECK-NEXT: p1 = sfcmp.uo(r0,r0) ; CHECK-NEXT: if (p1) r1 = ##-2147483648 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = and(p2,!p0) ; CHECK-NEXT: if (p0.new) r1 = ##2147483647 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (p1) r1 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = r1 ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i32 @llvm.fptosi.sat(float %x) ret i32 %res } define i16 @fptosi.sat.i16.f32(float %x) { ; CHECK-LABEL: fptosi.sat.i16.f32: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: r1 = ##-956301312 ; CHECK-NEXT: r2 = ##1191181824 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = sfmax(r0,r1) ; CHECK-NEXT: p0 = sfcmp.uo(r0,r0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = sfmin(r1,r2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = convert_sf2w(r1):chop ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (p0) r0 = #0 ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i16 @llvm.fptosi.sat(float %x) ret i16 %res } define i64 @fptosi.sat.i64.f64(double %x) { ; CHECK-LABEL: fptosi.sat.i64.f64: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: p0 = dfcmp.uo(r1:0,r1:0) ; CHECK-NEXT: r6 = #0 ; CHECK-NEXT: r3:2 = CONST64(#-4332462841530417152) ; CHECK-NEXT: r5:4 = CONST64(#4890909195324358655) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = dfcmp.gt(r3:2,r1:0) ; CHECK-NEXT: p2 = dfcmp.uo(r3:2,r1:0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = or(p2,p1) ; CHECK-NEXT: r3:2 = convert_df2d(r1:0):chop ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p2 = dfcmp.uo(r1:0,r5:4) ; CHECK-NEXT: p3 = dfcmp.gt(r1:0,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p2 = and(p3,!p2) ; CHECK-NEXT: r1 = mux(p1,r6,r2) ; CHECK-NEXT: r2 = mux(p1,##-2147483648,r3) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (p2) r1 = #-1 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = mux(p0,r6,r1) ; CHECK-NEXT: if (p2) r2 = ##2147483647 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = mux(p0,r6,r2) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i64 @llvm.fptosi.sat(double %x) ret i64 %res } define i32 @fptosi.sat.i32.f64(double %x) { ; CHECK-LABEL: fptosi.sat.i32.f64: ; CHECK: .cfi_startproc ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: { ; CHECK-NEXT: p0 = dfcmp.uo(r1:0,r1:0) ; CHECK-NEXT: r3:2 = CONST64(#-4476578029606273024) ; CHECK-NEXT: r5:4 = CONST64(#4746794007244308480) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3:2 = dfmax(r1:0,r3:2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3:2 = dfmin(r3:2,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = convert_df2w(r3:2):chop ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (p0) r0 = #0 ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %res = call i32 @llvm.fptosi.sat(double %x) ret i32 %res }