Skip to content

Commit a722526

Browse files
committed
llvmQual: use defined constants for field indices in GEPs
This commit removes "magic numbers" used as field indices in GEPs by defining them as constants at the top of the file.
1 parent f48ece8 commit a722526

File tree

1 file changed

+84
-27
lines changed

1 file changed

+84
-27
lines changed

src/backend/executor/llvmQual.c

+84-27
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,23 @@ typedef struct LLVMTupleAttr {
7878
#define EXPRCONTEXT_SCANTUPLE_FIELDNO 1
7979
#define EXPRCONTEXT_INNERTUPLE_FIELDNO 2
8080
#define EXPRCONTEXT_OUTERTUPLE_FIELDNO 3
81+
#define FUNCTIONCALLINFODATA_FLINFO_FIELDNO 0
82+
#define FUNCTIONCALLINFODATA_CONTEXT_FIELDNO 1
83+
#define FUNCTIONCALLINFODATA_RESULTINFO_FIELDNO 2
84+
#define FUNCTIONCALLINFODATA_FNCOLLATION_FIELDNO 3
85+
#define FUNCTIONCALLINFODATA_ISNULL_FIELDNO 4
86+
#define FUNCTIONCALLINFODATA_NARGS_FIELDNO 5
87+
#define FUNCTIONCALLINFODATA_ARG_FIELDNO 6
88+
#define FUNCTIONCALLINFODATA_ARGNULL_FIELDNO 7
89+
#define HEAPTUPLEDATA_DATA_FIELDNO 3
90+
#define RETURNSETINFO_TYPE_FIELDNO 0
91+
#define RETURNSETINFO_ECONTEXT_FIELDNO 1
92+
#define RETURNSETINFO_EXPECTEDDESC_FIELDNO 2
93+
#define RETURNSETINFO_ALLOWEDMODES_FIELDNO 3
94+
#define RETURNSETINFO_RETURNMODE_FIELDNO 4
95+
#define RETURNSETINFO_ISDONE_FIELDNO 5
96+
#define RETURNSETINFO_SETRESULT_FIELDNO 6
97+
#define RETURNSETINFO_SETDESC_FIELDNO 7
8198
#define TUPLETABLESLOT_TUPLE_FIELDNO 5
8299
#define TUPLETABLESLOT_TUPLEDESCRIPTOR_FIELDNO 6
83100
#define TUPLETABLESLOT_VALUES_FIELDNO 10
@@ -273,13 +290,21 @@ GenerateInitFCInfo(LLVMBuilderRef builder, FunctionCallInfo fcinfo,
273290
nargs_ptr, argnulls;
274291

275292
context_ptr =
276-
LLVMBuildStructGEP(builder, fcinfo_llvm, 1, "context_ptr");
293+
LLVMBuildStructGEP(builder, fcinfo_llvm,
294+
FUNCTIONCALLINFODATA_CONTEXT_FIELDNO,
295+
"context_ptr");
277296
resultinfo_ptr =
278-
LLVMBuildStructGEP(builder, fcinfo_llvm, 2, "resultinfo_ptr");
297+
LLVMBuildStructGEP(builder, fcinfo_llvm,
298+
FUNCTIONCALLINFODATA_RESULTINFO_FIELDNO,
299+
"resultinfo_ptr");
279300
fncollation_ptr =
280-
LLVMBuildStructGEP(builder, fcinfo_llvm, 3, "fncollation_ptr");
301+
LLVMBuildStructGEP(builder, fcinfo_llvm,
302+
FUNCTIONCALLINFODATA_FNCOLLATION_FIELDNO,
303+
"fncollation_ptr");
281304
nargs_ptr =
282-
LLVMBuildStructGEP(builder, fcinfo_llvm, 5, "nargs_ptr");
305+
LLVMBuildStructGEP(builder, fcinfo_llvm,
306+
FUNCTIONCALLINFODATA_NARGS_FIELDNO,
307+
"nargs_ptr");
283308

284309
LLVMBuildStore(builder,
285310
ConstPointer(
@@ -300,7 +325,9 @@ GenerateInitFCInfo(LLVMBuilderRef builder, FunctionCallInfo fcinfo,
300325
* Zero-initialize `argnull`.
301326
*/
302327
StaticAssertStmt(sizeof(bool) == sizeof(int8_t), "bool is 8-bit");
303-
argnulls = LLVMBuildStructGEP(builder, fcinfo_llvm, 7, "argnull_ptr");
328+
argnulls = LLVMBuildStructGEP(builder, fcinfo_llvm,
329+
FUNCTIONCALLINFODATA_ARG_FIELDNO,
330+
"argnull_ptr");
304331
argnulls = LLVMBuildStructGEP(builder, argnulls, 0, "argnull_ptr");
305332
GenerateMemSet(builder, 1, argnulls,
306333
LLVMConstNull(LLVMInt8Type()),
@@ -379,10 +406,13 @@ GenerateFunctionCallNCollNull(LLVMBuilderRef builder, FunctionCallInfo fcinfo,
379406
LLVMValueRef functionRef = define_llvm_pg_function(
380407
builder, fcinfo->flinfo);
381408
LLVMValueRef flinfo_ptr = LLVMBuildStructGEP(
382-
builder, fcinfo_llvm, 0, "flinfo_ptr");
383-
LLVMValueRef args = LLVMBuildStructGEP(builder, fcinfo_llvm, 6, "args");
409+
builder, fcinfo_llvm, FUNCTIONCALLINFODATA_FLINFO_FIELDNO,
410+
"flinfo_ptr");
411+
LLVMValueRef args = LLVMBuildStructGEP(
412+
builder, fcinfo_llvm, FUNCTIONCALLINFODATA_ARG_FIELDNO, "args");
384413
LLVMValueRef argnulls = LLVMBuildStructGEP(
385-
builder, fcinfo_llvm, 7, "argnulls");
414+
builder, fcinfo_llvm, FUNCTIONCALLINFODATA_ARGNULL_FIELDNO,
415+
"argnulls");
386416
LLVMTypeRef fcinfo_type;
387417
LLVMValueRef resultinfo_ptr, rsinfo_isDone_ptr;
388418
int arg_index;
@@ -398,7 +428,9 @@ GenerateFunctionCallNCollNull(LLVMBuilderRef builder, FunctionCallInfo fcinfo,
398428
LLVMBuildStore(builder, attr[arg_index].isNull, argnull_ptr);
399429
}
400430

401-
isNull_ptr = LLVMBuildStructGEP(builder, fcinfo_llvm, 4, "isNull_ptr");
431+
isNull_ptr = LLVMBuildStructGEP(
432+
builder, fcinfo_llvm, FUNCTIONCALLINFODATA_ISNULL_FIELDNO,
433+
"isNull_ptr");
402434
LLVMBuildStore(builder, LLVMConstNull(LLVMInt8Type()), isNull_ptr);
403435

404436
LLVMBuildStore(builder,
@@ -416,13 +448,16 @@ GenerateFunctionCallNCollNull(LLVMBuilderRef builder, FunctionCallInfo fcinfo,
416448
if (retSet)
417449
{
418450
resultinfo_ptr =
419-
LLVMBuildStructGEP(builder, fcinfo_llvm, 2, "resultinfo_ptr");
451+
LLVMBuildStructGEP(builder, fcinfo_llvm,
452+
FUNCTIONCALLINFODATA_RESULTINFO_FIELDNO,
453+
"resultinfo_ptr");
420454
resultinfo_ptr = LLVMBuildBitCast(builder,
421455
LLVMBuildLoad(builder, resultinfo_ptr, "resultinfo"),
422456
LLVMPointerType(BackendStructType(ReturnSetInfo), 0),
423457
"resultinfo");
424458
rsinfo_isDone_ptr =
425-
LLVMBuildStructGEP(builder, resultinfo_ptr, 5, "&isDone");
459+
LLVMBuildStructGEP(builder, resultinfo_ptr,
460+
RETURNSETINFO_ISDONE_FIELDNO, "&isDone");
426461
}
427462

428463
LLVMGetParamTypes(LLVMGetElementType(LLVMTypeOf(functionRef)),
@@ -451,26 +486,44 @@ FCInfoLLVMAddRetSet(LLVMBuilderRef builder, ExprContext* econtext,
451486
TupleDesc expectedDesc, LLVMValueRef fcinfo_llvm)
452487
{
453488
LLVMValueRef resultinfo_ptr =
454-
LLVMBuildStructGEP(builder, fcinfo_llvm, 2, "resultinfo_ptr");
489+
LLVMBuildStructGEP(builder, fcinfo_llvm,
490+
FUNCTIONCALLINFODATA_RESULTINFO_FIELDNO,
491+
"resultinfo_ptr");
455492
LLVMTypeRef rsinfoType = BackendStructType(ReturnSetInfo);
456493
LLVMValueRef rsinfo_ptr = LLVMBuildAlloca(builder, rsinfoType, "rsinfo");
457494
LLVMValueRef ret = rsinfo_ptr;
458495
LLVMValueRef rsinfo_type_ptr =
459-
LLVMBuildStructGEP(builder, rsinfo_ptr, 0, "&rsinfo->type");
496+
LLVMBuildStructGEP(builder, rsinfo_ptr,
497+
RETURNSETINFO_TYPE_FIELDNO,
498+
"&rsinfo->type");
460499
LLVMValueRef rsinfo_econtext_ptr =
461-
LLVMBuildStructGEP(builder, rsinfo_ptr, 1, "&rsinfo->econtext");
500+
LLVMBuildStructGEP(builder, rsinfo_ptr,
501+
RETURNSETINFO_ECONTEXT_FIELDNO,
502+
"&rsinfo->econtext");
462503
LLVMValueRef rsinfo_expectedDesc_ptr =
463-
LLVMBuildStructGEP(builder, rsinfo_ptr, 2, "&rsinfo->expectedDesc");
504+
LLVMBuildStructGEP(builder, rsinfo_ptr,
505+
RETURNSETINFO_EXPECTEDDESC_FIELDNO,
506+
"&rsinfo->expectedDesc");
464507
LLVMValueRef rsinfo_allowedModes_ptr =
465-
LLVMBuildStructGEP(builder, rsinfo_ptr, 3, "&rsinfo->allowedModes");
508+
LLVMBuildStructGEP(builder, rsinfo_ptr,
509+
RETURNSETINFO_ALLOWEDMODES_FIELDNO,
510+
"&rsinfo->allowedModes");
466511
LLVMValueRef rsinfo_returnMode_ptr =
467-
LLVMBuildStructGEP(builder, rsinfo_ptr, 4, "&rsinfo->returnMode");
512+
LLVMBuildStructGEP(builder, rsinfo_ptr,
513+
RETURNSETINFO_RETURNMODE_FIELDNO,
514+
"&rsinfo->returnMode");
468515
LLVMValueRef rsinfo_isDone_ptr =
469-
LLVMBuildStructGEP(builder, rsinfo_ptr, 5, "&rsinfo->isDone");
516+
LLVMBuildStructGEP(builder, rsinfo_ptr,
517+
RETURNSETINFO_ISDONE_FIELDNO,
518+
"&rsinfo->isDone");
470519
LLVMValueRef rsinfo_setResult_ptr =
471-
LLVMBuildStructGEP(builder, rsinfo_ptr, 6, "&rsinfo->setResult");
520+
LLVMBuildStructGEP(builder, rsinfo_ptr,
521+
RETURNSETINFO_SETRESULT_FIELDNO,
522+
"&rsinfo->setResult");
472523
LLVMValueRef rsinfo_setDesc_ptr =
473-
LLVMBuildStructGEP(builder, rsinfo_ptr, 7, "&rsinfo->setDesc");
524+
LLVMBuildStructGEP(builder, rsinfo_ptr,
525+
RETURNSETINFO_SETDESC_FIELDNO,
526+
"&rsinfo->setDesc");
474527

475528
LLVMBuildStore(builder, LLVMConstInt(
476529
LLVMInt32Type(), T_ReturnSetInfo, false), rsinfo_type_ptr);
@@ -1047,7 +1100,8 @@ GenerateExpr(LLVMBuilderRef builder,
10471100
builder, define_heap_form_tuple, heap_form_tuple_args, 3);
10481101

10491102
/* HeapTupleGetDatum */
1050-
t_data = LLVMBuildStructGEP(builder, tuple, 3, "t_data_ptr");
1103+
t_data = LLVMBuildStructGEP(
1104+
builder, tuple, HEAPTUPLEDATA_DATA_FIELDNO, "t_data_ptr");
10511105
t_data = LLVMBuildLoad(builder, t_data, "t_data");
10521106
result.value = GenerateCallBackend(
10531107
builder, define_HeapTupleHeaderGetDatum, &t_data, 1);
@@ -1310,8 +1364,9 @@ GenerateExpr(LLVMBuilderRef builder,
13101364
BackendStructType(TupleTableSlot), 0), 0),
13111365
&fexprstate->funcResultSlot);
13121366
LLVMValueRef rsinfo_returnMode_ptr =
1313-
LLVMBuildStructGEP(builder, rsinfo_ptr, 4,
1314-
"&rsinfo->returnMode");
1367+
LLVMBuildStructGEP(builder, rsinfo_ptr,
1368+
RETURNSETINFO_RETURNMODE_FIELDNO,
1369+
"&rsinfo->returnMode");
13151370
LLVMValueRef returnMode = LLVMBuildLoad(
13161371
builder, rsinfo_returnMode_ptr, "rsinfo->returnMode");
13171372
LLVMValueRef cond = LLVMBuildICmp(builder, LLVMIntEQ, returnMode,
@@ -1341,8 +1396,9 @@ GenerateExpr(LLVMBuilderRef builder,
13411396
LLVMAddIncoming(result.isDone, &end_llvm,
13421397
&materialize_bb, 1);
13431398
rsinfo_setResult_ptr =
1344-
LLVMBuildStructGEP(builder, rsinfo_ptr, 6,
1345-
"&rsinfo->setResult");
1399+
LLVMBuildStructGEP(builder, rsinfo_ptr,
1400+
RETURNSETINFO_SETRESULT_FIELDNO,
1401+
"&rsinfo->setResult");
13461402
setResult = LLVMBuildLoad(
13471403
builder, rsinfo_setResult_ptr, "rsinfo->setResult");
13481404

@@ -1354,8 +1410,9 @@ GenerateExpr(LLVMBuilderRef builder,
13541410
LLVMPositionBuilderAtEnd(builder, restart_bb);
13551411
LLVMBuildStore(builder, setResult, funcResultStore_ptr);
13561412
rsinfo_setDesc_ptr =
1357-
LLVMBuildStructGEP(builder, rsinfo_ptr, 7,
1358-
"&rsinfo->setDesc");
1413+
LLVMBuildStructGEP(builder, rsinfo_ptr,
1414+
RETURNSETINFO_SETDESC_FIELDNO,
1415+
"&rsinfo->setDesc");
13591416
setDesc = LLVMBuildLoad(
13601417
builder, rsinfo_setDesc_ptr, "rsinfo->setDesc");
13611418
if (fexprstate->funcResultDesc)

0 commit comments

Comments
 (0)