Created
December 15, 2019 10:14
-
-
Save masayuki038/ec46e8be9f2451eb7e94f6f6bf6e189c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ModuleID = '/var/lib/postgresql/12/main/1985.21.bc' | |
source_filename = "pg" | |
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-pc-linux-gnu" | |
%struct.ExprState = type { %struct.Node, i8, i8, i64, %struct.TupleTableSlot*, %struct.ExprEvalStep*, i64 (%struct.ExprState*, %struct.ExprContext*, i8*)*, %struct.Expr*, i8*, i32, i32, %struct.PlanState*, %struct.ParamListInfoData*, i64*, i8*, i64*, i8* } | |
%struct.Node = type { i32 } | |
%struct.TupleTableSlot = type { i32, i16, i16, %struct.TupleTableSlotOps*, %struct.TupleDescData*, i64*, i8*, %struct.MemoryContextData*, %struct.ItemPointerData, i32 } | |
%struct.TupleTableSlotOps = type { i64, void (%struct.TupleTableSlot*)*, void (%struct.TupleTableSlot*)*, void (%struct.TupleTableSlot*)*, {}*, i64 (%struct.TupleTableSlot*, i32, i8*)*, void (%struct.TupleTableSlot*)*, void (%struct.TupleTableSlot*, %struct.TupleTableSlot*)*, %struct.HeapTupleData* (%struct.TupleTableSlot*)*, %struct.MinimalTupleData* (%struct.TupleTableSlot*)*, %struct.HeapTupleData* (%struct.TupleTableSlot*)*, %struct.MinimalTupleData* (%struct.TupleTableSlot*)* } | |
%struct.HeapTupleData = type { i32, %struct.ItemPointerData, i32, %struct.HeapTupleHeaderData* } | |
%struct.HeapTupleHeaderData = type { %union.anon, %struct.ItemPointerData, i16, i16, i8, [0 x i8] } | |
%union.anon = type { %struct.HeapTupleFields } | |
%struct.HeapTupleFields = type { i32, i32, %union.anon.0 } | |
%union.anon.0 = type { i32 } | |
%struct.MinimalTupleData = type { i32, [6 x i8], i16, i16, i8, [0 x i8] } | |
%struct.TupleDescData = type { i32, i32, i32, i32, %struct.TupleConstr*, [0 x %struct.FormData_pg_attribute] } | |
%struct.TupleConstr = type { %struct.AttrDefault*, %struct.ConstrCheck*, %struct.AttrMissing*, i16, i16, i8, i8 } | |
%struct.AttrDefault = type { i16, i8* } | |
%struct.ConstrCheck = type { i8*, i8*, i8, i8 } | |
%struct.AttrMissing = type { i8, i64 } | |
%struct.FormData_pg_attribute = type { i32, %struct.nameData, i32, i32, i16, i16, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32 } | |
%struct.nameData = type { [64 x i8] } | |
%struct.MemoryContextData = type { i32, i8, i8, %struct.MemoryContextMethods*, %struct.MemoryContextData*, %struct.MemoryContextData*, %struct.MemoryContextData*, %struct.MemoryContextData*, i8*, i8*, %struct.MemoryContextCallback* } | |
%struct.MemoryContextMethods = type { i8* (%struct.MemoryContextData*, i64)*, void (%struct.MemoryContextData*, i8*)*, i8* (%struct.MemoryContextData*, i8*, i64)*, void (%struct.MemoryContextData*)*, void (%struct.MemoryContextData*)*, i64 (%struct.MemoryContextData*, i8*)*, i1 (%struct.MemoryContextData*)*, void (%struct.MemoryContextData*, void (%struct.MemoryContextData*, i8*, i8*)*, i8*, %struct.MemoryContextCounters*)* } | |
%struct.MemoryContextCounters = type { i64, i64, i64, i64 } | |
%struct.MemoryContextCallback = type { void (i8*)*, i8*, %struct.MemoryContextCallback* } | |
%struct.ItemPointerData = type { %struct.BlockIdData, i16 } | |
%struct.BlockIdData = type { i16, i16 } | |
%struct.ExprEvalStep = type { i64, i64*, i8*, %union.anon.1 } | |
%union.anon.1 = type { %struct.anon.25 } | |
%struct.anon.25 = type { i64*, i8*, i32, i32, %struct.FmgrInfo*, %struct.FunctionCallInfoBaseData* } | |
%struct.FmgrInfo = type { {}*, i32, i16, i8, i8, i8, i8*, %struct.MemoryContextData*, %struct.Node* } | |
%struct.FunctionCallInfoBaseData = type { %struct.FmgrInfo*, %struct.Node*, %struct.Node*, i32, i8, i16, [0 x %struct.NullableDatum] } | |
%struct.NullableDatum = type { i64, i8 } | |
%struct.Expr = type { i32 } | |
%struct.PlanState = type { i32, %struct.Plan*, %struct.EState*, %struct.TupleTableSlot* (%struct.PlanState*)*, %struct.TupleTableSlot* (%struct.PlanState*)*, %struct.Instrumentation*, %struct.WorkerInstrumentation*, %struct.SharedJitInstrumentation*, %struct.ExprState*, %struct.PlanState*, %struct.PlanState*, %struct.List*, %struct.List*, %struct.Bitmapset*, %struct.TupleDescData*, %struct.TupleTableSlot*, %struct.ExprContext*, %struct.ProjectionInfo*, %struct.TupleDescData*, %struct.TupleTableSlotOps*, %struct.TupleTableSlotOps*, %struct.TupleTableSlotOps*, %struct.TupleTableSlotOps*, i8, i8, i8, i8, i8, i8, i8, i8 } | |
%struct.Plan = type { i32, double, double, double, i32, i8, i8, i32, %struct.List*, %struct.List*, %struct.Plan*, %struct.Plan*, %struct.List*, %struct.Bitmapset*, %struct.Bitmapset* } | |
%struct.EState = type { i32, i32, %struct.SnapshotData*, %struct.SnapshotData*, %struct.List*, %struct.RangeTblEntry**, i32, %struct.RelationData**, %struct.ExecRowMark**, %struct.PlannedStmt*, i8*, %struct.JunkFilter*, i32, %struct.ResultRelInfo*, i32, %struct.ResultRelInfo*, %struct.ResultRelInfo*, i32, %struct.PartitionDirectoryData*, %struct.List*, %struct.List*, %struct.ParamListInfoData*, %struct.ParamExecData*, %struct.QueryEnvironment*, %struct.MemoryContextData*, %struct.List*, i64, i32, i32, i8, %struct.List*, %struct.List*, %struct.List*, %struct.ExprContext*, %struct.EPQState*, i8, %struct.dsa_area*, i32, %struct.JitContext*, %struct.JitInstrumentation* } | |
%struct.SnapshotData = type { i32, i32, i32, i32*, i32, i32*, i32, i8, i8, i8, i32, i32, i32, i32, %struct.pairingheap_node, i64, i64 } | |
%struct.pairingheap_node = type { %struct.pairingheap_node*, %struct.pairingheap_node*, %struct.pairingheap_node* } | |
%struct.RangeTblEntry = type { i32, i32, i32, i8, i32, %struct.TableSampleClause.260*, %struct.Query.263*, i8, i32, %struct.List*, %struct.List*, i8, %struct.TableFunc.264*, %struct.List*, i8*, i32, i8, %struct.List*, %struct.List*, %struct.List*, i8*, double, %struct.Alias.265*, %struct.Alias.265*, i8, i8, i8, i32, i32, %struct.Bitmapset*, %struct.Bitmapset*, %struct.Bitmapset*, %struct.Bitmapset*, %struct.List* } | |
%struct.TableSampleClause.260 = type { i32, i32, %struct.List*, %struct.Expr* } | |
%struct.Query.263 = type { i32, i32, i32, i64, i8, %struct.Node*, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, %struct.List*, %struct.List*, %struct.FromExpr.261*, %struct.List*, i32, %struct.OnConflictExpr.262*, %struct.List*, %struct.List*, %struct.List*, %struct.Node*, %struct.List*, %struct.List*, %struct.List*, %struct.Node*, %struct.Node*, %struct.List*, %struct.Node*, %struct.List*, %struct.List*, i32, i32 } | |
%struct.FromExpr.261 = type { i32, %struct.List*, %struct.Node* } | |
%struct.OnConflictExpr.262 = type { i32, i32, %struct.List*, %struct.Node*, i32, %struct.List*, %struct.Node*, i32, %struct.List* } | |
%struct.TableFunc.264 = type { i32, %struct.List*, %struct.List*, %struct.Node*, %struct.Node*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, %struct.Bitmapset*, i32, i32 } | |
%struct.Alias.265 = type { i32, i8*, %struct.List* } | |
%struct.RelationData = type opaque | |
%struct.ExecRowMark = type { %struct.RelationData*, i32, i32, i32, i32, i32, i32, i32, i8, %struct.ItemPointerData, i8* } | |
%struct.PlannedStmt = type { i32, i32, i64, i8, i8, i8, i8, i8, i8, i32, %struct.Plan*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, %struct.Bitmapset*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, %struct.Node*, i32, i32 } | |
%struct.JunkFilter = type { i32, %struct.List*, %struct.TupleDescData*, i16*, %struct.TupleTableSlot*, i16 } | |
%struct.ResultRelInfo = type { i32, i32, %struct.RelationData*, i32, %struct.RelationData**, %struct.IndexInfo**, %struct.TriggerDesc*, %struct.FmgrInfo*, %struct.ExprState**, %struct.Instrumentation*, %struct.TupleTableSlot*, %struct.TupleTableSlot*, %struct.TupleTableSlot*, %struct.FdwRoutine*, i8*, i8, %struct.List*, %struct.List*, %struct.ExprState**, %struct.ExprState**, %struct.JunkFilter*, %struct.List*, %struct.ProjectionInfo*, %struct.List*, %struct.OnConflictSetState*, %struct.List*, %struct.ExprState*, %struct.RelationData*, %struct.PartitionRoutingInfo*, %struct.CopyMultiInsertBuffer* } | |
%struct.IndexInfo = type { i32, i32, i32, [32 x i16], %struct.List*, %struct.List*, %struct.List*, %struct.ExprState*, i32*, i32*, i16*, i32*, i32*, i16*, i8, i8, i8, i8, i32, i32, i8*, %struct.MemoryContextData* } | |
%struct.TriggerDesc = type { %struct.Trigger*, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 } | |
%struct.Trigger = type { i32, i8*, i32, i16, i8, i8, i32, i32, i32, i8, i8, i16, i16, i16*, i8**, i8*, i8*, i8* } | |
%struct.FdwRoutine = type opaque | |
%struct.OnConflictSetState = type { i32, %struct.TupleTableSlot*, %struct.TupleTableSlot*, %struct.ProjectionInfo*, %struct.ExprState* } | |
%struct.PartitionRoutingInfo = type opaque | |
%struct.CopyMultiInsertBuffer = type opaque | |
%struct.PartitionDirectoryData = type opaque | |
%struct.ParamExecData = type { i8*, i64, i8 } | |
%struct.QueryEnvironment = type opaque | |
%struct.EPQState = type { %struct.EState*, i32, %struct.List*, %struct.TupleTableSlot**, %struct.Plan*, %struct.List*, %struct.TupleTableSlot*, %struct.EState*, %struct.ExecAuxRowMark**, i8*, %struct.PlanState* } | |
%struct.ExecAuxRowMark = type { %struct.ExecRowMark*, i16, i16, i16 } | |
%struct.dsa_area = type opaque | |
%struct.JitContext = type opaque | |
%struct.JitInstrumentation = type opaque | |
%struct.Instrumentation = type { i8, i8, i8, %struct.timespec, %struct.timespec, double, double, %struct.BufferUsage, double, double, double, double, double, double, double, %struct.BufferUsage } | |
%struct.timespec = type { i64, i64 } | |
%struct.BufferUsage = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, %struct.timespec, %struct.timespec } | |
%struct.WorkerInstrumentation = type { i32, [0 x %struct.Instrumentation] } | |
%struct.SharedJitInstrumentation = type opaque | |
%struct.List = type { i32, i32, %struct.ListCell*, %struct.ListCell* } | |
%struct.ListCell = type { %union.anon.4, %struct.ListCell* } | |
%union.anon.4 = type { i8* } | |
%struct.Bitmapset = type { i32, [0 x i64] } | |
%struct.ProjectionInfo = type { i32, %struct.ExprState, %struct.ExprContext* } | |
%struct.ParamListInfoData = type { %struct.ParamExternData* (%struct.ParamListInfoData*, i32, i1, %struct.ParamExternData*)*, i8*, void (%struct.ParamListInfoData*, %struct.Param*, %struct.ExprState*, i64*, i8*)*, i8*, void (%struct.ParseState*, i8*)*, i8*, i32, [0 x %struct.ParamExternData] } | |
%struct.ParamExternData = type { i64, i8, i16, i32 } | |
%struct.Param = type { %struct.Expr, i32, i32, i32, i32, i32, i32 } | |
%struct.ParseState = type { %struct.ParseState*, i8*, %struct.List*, %struct.List*, %struct.List*, %struct.List*, i8, %struct.List*, %struct.List*, %struct.CommonTableExpr*, %struct.RelationData*, %struct.RangeTblEntry*, i8, %struct.List*, i32, i32, %struct.List*, %struct.List*, i8, i8, %struct.QueryEnvironment*, i8, i8, i8, i8, i8, %struct.Node*, %struct.Node* (%struct.ParseState*, %struct.ColumnRef*)*, %struct.Node* (%struct.ParseState*, %struct.ColumnRef*, %struct.Node*)*, %struct.Node* (%struct.ParseState*, %struct.ParamRef*)*, %struct.Node* (%struct.ParseState*, %struct.Param*, i32, i32, i32)*, i8* } | |
%struct.CommonTableExpr = type { i32, i8*, %struct.List*, i32, %struct.Node*, i32, i8, i32, %struct.List*, %struct.List*, %struct.List*, %struct.List* } | |
%struct.ColumnRef = type { i32, %struct.List*, i32 } | |
%struct.ParamRef = type { i32, i32, i32 } | |
%struct.ExprContext = type { i32, %struct.TupleTableSlot*, %struct.TupleTableSlot*, %struct.TupleTableSlot*, %struct.MemoryContextData*, %struct.MemoryContextData*, %struct.ParamExecData*, %struct.ParamListInfoData*, i64*, i8*, i64, i8, i64, i8, %struct.EState*, %struct.ExprContext_CB* } | |
%struct.ExprContext_CB = type { %struct.ExprContext_CB*, void (i64)*, i64 } | |
%struct.varlena.9244 = type { [4 x i8], [0 x i8] } | |
%struct.TupleTableSlot.9302 = type { i32, i16, i16, %struct.TupleTableSlotOps.9290*, %struct.TupleDescData*, i64*, i8*, %struct.MemoryContextData*, %struct.ItemPointerData, i32 } | |
%struct.TupleTableSlotOps.9290 = type { i64, {}*, {}*, {}*, void (%struct.TupleTableSlot.9302*, i32)*, i64 (%struct.TupleTableSlot.9302*, i32, i8*)*, {}*, void (%struct.TupleTableSlot.9302*, %struct.TupleTableSlot.9302*)*, %struct.HeapTupleData* (%struct.TupleTableSlot.9302*)*, %struct.MinimalTupleData* (%struct.TupleTableSlot.9302*)*, %struct.HeapTupleData* (%struct.TupleTableSlot.9302*)*, %struct.MinimalTupleData* (%struct.TupleTableSlot.9302*)* } | |
@__func__.slot_getsomeattrs_int = private unnamed_addr constant [22 x i8] c"slot_getsomeattrs_int\00", align 1 | |
@.str = private unnamed_addr constant [90 x i8] c"/build/postgresql-12-vhXRyo/postgresql-12-12.1/build/../src/backend/executor/execTuples.c\00", align 1 | |
@.str.4 = private unnamed_addr constant [28 x i8] c"invalid attribute number %d\00", align 1 | |
; Function Attrs: norecurse nounwind uwtable | |
define i64 @evalexpr_21_0(%struct.ExprState*, %struct.ExprContext*, i1*) #0 { | |
entry: | |
%v.state.resvalue = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 3 | |
%v.state.resnull = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 2 | |
%3 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 1 | |
%v_scanslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %3 | |
%4 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 2 | |
%v_innerslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %4 | |
%5 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 3 | |
%v_outerslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %5 | |
%6 = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 4 | |
%v_resultslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %6 | |
%7 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 5 | |
%v_scanvalues = load i64*, i64** %7 | |
%8 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 6 | |
%v_scannulls = load i8*, i8** %8 | |
%9 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_innerslot, i32 0, i32 5 | |
%v_innervalues = load i64*, i64** %9 | |
%10 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_innerslot, i32 0, i32 6 | |
%v_innernulls = load i8*, i8** %10 | |
%11 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_outerslot, i32 0, i32 5 | |
%v_outervalues = load i64*, i64** %11 | |
%12 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_outerslot, i32 0, i32 6 | |
%v_outernulls = load i8*, i8** %12 | |
%13 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_resultslot, i32 0, i32 5 | |
%v_resultvalues = load i64*, i64** %13 | |
%14 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_resultslot, i32 0, i32 6 | |
%v_resultnulls = load i8*, i8** %14 | |
%15 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 8 | |
%v.econtext.aggvalues = load i64*, i64** %15 | |
%16 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 9 | |
%v.econtext.aggnulls = load i8*, i8** %16 | |
br label %b.op.0.start | |
b.op.0.start: ; preds = %entry | |
%17 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 2 | |
%18 = load i16, i16* %17 | |
%19 = icmp uge i16 %18, 3 | |
br i1 %19, label %b.op.1.start, label %op.0.fetch | |
op.0.fetch: ; preds = %b.op.0.start | |
call void bitcast (void (%struct.TupleTableSlot.9302*, i32)* @slot_getsomeattrs_int to void (%struct.TupleTableSlot*, i32)*)(%struct.TupleTableSlot* %v_scanslot, i32 3) | |
br label %b.op.1.start | |
b.op.1.start: ; preds = %op.0.fetch, %b.op.0.start | |
%20 = getelementptr i64, i64* %v_scanvalues, i32 0 | |
%21 = load i64, i64* %20 | |
%22 = getelementptr i8, i8* %v_scannulls, i32 0 | |
%23 = load i8, i8* %22 | |
%24 = getelementptr i64, i64* %v_resultvalues, i32 0 | |
%25 = getelementptr i8, i8* %v_resultnulls, i32 0 | |
store i64 %21, i64* %24 | |
store i8 %23, i8* %25 | |
br label %b.op.2.start | |
b.op.2.start: ; preds = %b.op.1.start | |
%26 = getelementptr i64, i64* %v_scanvalues, i32 1 | |
%27 = load i64, i64* %26 | |
%28 = getelementptr i8, i8* %v_scannulls, i32 1 | |
%29 = load i8, i8* %28 | |
%30 = getelementptr i64, i64* %v_resultvalues, i32 1 | |
%31 = getelementptr i8, i8* %v_resultnulls, i32 1 | |
store i64 %27, i64* %30 | |
store i8 %29, i8* %31 | |
br label %b.op.3.start | |
b.op.3.start: ; preds = %b.op.2.start | |
%32 = getelementptr i64, i64* %v_scanvalues, i32 2 | |
%33 = load i64, i64* %32 | |
%34 = getelementptr i8, i8* %v_scannulls, i32 2 | |
%35 = load i8, i8* %34 | |
%36 = getelementptr i64, i64* %v_resultvalues, i32 2 | |
%37 = getelementptr i8, i8* %v_resultnulls, i32 2 | |
store i64 %33, i64* %36 | |
store i8 %35, i8* %37 | |
br label %b.op.4.start | |
b.op.4.start: ; preds = %b.op.3.start | |
%38 = load i64, i64* %v.state.resvalue | |
%39 = load i8, i8* %v.state.resnull | |
%40 = trunc i8 %39 to i1 | |
store i1 %40, i1* %2 | |
ret i64 %38 | |
} | |
; Function Attrs: norecurse nounwind uwtable | |
define i64 @evalexpr_21_1(%struct.ExprState*, %struct.ExprContext*, i1*) #0 { | |
entry: | |
%v.state.resvalue = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 3 | |
%v.state.resnull = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 2 | |
%3 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 1 | |
%v_scanslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %3 | |
%4 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 2 | |
%v_innerslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %4 | |
%5 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 3 | |
%v_outerslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %5 | |
%6 = getelementptr inbounds %struct.ExprState, %struct.ExprState* %0, i32 0, i32 4 | |
%v_resultslot = load %struct.TupleTableSlot*, %struct.TupleTableSlot** %6 | |
%7 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 5 | |
%v_scanvalues = load i64*, i64** %7 | |
%8 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 6 | |
%v_scannulls = load i8*, i8** %8 | |
%9 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_innerslot, i32 0, i32 5 | |
%v_innervalues = load i64*, i64** %9 | |
%10 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_innerslot, i32 0, i32 6 | |
%v_innernulls = load i8*, i8** %10 | |
%11 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_outerslot, i32 0, i32 5 | |
%v_outervalues = load i64*, i64** %11 | |
%12 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_outerslot, i32 0, i32 6 | |
%v_outernulls = load i8*, i8** %12 | |
%13 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_resultslot, i32 0, i32 5 | |
%v_resultvalues = load i64*, i64** %13 | |
%14 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_resultslot, i32 0, i32 6 | |
%v_resultnulls = load i8*, i8** %14 | |
%15 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 8 | |
%v.econtext.aggvalues = load i64*, i64** %15 | |
%16 = getelementptr inbounds %struct.ExprContext, %struct.ExprContext* %1, i32 0, i32 9 | |
%v.econtext.aggnulls = load i8*, i8** %16 | |
br label %b.op.0.start | |
b.op.0.start: ; preds = %entry | |
%17 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %v_scanslot, i32 0, i32 2 | |
%18 = load i16, i16* %17 | |
%19 = icmp uge i16 %18, 8 | |
br i1 %19, label %b.op.1.start, label %op.0.fetch | |
op.0.fetch: ; preds = %b.op.0.start | |
call void bitcast (void (%struct.TupleTableSlot.9302*, i32)* @slot_getsomeattrs_int to void (%struct.TupleTableSlot*, i32)*)(%struct.TupleTableSlot* %v_scanslot, i32 8) | |
br label %b.op.1.start | |
b.op.1.start: ; preds = %op.0.fetch, %b.op.0.start | |
%20 = getelementptr i64, i64* %v_scanvalues, i32 7 | |
%21 = load i64, i64* %20 | |
%22 = getelementptr i8, i8* %v_scannulls, i32 7 | |
%23 = load i8, i8* %22 | |
store i64 %21, i64* inttoptr (i64 94607726300512 to i64*) | |
store i8 %23, i8* inttoptr (i64 94607726300520 to i8*) | |
br label %b.op.2.start | |
b.op.2.start: ; preds = %b.op.1.start | |
store i8 1, i8* inttoptr (i64 94607726299221 to i8*) | |
br label %b.2.isnull.0 | |
b.2.isnull.0: ; preds = %b.op.2.start | |
%24 = load i8, i8* getelementptr inbounds (%struct.FunctionCallInfoBaseData, %struct.FunctionCallInfoBaseData* inttoptr (i64 94607726300480 to %struct.FunctionCallInfoBaseData*), i32 0, i32 6, i32 0, i32 1) | |
%25 = icmp eq i8 %24, 1 | |
br i1 %25, label %b.op.3.start, label %b.2.isnull.1 | |
b.2.isnull.1: ; preds = %b.2.isnull.0 | |
%26 = load i8, i8* getelementptr inbounds (%struct.FunctionCallInfoBaseData, %struct.FunctionCallInfoBaseData* inttoptr (i64 94607726300480 to %struct.FunctionCallInfoBaseData*), i32 0, i32 6, i32 1, i32 1) | |
%27 = icmp eq i8 %26, 1 | |
br i1 %27, label %b.op.3.start, label %b.2.no-null-args | |
b.2.no-null-args: ; preds = %b.2.isnull.1 | |
store i8 0, i8* getelementptr inbounds (%struct.FunctionCallInfoBaseData, %struct.FunctionCallInfoBaseData* inttoptr (i64 94607726300480 to %struct.FunctionCallInfoBaseData*), i32 0, i32 4) | |
%funccall = call i64 @numeric_gt(%struct.FunctionCallInfoBaseData* inttoptr (i64 94607726300480 to %struct.FunctionCallInfoBaseData*)) | |
%28 = load i8, i8* getelementptr inbounds (%struct.FunctionCallInfoBaseData, %struct.FunctionCallInfoBaseData* inttoptr (i64 94607726300480 to %struct.FunctionCallInfoBaseData*), i32 0, i32 4) | |
call void @llvm.lifetime.end.p0i8(i64 32, i8* inttoptr (i64 94607726300512 to i8*)) | |
call void @llvm.lifetime.end.p0i8(i64 1, i8* inttoptr (i64 94607726300508 to i8*)) | |
store i64 %funccall, i64* inttoptr (i64 94607726299224 to i64*) | |
store i8 %28, i8* inttoptr (i64 94607726299221 to i8*) | |
br label %b.op.3.start | |
b.op.3.start: ; preds = %b.2.no-null-args, %b.2.isnull.1, %b.2.isnull.0 | |
%29 = load i64, i64* inttoptr (i64 94607726299224 to i64*) | |
%30 = load i8, i8* inttoptr (i64 94607726299221 to i8*) | |
%31 = icmp eq i64 %29, 0 | |
%32 = icmp eq i8 %30, 1 | |
%33 = or i1 %32, %31 | |
br i1 %33, label %op.3.qualfail, label %b.op.4.start | |
op.3.qualfail: ; preds = %b.op.3.start | |
store i8 0, i8* inttoptr (i64 94607726299221 to i8*) | |
store i64 0, i64* inttoptr (i64 94607726299224 to i64*) | |
br label %b.op.4.start | |
b.op.4.start: ; preds = %op.3.qualfail, %b.op.3.start | |
%34 = load i64, i64* %v.state.resvalue | |
%35 = load i8, i8* %v.state.resnull | |
%36 = trunc i8 %35 to i1 | |
store i1 %36, i1* %2 | |
ret i64 %34 | |
} | |
declare i64 @numeric_gt(%struct.FunctionCallInfoBaseData*) | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1 | |
; Function Attrs: nounwind uwtable | |
define available_externally %struct.varlena.9244* @pg_detoast_datum(%struct.varlena.9244*) local_unnamed_addr #2 { | |
%2 = getelementptr inbounds %struct.varlena.9244, %struct.varlena.9244* %0, i64 0, i32 0, i64 0 | |
%3 = load i8, i8* %2, align 1 | |
%4 = and i8 %3, 3 | |
%5 = icmp eq i8 %4, 0 | |
br i1 %5, label %8, label %6 | |
; <label>:6: ; preds = %1 | |
%7 = tail call %struct.varlena.9244* @heap_tuple_untoast_attr(%struct.varlena.9244* nonnull %0) #4 | |
br label %8 | |
; <label>:8: ; preds = %6, %1 | |
%9 = phi %struct.varlena.9244* [ %7, %6 ], [ %0, %1 ] | |
ret %struct.varlena.9244* %9 | |
} | |
declare %struct.varlena.9244* @heap_tuple_untoast_attr(%struct.varlena.9244*) local_unnamed_addr #3 | |
; Function Attrs: nounwind uwtable | |
define available_externally void @pfree(i8*) local_unnamed_addr #2 { | |
%2 = getelementptr i8, i8* %0, i64 -8 | |
%3 = bitcast i8* %2 to %struct.MemoryContextData** | |
%4 = load %struct.MemoryContextData*, %struct.MemoryContextData** %3, align 8 | |
%5 = getelementptr inbounds %struct.MemoryContextData, %struct.MemoryContextData* %4, i64 0, i32 3 | |
%6 = load %struct.MemoryContextMethods*, %struct.MemoryContextMethods** %5, align 8 | |
%7 = getelementptr inbounds %struct.MemoryContextMethods, %struct.MemoryContextMethods* %6, i64 0, i32 1 | |
%8 = load void (%struct.MemoryContextData*, i8*)*, void (%struct.MemoryContextData*, i8*)** %7, align 8 | |
tail call void %8(%struct.MemoryContextData* %4, i8* %0) #4 | |
ret void | |
} | |
; Function Attrs: nounwind uwtable | |
define available_externally void @slot_getsomeattrs_int(%struct.TupleTableSlot.9302*, i32) local_unnamed_addr #2 { | |
%3 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 4 | |
%4 = load %struct.TupleDescData*, %struct.TupleDescData** %3, align 8 | |
%5 = getelementptr inbounds %struct.TupleDescData, %struct.TupleDescData* %4, i64 0, i32 0 | |
%6 = load i32, i32* %5, align 8 | |
%7 = icmp slt i32 %6, %1 | |
br i1 %7, label %8, label %9, !prof !2 | |
; <label>:8: ; preds = %2 | |
tail call void @elog_start(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str, i64 0, i64 0), i32 1879, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @__func__.slot_getsomeattrs_int, i64 0, i64 0)) #4 | |
tail call void (i32, i8*, ...) @elog_finish(i32 20, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), i32 %1) #4 | |
unreachable | |
; <label>:9: ; preds = %2 | |
%10 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 3 | |
%11 = load %struct.TupleTableSlotOps.9290*, %struct.TupleTableSlotOps.9290** %10, align 8 | |
%12 = getelementptr inbounds %struct.TupleTableSlotOps.9290, %struct.TupleTableSlotOps.9290* %11, i64 0, i32 4 | |
%13 = load void (%struct.TupleTableSlot.9302*, i32)*, void (%struct.TupleTableSlot.9302*, i32)** %12, align 8 | |
tail call void %13(%struct.TupleTableSlot.9302* nonnull %0, i32 %1) #4 | |
%14 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 2 | |
%15 = load i16, i16* %14, align 2 | |
%16 = sext i16 %15 to i32 | |
%17 = icmp slt i32 %16, %1 | |
br i1 %17, label %18, label %59, !prof !2 | |
; <label>:18: ; preds = %9 | |
%19 = load %struct.TupleDescData*, %struct.TupleDescData** %3, align 8 | |
%20 = getelementptr inbounds %struct.TupleDescData, %struct.TupleDescData* %19, i64 0, i32 4 | |
%21 = load %struct.TupleConstr*, %struct.TupleConstr** %20, align 8 | |
%22 = icmp eq %struct.TupleConstr* %21, null | |
br i1 %22, label %27, label %23 | |
; <label>:23: ; preds = %18 | |
%24 = getelementptr inbounds %struct.TupleConstr, %struct.TupleConstr* %21, i64 0, i32 2 | |
%25 = load %struct.AttrMissing*, %struct.AttrMissing** %24, align 8 | |
%26 = icmp eq %struct.AttrMissing* %25, null | |
br i1 %26, label %27, label %39 | |
; <label>:27: ; preds = %23, %18 | |
%28 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 5 | |
%29 = load i64*, i64** %28, align 8 | |
%30 = sext i16 %15 to i64 | |
%31 = getelementptr i64, i64* %29, i64 %30 | |
%32 = bitcast i64* %31 to i8* | |
%33 = sub i32 %1, %16 | |
%34 = sext i32 %33 to i64 | |
%35 = shl nsw i64 %34, 3 | |
tail call void @llvm.memset.p0i8.i64(i8* %32, i8 0, i64 %35, i32 8, i1 false) #4 | |
%36 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 6 | |
%37 = load i8*, i8** %36, align 8 | |
%38 = getelementptr i8, i8* %37, i64 %30 | |
tail call void @llvm.memset.p0i8.i64(i8* %38, i8 1, i64 %34, i32 1, i1 false) #4 | |
br label %57 | |
; <label>:39: ; preds = %23 | |
%40 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 5 | |
%41 = getelementptr inbounds %struct.TupleTableSlot.9302, %struct.TupleTableSlot.9302* %0, i64 0, i32 6 | |
%42 = sext i16 %15 to i64 | |
%43 = sext i32 %1 to i64 | |
br label %44 | |
; <label>:44: ; preds = %44, %39 | |
%45 = phi i64 [ %42, %39 ], [ %55, %44 ] | |
%46 = getelementptr inbounds %struct.AttrMissing, %struct.AttrMissing* %25, i64 %45, i32 1 | |
%47 = load i64, i64* %46, align 8 | |
%48 = load i64*, i64** %40, align 8 | |
%49 = getelementptr i64, i64* %48, i64 %45 | |
store i64 %47, i64* %49, align 8 | |
%50 = getelementptr inbounds %struct.AttrMissing, %struct.AttrMissing* %25, i64 %45, i32 0 | |
%51 = load i8, i8* %50, align 8, !range !3 | |
%52 = load i8*, i8** %41, align 8 | |
%53 = getelementptr i8, i8* %52, i64 %45 | |
%54 = xor i8 %51, 1 | |
store i8 %54, i8* %53, align 1 | |
%55 = add nsw i64 %45, 1 | |
%56 = icmp eq i64 %55, %43 | |
br i1 %56, label %57, label %44 | |
; <label>:57: ; preds = %44, %27 | |
%58 = trunc i32 %1 to i16 | |
store i16 %58, i16* %14, align 2 | |
br label %59 | |
; <label>:59: ; preds = %57, %9 | |
ret void | |
} | |
declare void @elog_start(i8*, i32, i8*) local_unnamed_addr #3 | |
declare void @elog_finish(i32, i8*, ...) local_unnamed_addr #3 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #1 | |
attributes #0 = { norecurse nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #1 = { argmemonly nounwind } | |
attributes #2 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #3 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #4 = { nounwind } | |
!llvm.ident = !{!0, !0, !0} | |
!llvm.module.flags = !{!1} | |
!0 = !{!"clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)"} | |
!1 = !{i32 1, !"wchar_size", i32 4} | |
!2 = !{!"branch_weights", i32 1, i32 2000} | |
!3 = !{i8 0, i8 2} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment