openGauss源码解析(142)

openGauss源码解析:执行器解析(35)

7.5.4 VecSortCodeGen类

VecSortCodeGen是为sort节点LLVM化定义的一个类,类中的接口声明在“codegen/vecsortcodegen.h”文件中,接口描述如表7-36所示。

表7-36 VecSortCodeGen接口汇总

接口名称

接口类型

职责描述

JittableCompareMultiColumn

API

判断sort node节点是否支持LLVM

CompareMultiColumnCodeGen

API

为CompareMultiColumn函数生成LLVM函数

CompareMultiColumnCodeGen_TOPN

API

在Top N sort场景下为CompareMultiColumn函数生成LLVM函数

bpcharcmpCodeGen_long(short)

API

为bpcharcmp函数生成LLVM函数

LLVMIRmemcmp_CMC_CodeGen

API

为memcmp函数生成LLVM函数

textcmpCodeGen

API

为text_cmp函数生成LLVM函数

numericcmpCodeGen

API

为numeric_cmp函数生成LLVM函数

JittableSortAggMatchKey

API

判断sort aggregation中match_key函数是否支持LLVM

SortAggMatchKeyCodeGen

API

为sort aggregation中match_key函数生成LLVM函数

SortAggBpchareqCodeGen

API

为Bpchareq函数生成LLVM函数

SortAggMemcmpCodeGen_long(short)

API

match_key中为memcmp函数生成LLVM函数

如果cosider_codegen为Ture,那么CompareMultiColumnCodeGen对sort节点进行LLVM化。此外如果父节点是Limit节点,那么还要继续通过CompareMultiColumnCodeGen_TOPN函数对sort节点进一步LLVM化。

if (consider_codegen) {

/* 根据行数判断是否使用codegen,如果使用则开始codegen */

jitted_comparecol = dorado::VecSortCodeGen::CompareMultiColumnCodeGen(sort_stat, use_prefetch); /* 为sort操作进行codegen */

if (jitted_comparecol != NULL) {

/* 如果生成了llvm函数则加到MCJIT LIST中 */

llvm_codegen->addFunctionToMCJit(jitted_comparecol, reinterpret_cast<void**>(&(sort_stat->jitted_CompareMultiColumn)));

}

Plan* plan_tree = estate->es_plannedstmt->planTree;

/* 如果sort节点包含“limit”父节点则继续调用相应codegen函数 */

bool has_topn = MatchLimitNode(node, plan_tree);

if (has_topn && (jitted_comparecol != NULL)) {

jitted_comparecol_topn= dorado::VecSortCodeGen::CompareMultiColumnCodeGen_TOPN(sort_stat,

use_prefetch);

if (jitted_comparecol_topn != NULL) {

llvm_codegen->addFunctionToMCJit(jitted_comparecol_topn, reinterpret_cast<void**>(&(sort_stat->jitted_CompareMultiColumn_TOPN)));

}

}

}

在调用时,与其他类一样,首先判断节点是否LLVM化,没有LLVM化则进行非codegen的处理。

if (jitted_CompareMultiColumn) /* 如果有codegen则使用jit */

compareMultiColumn = ((LLVM_CMC_func)(jitted_CompareMultiColumn));

else

compareMultiColumn = CompareMultiColumn<false>

posted @ 2024-04-30 11:04  openGauss-bot  阅读(3)  评论(0编辑  收藏  举报