| 1790 | } |
| 1791 | |
| 1792 | llvm::Value* LlvmCodeGen::CodegenMemPoolAllocate(LlvmBuilder* builder, |
| 1793 | llvm::Value* pool_val, llvm::Value* size_val, const char* name) { |
| 1794 | DCHECK(pool_val != nullptr); |
| 1795 | DCHECK(size_val->getType()->isIntegerTy()); |
| 1796 | DCHECK_LE(size_val->getType()->getIntegerBitWidth(), 64); |
| 1797 | DCHECK_EQ(pool_val->getType(), GetStructPtrType<MemPool>()); |
| 1798 | // Extend 'size_val' to i64 if necessary |
| 1799 | if (size_val->getType()->getIntegerBitWidth() < 64) { |
| 1800 | size_val = builder->CreateSExt(size_val, i64_type()); |
| 1801 | } |
| 1802 | llvm::Function* allocate_fn = GetFunction(IRFunction::MEMPOOL_ALLOCATE, false); |
| 1803 | llvm::Value* alignment = GetI32Constant(MemPool::DEFAULT_ALIGNMENT); |
| 1804 | llvm::Value* fn_args[] = {pool_val, size_val, alignment}; |
| 1805 | return builder->CreateCall(allocate_fn, fn_args, name); |
| 1806 | } |
| 1807 | |
| 1808 | llvm::Value* LlvmCodeGen::CodegenArrayAt( |
| 1809 | LlvmBuilder* builder, llvm::Value* array, int idx, const char* name) { |
no test coverage detected