X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FExecutionEngine%2FGenericValue.h;h=0e92f79eba8f3c88d1cedc5b608c793913a854fb;hb=15b3169062dc90a7ce263c0fec98511c957c1083;hp=7cf1a7b3952b13008b5e65af7068878738fee9e5;hpb=9d20b71ecaffbda5311dfc486b0143d4a94cc502;p=oota-llvm.git diff --git a/include/llvm/ExecutionEngine/GenericValue.h b/include/llvm/ExecutionEngine/GenericValue.h index 7cf1a7b3952..0e92f79eba8 100644 --- a/include/llvm/ExecutionEngine/GenericValue.h +++ b/include/llvm/ExecutionEngine/GenericValue.h @@ -1,52 +1,53 @@ //===-- GenericValue.h - Represent any type of LLVM value -------*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// //===----------------------------------------------------------------------===// -// +// // The GenericValue class is used to represent an LLVM value of arbitrary type. // //===----------------------------------------------------------------------===// -#ifndef GENERIC_VALUE_H -#define GENERIC_VALUE_H +#ifndef LLVM_EXECUTIONENGINE_GENERICVALUE_H +#define LLVM_EXECUTIONENGINE_GENERICVALUE_H -#include "Support/DataTypes.h" +#include "llvm/ADT/APInt.h" +#include "llvm/Support/DataTypes.h" namespace llvm { -typedef uintptr_t PointerTy; - -union GenericValue { - bool BoolVal; - unsigned char UByteVal; - signed char SByteVal; - unsigned short UShortVal; - signed short ShortVal; - unsigned int UIntVal; - signed int IntVal; - uint64_t ULongVal; - int64_t LongVal; - double DoubleVal; - float FloatVal; - struct { unsigned int first; unsigned int second; } UIntPairVal; - PointerTy PointerVal; - unsigned char Untyped[8]; - - GenericValue() {} - GenericValue(void *V) { - PointerVal = (PointerTy)(intptr_t)V; - } +typedef void* PointerTy; +class APInt; + +struct GenericValue { + struct IntPair { + unsigned int first; + unsigned int second; + }; + union { + double DoubleVal; + float FloatVal; + PointerTy PointerVal; + struct IntPair UIntPairVal; + unsigned char Untyped[8]; + }; + APInt IntVal; // also used for long doubles. + // For aggregate data types. + std::vector AggregateVal; + + // to make code faster, set GenericValue to zero could be omitted, but it is + // potentially can cause problems, since GenericValue to store garbage + // instead of zero. + GenericValue() : IntVal(1,0) {UIntPairVal.first = 0; UIntPairVal.second = 0;} + explicit GenericValue(void *V) : PointerVal(V), IntVal(1,0) { } }; inline GenericValue PTOGV(void *P) { return GenericValue(P); } -inline void* GVTOP(const GenericValue &GV) { - return (void*)(intptr_t)GV.PointerVal; -} +inline void* GVTOP(const GenericValue &GV) { return GV.PointerVal; } -} // End llvm namespace +} // End llvm namespace. #endif