/usr/include/oclgrind/common.h is in liboclgrind-dev 15.5-3build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | // common.h (Oclgrind)
// Copyright (c) 2013-2015, James Price and Simon McIntosh-Smith,
// University of Bristol. All rights reserved.
//
// This program is provided under a three-clause BSD license. For full
// license terms please see the LICENSE file distributed with this
// source code.
#ifndef __common_h_
#define __common_h_
#include "config.h"
#include <CL/cl.h>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <stdint.h>
#include <unordered_map>
#include <vector>
#define BIG_SEPARATOR "================================"
#define SMALL_SEPARATOR "--------------------------------"
#if defined(_WIN32) && !defined(__MINGW32__)
#define snprintf _snprintf
#undef ERROR
#endif
namespace llvm
{
class Constant;
class ConstantExpr;
class ConstantInt;
class Instruction;
class MDOperand;
class StructType;
class Type;
class Value;
}
namespace oclgrind
{
class Kernel;
// Enumeration for address spaces
enum AddressSpace
{
AddrSpacePrivate = 0,
AddrSpaceGlobal = 1,
AddrSpaceConstant = 2,
AddrSpaceLocal = 3,
};
enum AtomicOp
{
AtomicAdd,
AtomicAnd,
AtomicCmpXchg,
AtomicDec,
AtomicInc,
AtomicMax,
AtomicMin,
AtomicOr,
AtomicSub,
AtomicXchg,
AtomicXor,
};
// Enumeration for different log message types
enum MessageType
{
DEBUG,
INFO,
WARNING,
ERROR,
};
// 3-dimensional size
typedef struct _Size3_
{
size_t x, y, z;
_Size3_();
_Size3_(size_t x, size_t y, size_t z);
_Size3_(size_t linear, _Size3_ dimensions);
size_t& operator[](unsigned i);
const size_t& operator[](unsigned i) const;
bool operator==(const _Size3_& rhs) const;
friend std::ostream& operator<<(std::ostream& stream, const _Size3_& sz);
} Size3;
// Structure for a value with a size/type
struct _TypedValue_
{
unsigned size;
unsigned num;
unsigned char *data;
struct _TypedValue_ clone() const;
double getFloat(unsigned index = 0) const;
size_t getPointer(unsigned index = 0) const;
int64_t getSInt(unsigned index = 0) const;
uint64_t getUInt(unsigned index = 0) const;
void setFloat(double value, unsigned index = 0);
void setPointer(size_t value, unsigned index = 0);
void setSInt(int64_t value, unsigned index = 0);
void setUInt(uint64_t value, unsigned index = 0);
};
typedef _TypedValue_ TypedValue;
// Private memory map type
typedef std::map<const llvm::Value*,TypedValue> TypedValueMap;
// Image object
typedef struct
{
size_t address;
cl_image_format format;
cl_image_desc desc;
} Image;
// Check if an environment variable is set to 1
bool checkEnv(const char *var);
// Output an instruction in human-readable format
void dumpInstruction(std::ostream& out, const llvm::Instruction *instruction);
// Get the human readable name of an address space
const char* getAddressSpaceName(unsigned addrSpace);
// Retrieve the raw data for a constant
void getConstantData(unsigned char *data, const llvm::Constant *constant);
// Creates an instruction from a constant expression
const llvm::Instruction* getConstExprAsInstruction(
const llvm::ConstantExpr *expr);
// Get the ConstantInt object for an MDOperand
const llvm::ConstantInt* getMDOpAsConstInt(const llvm::MDOperand& op);
// Get the byte offset of a struct member
unsigned getStructMemberOffset(const llvm::StructType *type, unsigned index);
// Returns the size of a type
unsigned getTypeSize(const llvm::Type *type);
/// Returns the alignment requirements of this type
unsigned getTypeAlignment(const llvm::Type* type);
// Returns the size of a value
std::pair<unsigned,unsigned> getValueSize(const llvm::Value *value);
// Returns true if the operand is a constant value
bool isConstantOperand(const llvm::Value *operand);
// Returns true if the value is a 3-element vector
bool isVector3(const llvm::Value *value);
// Return the current time in nanoseconds since the epoch
double now();
// Print data in a human readable format (according to its type)
void printTypedData(const llvm::Type *type, const unsigned char *data);
// Exception class for raising fatal errors
class FatalError : std::runtime_error
{
public:
FatalError(const std::string& msg, const std::string& file, size_t line);
~FatalError() throw();
virtual const std::string& getFile() const;
virtual size_t getLine() const;
virtual const char* what() const throw();
protected:
std::string m_file;
size_t m_line;
};
// Utility macro for raising an exception with a sprintf-based message
#define FATAL_ERROR(format, ...) \
{ \
int sz = snprintf(NULL, 0, format, ##__VA_ARGS__); \
char *str = new char[sz+1]; \
sprintf(str, format, ##__VA_ARGS__); \
string msg = str; \
delete[] str; \
throw FatalError(msg, __FILE__, __LINE__); \
}
}
#endif // __common_h_
|