diff options
author | Cameron Zwarich <zwarich@apple.com> | 2011-03-16 22:20:18 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2011-03-16 22:20:18 +0000 |
commit | ebe8173941238cfbabadb1c63bca7fb7dcf2adbe (patch) | |
tree | e26ad4384575e2b10d06cd5476abbe4d91724ada /include | |
parent | 7be4b7ed75d0e094d2cb1998a3d4a8d346b5d839 (diff) | |
download | llvm-ebe8173941238cfbabadb1c63bca7fb7dcf2adbe.tar.gz llvm-ebe8173941238cfbabadb1c63bca7fb7dcf2adbe.tar.bz2 llvm-ebe8173941238cfbabadb1c63bca7fb7dcf2adbe.tar.xz |
The x86-64 ABI says that a bool is only guaranteed to be sign-extended to a byte
rather than an int. Thankfully, this only causes LLVM to miss optimizations, not
generate incorrect code.
This just fixes the zext at the return. We still insert an i32 ZextAssert when
reading a function's arguments, but it is followed by a truncate and another i8
ZextAssert so it is not optimized.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127766 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Target/TargetLowering.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h index 618ed54894..f257b035b8 100644 --- a/include/llvm/Target/TargetLowering.h +++ b/include/llvm/Target/TargetLowering.h @@ -1287,6 +1287,17 @@ public: return false; } + /// getTypeForExtendedInteger - Return the type that should be used to zero or + /// sign extend a zeroext/signext integer argument or return value. + /// FIXME: Most C calling convention requires the return type to be promoted, + /// but this is not true all the time, e.g. i1 on x86-64. It is also not + /// necessary for non-C calling conventions. The frontend should handle this + /// and include all of the necessary information. + virtual MVT + getTypeForExtendedInteger(EVT VT, ISD::NodeType ExtendKind) const { + return MVT::i32; + } + /// LowerOperationWrapper - This callback is invoked by the type legalizer /// to legalize nodes with an illegal operand type but legal result types. /// It replaces the LowerOperation callback in the type Legalizer. |