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)
commit83f879ddb240ef09e5dc5dd14d2918b0ba5ad55b
treeb307dd5d642524c34f14ee249185ed73f2e496e6
parent79af384d72355dca4174e5a9ee391d38226896bc
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.

llvm-svn: 187613
llvm/lib/Target/Mips/Mips16ISelLowering.cpp
llvm/test/CodeGen/Mips/fp16instrinsmc.ll [new file with mode: 0644]