On Thu, 11 Aug 2011, Uros Bizjak wrote: > Hello! > > Currently, conversion from floating point to integer on 64bit targets > goes through DImode temporary, due to missing BUILT_IN_ICEIL (and > other) builtins that can convert directly from FP to integer. > > Attached patch introduces these builtins and improves i.e.: > > int > test (double a) > { > return round (a); > } > > using -ffast-math -O2 from: > > ... > cvttsd2siq %xmm1, %rax > ret > > to > ... > cvttsd2si %xmm1, %eax > ret
Please document those in doc/extend.texi and make sure they do not leak into the global namespace as ifloor, etc., but are only available as __builtin_ifloor, etc.. Please also add at least a testcase that excercises expanding all of the variants - like by simply writing wrappers with the non-__builtin_ name variant like int ifloor (double f) { return __builtin_ifloor (f); } int main () {} all variants should link correctly. I'm not sure about the naming - shouldn't we name those internal builtins after the mode, thus sifloor or even SIfloor? Is there precedent for the 'i' prefix? Thanks, Richard. > 2011-08-11 Uros Bizjak <ubiz...@gmail.com> > > * builtins.def (BUILT_IN_ICEIL{,F,L}, BUILT_IN_IFLOOR{,F,L}, > BUILT_IN_IRINT{,F,L}, BUILT_IN_IROUND{,F,L}: New builtin definitions. > * convert.c (convert_to_integer): Convert to BUILT_IN_ICEIL, > BUILT_IN_IFLOOR, BUILT_IN_IRINT or BUILT_INT_IROUND when converting > to integer_type_node. > * fold-const.c (tree_call_nonnegative_warnv_p): Handle BUILT_IN_ICEIL, > BUILT_IN_IFLOOR, BUILT_IN_IRINT and BUILT_INT_IROUND. > * builtins.c (expand_builtin_in): Ditto. > (mathfn_built_in_1): Ditto. > (expand_builtin_int_roundingfn): Handle BUILT_IN_ICEIL and > BUILT_IN_IFLOOR. > (expand_builtin_int_roundingfn_2): Handle BUILT_IN_IRINT and > BUILT_IN_IROUND. > (fold_fixed_mathfn): Canonicalize BUILT_IN_ICEIL, BUILTIN_IN_IFLOOR, > BUILT_IN_IRINT and BUILT_IN_IROUND to BUILT_IN_LCEIL, > BUILTIN_IN_LFLOOR, BUILT_IN_LRINT and BUILT_IN_LROUND on ILP32 targets. > > Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}. > > OK for mainline? > > Uros. > -- Richard Guenther <rguent...@suse.de> Novell / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer