Fix some issues with Mips16 floating when certain intrinsics are present.
authorReed Kotler <rkotler@mips.com>
Thu, 1 Aug 2013 21:17:53 +0000 (21:17 +0000)
committerReed Kotler <rkotler@mips.com>
Thu, 1 Aug 2013 21:17:53 +0000 (21:17 +0000)
commitb1fa7d4d26533bdd021c3269d14c30eb6096fb7a
tree730073b3bac105ae160afaeca049dea6d5a456da
parente18804ecd07b0e62d5194c3d42f9024656f91bcd
Fix some issues with Mips16 floating when certain intrinsics are present.
This is actually an LLVM bug in the way it generates signatures for these
when soft float is enabled. For example, floor ends up having the signature
of int64(int64). The signature part is not the same as where the actual
parameter types are recorded, and those ARE of course int64(int64) when
soft float is enabled. (Yes, Mips16 hard float uses soft float but with
different runtime rounes but then has to interoperate with Mips32 using
normal floating point). This logic will eventually be moved to the
Mips16HardFloat pass so it's not worth sorting out these issues in LLVM
since nobody but Mips16 cares about these signatures, as far as I know,
and even I won't eventually either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187613 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/Mips/Mips16ISelLowering.cpp
test/CodeGen/Mips/fp16instrinsmc.ll [new file with mode: 0644]