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(