Simplify LLVM's APInt and APFloat for use in Subzero.
In Subzero, we only need to be able to convert 64 bit constants in
bitcode files to the corresponding Ice integer or floating type. This
CL extracts the minimal implementation needed for Subzero. The intent
of this change is to remove loading unnecessary LLVM code into
(minimal) llvm2ice.
BUG=None
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/797323002
diff --git a/src/IceAPFloat.h b/src/IceAPFloat.h
new file mode 100644
index 0000000..ccfb7f3
--- /dev/null
+++ b/src/IceAPFloat.h
@@ -0,0 +1,40 @@
+//===-- subzero/src/IceAPFloat.h - Constant float conversions --*- C++ -*--===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief This file implements a class to represent Subzero float and double
+/// values.
+///
+/// Note: This is a simplified version of
+/// llvm/include/llvm/ADT/APFloat.h for use with Subzero.
+//===----------------------------------------------------------------------===//
+
+#ifndef SUBZERO_SRC_ICEAPFLOAT_H
+#define SUBZERO_SRC_ICEAPFLOAT_H
+
+#include "IceAPInt.h"
+
+namespace Ice {
+
+template <typename IntType, typename FpType>
+inline FpType convertAPIntToFp(const APInt &Int) {
+ static_assert(sizeof(IntType) == sizeof(FpType),
+ "IntType and FpType should be the same width");
+ assert(Int.getBitWidth() == sizeof(IntType) * CHAR_BIT);
+ union {
+ IntType IntValue;
+ FpType FpValue;
+ } Converter;
+ Converter.IntValue = static_cast<IntType>(Int.getRawData());
+ return Converter.FpValue;
+}
+
+} // end of namespace Ice
+
+#endif // SUBZERO_SRC_ICEAPFLOAT_H