#if LLVM_VERSION < 30
#define constType const Type
#define constArrayType const ArrayType
#define constStructType const StructType
#define constPointerType const PointerType
#define constFunctionType const FunctionType
#define ARRAYREF(t,a,b) (a),(b)
#define ARRAYREFPARAM(t,a,b,n) a, b
#define ARRAYREFP(a,b,n) a, b
#define ARRAYREFVECTOR(t,a) (a).begin(),(a).end()
#define HINT(n)
#define OPT(n)
#else
#define constType Type
#define constArrayType ArrayType
#define constStructType StructType
#define constPointerType PointerType
#define constFunctionType FunctionType
#define ARRAYREF(t,a,b) ArrayRef<t>(a,b)
#define ARRAYREFPARAM(t,a,b,n) ArrayRef<t> n
#define ARRAYREFP(a,b,n) n
#define ARRAYREFVECTOR(t,a) ArrayRef<t>(a)
#define HINT(n) n,
#define OPT(n) ,n
#endif