You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by st...@apache.org on 2023/08/09 23:43:08 UTC
[impala] 02/02: IMPALA-12314: (Addendum) Fix building on aarch64
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
commit 4a8701925b1939a066cb3d0a5cfd7d8f36ad05ed
Author: Michael Smith <mi...@apache.org>
AuthorDate: Tue Aug 8 21:26:38 2023 +0000
IMPALA-12314: (Addendum) Fix building on aarch64
Change-Id: Ie7223b82c606c91f98edbf583dfab2f9fe7ddbfd
Reviewed-on: http://gerrit.cloudera.org:8080/20333
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
be/src/codegen/CMakeLists.txt | 6 +++---
be/src/codegen/llvm-codegen.cc | 32 +++++++++++++-------------------
2 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/be/src/codegen/CMakeLists.txt b/be/src/codegen/CMakeLists.txt
index 4c5f497bd..0026601ec 100644
--- a/be/src/codegen/CMakeLists.txt
+++ b/be/src/codegen/CMakeLists.txt
@@ -65,16 +65,16 @@ add_custom_target(gen_ir_descriptions ALL DEPENDS ${IR_DESC_GEN_OUTPUT})
set(IR_INPUT_FILES impala-ir.cc)
-function(COMPILE_TO_IR_C_ARRAY IR_C_FILE VARNAME OPT PLATFORM_SPECIFIC)
+function(COMPILE_TO_IR_C_ARRAY IR_C_FILE VARNAME)
# Run the clang compiler to generate IR. Then run the LLVM opt tool to apply specific
# optimisations. We need to compile to IR several times for different optimization settings
- # and legacy AVX support.
+ # and legacy AVX support. Additional args (ARGN) are passed to clang as compiler flags.
get_filename_component(BASE_NAME ${IR_C_FILE} NAME_WE)
set(IR_OUTPUT_FILE "${LLVM_IR_OUTPUT_DIRECTORY}/${BASE_NAME}.bc")
set(IR_TMP_OUTPUT_FILE "${LLVM_IR_OUTPUT_DIRECTORY}/${BASE_NAME}-tmp.bc")
add_custom_command(
OUTPUT ${IR_OUTPUT_FILE}
- COMMAND ${LLVM_CLANG_EXECUTABLE} ${CLANG_IR_CXX_FLAGS} ${OPT} ${PLATFORM_SPECIFIC}
+ COMMAND ${LLVM_CLANG_EXECUTABLE} ${CLANG_IR_CXX_FLAGS} ${ARGN}
${CLANG_INCLUDE_FLAGS} ${IR_INPUT_FILES} -o ${IR_TMP_OUTPUT_FILE}
COMMAND ${LLVM_OPT_EXECUTABLE} ${LLVM_OPT_IR_FLAGS} < ${IR_TMP_OUTPUT_FILE} > ${IR_OUTPUT_FILE}
COMMAND rm ${IR_TMP_OUTPUT_FILE}
diff --git a/be/src/codegen/llvm-codegen.cc b/be/src/codegen/llvm-codegen.cc
index 5e2f8be24..ac523da9d 100644
--- a/be/src/codegen/llvm-codegen.cc
+++ b/be/src/codegen/llvm-codegen.cc
@@ -272,8 +272,19 @@ Status LlvmCodeGen::CreateFromMemory(FragmentState* state, ObjectPool* pool,
SCOPED_THREAD_COUNTER_MEASUREMENT((*codegen)->llvm_thread_counters());
llvm::StringRef module_ir;
- string module_name;
-
+ string module_name = "Impala IR";
+ if (FLAGS_llvm_ir_opt == "O1") {
+ module_ir = llvm::StringRef(
+ reinterpret_cast<const char*>(impala_llvm_o1_ir), impala_llvm_o1_ir_len);
+ } else if (FLAGS_llvm_ir_opt == "O2") {
+ module_ir = llvm::StringRef(
+ reinterpret_cast<const char*>(impala_llvm_o2_ir), impala_llvm_o2_ir_len);
+ } else if (FLAGS_llvm_ir_opt == "Os") {
+ module_ir = llvm::StringRef(
+ reinterpret_cast<const char*>(impala_llvm_os_ir), impala_llvm_os_ir_len);
+ } else {
+ CHECK(false) << "llvm_ir_opt flag invalid; try O1, O2, or Os.";
+ }
#if __x86_64__
// By default, Impala now requires AVX2 support, but the enable_legacy_avx_support
// flag can allow running on AVX machines. The minimum requirement must have already
@@ -281,18 +292,6 @@ Status LlvmCodeGen::CreateFromMemory(FragmentState* state, ObjectPool* pool,
// LLVM IR to use.
if (IsCPUFeatureEnabled(CpuInfo::AVX2)) {
// Use the default IR that supports AVX2
- if (FLAGS_llvm_ir_opt == "O1") {
- module_ir = llvm::StringRef(
- reinterpret_cast<const char*>(impala_llvm_o1_ir), impala_llvm_o1_ir_len);
- } else if (FLAGS_llvm_ir_opt == "O2") {
- module_ir = llvm::StringRef(
- reinterpret_cast<const char*>(impala_llvm_o2_ir), impala_llvm_o2_ir_len);
- } else if (FLAGS_llvm_ir_opt == "Os") {
- module_ir = llvm::StringRef(
- reinterpret_cast<const char*>(impala_llvm_os_ir), impala_llvm_os_ir_len);
- } else {
- CHECK(false) << "llvm_ir_opt flag invalid; try O1, O2, or Os.";
- }
module_name = "Impala IR with AVX2 support";
} else if (FLAGS_enable_legacy_avx_support && IsCPUFeatureEnabled(CpuInfo::AVX)) {
// If there is no AVX but legacy mode is enabled, use legacy IR with AVX support
@@ -304,11 +303,6 @@ Status LlvmCodeGen::CreateFromMemory(FragmentState* state, ObjectPool* pool,
// This should have been enforced earlier.
CHECK(false) << "CPU is missing AVX/AVX2 support";
}
-#else
- // Non-x86_64 always use the default IR
- module_ir = llvm::StringRef(
- reinterpret_cast<const char*>(impala_llvm_ir), impala_llvm_ir_len);
- module_name = "Impala IR";
#endif
unique_ptr<llvm::MemoryBuffer> module_ir_buf(