diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c --- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c +++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c @@ -587,7 +587,7 @@ /* lltype -> int */ value llvm_array_length(LLVMTypeRef ArrayTy) { - return Val_int(LLVMGetArrayLength(ArrayTy)); + return Val_int(LLVMGetArrayLength2(ArrayTy)); } /* lltype -> int */ diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h --- a/llvm/include/llvm-c/Core.h +++ b/llvm/include/llvm-c/Core.h @@ -1437,19 +1437,42 @@ * The created type will exist in the context that its element type * exists in. * + * @deprecated LLVMArrayType is deprecated in favor of the API accurate + * LLVMArrayType2 * @see llvm::ArrayType::get() */ LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount); +/** + * Create a fixed size array type that refers to a specific type. + * + * The created type will exist in the context that its element type + * exists in. + * + * @see llvm::ArrayType::get() + */ +LLVMTypeRef LLVMArrayType2(LLVMTypeRef ElementType, uint64_t ElementCount); + /** * Obtain the length of an array type. * * This only works on types that represent arrays. * + * @deprecated LLVMGetArrayLength is deprecated in favor of the API accurate + * LLVMGetArrayLength2 * @see llvm::ArrayType::getNumElements() */ unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy); +/** + * Obtain the length of an array type. + * + * This only works on types that represent arrays. + * + * @see llvm::ArrayType::getNumElements() + */ +uint64_t LLVMGetArrayLength2(LLVMTypeRef ArrayTy); + /** * Create a pointer type that points to a defined type. * @@ -2118,11 +2141,21 @@ /** * Create a ConstantArray from values. * + * @deprecated LLVMConstArray is deprecated in favor of the API accurate + * LLVMConstArray2 * @see llvm::ConstantArray::get() */ LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, unsigned Length); +/** + * Create a ConstantArray from values. + * + * @see llvm::ConstantArray::get() + */ +LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, + uint64_t Length); + /** * Create a non-anonymous ConstantStruct from values. * diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -788,6 +788,10 @@ return wrap(ArrayType::get(unwrap(ElementType), ElementCount)); } +LLVMTypeRef LLVMArrayType2(LLVMTypeRef ElementType, uint64_t ElementCount) { + return wrap(ArrayType::get(unwrap(ElementType), ElementCount)); +} + LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace) { return wrap(PointerType::get(unwrap(ElementType), AddressSpace)); } @@ -822,6 +826,10 @@ return unwrap(ArrayTy)->getNumElements(); } +uint64_t LLVMGetArrayLength2(LLVMTypeRef ArrayTy) { + return unwrap(ArrayTy)->getNumElements(); +} + unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy) { return unwrap(PointerTy)->getAddressSpace(); } @@ -1493,6 +1501,12 @@ return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V)); } +LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, + uint64_t Length) { + ArrayRef V(unwrap(ConstantVals, Length), Length); + return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V)); +} + LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed) { diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp --- a/llvm/tools/llvm-c-test/echo.cpp +++ b/llvm/tools/llvm-c-test/echo.cpp @@ -133,10 +133,8 @@ return S; } case LLVMArrayTypeKind: - return LLVMArrayType( - Clone(LLVMGetElementType(Src)), - LLVMGetArrayLength(Src) - ); + return LLVMArrayType2(Clone(LLVMGetElementType(Src)), + LLVMGetArrayLength2(Src)); case LLVMPointerTypeKind: if (LLVMPointerTypeIsOpaque(Src)) return LLVMPointerTypeInContext(Ctx, LLVMGetPointerAddressSpace(Src)); @@ -309,9 +307,9 @@ ? LLVMConstantArrayValueKind : LLVMConstantDataArrayValueKind); LLVMTypeRef Ty = TypeCloner(M).Clone(Cst); - unsigned EltCount = LLVMGetArrayLength(Ty); + uint64_t EltCount = LLVMGetArrayLength2(Ty); SmallVector Elts; - for (unsigned i = 0; i < EltCount; i++) + for (uint64_t i = 0; i < EltCount; i++) Elts.push_back(clone_constant(LLVMGetAggregateElement(Cst, i), M)); return LLVMConstArray(LLVMGetElementType(Ty), Elts.data(), EltCount); }