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 <[email protected]> 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 <[email protected]> Tested-by: Impala Public Jenkins <[email protected]> --- 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(
