diff --git a/src/backend/codegen/codegen_interface.cc b/src/backend/codegen/codegen_interface.cc index 3497ce3e3dc6496d581836697e436f609358d4bd..a9b5cee3c2b8f1dc99ce6d90951bd4c30ca66975 100644 --- a/src/backend/codegen/codegen_interface.cc +++ b/src/backend/codegen/codegen_interface.cc @@ -11,6 +11,8 @@ //--------------------------------------------------------------------------- #include "codegen/codegen_interface.h" +#include + using gpcodegen::CodegenInterface; // Initalization of unique counter diff --git a/src/backend/codegen/codegen_manager.cc b/src/backend/codegen/codegen_manager.cc index e01159e111eca0b553aa5f629d25423a08d4b657..b84d8de798af092ffec6f123dffeae1007ff5de1 100644 --- a/src/backend/codegen/codegen_manager.cc +++ b/src/backend/codegen/codegen_manager.cc @@ -9,36 +9,19 @@ // Implementation of a code generator manager // //--------------------------------------------------------------------------- - -extern "C" { -#include -} - -#include +#include +#include +#include #include +#include -#include "codegen/utils/clang_compiler.h" -#include "codegen/utils/utility.h" -#include "codegen/utils/instance_method_wrappers.h" -#include "codegen/utils/gp_codegen_utils.h" -#include "codegen/codegen_interface.h" +#include "llvm/Support/raw_ostream.h" +#include "codegen/codegen_interface.h" #include "codegen/codegen_manager.h" -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/APInt.h" -#include "llvm/IR/Argument.h" -#include "llvm/IR/BasicBlock.h" -#include "llvm/IR/Constant.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Instruction.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" -#include "llvm/IR/Type.h" -#include "llvm/IR/Value.h" -#include "llvm/IR/Verifier.h" -#include "llvm/Support/Casting.h" +#include "codegen/codegen_wrapper.h" +#include "codegen/utils/codegen_utils.h" +#include "codegen/utils/gp_codegen_utils.h" using gpcodegen::CodegenManager; diff --git a/src/backend/codegen/codegen_wrapper.cc b/src/backend/codegen/codegen_wrapper.cc index 8b4fa5f6ea4e9dde769171645c6609cb4fdc7acf..f946d423076f50d3bfb7033265f8dc6578a83e9e 100644 --- a/src/backend/codegen/codegen_wrapper.cc +++ b/src/backend/codegen/codegen_wrapper.cc @@ -11,10 +11,16 @@ //--------------------------------------------------------------------------- #include "codegen/codegen_wrapper.h" + +#include +#include +#include + +#include "codegen/base_codegen.h" #include "codegen/codegen_manager.h" -#include "codegen/exec_variable_list_codegen.h" #include "codegen/exec_eval_expr_codegen.h" - +#include "codegen/exec_variable_list_codegen.h" +#include "codegen/expr_tree_generator.h" #include "codegen/utils/gp_codegen_utils.h" extern "C" { diff --git a/src/backend/codegen/const_expr_tree_generator.cc b/src/backend/codegen/const_expr_tree_generator.cc index ade290a834a20577455499b6b24919d50ef31fe3..f9157ded7a775b96f5a13ca267d38db08d15f5f6 100644 --- a/src/backend/codegen/const_expr_tree_generator.cc +++ b/src/backend/codegen/const_expr_tree_generator.cc @@ -10,15 +10,26 @@ // //--------------------------------------------------------------------------- -#include "codegen/expr_tree_generator.h" +#include +#include + #include "codegen/const_expr_tree_generator.h" +#include "codegen/expr_tree_generator.h" +#include "codegen/utils/gp_codegen_utils.h" + +#include "llvm/IR/Constant.h" -#include "llvm/IR/Value.h" extern "C" { #include "postgres.h" // NOLINT(build/include) #include "nodes/execnodes.h" +#include "nodes/nodes.h" +#include "nodes/primnodes.h" } +namespace llvm { +class Value; +} // namespace llvm + using gpcodegen::ConstExprTreeGenerator; using gpcodegen::ExprTreeGenerator; diff --git a/src/backend/codegen/exec_eval_expr_codegen.cc b/src/backend/codegen/exec_eval_expr_codegen.cc index 7cd6442a20773508cdaac6760f4f1ee9c98de0be..e0b4b871511851075c67bdc649e9652ec6b4b2b2 100644 --- a/src/backend/codegen/exec_eval_expr_codegen.cc +++ b/src/backend/codegen/exec_eval_expr_codegen.cc @@ -9,40 +9,40 @@ // Generates code for ExecEvalExpr function. // //--------------------------------------------------------------------------- -#include +#include +#include #include +#include #include -#include "codegen/slot_getattr_codegen.h" +#include "codegen/base_codegen.h" +#include "codegen/codegen_wrapper.h" #include "codegen/exec_eval_expr_codegen.h" #include "codegen/expr_tree_generator.h" #include "codegen/op_expr_tree_generator.h" -#include "codegen/utils/clang_compiler.h" +#include "codegen/slot_getattr_codegen.h" +#include "codegen/utils/gp_codegen_utils.h" #include "codegen/utils/utility.h" -#include "codegen/utils/codegen_utils.h" -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/APInt.h" #include "llvm/IR/Argument.h" -#include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constant.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Instruction.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" -#include "llvm/IR/Type.h" -#include "llvm/IR/Value.h" -#include "llvm/IR/Verifier.h" -#include "llvm/Support/Casting.h" +#include "llvm/IR/IRBuilder.h" + extern "C" { #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" #include "nodes/execnodes.h" +#include "utils/elog.h" +#include "executor/tuptable.h" +#include "nodes/nodes.h" } +namespace llvm { +class BasicBlock; +class Function; +class Value; +} // namespace llvm + using gpcodegen::ExecEvalExprCodegen; using gpcodegen::SlotGetAttrCodegen; diff --git a/src/backend/codegen/exec_variable_list_codegen.cc b/src/backend/codegen/exec_variable_list_codegen.cc index 4bc002ff2e52b22c70cfb0c61a623ec4c49cd750..a7e7d67f376597ce482c13dfaa9268e7824bfac1 100644 --- a/src/backend/codegen/exec_variable_list_codegen.cc +++ b/src/backend/codegen/exec_variable_list_codegen.cc @@ -11,41 +11,41 @@ //--------------------------------------------------------------------------- +#include +#include #include -#include #include +#include + +#include "codegen/base_codegen.h" +#include "codegen/codegen_wrapper.h" #include "codegen/exec_variable_list_codegen.h" #include "codegen/slot_getattr_codegen.h" -#include "codegen/utils/clang_compiler.h" -#include "codegen/utils/utility.h" #include "codegen/utils/gp_codegen_utils.h" -#include "codegen/base_codegen.h" +#include "codegen/utils/utility.h" -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/APInt.h" #include "llvm/IR/Argument.h" -#include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constant.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Instruction.h" +#include "llvm/IR/IRBuilder.h" #include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" -#include "llvm/IR/Type.h" -#include "llvm/IR/Value.h" -#include "llvm/IR/Verifier.h" -#include "llvm/Support/Casting.h" + extern "C" { #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" -#include "access/htup.h" -#include "nodes/execnodes.h" #include "executor/tuptable.h" +#include "nodes/execnodes.h" +#include "utils/elog.h" +#include "access/tupdesc.h" +#include "nodes/pg_list.h" } +namespace llvm { +class BasicBlock; +class Function; +class Value; +} // namespace llvm + using gpcodegen::ExecVariableListCodegen; using gpcodegen::SlotGetAttrCodegen; @@ -67,11 +67,11 @@ ExecVariableListCodegen::ExecVariableListCodegen bool ExecVariableListCodegen::GenerateExecVariableList( gpcodegen::GpCodegenUtils* codegen_utils) { - assert(NULL != codegen_utils); - static_assert(sizeof(Datum) == sizeof(int64), + assert(nullptr != codegen_utils); + static_assert(sizeof(Datum) == sizeof(int64_t), "sizeof(Datum) doesn't match sizeof(int64)"); - if ( NULL == proj_info_->pi_varSlotOffsets ) { + if ( nullptr == proj_info_->pi_varSlotOffsets ) { elog(DEBUG1, "Cannot codegen ExecVariableList because varSlotOffsets are null"); return false; diff --git a/src/backend/codegen/expr_tree_generator.cc b/src/backend/codegen/expr_tree_generator.cc index e8ab532d7b81112967e0ecebd120bd6b96dcc085..b0fe58071a57683c15044169ddbe96d1fd3f3e30 100644 --- a/src/backend/codegen/expr_tree_generator.cc +++ b/src/backend/codegen/expr_tree_generator.cc @@ -10,17 +10,18 @@ // //--------------------------------------------------------------------------- #include +#include + +#include "codegen/const_expr_tree_generator.h" #include "codegen/expr_tree_generator.h" #include "codegen/op_expr_tree_generator.h" #include "codegen/var_expr_tree_generator.h" -#include "codegen/const_expr_tree_generator.h" - -#include "llvm/IR/Value.h" extern "C" { #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" #include "nodes/execnodes.h" +#include "utils/elog.h" +#include "nodes/nodes.h" } using gpcodegen::ExprTreeGenerator; diff --git a/src/backend/codegen/include/codegen/pg_arith_func_generator.h b/src/backend/codegen/include/codegen/pg_arith_func_generator.h index e9e3d86516fa00f4a96edce77007f884afe1d9f8..b50a901537a21b06b22813e8c1f0116445ee2b49 100644 --- a/src/backend/codegen/include/codegen/pg_arith_func_generator.h +++ b/src/backend/codegen/include/codegen/pg_arith_func_generator.h @@ -17,6 +17,7 @@ #include #include "codegen/utils/gp_codegen_utils.h" +#include "codegen/pg_func_generator_interface.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Value.h" @@ -27,6 +28,7 @@ namespace gpcodegen { * @{ */ + namespace gpcodegen_ArithOp_detail { // ArithOpOverFlowErrorMsg has various template specializations to // handle error message for different C++ types. The specialized versions diff --git a/src/backend/codegen/include/codegen/pg_date_func_generator.h b/src/backend/codegen/include/codegen/pg_date_func_generator.h index 6071180881929dc22f34c3082e5bf388fa60db09..b36f702e0b5c2605043a7fcb90194d3436c4a2a2 100644 --- a/src/backend/codegen/include/codegen/pg_date_func_generator.h +++ b/src/backend/codegen/include/codegen/pg_date_func_generator.h @@ -12,27 +12,35 @@ #ifndef GPCODEGEN_PG_DATE_FUNC_GENERATOR_H_ // NOLINT(build/header_guard) #define GPCODEGEN_PG_DATE_FUNC_GENERATOR_H_ +#include #include #include -#include -#include "codegen/utils/codegen_utils.h" #include "codegen/base_codegen.h" #include "codegen/pg_func_generator_interface.h" +#include "codegen/utils/codegen_utils.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Value.h" +namespace llvm { +class Value; +} // namespace llvm + namespace gpcodegen { /** \addtogroup gpcodegen * @{ */ +class GpCodegenUtils; +struct PGFuncGeneratorInfo; + /** * @brief Class with Static member function to generate code for date * operators. **/ + class PGDateFuncGenerator { public: /** diff --git a/src/backend/codegen/op_expr_tree_generator.cc b/src/backend/codegen/op_expr_tree_generator.cc index f883303ff8354a68f92b4de0360381f3028fdbed..c41a7896c55f5877600038e48b0fe0b329515dd0 100644 --- a/src/backend/codegen/op_expr_tree_generator.cc +++ b/src/backend/codegen/op_expr_tree_generator.cc @@ -10,21 +10,38 @@ // //--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include + #include "codegen/expr_tree_generator.h" #include "codegen/op_expr_tree_generator.h" +#include "codegen/pg_func_generator.h" +#include "codegen/pg_func_generator_interface.h" +#include "codegen/utils/gp_codegen_utils.h" +#include "codegen/pg_arith_func_generator.h" +#include "codegen/pg_date_func_generator.h" -#include "include/codegen/pg_arith_func_generator.h" -#include "include/codegen/pg_date_func_generator.h" - -#include "llvm/IR/Value.h" +#include "llvm/IR/IRBuilder.h" extern "C" { -#include "c.h" // NOLINT(build/include) #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" +#include "c.h" // NOLINT(build/include) #include "nodes/execnodes.h" +#include "utils/elog.h" +#include "nodes/nodes.h" +#include "nodes/pg_list.h" +#include "nodes/primnodes.h" } +namespace llvm { +class Value; +} // namespace llvm + using gpcodegen::OpExprTreeGenerator; using gpcodegen::ExprTreeGenerator; using gpcodegen::GpCodegenUtils; diff --git a/src/backend/codegen/pg_date_func_generator.cc b/src/backend/codegen/pg_date_func_generator.cc index 2f5b317d9743b2fb941c244af91a3cd21582a251..4a4b0130efe32bb59d1f4cc1b05878e401de4c7c 100644 --- a/src/backend/codegen/pg_date_func_generator.cc +++ b/src/backend/codegen/pg_date_func_generator.cc @@ -10,20 +10,29 @@ // //--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "codegen/pg_arith_func_generator.h" #include "codegen/pg_date_func_generator.h" +#include "codegen/pg_func_generator_interface.h" #include "codegen/utils/gp_codegen_utils.h" -#include "codegen/pg_arith_func_generator.h" + +#include "llvm/IR/Constant.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/Value.h" extern "C" { #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" -#include "utils/date.h" +#include "c.h" // NOLINT(build/include) #include "utils/timestamp.h" } using gpcodegen::GpCodegenUtils; using gpcodegen::PGDateFuncGenerator; +using gpcodegen::PGFuncGeneratorInfo; bool PGDateFuncGenerator::DateLETimestamp( gpcodegen::GpCodegenUtils* codegen_utils, diff --git a/src/backend/codegen/slot_getattr_codegen.cc b/src/backend/codegen/slot_getattr_codegen.cc index d5ced843d766b23ce0376c585fe85d872dfc8f37..49d81bd4c7e4c6211cd67d62d5f1a40c4c5803f0 100644 --- a/src/backend/codegen/slot_getattr_codegen.cc +++ b/src/backend/codegen/slot_getattr_codegen.cc @@ -9,43 +9,43 @@ // Contains slot_getattr generator // //--------------------------------------------------------------------------- - -#include -#include +#include +#include #include +#include "codegen/base_codegen.h" +#include "codegen/codegen_wrapper.h" #include "codegen/slot_getattr_codegen.h" -#include "codegen/utils/clang_compiler.h" -#include "codegen/utils/utility.h" #include "codegen/utils/gp_codegen_utils.h" -#include "codegen/base_codegen.h" +#include "codegen/utils/utility.h" -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/APInt.h" #include "llvm/IR/Argument.h" -#include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constant.h" -#include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/Instruction.h" +#include "llvm/IR/IRBuilder.h" #include "llvm/IR/Instructions.h" -#include "llvm/IR/Module.h" -#include "llvm/IR/Type.h" -#include "llvm/IR/Value.h" #include "llvm/IR/Verifier.h" -#include "llvm/Support/Casting.h" extern "C" { #include "postgres.h" // NOLINT(build/include) +#include "c.h" // NOLINT(build/include) +#include "executor/tuptable.h" #include "utils/elog.h" #include "access/htup.h" -#include "nodes/execnodes.h" -#include "executor/tuptable.h" +#include "access/memtup.h" +#include "access/tupdesc.h" +#include "access/tupmacs.h" +#include "catalog/pg_attribute.h" extern void slot_deform_tuple(TupleTableSlot* slot, int nattr); } +namespace llvm { +class BasicBlock; +class Value; +} // namespace llvm + + using gpcodegen::SlotGetAttrCodegen; // TODO(shardikar): Retire this GUC after performing experiments to find the diff --git a/src/backend/codegen/var_expr_tree_generator.cc b/src/backend/codegen/var_expr_tree_generator.cc index ed1ffe1821cee14461654472a589d01f43ca14e6..b7bb372579f30a00dcfb1dcd072d75341da850e3 100644 --- a/src/backend/codegen/var_expr_tree_generator.cc +++ b/src/backend/codegen/var_expr_tree_generator.cc @@ -9,20 +9,31 @@ // Object that generator code for variable expression. // //--------------------------------------------------------------------------- - +#include +#include #include +#include #include "codegen/expr_tree_generator.h" +#include "codegen/utils/gp_codegen_utils.h" #include "codegen/var_expr_tree_generator.h" -#include "llvm/IR/Value.h" +#include "llvm/IR/Constant.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/Instructions.h" extern "C" { #include "postgres.h" // NOLINT(build/include) -#include "utils/elog.h" #include "nodes/execnodes.h" +#include "executor/tuptable.h" +#include "nodes/nodes.h" +#include "nodes/primnodes.h" } +namespace llvm { +class Value; +} // namespace llvm + using gpcodegen::VarExprTreeGenerator; using gpcodegen::ExprTreeGenerator; using gpcodegen::GpCodegenUtils; @@ -60,7 +71,7 @@ bool VarExprTreeGenerator::GenerateCode(GpCodegenUtils* codegen_utils, // At code generation time, slot is NULL. // For that reason, we keep a double pointer to slot and at execution time // we load slot. - TupleTableSlot **ptr_to_slot_ptr = NULL; + TupleTableSlot **ptr_to_slot_ptr = nullptr; switch (var_expr->varno) { case INNER: /* get the tuple from the inner node */ ptr_to_slot_ptr = &gen_info.econtext->ecxt_innertuple; diff --git a/src/include/codegen/codegen_wrapper.h b/src/include/codegen/codegen_wrapper.h index 126b10d9393831e8cd4e83db84810b9ec69fb6e0..1dcf0e34efad37d911b40e0187ae4de2cc0a831b 100644 --- a/src/include/codegen/codegen_wrapper.h +++ b/src/include/codegen/codegen_wrapper.h @@ -12,6 +12,8 @@ #ifndef CODEGEN_WRAPPER_H_ #define CODEGEN_WRAPPER_H_ +#include + #include "pg_config.h" #include "c.h"