New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer #14187
ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer #14187
Conversation
ee7eeef
to
89076fa
Compare
Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? |
@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?
@pitrou As far as I understand it is compatible with previous versions. Previously we used a helper function to let pointers duduce their own types. Now we supply their types directly. |
One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with |
Not sure. That might be tested on some of our nightly builds... |
Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well: @kou @assignUser Is there a way to do that? |
@github-actions crossbow submit -g cpp |
Revision: 5f40ace Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40 |
@pitrou I update the ci scripts to use the clang version installed by brew. It yields many new warnings. Should I fix those warnings in this PR? |
@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations? |
I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings. |
@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance. |
@js8544 Definitely! |
It turns out they have to be submited together because a successful clang-15 build requires this change from Gandiva. However I did create another issue to track it: https://issues.apache.org/jira/browse/ARROW-17805 |
e0cc3d0
to
a960940
Compare
We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24 |
@js8544 Can you show a snippet of the error(s) with boost? Edit: looking at https://github.com/boostorg/config/pull/440/files, perhaps we can just define |
In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34: |
Makes sense, I'll try it. |
a960940
to
f1de7e0
Compare
f1de7e0
to
66353c9
Compare
From https://github.com/apache/arrow/actions/runs/3099507453 and https://github.com/apache/arrow/actions/runs/3099507450 it seems to be working but the Mac build timed out. I force pushed with no change to trigger a rebuild. |
Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1
Thanks!
@@ -31,6 +31,7 @@ | |||
// We need BOOST_USE_WINDOWS_H definition with MinGW when we use | |||
// boost/process.hpp. See BOOST_USE_WINDOWS_H=1 in | |||
// cpp/cmake_modules/ThirdpartyToolchain.cmake for details. | |||
#define BOOST_NO_CXX98_FUNCTION_BASE // ARROW-17805 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you move this to #20
(before // This boost/asio/...
) to avoid confusing the above // We need ...
comment target?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
@@ -37,6 +37,7 @@ | |||
// We need BOOST_USE_WINDOWS_H definition with MinGW when we use | |||
// boost/process.hpp. See BOOST_USE_WINDOWS_H=1 in | |||
// cpp/cmake_modules/ThirdpartyToolchain.cmake for details. | |||
#define BOOST_NO_CXX98_FUNCTION_BASE // ARROW-17805 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
break; | ||
case SelectionVector::MODE_UINT64: | ||
arguments.push_back(types()->i64_ptr_type()); | ||
selection_vector_type = types()->i64_type(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not related to this pull request but could you also add break;
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
cpp/src/gandiva/llvm_generator.cc
Outdated
@@ -378,7 +386,8 @@ Status LLVMGenerator::CodeGenExprValue(DexPtr value_expr, int buffer_count, | |||
SetPackedBitValue(output_ref, loop_var, output_value->data()); | |||
} else if (arrow::is_primitive(output_type_id) || | |||
output_type_id == arrow::Type::DECIMAL) { | |||
llvm::Value* slot_offset = CreateGEP(builder, output_ref, loop_var); | |||
llvm::Value* slot_offset = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
slot = CreateGEP(builder, offsets_slot_ref, offsets_slot_index); | ||
llvm::Value* offset_start = CreateLoad(builder, slot, "offset_start"); | ||
slot = builder->CreateGEP(types->i32_type(), offsets_slot_ref, offsets_slot_index); | ||
llvm::Value* offset_start = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
cpp/src/gandiva/llvm_generator.cc
Outdated
slot = CreateGEP(builder, offsets_slot_ref, offsets_slot_index_next); | ||
llvm::Value* offset_end = CreateLoad(builder, slot, "offset_end"); | ||
slot = builder->CreateGEP(types->i32_type(), offsets_slot_ref, offsets_slot_index_next); | ||
llvm::Value* offset_end = builder->CreateLoad(types->i32_type(), slot, "offset_end"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
cpp/src/gandiva/llvm_generator.cc
Outdated
@@ -621,7 +634,8 @@ void LLVMGenerator::Visitor::Visit(const VectorReadVarLenValueDex& dex) { | |||
// get the data from the data array, at offset 'offset_start'. | |||
llvm::Value* data_slot_ref = | |||
GetBufferReference(dex.DataIdx(), kBufferTypeData, dex.Field()); | |||
llvm::Value* data_value = CreateGEP(builder, data_slot_ref, offset_start); | |||
llvm::Value* data_value = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
cpp/src/gandiva/llvm_generator.cc
Outdated
@@ -831,7 +845,7 @@ void LLVMGenerator::Visitor::Visit(const NullableInternalFuncDex& dex) { | |||
result_ = BuildFunctionCall(native_function, arrow_return_type, ¶ms); | |||
|
|||
// load the result validity and truncate to i1. | |||
llvm::Value* result_valid_i8 = CreateLoad(builder, result_valid_ptr); | |||
llvm::Value* result_valid_i8 = builder->CreateLoad(types->i8_type(), result_valid_ptr); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
cpp/src/gandiva/llvm_generator.cc
Outdated
@@ -1278,8 +1294,8 @@ std::vector<llvm::Value*> LLVMGenerator::Visitor::BuildParams( | |||
llvm::BasicBlock* saved_block = builder->GetInsertBlock(); | |||
builder->SetInsertPoint(entry_block_); | |||
|
|||
llvm::Value* holder = | |||
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder"); | |||
llvm::Value* holder = generator_->LoadVectorAtIndex( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we use auto
here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
92d0275
to
80f7750
Compare
@pitrou @kou Some builds are timing out. Any idea how to solve this? |
Could you increase |
@github-actions crossbow submit -g cpp |
Revision: 266e915 Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c |
Thanks a lot @js8544 ! |
Benchmark runs are scheduled for baseline = 43e66a9 and contender = 311fe3e. 311fe3e is a master commit associated with this PR. Results will be available as each benchmark for each run completes. |
…14236) Same problem as #14187 (comment) Authored-by: Jin Shang <shangjin1997@gmail.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Starting from LLVM 13, LLVM IR has been shifting towards a unified opaque pointer type, i.e. pointers without pointee types. It has provided workarounds until LLVM 15. The temporary workarounds need to be replaced in order to support LLVM 15 and onwards. We need to supply the pointee type to the CreateGEP and CreateLoad methods. For more background info, see https://llvm.org/docs/OpaquePointers.html and https://lists.llvm.org/pipermail/llvm-dev/2015-February/081822.html Related issues: https://issues.apache.org/jira/browse/ARROW-14363 https://issues.apache.org/jira/browse/ARROW-17728 https://issues.apache.org/jira/browse/ARROW-17775 Lead-authored-by: Jin Shang <shangjin1997@gmail.com> Co-authored-by: jinshang <jinshang@tencent.com> Signed-off-by: Antoine Pitrou <antoine@python.org>
Starting from LLVM 13, LLVM IR has been shifting towards a unified opaque pointer type, i.e. pointers without pointee types. It has provided workarounds until LLVM 15. The temporary workarounds need to be replaced in order to support LLVM 15 and onwards. We need to supply the pointee type to the CreateGEP and CreateLoad methods. For more background info, see https://llvm.org/docs/OpaquePointers.html and https://lists.llvm.org/pipermail/llvm-dev/2015-February/081822.html Related issues: https://issues.apache.org/jira/browse/ARROW-14363 https://issues.apache.org/jira/browse/ARROW-17728 https://issues.apache.org/jira/browse/ARROW-17775 Lead-authored-by: Jin Shang <shangjin1997@gmail.com> Co-authored-by: jinshang <jinshang@tencent.com> Signed-off-by: Antoine Pitrou <antoine@python.org>
…pache#14236) Same problem as apache#14187 (comment) Authored-by: Jin Shang <shangjin1997@gmail.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
Starting from LLVM 13, LLVM IR has been shifting towards a unified opaque pointer type, i.e. pointers without pointee types. It has provided workarounds until LLVM 15. The temporary workarounds need to be replaced in order to support LLVM 15 and onwards. We need to supply the pointee type to the CreateGEP and CreateLoad methods.
For more background info, see https://llvm.org/docs/OpaquePointers.html and https://lists.llvm.org/pipermail/llvm-dev/2015-February/081822.html
Related issues:
https://issues.apache.org/jira/browse/ARROW-14363
https://issues.apache.org/jira/browse/ARROW-17728
https://issues.apache.org/jira/browse/ARROW-17775