GenericValue.h revision 193323
11541Srgrimes//===-- GenericValue.h - Represent any type of LLVM value -------*- C++ -*-===// 21541Srgrimes// 31541Srgrimes// The LLVM Compiler Infrastructure 41541Srgrimes// 51541Srgrimes// This file is distributed under the University of Illinois Open Source 61541Srgrimes// License. See LICENSE.TXT for details. 71541Srgrimes// 81541Srgrimes//===----------------------------------------------------------------------===// 91541Srgrimes// 101541Srgrimes// The GenericValue class is used to represent an LLVM value of arbitrary type. 111541Srgrimes// 121541Srgrimes//===----------------------------------------------------------------------===// 131541Srgrimes 141541Srgrimes 151541Srgrimes#ifndef GENERIC_VALUE_H 161541Srgrimes#define GENERIC_VALUE_H 171541Srgrimes 181541Srgrimes#include "llvm/ADT/APInt.h" 191541Srgrimes#include "llvm/Support/DataTypes.h" 201541Srgrimes 211541Srgrimesnamespace llvm { 221541Srgrimes 231541Srgrimestypedef void* PointerTy; 241541Srgrimesclass APInt; 251541Srgrimes 261541Srgrimesstruct GenericValue { 271541Srgrimes union { 281541Srgrimes double DoubleVal; 291541Srgrimes float FloatVal; 3050477Speter PointerTy PointerVal; 311541Srgrimes struct { unsigned int first; unsigned int second; } UIntPairVal; 321541Srgrimes unsigned char Untyped[8]; 331541Srgrimes }; 341541Srgrimes APInt IntVal; // also used for long doubles 351541Srgrimes 361541Srgrimes GenericValue() : DoubleVal(0.0), IntVal(1,0) {} 371541Srgrimes explicit GenericValue(void *V) : PointerVal(V), IntVal(1,0) { } 381541Srgrimes}; 3981265Speter 401541Srgrimesinline GenericValue PTOGV(void *P) { return GenericValue(P); } 411541Srgrimesinline void* GVTOP(const GenericValue &GV) { return GV.PointerVal; } 4281265Speter 431541Srgrimes} // End llvm namespace 441541Srgrimes#endif 451541Srgrimes