Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- GenericValue.h - Represent any type of LLVM value --------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // The GenericValue class is used to represent an LLVM value of arbitrary type.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_EXECUTIONENGINE_GENERICVALUE_H
  14. #define LLVM_EXECUTIONENGINE_GENERICVALUE_H
  15.  
  16. #include "llvm/ADT/APInt.h"
  17. #include <vector>
  18.  
  19. namespace llvm {
  20.  
  21. using PointerTy = void *;
  22.  
  23. struct GenericValue {
  24.   struct IntPair {
  25.     unsigned int first;
  26.     unsigned int second;
  27.   };
  28.   union {
  29.     double DoubleVal;
  30.     float FloatVal;
  31.     PointerTy PointerVal;
  32.     struct IntPair UIntPairVal;
  33.     unsigned char Untyped[8];
  34.   };
  35.   APInt IntVal; // also used for long doubles.
  36.   // For aggregate data types.
  37.   std::vector<GenericValue> AggregateVal;
  38.  
  39.   // to make code faster, set GenericValue to zero could be omitted, but it is
  40.   // potentially can cause problems, since GenericValue to store garbage
  41.   // instead of zero.
  42.   GenericValue() : IntVal(1, 0) {
  43.     UIntPairVal.first = 0;
  44.     UIntPairVal.second = 0;
  45.   }
  46.   explicit GenericValue(void *V) : PointerVal(V), IntVal(1, 0) {}
  47. };
  48.  
  49. inline GenericValue PTOGV(void *P) { return GenericValue(P); }
  50. inline void *GVTOP(const GenericValue &GV) { return GV.PointerVal; }
  51.  
  52. } // end namespace llvm
  53.  
  54. #endif // LLVM_EXECUTIONENGINE_GENERICVALUE_H
  55.