Created
December 14, 2019 13:41
-
-
Save masayuki038/fcdf3d0b07c177efb2582c8ecd8b71ec 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/3410.0.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 opaque | |
%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 opaque | |
%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 opaque | |
%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.HeapTupleTableSlot = type { %struct.TupleTableSlot, %struct.HeapTupleData*, i32, %struct.HeapTupleData } | |
; Function Attrs: norecurse nounwind uwtable | |
define i64 @evalexpr_0_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 @deform_0_1(%struct.TupleTableSlot* %v_scanslot) | |
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 internal void @deform_0_1(%struct.TupleTableSlot* align 8) #0 { | |
entry: | |
%v_offp = alloca i64 | |
%1 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %0, i32 0, i32 5 | |
%tts_values = load i64*, i64** %1 | |
%2 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %0, i32 0, i32 6 | |
%tts_ISNULL = load i8*, i8** %2 | |
%3 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %0, i32 0, i32 1 | |
%4 = getelementptr inbounds %struct.TupleTableSlot, %struct.TupleTableSlot* %0, i32 0, i32 2 | |
%heapslot = bitcast %struct.TupleTableSlot* %0 to %struct.HeapTupleTableSlot* | |
%5 = getelementptr inbounds %struct.HeapTupleTableSlot, %struct.HeapTupleTableSlot* %heapslot, i32 0, i32 2 | |
%6 = getelementptr inbounds %struct.HeapTupleTableSlot, %struct.HeapTupleTableSlot* %heapslot, i32 0, i32 1 | |
%tupleheader = load %struct.HeapTupleData*, %struct.HeapTupleData** %6 | |
%7 = getelementptr inbounds %struct.HeapTupleData, %struct.HeapTupleData* %tupleheader, i32 0, i32 3 | |
%tuple = load %struct.HeapTupleHeaderData*, %struct.HeapTupleHeaderData** %7 | |
%8 = getelementptr inbounds %struct.HeapTupleHeaderData, %struct.HeapTupleHeaderData* %tuple, i32 0, i32 5 | |
%t_bits = bitcast [0 x i8]* %8 to i8* | |
%9 = getelementptr inbounds %struct.HeapTupleHeaderData, %struct.HeapTupleHeaderData* %tuple, i32 0, i32 3 | |
%infomask1 = load i16, i16* %9 | |
%10 = getelementptr inbounds %struct.HeapTupleHeaderData, %struct.HeapTupleHeaderData* %tuple, i32 0, i32 2 | |
%infomask2 = load i16, i16* %10 | |
%11 = and i16 1, %infomask1 | |
%hasnulls = icmp ne i16 %11, 0 | |
%maxatt = and i16 2047, %infomask2 | |
%12 = getelementptr inbounds %struct.HeapTupleHeaderData, %struct.HeapTupleHeaderData* %tuple, i32 0, i32 4 | |
%13 = load i8, i8* %12 | |
%t_hoff = zext i8 %13 to i32 | |
%14 = bitcast %struct.HeapTupleHeaderData* %tuple to i8* | |
%v_tupdata_base = getelementptr i8, i8* %14, i32 %t_hoff | |
%v_slot_off = load i32, i32* %5 | |
%15 = zext i32 %v_slot_off to i64 | |
store i64 %15, i64* %v_offp | |
br label %adjust_unavail_cols | |
adjust_unavail_cols: ; preds = %entry | |
br label %find_startblock | |
find_startblock: ; preds = %adjust_unavail_cols | |
%16 = load i16, i16* %4 | |
switch i16 %16, label %deadblock [ | |
i16 0, label %block.attr.0.attcheckattno | |
i16 1, label %block.attr.1.attcheckattno | |
i16 2, label %block.attr.2.attcheckattno | |
] | |
outblock: ; preds = %block.attr.2.store | |
%17 = load i64, i64* %v_offp | |
store i16 3, i16* %4 | |
%18 = trunc i64 %17 to i32 | |
store i32 %18, i32* %5 | |
%tts_flags = load i16, i16* %3 | |
%19 = or i16 %tts_flags, 8 | |
store i16 %19, i16* %3 | |
ret void | |
deadblock: ; preds = %find_startblock | |
unreachable | |
block.attr.0.attcheckattno: ; preds = %find_startblock | |
store i64 0, i64* %v_offp | |
br label %block.attr.0.start | |
block.attr.0.start: ; preds = %block.attr.0.attcheckattno | |
br label %block.attr.0.attcheckalign | |
block.attr.0.attisnull: ; No predecessors! | |
br label %block.attr.0.attcheckalign | |
block.attr.0.attcheckalign: ; preds = %block.attr.0.attisnull, %block.attr.0.start | |
br label %block.attr.0.align | |
block.attr.0.align: ; preds = %block.attr.0.attcheckalign | |
br label %block.attr.0.store | |
block.attr.0.store: ; preds = %block.attr.0.align | |
store i64 0, i64* %v_offp | |
%20 = load i64, i64* %v_offp | |
%21 = getelementptr i8, i8* %v_tupdata_base, i64 %20 | |
%22 = getelementptr i64, i64* %tts_values, i16 0 | |
%23 = getelementptr i8, i8* %tts_ISNULL, i16 0 | |
store i8 0, i8* %23 | |
%24 = bitcast i8* %21 to i32* | |
%attr_byval = load i32, i32* %24 | |
%25 = zext i32 %attr_byval to i64 | |
store i64 %25, i64* %22 | |
store i64 4, i64* %v_offp | |
br label %block.attr.1.attcheckattno | |
block.attr.1.attcheckattno: ; preds = %block.attr.0.store, %find_startblock | |
br label %block.attr.1.start | |
block.attr.1.start: ; preds = %block.attr.1.attcheckattno | |
br label %block.attr.1.attcheckalign | |
block.attr.1.attisnull: ; No predecessors! | |
br label %block.attr.1.attcheckalign | |
block.attr.1.attcheckalign: ; preds = %block.attr.1.attisnull, %block.attr.1.start | |
br label %block.attr.1.align | |
block.attr.1.align: ; preds = %block.attr.1.attcheckalign | |
br label %block.attr.1.store | |
block.attr.1.store: ; preds = %block.attr.1.align | |
store i64 4, i64* %v_offp | |
%26 = load i64, i64* %v_offp | |
%27 = getelementptr i8, i8* %v_tupdata_base, i64 %26 | |
%28 = getelementptr i64, i64* %tts_values, i16 1 | |
%29 = getelementptr i8, i8* %tts_ISNULL, i16 1 | |
store i8 0, i8* %29 | |
%30 = bitcast i8* %27 to i32* | |
%attr_byval1 = load i32, i32* %30 | |
%31 = zext i32 %attr_byval1 to i64 | |
store i64 %31, i64* %28 | |
store i64 8, i64* %v_offp | |
br label %block.attr.2.attcheckattno | |
block.attr.2.attcheckattno: ; preds = %block.attr.1.store, %find_startblock | |
br label %block.attr.2.start | |
block.attr.2.start: ; preds = %block.attr.2.attcheckattno | |
br label %block.attr.2.attcheckalign | |
block.attr.2.attisnull: ; No predecessors! | |
br label %block.attr.2.attcheckalign | |
block.attr.2.attcheckalign: ; preds = %block.attr.2.attisnull, %block.attr.2.start | |
br label %block.attr.2.align | |
block.attr.2.align: ; preds = %block.attr.2.attcheckalign | |
br label %block.attr.2.store | |
block.attr.2.store: ; preds = %block.attr.2.align | |
store i64 8, i64* %v_offp | |
%32 = load i64, i64* %v_offp | |
%33 = getelementptr i8, i8* %v_tupdata_base, i64 %32 | |
%34 = getelementptr i64, i64* %tts_values, i16 2 | |
%35 = getelementptr i8, i8* %tts_ISNULL, i16 2 | |
store i8 0, i8* %35 | |
%36 = bitcast i8* %33 to i32* | |
%attr_byval2 = load i32, i32* %36 | |
%37 = zext i32 %attr_byval2 to i64 | |
store i64 %37, i64* %34 | |
store i64 12, i64* %v_offp | |
br label %outblock | |
} | |
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" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment