[llvm-dev] Clang for the PlayStation 2
Tim Northover via llvm-dev
llvm-dev at lists.llvm.org
Thu Sep 6 08:31:19 PDT 2018
On Thu, 6 Sep 2018 at 16:00, Dan Ravensloft <dan.ravensloft at gmail.com> wrote:
> I'm reasonably sure the function producing that node is lowerFP_TO_SINT_STORE in lib/Target/Mips/MipsISelLowering.cpp.
That doesn't surprise me.
> The node before that function executes has an fp_to_sint node which seems to want to convert an i64 to an f32 which seems...rather odd to me, honestly.
It's a pretty common kind of operation. C says you're allowed to cast
an int64_t to a float, and that's the IR you get when you try.
> The PS2, for what it's worth, only has an i32 -> f32 instruction, so I think there's an impedance mismatch somewhere.
This is also a fairly common situation. If the operation can be
emulated with a reasonably small number of native instructions you can
often get LLVM to do that.
In this case it would probably be a libcall though because it's quite
complex. LLVM would generate a call to __floatdisf, which will be
provided by compiler-rt (there are C implementations for all kinds of
floating-point operations there).
You should see the same thing if you compile a function doing that
conversion with GCC.
Cheers.
Tim.
More information about the llvm-dev
mailing list