From: Dan Gohman Date: Mon, 14 Sep 2015 21:49:41 +0000 (+0000) Subject: [WebAssembly] Use "long long" for int_fast64_t and int_least64_t on wasm64 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f9860da54f4dab46ccaeb5bc838155e164f0d030;p=clang [WebAssembly] Use "long long" for int_fast64_t and int_least64_t on wasm64 This makes int_fast64_t and int_least64_t the same type as int64_t, and eliminates a difference between wasm32 and wasm64. Differential Revision: http://reviews.llvm.org/D12861 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247622 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index bdae270aa8..4683ede63d 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -255,10 +255,11 @@ public: unsigned getTypeWidth(IntType T) const; /// \brief Return integer type with specified width. - IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const; + virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const; /// \brief Return the smallest integer type with at least the specified width. - IntType getLeastIntTypeByWidth(unsigned BitWidth, bool IsSigned) const; + virtual IntType getLeastIntTypeByWidth(unsigned BitWidth, + bool IsSigned) const; /// \brief Return floating point type with specified width. RealType getRealTypeByWidth(unsigned BitWidth) const; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 16593b9b22..2007f01c2a 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -7069,6 +7069,19 @@ private: const char *getClobbers() const final { return ""; } bool isCLZForZeroUndef() const final { return false; } bool hasInt128Type() const final { return true; } + IntType getIntTypeByWidth(unsigned BitWidth, + bool IsSigned) const final { + // WebAssembly prefers long long for explicitly 64-bit integers. + return BitWidth == 64 ? (IsSigned ? SignedLongLong : UnsignedLongLong) + : TargetInfo::getIntTypeByWidth(BitWidth, IsSigned); + } + IntType getLeastIntTypeByWidth(unsigned BitWidth, + bool IsSigned) const final { + // WebAssembly uses long long for int_least64_t and int_fast64_t. + return BitWidth == 64 + ? (IsSigned ? SignedLongLong : UnsignedLongLong) + : TargetInfo::getLeastIntTypeByWidth(BitWidth, IsSigned); + } }; const Builtin::Info WebAssemblyTargetInfo::BuiltinInfo[] = { diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index dcc2ef0047..615dd1ca95 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -8845,10 +8845,10 @@ // WEBASSEMBLY64-NEXT:#define __INT_FAST32_FMTi__ "i"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_FAST32_MAX__ 2147483647{{$}} // WEBASSEMBLY64-NEXT:#define __INT_FAST32_TYPE__ int{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "ld"{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "li"{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807L{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long int{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTd__ "lld"{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_FAST64_FMTi__ "lli"{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_FAST64_MAX__ 9223372036854775807LL{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_FAST64_TYPE__ long long int{{$}} // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTd__ "hhd"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_FAST8_FMTi__ "hhi"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_FAST8_MAX__ 127{{$}} @@ -8861,10 +8861,10 @@ // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_FMTi__ "i"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_MAX__ 2147483647{{$}} // WEBASSEMBLY64-NEXT:#define __INT_LEAST32_TYPE__ int{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "ld"{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "li"{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807L{{$}} -// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long int{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTd__ "lld"{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_FMTi__ "lli"{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_MAX__ 9223372036854775807LL{{$}} +// WEBASSEMBLY64-NEXT:#define __INT_LEAST64_TYPE__ long long int{{$}} // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_FMTd__ "hhd"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_FMTi__ "hhi"{{$}} // WEBASSEMBLY64-NEXT:#define __INT_LEAST8_MAX__ 127{{$}} @@ -8989,12 +8989,12 @@ // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_FMTx__ "x"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_MAX__ 4294967295U{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_FAST32_TYPE__ unsigned int{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTX__ "lX"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTo__ "lo"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTu__ "lu"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTx__ "lx"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_MAX__ 18446744073709551615UL{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_TYPE__ long unsigned int{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTX__ "llX"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTo__ "llo"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTu__ "llu"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_FMTx__ "llx"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_MAX__ 18446744073709551615ULL{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_FAST64_TYPE__ long long unsigned int{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTX__ "hhX"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTo__ "hho"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_FAST8_FMTu__ "hhu"{{$}} @@ -9013,12 +9013,12 @@ // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_FMTx__ "x"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_MAX__ 4294967295U{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_LEAST32_TYPE__ unsigned int{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTX__ "lX"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTo__ "lo"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTu__ "lu"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTx__ "lx"{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_MAX__ 18446744073709551615UL{{$}} -// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_TYPE__ long unsigned int{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTX__ "llX"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTo__ "llo"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTu__ "llu"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_FMTx__ "llx"{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_MAX__ 18446744073709551615ULL{{$}} +// WEBASSEMBLY64-NEXT:#define __UINT_LEAST64_TYPE__ long long unsigned int{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTX__ "hhX"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTo__ "hho"{{$}} // WEBASSEMBLY64-NEXT:#define __UINT_LEAST8_FMTu__ "hhu"{{$}}