Displaying 20 results from an estimated 500 matches similar to: "[LLVMdev] fptoui Semantics Question"
2013 Feb 13
1
[LLVMdev] Using MSVC _ftol2 runtime function for fptoui on Win32
Hi Joe & Michael,
In rev. 151382 you have changed the fptoui implementation of the x86 codegen for win32.
Before the change fptoui was lowered to
flds 16(%esp)
fisttpll 8(%esp)
movl 8(%esp), %eax
After the change fptoui is lowered to
flds 40(%esp)
calll _ftol2
Please note that the assumption that _ftol2 doesn't modify ECX isn't true on sandybridge platform.
2018 Nov 05
3
Safe fptoui/fptosi casts
Hi everyone!
The fptoui/fptosi instructions are currently specified to return a poison
value if the rounded-towards-zero floating point number cannot be
represented by the target integer type. The motivation for this behavior is
that overflowing float to int casts in C are undefined behavior.
However, many newer languages prefer to have a float to integer cast that
is well-defined for all input
2018 Nov 05
5
Safe fptoui/fptosi casts
I would be interested in learning what the set of used semantics for
float-to-int conversion is. If the only two used are 1) undefined behavior
if unrepresentable and 2) saturate to int_{min,max} with NaN going to zero,
then I think it makes sense to expose both of those natively in the IR. If
the set is much larger, I think separate intrinsics for each behavior would
make sense. It would be nice
2012 Jan 19
0
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
2012/1/19 Jakob Stoklund Olesen <stoklund at 2pi.dk>:
> How many of these libcalls do you need to implement? What exactly is the calling convention? Which registers are clobbered etc.
There is only one (that I know about so far). The MSVCRT `_ftol2`
function implements floating-point-to-unsigned conversion for i386
targets, and LLVM 3.0 calls it with the cdecl calling convention for
2012 Jan 24
0
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
On Fri, Jan 20, 2012 at 2:10 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk> wrote:
> X86FloatingPoint.cpp with comments is all you get.
Thanks for your help, Jakob. Attached is a first-pass attempt at a
patch. I don't want to post to -commits yet because I have no idea if
this is fully correct, but it seems to work in simple test cases. Am I
on the right track? Could this patch ever
2013 Jul 19
0
[LLVMdev] fptoui calling a function that modifies ECX
Thank you, I'm trying this now.
On 19/07/2013 5:23 PM, Craig Topper wrote:
> Try adding ECX to the Defs of this part of
> lib/Target/X86/X86InstrCompiler.td like I've done below. I don't have
> a Windows machine to test myself.
>
> let Defs = [EAX, EDX, ECX, EFLAGS], FPForm = SpecialFP in {
> def WIN_FTOL_32 : I<0, Pseudo, (outs), (ins RFP32:$src),
>
2013 Jul 19
0
[LLVMdev] fptoui calling a function that modifies ECX
That does appear to have worked. All my tests are passing now.
I'll hand this out to our other devs & testers and make sure it's
working for them as well (not just on my machine).
Thank you, again.
--
Peter N
On 19/07/2013 5:45 PM, Craig Topper wrote:
> I don't think that's going to work.
>
>
> On Fri, Jul 19, 2013 at 12:24 AM, Peter Newman <peter at
2013 Jul 20
0
[LLVMdev] fptoui calling a function that modifies ECX
I've applied this and the test cases I have here continue to work, so it
looks good to me.
I've ran into another (seemingly unrelated) issue which I'll describe in
a separate email to the dev list.
--
Peter N
On 20/07/2013 5:30 AM, Craig Topper wrote:
> Here's my attempt at a fix. Adding Jakob to make sure I did this right.
>
>
> On Fri, Jul 19, 2013 at 2:34 AM,
2013 Jul 19
3
[LLVMdev] fptoui calling a function that modifies ECX
Try adding ECX to the Defs of this part of
lib/Target/X86/X86InstrCompiler.td like I've done below. I don't have a
Windows machine to test myself.
let Defs = [EAX, EDX, ECX, EFLAGS], FPForm = SpecialFP in {
def WIN_FTOL_32 : I<0, Pseudo, (outs), (ins RFP32:$src),
"# win32 fptoui",
[(X86WinFTOL RFP32:$src)]>,
2013 Jul 19
2
[LLVMdev] fptoui calling a function that modifies ECX
I don't think that's going to work.
On Fri, Jul 19, 2013 at 12:24 AM, Peter Newman <peter at uformia.com> wrote:
> Thank you, I'm trying this now.
>
>
> On 19/07/2013 5:23 PM, Craig Topper wrote:
>
> Try adding ECX to the Defs of this part of
> lib/Target/X86/X86InstrCompiler.td like I've done below. I don't have a
> Windows machine to test
2013 Jul 19
0
[LLVMdev] fptoui calling a function that modifies ECX
Oh, excellent point, I agree. My bad. Now that I'm not assuming those
are the sqrt, I see the sqrtpd's in the output. Also there are three
fptoui's and there are 3 call instances.
(Changing subject line again.)
Now it looks like it's bug #13862
On 19/07/2013 4:51 PM, Craig Topper wrote:
> I think those calls correspond to this
>
> %110 = fptoui double %109 to i32
2013 Jul 19
2
[LLVMdev] fptoui calling a function that modifies ECX
Here's my attempt at a fix. Adding Jakob to make sure I did this right.
On Fri, Jul 19, 2013 at 2:34 AM, Peter Newman <peter at uformia.com> wrote:
> That does appear to have worked. All my tests are passing now.
>
> I'll hand this out to our other devs & testers and make sure it's working
> for them as well (not just on my machine).
>
> Thank you,
2012 Jan 19
2
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
On Jan 18, 2012, at 8:56 PM, Joe Groff wrote:
> 2012/1/18 Jakob Stoklund Olesen <stoklund at 2pi.dk>:
>> This should work:
>> %1 = call i64 asm "call __ftol2", "=A,{st},~{dirflag},~{fpsr},~{flags},~{st}" (double %x) nounwind
>
> Forgive me for being slow, but what would be the best way to implement
> the equivalent of that inline asm as a custom
2012 Jan 20
2
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
On Jan 20, 2012, at 1:58 PM, Joe Groff wrote:
> The integer runtime functions (_allmul, _alldiv, etc. for 64-bit
> integer arithmetic) all appear to be straight-up stdcall. _ftol2 is
> the only weird one. (There is an _ftol routine with the same calling
> convention as _ftol2, but AFAIK it's only for backward compatibility
> with older MSVC runtimes.) I'm far from an MSVC
2017 Apr 19
3
[cfe-dev] FE_INEXACT being set for an exact conversion from float to unsigned long long
Changing the list from cfe-dev to llvm-dev
> On 20 Apr 2017, at 4:52 AM, Michael Clark <michaeljclark at mac.com> wrote:
>
> I’m getting close. I think it may be an issue with an individual intrinsic. I’m looking for the X86 lowering of Instruction::FPToUI.
>
> I found a comment around the rationale for using a conditional move versus a branch. I believe the predicate logic
2012 Jan 25
2
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
On Jan 24, 2012, at 2:30 PM, Joe Groff wrote:
> On Fri, Jan 20, 2012 at 2:10 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk> wrote:
>> X86FloatingPoint.cpp with comments is all you get.
>
> Thanks for your help, Jakob. Attached is a first-pass attempt at a
> patch. I don't want to post to -commits yet because I have no idea if
> this is fully correct, but it seems
2012 Jan 19
2
[LLVMdev] Best way to interface with MSVC _ftol2 runtime function for fptoui?
On Jan 19, 2012, at 10:12 AM, Joe Groff wrote:
> 2012/1/19 Jakob Stoklund Olesen <stoklund at 2pi.dk>:
>> How many of these libcalls do you need to implement? What exactly is the calling convention? Which registers are clobbered etc.
>
> There is only one (that I know about so far). The MSVCRT `_ftol2`
> function implements floating-point-to-unsigned conversion for i386
2016 Oct 03
5
Is this undefined behavior optimization legal?
Hi,
I've found a test case where SelectionDAG is doing an undefined behavior
optimization, and I need help determining whether or not this is legal.
Here is the example IR:
define void @test(<4 x i8> addrspace(1)* %out, float %a) {
%uint8 = fptoui float %a to i8
%vec = insertelement <4 x i8> <i8 0, i8 0, i8 0, i8 0>, i8 %uint8, i32 0
store <4 x i8> %vec, <4
2013 May 30
3
[LLVMdev] Expected behavior of calling bitcasted functions?
Hi,
I'm not sure what the expected behavior of calling a bitcasted function is. Suppose you have a case like this (which you get on the source level from attribute alias):
@alias_f32 = alias bitcast (i32 (i32)* @func_i32 to float (float)*)
define internal i32 @func_i32(i32 %v) noinline nounwind {
entry:
ret i32 %v
}
define void @bitcast_alias_scalar(float* noalias %source, float* noalias
2017 Apr 20
4
[cfe-dev] FE_INEXACT being set for an exact conversion from float to unsigned long long
> This seems like it was done for perf reason (mispredict). Conditional-to-cmov transformation should keep
> from introducing additional observable side-effects, and it's clear that whatever did this did not account
> for floating point exception.
That’s a very reasonable statement, but I’m not sure it corresponds to the way we have typically approached this sort of problem.
In