ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer - #14187

Merged
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header
Sep 22, 2022
Merged

ARROW-17790: [C++][Gandiva] Adapt to LLVM opaque pointer#14187
pitrou merged 7 commits into
apache:masterfrom
js8544:jinshang/gandiva/fix_llvm15_deprecated_header

Conversation

@js8544

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers?
cc @kou

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou Sorry to bother you antoine, but I have a newbie question: How I can run gandiva related benchmarks with ursabot ?

Is it possible to keep compatibility with pre-13 LLVM using some sort of compatibility wrappers? cc @kou

@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.
Is there a way to check compatibility with old versions?

@pitrou

Copy link
Copy Markdown
Member

One simple possibility is to build and run benchmarks locally. Build Arrow C++ in release mode with -DARROW_BUILD_BENCHMARKS=ON. Then you'll get benchmarks as executable files in the build directory that you can run individually.

@pitrou

Copy link
Copy Markdown
Member

Is there a way to check compatibility with old versions?

Not sure. That might be tested on some of our nightly builds...

@pitrou

Copy link
Copy Markdown
Member

Hmm, judging by this error, we might have to bump the CLang version on the macOS C++ builder as well:
https://github.com/apache/arrow/actions/runs/3095675584/jobs/5010342464#step:9:1738

@kou@assignUser Is there a way to do that?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 5f40aceb668d28346c2d5005c7c223ed8706890a

Submitted crossbow builds: ursacomputing/crossbow @ actions-5342584c40

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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?

@pitrou

Copy link
Copy Markdown
Member

@js8544 If the warnings fail the build, then yes. Are you able to reproduce locally for faster iterations?

@js8544

Copy link
Copy Markdown
ContributorAuthor

I just installed clang 15 on my machine and can reproduce now. Let me fix the warnings.

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou Most of these warnings are unrelated to Gandiva and I feed like fixing them in this PR makes it confusing for future maintenance.
Can I create another issue and PR that: 1. Use brew installed clang for mac in ci scripts 2. Fix clang-15 compatibility?

@pitrou

Copy link
Copy Markdown
Member

@js8544 Definitely!

@js8544

js8544 commented Sep 21, 2022

Copy link
Copy Markdown
ContributorAuthor

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

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from e0cc3d0 to a960940CompareSeptember 21, 2022 16:04
@js8544

Copy link
Copy Markdown
ContributorAuthor

We need to temporarily turn off gcsfs_test, s3fs_test, flight_internals_test and flight_test due to this issue: boostorg/container_hash#24

@pitrou

pitrou commented Sep 21, 2022

Copy link
Copy Markdown
Member

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

@js8544

Copy link
Copy Markdown
ContributorAuthor

In file included from /Users/jinshang/Projects/arrow/cpp/src/arrow/filesystem/gcsfs_test.cc:34:
In file included from /usr/local/include/boost/process.hpp:24:
In file included from /usr/local/include/boost/process/async_system.hpp:22:
In file included from /usr/local/include/boost/process/child.hpp:22:
In file included from /usr/local/include/boost/process/detail/execute_impl.hpp:24:
In file included from /usr/local/include/boost/process/detail/posix/executor.hpp:14:
In file included from /usr/local/include/boost/process/error.hpp:34:
In file included from /usr/local/include/boost/type_index.hpp:29:
In file included from /usr/local/include/boost/type_index/stl_type_index.hpp:47:
/usr/local/include/boost/container_hash/hash.hpp:132:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'?
struct hash_base : std::unary_function<T, std::size_t> {};
~~~~~^
/usr/local/opt/llvm/bin/../include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here
using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>;
^
1 error generated.

@js8544

Copy link
Copy Markdown
ContributorAuthor

@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 BOOST_NO_CXX98_FUNCTION_BASE before including boost?

Makes sense, I'll try it.

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from a960940 to f1de7e0CompareSeptember 21, 2022 16:30
@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from f1de7e0 to 66353c9CompareSeptember 22, 2022 03:27
@js8544

Copy link
Copy Markdown
ContributorAuthor

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.

@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

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.

Also from https://app.travis-ci.com/github/apache/arrow/jobs/583496235 it seems to be compatible with LLVM 10

kou
kou approved these changes Sep 22, 2022

@koukou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Thanks!

// 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

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto.

Copy link
Copy Markdown
ContributorAuthor

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();

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
} 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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/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");

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated
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 =

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

// 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);

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

Comment threadcpp/src/gandiva/llvm_generator.cc Outdated

llvm::Value* holder =
generator_->LoadVectorAtIndex(arg_holder_ptrs_, holder_idx, "holder");
llvm::Value* holder = generator_->LoadVectorAtIndex(

Copy link
Copy Markdown
Member

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?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@js8544
js8544force-pushed the jinshang/gandiva/fix_llvm15_deprecated_header branch from 92d0275 to 80f7750CompareSeptember 22, 2022 05:36
@js8544

js8544 commented Sep 22, 2022

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Some builds are timing out. Any idea how to solve this?
Edit: example: https://github.com/apache/arrow/pull/14187/checks?check_run_id=8485942541

@kou

kou commented Sep 22, 2022

Copy link
Copy Markdown
Member

Could you increase timeout-minutes in https://github.com/apache/arrow/blob/master/.github/workflows/cpp.yml to 75 from 60 for now?

@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 266e915

Submitted crossbow builds: ursacomputing/crossbow @ actions-d354b31e2c

TaskStatus
test-alpine-linux-cppGithub Actions
test-build-cpp-fuzzGithub Actions
test-conda-cppGithub Actions
test-conda-cpp-valgrindAzure
test-debian-10-cpp-amd64Github Actions
test-debian-10-cpp-i386Github Actions
test-debian-11-cpp-amd64Github Actions
test-debian-11-cpp-i386Github Actions
test-fedora-35-cppGithub Actions
test-ubuntu-18.04-cppGithub Actions
test-ubuntu-18.04-cpp-releaseGithub Actions
test-ubuntu-18.04-cpp-staticGithub Actions
test-ubuntu-20.04-cppGithub Actions
test-ubuntu-20.04-cpp-17Github Actions
test-ubuntu-20.04-cpp-bundledGithub Actions
test-ubuntu-20.04-cpp-thread-sanitizerGithub Actions
test-ubuntu-22.04-cppGithub Actions

@js8544

Copy link
Copy Markdown
ContributorAuthor

@pitrou@kou Looks like it's now working as expected. A fully green checklist. Travis and crossbow failures are unrelated.

@pitrou

Copy link
Copy Markdown
Member

Thanks a lot @js8544 !

@pitrou
pitrou merged commit 311fe3e into apache:masterSep 22, 2022
@ursabot

Copy link
Copy Markdown

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.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.41% ⬆️0.0%] test-mac-arm
[Failed ⬇️0.28% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.32% ⬆️0.04%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] 311fe3e8 ec2-t3-xlarge-us-east-2
[Finished] 311fe3e8 test-mac-arm
[Failed] 311fe3e8 ursa-i9-9960x
[Finished] 311fe3e8 ursa-thinkcentre-m75q
[Finished] 43e66a92 ec2-t3-xlarge-us-east-2
[Finished] 43e66a92 test-mac-arm
[Failed] 43e66a92 ursa-i9-9960x
[Finished] 43e66a92 ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

kou pushed a commit that referenced this pull request Sep 27, 2022
…14236)
Same problem as #14187 (comment)
Authored-by: Jin Shang <shangjin1997@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
zagto pushed a commit to zagto/arrow that referenced this pull request Oct 7, 2022
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-14363https://issues.apache.org/jira/browse/ARROW-17728https://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>
@js8544
js8544 deleted the jinshang/gandiva/fix_llvm15_deprecated_header branch October 11, 2022 08:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@js8544@pitrou@kou@ursabot