Files
openGauss-server/src/include/codegen/foreignscancodegen.h
2021-09-23 15:19:37 +08:00

71 lines
2.3 KiB
C++

/*
* Copyright (c) 2020 Huawei Technologies Co.,Ltd.
*
* openGauss is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* ---------------------------------------------------------------------------------------
*
* foreignscancodegen.h
*
*
*
* IDENTIFICATION
* src/include/codegen/foreignscancodegen.h
*
* ---------------------------------------------------------------------------------------
*/
#ifndef LLVM_FOREIGN_SCAN_H
#define LLVM_FOREIGN_SCAN_H
#include "codegen/gscodegen.h"
#include "optimizer/clauses.h"
#include "nodes/execnodes.h"
namespace dorado {
/*
* LlvmForeignScan class implements specific optimization by using LLVM.
* Just now, pushed down predicate is optimized by using LLVM.
*/
class ForeignScanCodeGen : public BaseObject {
public:
static bool ScanCodeGen(Expr* expr, PlanState* parent, void** jittedFunc);
/*
* Brief : Check whether operator is legal or not.
* Description : Just now, the follwing operator is legal.
* "=", "!=", ">", ">=", "<", "<=".
* These operator must act on the following data types.
* int2, int4, int8, float4, float8.
* Input : expr, the node to be checked.
* Output : None.
* Return Value : None.
* Notes : None.
*/
static bool IsJittableExpr(Expr* expr);
/*
* Brief : Build LLVM value by using node.
* Description :
* Input : node, the node to be used to create IR.
* llvm_args, the argument of IR functionto to be created.
* builder, a LlvmBuilder object.
* fname, function name.
* Output : None.
* Return Value : Retrun llvm::Value.
* Notes : None.
*/
static llvm::Value* buildConstValue(
Expr* node, llvm::Value* llvm_args[], GsCodeGen::LlvmBuilder& builder, StringInfo fname);
};
} // namespace dorado
#endif