pull/81/head
Dibyendu Majumdar 9 years ago
parent 612d3c1ad5
commit f081aa999b

@ -1,789 +0,0 @@
; ModuleID = 'ravi_module_ravif1'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc-elf"
%0 = type { %struct.TValue*, i32*, i64 }
%struct.lua_State = type { %struct.GCObject*, i8, i8, i8, %struct.TValue*, %struct.global_State*, %struct.CallInfo*, i32*, %struct.TValue*, %struct.TValue*, %struct.UpVal*, %struct.GCObject*, %struct.lua_State*, %struct.lua_longjmp*, %struct.CallInfo, i8* (%struct.lua_State*, %struct.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%struct.global_State = type opaque
%struct.TValue = type { %union.Value, i32 }
%union.Value = type { double }
%struct.UpVal = type { %struct.TValue*, i64, %struct.TValue }
%struct.GCObject = type { %struct.GCObject*, i8, i8 }
%struct.lua_longjmp = type opaque
%struct.CallInfo = type { %struct.TValue*, %struct.TValue*, %struct.CallInfo*, %struct.CallInfo*, %0, i64, i16, i8, i8 }
%struct.lua_Debug = type opaque
%struct.LClosure = type { %struct.GCObject*, i8, i8, i8, %struct.GCObject*, %struct.Proto*, [1 x %struct.UpVal*] }
%struct.Proto = type { %struct.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %struct.TValue*, i32*, %struct.Proto**, i32*, %struct.LocVar*, %struct.Upvaldesc*, %struct.LClosure*, %struct.TString*, %struct.GCObject*, %struct.RaviJITProto }
%struct.LocVar = type { %struct.TString*, i32, i32, i32 }
%struct.Upvaldesc = type { %struct.TString*, i32, i8, i8 }
%struct.TString = type { %struct.GCObject*, i8, i8, i8, i8, i32, i64 }
%struct.RaviJITProto = type { i8, i8, i16, i8*, i32 (%struct.lua_State*)* }
%struct.Table = type { %struct.GCObject*, i8, i8, i8, i8, i32, %struct.TValue*, %struct.Node*, %struct.Node*, %struct.Table*, %struct.GCObject*, %struct.RaviArray }
%struct.Node = type { %struct.TValue, %struct.TKey }
%struct.TKey = type { %union.Value, i32, i32 }
%struct.RaviArray = type { i8*, i32, i32, i8, i8 }
@0 = private unnamed_addr constant [17 x i8] c"integer expected\00"
define i32 @ravif1(%struct.lua_State* %L) {
entry:
%nb = alloca double
%nc = alloca double
%ilimit52 = alloca i64
%iidx53 = alloca i64
%ilimit = alloca i64
%iidx = alloca i64
%i = alloca i64
%L_ci = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 6
%0 = load %struct.CallInfo** %L_ci, !tbaa !0
%base = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 4, i32 0
%1 = bitcast %struct.CallInfo* %0 to %struct.LClosure***
%2 = load %struct.LClosure*** %1, !tbaa !7
%3 = load %struct.LClosure** %2, !tbaa !8
%Proto = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 5
%4 = load %struct.Proto** %Proto, !tbaa !9
%k = getelementptr inbounds %struct.Proto* %4, i32 0, i32 14
%5 = load %struct.TValue** %k, !tbaa !11
%6 = load %struct.TValue** %base, !tbaa !14
%value.tt.ptr = getelementptr inbounds %struct.TValue* %6, i32 0, i32 1
%value.tt = load i32* %value.tt.ptr, !tbaa !15
%is.not.integer = icmp ne i32 %value.tt, 19
br i1 %is.not.integer, label %if.not.integer, label %done
if.not.integer: ; preds = %entry
%7 = call i32 @luaV_tointeger_(%struct.TValue* %6, i64* %i)
%int.conversion.failed = icmp eq i32 %7, 0
br i1 %int.conversion.failed, label %if.conversion.failed, label %conversion.ok
if.conversion.failed: ; preds = %if.not.integer
call void (%struct.lua_State*, i8*, ...)* @luaG_runerror(%struct.lua_State* %L, i8* getelementptr inbounds ([17 x i8]* @0, i32 0, i32 0))
br label %conversion.ok
conversion.ok: ; preds = %if.conversion.failed, %if.not.integer
%8 = load i64* %i, !tbaa !17
%9 = bitcast %struct.TValue* %6 to i64*
store i64 %8, i64* %9, !tbaa !18
%dest.tt = getelementptr inbounds %struct.TValue* %6, i32 0, i32 1
store i32 19, i32* %dest.tt, !tbaa !15
br label %done
done: ; preds = %conversion.ok, %entry
%sunkaddr = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr100 = add i64 %sunkaddr, 32
%sunkaddr101 = inttoptr i64 %sunkaddr100 to %struct.TValue**
%10 = load %struct.TValue** %sunkaddr101, !tbaa !14
%11 = getelementptr inbounds %struct.TValue* %10, i32 1
%upvals = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 6, i32 0
%12 = load %struct.UpVal** %upvals, !tbaa !8
%v102 = bitcast %struct.UpVal* %12 to %struct.TValue**
%13 = load %struct.TValue** %v102, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %13, %struct.TValue* %5, %struct.TValue* %11)
%14 = load %struct.TValue** %sunkaddr101, !tbaa !14
%15 = getelementptr inbounds %struct.TValue* %14, i32 2
%16 = getelementptr inbounds %struct.TValue* %5, i32 1
%srcvalue103 = bitcast %struct.TValue* %16 to double*
%destvalue104 = bitcast %struct.TValue* %15 to double*
%17 = load double* %srcvalue103, !tbaa !18
store double %17, double* %destvalue104, !tbaa !18
%srctype = getelementptr inbounds %struct.TValue* %16, i32 0, i32 1
%desttype = getelementptr inbounds %struct.TValue* %15, i32 0, i32 1
%18 = load i32* %srctype, !tbaa !15
store i32 %18, i32* %desttype, !tbaa !15
%19 = load %struct.TValue** %sunkaddr101, !tbaa !14
%20 = getelementptr inbounds %struct.TValue* %19, i32 3
%srcvalue1105 = bitcast %struct.TValue* %19 to double*
%destvalue2106 = bitcast %struct.TValue* %20 to double*
%21 = load double* %srcvalue1105, !tbaa !18
store double %21, double* %destvalue2106, !tbaa !18
%srctype3 = getelementptr inbounds %struct.TValue* %19, i32 0, i32 1
%desttype4 = getelementptr inbounds %struct.TValue* %20, i32 0, i32 1
%22 = load i32* %srctype3, !tbaa !15
store i32 %22, i32* %desttype4, !tbaa !15
%23 = load %struct.TValue** %sunkaddr101, !tbaa !14
%24 = getelementptr inbounds %struct.TValue* %23, i32 4
%L.top = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %24, %struct.TValue** %L.top, !tbaa !21
%25 = getelementptr inbounds %struct.TValue* %23, i32 1
%26 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %25, i32 0)
%27 = icmp eq i32 %26, 0
br i1 %27, label %if.lua.function, label %if.not.lua.function
if.lua.function: ; preds = %done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done
if.not.lua.function: ; preds = %done
%28 = icmp eq i32 %26, 1
br i1 %28, label %if.C.function, label %op_call.done
if.C.function: ; preds = %if.not.lua.function
%ci_top = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 1
%29 = load %struct.TValue** %ci_top, !tbaa !23
%L_top = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %29, %struct.TValue** %L_top, !tbaa !21
br label %op_call.done
op_call.done: ; preds = %if.C.function, %if.not.lua.function, %if.lua.function
%sunkaddr107 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr108 = add i64 %sunkaddr107, 32
%sunkaddr109 = inttoptr i64 %sunkaddr108 to %struct.TValue**
%30 = load %struct.TValue** %sunkaddr109, !tbaa !14
%31 = getelementptr inbounds %struct.TValue* %30, i32 1
%32 = getelementptr inbounds %struct.TValue* %5, i32 2
%upvals5 = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 6, i32 0
%33 = load %struct.UpVal** %upvals5, !tbaa !8
%v6110 = bitcast %struct.UpVal* %33 to %struct.TValue**
%34 = load %struct.TValue** %v6110, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %34, %struct.TValue* %32, %struct.TValue* %31)
%35 = load %struct.TValue** %sunkaddr109, !tbaa !14
%36 = getelementptr inbounds %struct.TValue* %35, i32 1
%37 = getelementptr inbounds %struct.TValue* %35, i32 1
%38 = getelementptr inbounds %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %37, %struct.TValue* %38, %struct.TValue* %36)
%39 = load %struct.TValue** %sunkaddr109, !tbaa !14
%40 = getelementptr inbounds %struct.TValue* %39, i32 2
%L.top7 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %40, %struct.TValue** %L.top7, !tbaa !21
%41 = getelementptr inbounds %struct.TValue* %39, i32 1
%42 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %41, i32 1)
%43 = icmp eq i32 %42, 0
br i1 %43, label %if.lua.function8, label %if.not.lua.function9
if.lua.function8: ; preds = %op_call.done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done13
if.not.lua.function9: ; preds = %op_call.done
%44 = icmp eq i32 %42, 1
br i1 %44, label %if.C.function10, label %op_call.done13
if.C.function10: ; preds = %if.not.lua.function9
%ci_top11 = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 1
%45 = load %struct.TValue** %ci_top11, !tbaa !23
%L_top12 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %45, %struct.TValue** %L_top12, !tbaa !21
br label %op_call.done13
op_call.done13: ; preds = %if.C.function10, %if.not.lua.function9, %if.lua.function8
%sunkaddr111 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr112 = add i64 %sunkaddr111, 32
%sunkaddr113 = inttoptr i64 %sunkaddr112 to %struct.TValue**
%46 = load %struct.TValue** %sunkaddr113, !tbaa !14
%47 = getelementptr inbounds %struct.TValue* %46, i32 2
%upvals14 = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 6, i32 1
%48 = load %struct.UpVal** %upvals14, !tbaa !8
%v15114 = bitcast %struct.UpVal* %48 to %struct.TValue**
%49 = load %struct.TValue** %v15114, !tbaa !19
%srcvalue16115 = bitcast %struct.TValue* %49 to double*
%destvalue17116 = bitcast %struct.TValue* %47 to double*
%50 = load double* %srcvalue16115, !tbaa !18
store double %50, double* %destvalue17116, !tbaa !18
%srctype18 = getelementptr inbounds %struct.TValue* %49, i32 0, i32 1
%desttype19 = getelementptr inbounds %struct.TValue* %47, i32 0, i32 1
%51 = load i32* %srctype18, !tbaa !15
store i32 %51, i32* %desttype19, !tbaa !15
%52 = load %struct.TValue** %sunkaddr113, !tbaa !14
%53 = getelementptr inbounds %struct.TValue* %52, i32 3
%srcvalue20117 = bitcast %struct.TValue* %52 to double*
%destvalue21118 = bitcast %struct.TValue* %53 to double*
%54 = load double* %srcvalue20117, !tbaa !18
store double %54, double* %destvalue21118, !tbaa !18
%srctype22 = getelementptr inbounds %struct.TValue* %52, i32 0, i32 1
%desttype23 = getelementptr inbounds %struct.TValue* %53, i32 0, i32 1
%55 = load i32* %srctype22, !tbaa !15
store i32 %55, i32* %desttype23, !tbaa !15
%56 = load %struct.TValue** %sunkaddr113, !tbaa !14
%57 = getelementptr inbounds %struct.TValue* %56, i32 4
%srcvalue24119 = bitcast %struct.TValue* %56 to double*
%destvalue25120 = bitcast %struct.TValue* %57 to double*
%58 = load double* %srcvalue24119, !tbaa !18
store double %58, double* %destvalue25120, !tbaa !18
%srctype26 = getelementptr inbounds %struct.TValue* %56, i32 0, i32 1
%desttype27 = getelementptr inbounds %struct.TValue* %57, i32 0, i32 1
%59 = load i32* %srctype26, !tbaa !15
store i32 %59, i32* %desttype27, !tbaa !15
%60 = load %struct.TValue** %sunkaddr113, !tbaa !14
%61 = getelementptr inbounds %struct.TValue* %60, i32 5
%L.top28 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %61, %struct.TValue** %L.top28, !tbaa !21
%62 = getelementptr inbounds %struct.TValue* %60, i32 2
%63 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %62, i32 1)
%64 = icmp eq i32 %63, 0
br i1 %64, label %if.lua.function29, label %if.not.lua.function30
if.lua.function29: ; preds = %op_call.done13
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done34
if.not.lua.function30: ; preds = %op_call.done13
%65 = icmp eq i32 %63, 1
br i1 %65, label %if.C.function31, label %op_call.done34
if.C.function31: ; preds = %if.not.lua.function30
%ci_top32 = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 1
%66 = load %struct.TValue** %ci_top32, !tbaa !23
%L_top33 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %66, %struct.TValue** %L_top33, !tbaa !21
br label %op_call.done34
op_call.done34: ; preds = %if.C.function31, %if.not.lua.function30, %if.lua.function29
%sunkaddr121 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr122 = add i64 %sunkaddr121, 32
%sunkaddr123 = inttoptr i64 %sunkaddr122 to %struct.TValue**
%67 = load %struct.TValue** %sunkaddr123, !tbaa !14
%68 = getelementptr inbounds %struct.TValue* %67, i32 3
%69 = bitcast %struct.TValue* %67 to i64*
%70 = load i64* %69, !tbaa !18
%71 = sitofp i64 %70 to double
%72 = fdiv double 1.000000e+00, %71
%73 = bitcast %struct.TValue* %68 to double*
store double %72, double* %73, !tbaa !18
%dest.tt35 = getelementptr inbounds %struct.TValue* %68, i32 0, i32 1
store i32 3, i32* %dest.tt35, !tbaa !15
%74 = load %struct.TValue** %sunkaddr123, !tbaa !14
%75 = getelementptr inbounds %struct.TValue* %74, i32 3
%76 = getelementptr inbounds %struct.TValue* %74, i32 3
%77 = bitcast %struct.TValue* %76 to double*
%78 = load double* %77, !tbaa !18
%79 = bitcast %struct.TValue* %74 to i64*
%80 = load i64* %79, !tbaa !18
%81 = sitofp i64 %80 to double
%82 = fdiv double %78, %81
%83 = bitcast %struct.TValue* %75 to double*
store double %82, double* %83, !tbaa !18
%dest.tt36 = getelementptr inbounds %struct.TValue* %75, i32 0, i32 1
store i32 3, i32* %dest.tt36, !tbaa !15
call void @raviV_op_loadnil(%struct.CallInfo* %0, i32 4, i32 0)
%84 = load %struct.TValue** %sunkaddr123, !tbaa !14
%85 = getelementptr inbounds %struct.TValue* %84, i32 4
%86 = bitcast %struct.TValue* %85 to i64*
store i64 0, i64* %86, !tbaa !18
%dest.tt37 = getelementptr inbounds %struct.TValue* %85, i32 0, i32 1
store i32 19, i32* %dest.tt37, !tbaa !15
%87 = load %struct.TValue** %sunkaddr123, !tbaa !14
%88 = getelementptr inbounds %struct.TValue* %87, i32 5
%89 = bitcast %struct.TValue* %88 to i64*
store i64 1, i64* %89, !tbaa !18
%dest.tt38 = getelementptr inbounds %struct.TValue* %88, i32 0, i32 1
store i32 19, i32* %dest.tt38, !tbaa !15
%90 = load %struct.TValue** %sunkaddr123, !tbaa !14
%91 = getelementptr inbounds %struct.TValue* %90, i32 6
%srcvalue39124 = bitcast %struct.TValue* %90 to double*
%destvalue40125 = bitcast %struct.TValue* %91 to double*
%92 = load double* %srcvalue39124, !tbaa !18
store double %92, double* %destvalue40125, !tbaa !18
%srctype41 = getelementptr inbounds %struct.TValue* %90, i32 0, i32 1
%desttype42 = getelementptr inbounds %struct.TValue* %91, i32 0, i32 1
%93 = load i32* %srctype41, !tbaa !15
store i32 %93, i32* %desttype42, !tbaa !15
%94 = load %struct.TValue** %sunkaddr123, !tbaa !14
%95 = getelementptr inbounds %struct.TValue* %94, i32 7
%96 = bitcast %struct.TValue* %95 to i64*
store i64 1, i64* %96, !tbaa !18
%dest.tt43 = getelementptr inbounds %struct.TValue* %95, i32 0, i32 1
store i32 19, i32* %dest.tt43, !tbaa !15
%97 = load %struct.TValue** %sunkaddr123, !tbaa !14
%98 = getelementptr inbounds %struct.TValue* %97, i32 5
%99 = getelementptr inbounds %struct.TValue* %97, i32 6
%100 = bitcast %struct.TValue* %99 to i64*
%101 = load i64* %100, !tbaa !18
%102 = bitcast %struct.TValue* %98 to i64*
%103 = load i64* %102, !tbaa !18
%initv-pstep.i = sub nsw i64 %103, 1
store i64 %initv-pstep.i, i64* %iidx, !tbaa !17
store i64 %101, i64* %ilimit, !tbaa !17
br label %forloop35_
forbody21_: ; preds = %forloop35_
%sunkaddr137 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr138 = add i64 %sunkaddr137, 32
%sunkaddr139 = inttoptr i64 %sunkaddr138 to %struct.TValue**
%104 = load %struct.TValue** %sunkaddr139, !tbaa !14
%105 = getelementptr inbounds %struct.TValue* %104, i32 8
%106 = load i64* %iidx, !tbaa !17
%107 = bitcast %struct.TValue* %105 to i64*
store i64 %106, i64* %107, !tbaa !18
%dest.tt65 = getelementptr inbounds %struct.TValue* %105, i32 0, i32 1
store i32 19, i32* %dest.tt65, !tbaa !15
%sunkaddr126 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr127 = add i64 %sunkaddr126, 32
%sunkaddr128 = inttoptr i64 %sunkaddr127 to %struct.TValue**
%108 = load %struct.TValue** %sunkaddr128, !tbaa !14
%109 = getelementptr inbounds %struct.TValue* %108, i32 9
%110 = getelementptr inbounds %struct.TValue* %108, i32 8
%111 = bitcast %struct.TValue* %110 to i64*
%112 = load i64* %111, !tbaa !18
%113 = sub nsw i64 %112, 1
%114 = bitcast %struct.TValue* %109 to i64*
store i64 %113, i64* %114, !tbaa !18
%dest.tt44 = getelementptr inbounds %struct.TValue* %109, i32 0, i32 1
store i32 19, i32* %dest.tt44, !tbaa !15
%115 = load %struct.TValue** %sunkaddr128, !tbaa !14
%116 = getelementptr inbounds %struct.TValue* %115, i32 4
%117 = getelementptr inbounds %struct.TValue* %115, i32 9
%118 = bitcast %struct.TValue* %117 to i64*
%119 = load i64* %118, !tbaa !18
%120 = bitcast %struct.TValue* %115 to i64*
%121 = load i64* %120, !tbaa !18
%122 = mul nsw i64 %119, %121
%123 = bitcast %struct.TValue* %116 to i64*
store i64 %122, i64* %123, !tbaa !18
%dest.tt45 = getelementptr inbounds %struct.TValue* %116, i32 0, i32 1
store i32 19, i32* %dest.tt45, !tbaa !15
%124 = load %struct.TValue** %sunkaddr128, !tbaa !14
%125 = getelementptr inbounds %struct.TValue* %124, i32 9
%126 = bitcast %struct.TValue* %125 to i64*
store i64 1, i64* %126, !tbaa !18
%dest.tt46 = getelementptr inbounds %struct.TValue* %125, i32 0, i32 1
store i32 19, i32* %dest.tt46, !tbaa !15
%127 = load %struct.TValue** %sunkaddr128, !tbaa !14
%128 = getelementptr inbounds %struct.TValue* %127, i32 10
%srcvalue47129 = bitcast %struct.TValue* %127 to double*
%destvalue48130 = bitcast %struct.TValue* %128 to double*
%129 = load double* %srcvalue47129, !tbaa !18
store double %129, double* %destvalue48130, !tbaa !18
%srctype49 = getelementptr inbounds %struct.TValue* %127, i32 0, i32 1
%desttype50 = getelementptr inbounds %struct.TValue* %128, i32 0, i32 1
%130 = load i32* %srctype49, !tbaa !15
store i32 %130, i32* %desttype50, !tbaa !15
%131 = load %struct.TValue** %sunkaddr128, !tbaa !14
%132 = getelementptr inbounds %struct.TValue* %131, i32 11
%133 = bitcast %struct.TValue* %132 to i64*
store i64 1, i64* %133, !tbaa !18
%dest.tt51 = getelementptr inbounds %struct.TValue* %132, i32 0, i32 1
store i32 19, i32* %dest.tt51, !tbaa !15
%134 = load %struct.TValue** %sunkaddr128, !tbaa !14
%135 = getelementptr inbounds %struct.TValue* %134, i32 9
%136 = getelementptr inbounds %struct.TValue* %134, i32 10
%137 = bitcast %struct.TValue* %136 to i64*
%138 = load i64* %137, !tbaa !18
%139 = bitcast %struct.TValue* %135 to i64*
%140 = load i64* %139, !tbaa !18
%initv-pstep.i54 = sub nsw i64 %140, 1
store i64 %initv-pstep.i54, i64* %iidx53, !tbaa !17
store i64 %138, i64* %ilimit52, !tbaa !17
br label %forloop34_
forbody27_: ; preds = %forloop34_
%sunkaddr134 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr135 = add i64 %sunkaddr134, 32
%sunkaddr136 = inttoptr i64 %sunkaddr135 to %struct.TValue**
%141 = load %struct.TValue** %sunkaddr136, !tbaa !14
%142 = getelementptr inbounds %struct.TValue* %141, i32 12
%143 = load i64* %iidx53, !tbaa !17
%144 = bitcast %struct.TValue* %142 to i64*
store i64 %143, i64* %144, !tbaa !18
%dest.tt61 = getelementptr inbounds %struct.TValue* %142, i32 0, i32 1
store i32 19, i32* %dest.tt61, !tbaa !15
%sunkaddr131 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr132 = add i64 %sunkaddr131, 32
%sunkaddr133 = inttoptr i64 %sunkaddr132 to %struct.TValue**
%145 = load %struct.TValue** %sunkaddr133, !tbaa !14
%146 = getelementptr inbounds %struct.TValue* %145, i32 13
%147 = getelementptr inbounds %struct.TValue* %145, i32 4
%148 = bitcast %struct.TValue* %147 to i64*
%149 = load i64* %148, !tbaa !18
%150 = getelementptr inbounds %struct.TValue* %145, i32 12
%151 = bitcast %struct.TValue* %150 to i64*
%152 = load i64* %151, !tbaa !18
%153 = add nsw i64 %149, %152
%154 = bitcast %struct.TValue* %146 to i64*
store i64 %153, i64* %154, !tbaa !18
%dest.tt55 = getelementptr inbounds %struct.TValue* %146, i32 0, i32 1
store i32 19, i32* %dest.tt55, !tbaa !15
%155 = load %struct.TValue** %sunkaddr133, !tbaa !14
%156 = getelementptr inbounds %struct.TValue* %155, i32 14
%157 = getelementptr inbounds %struct.TValue* %155, i32 8
%158 = bitcast %struct.TValue* %157 to i64*
%159 = load i64* %158, !tbaa !18
%160 = getelementptr inbounds %struct.TValue* %155, i32 12
%161 = bitcast %struct.TValue* %160 to i64*
%162 = load i64* %161, !tbaa !18
%163 = sub nsw i64 %159, %162
%164 = bitcast %struct.TValue* %156 to i64*
store i64 %163, i64* %164, !tbaa !18
%dest.tt56 = getelementptr inbounds %struct.TValue* %156, i32 0, i32 1
store i32 19, i32* %dest.tt56, !tbaa !15
%165 = load %struct.TValue** %sunkaddr133, !tbaa !14
%166 = getelementptr inbounds %struct.TValue* %165, i32 14
%167 = getelementptr inbounds %struct.TValue* %165, i32 3
%168 = bitcast %struct.TValue* %167 to double*
%169 = load double* %168, !tbaa !18
%170 = getelementptr inbounds %struct.TValue* %165, i32 14
%171 = bitcast %struct.TValue* %170 to i64*
%172 = load i64* %171, !tbaa !18
%173 = sitofp i64 %172 to double
%174 = fmul double %169, %173
%175 = bitcast %struct.TValue* %166 to double*
store double %174, double* %175, !tbaa !18
%dest.tt57 = getelementptr inbounds %struct.TValue* %166, i32 0, i32 1
store i32 3, i32* %dest.tt57, !tbaa !15
%176 = load %struct.TValue** %sunkaddr133, !tbaa !14
%177 = getelementptr inbounds %struct.TValue* %176, i32 15
%178 = getelementptr inbounds %struct.TValue* %176, i32 8
%179 = bitcast %struct.TValue* %178 to i64*
%180 = load i64* %179, !tbaa !18
%181 = getelementptr inbounds %struct.TValue* %176, i32 12
%182 = bitcast %struct.TValue* %181 to i64*
%183 = load i64* %182, !tbaa !18
%184 = add nsw i64 %180, %183
%185 = bitcast %struct.TValue* %177 to i64*
store i64 %184, i64* %185, !tbaa !18
%dest.tt58 = getelementptr inbounds %struct.TValue* %177, i32 0, i32 1
store i32 19, i32* %dest.tt58, !tbaa !15
%186 = load %struct.TValue** %sunkaddr133, !tbaa !14
%187 = getelementptr inbounds %struct.TValue* %186, i32 15
%188 = getelementptr inbounds %struct.TValue* %186, i32 15
%189 = bitcast %struct.TValue* %188 to i64*
%190 = load i64* %189, !tbaa !18
%191 = sub nsw i64 %190, 2
%192 = bitcast %struct.TValue* %187 to i64*
store i64 %191, i64* %192, !tbaa !18
%dest.tt59 = getelementptr inbounds %struct.TValue* %187, i32 0, i32 1
store i32 19, i32* %dest.tt59, !tbaa !15
%193 = load %struct.TValue** %sunkaddr133, !tbaa !14
%194 = getelementptr inbounds %struct.TValue* %193, i32 14
%195 = getelementptr inbounds %struct.TValue* %193, i32 14
%196 = bitcast %struct.TValue* %195 to double*
%197 = load double* %196, !tbaa !18
%198 = getelementptr inbounds %struct.TValue* %193, i32 15
%199 = bitcast %struct.TValue* %198 to i64*
%200 = load i64* %199, !tbaa !18
%201 = sitofp i64 %200 to double
%202 = fmul double %197, %201
%203 = bitcast %struct.TValue* %194 to double*
store double %202, double* %203, !tbaa !18
%dest.tt60 = getelementptr inbounds %struct.TValue* %194, i32 0, i32 1
store i32 3, i32* %dest.tt60, !tbaa !15
%204 = load %struct.TValue** %sunkaddr133, !tbaa !14
%205 = getelementptr inbounds %struct.TValue* %204, i32 2
%206 = getelementptr inbounds %struct.TValue* %204, i32 13
%207 = getelementptr inbounds %struct.TValue* %204, i32 14
call void @luaV_settable(%struct.lua_State* %L, %struct.TValue* %205, %struct.TValue* %206, %struct.TValue* %207)
br label %forloop34_
forloop34_: ; preds = %forbody27_, %forbody21_
%208 = load i64* %iidx53, !tbaa !17
%next.idx = add nsw i64 1, %208
store i64 %next.idx, i64* %iidx53, !tbaa !17
%209 = load i64* %ilimit52, !tbaa !17
%idx.gt.limit = icmp sgt i64 %next.idx, %209
br i1 %idx.gt.limit, label %forloop35_, label %forbody27_
forloop35_: ; preds = %forloop34_, %op_call.done34
%210 = load i64* %iidx, !tbaa !17
%next.idx62 = add nsw i64 1, %210
store i64 %next.idx62, i64* %iidx, !tbaa !17
%211 = load i64* %ilimit, !tbaa !17
%idx.gt.limit63 = icmp sgt i64 %next.idx62, %211
br i1 %idx.gt.limit63, label %exit_iforloop66, label %forbody21_
exit_iforloop66: ; preds = %forloop35_
%sunkaddr140 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr141 = add i64 %sunkaddr140, 32
%sunkaddr142 = inttoptr i64 %sunkaddr141 to %struct.TValue**
%212 = load %struct.TValue** %sunkaddr142, !tbaa !14
%213 = getelementptr inbounds %struct.TValue* %212, i32 5
%214 = getelementptr inbounds %struct.TValue* %5, i32 2
%upvals67 = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 6, i32 0
%215 = load %struct.UpVal** %upvals67, !tbaa !8
%v68143 = bitcast %struct.UpVal* %215 to %struct.TValue**
%216 = load %struct.TValue** %v68143, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %216, %struct.TValue* %214, %struct.TValue* %213)
%217 = load %struct.TValue** %sunkaddr142, !tbaa !14
%218 = getelementptr inbounds %struct.TValue* %217, i32 5
%219 = getelementptr inbounds %struct.TValue* %217, i32 5
%220 = getelementptr inbounds %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %219, %struct.TValue* %220, %struct.TValue* %218)
%221 = load %struct.TValue** %sunkaddr142, !tbaa !14
%222 = getelementptr inbounds %struct.TValue* %221, i32 6
%L.top69 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %222, %struct.TValue** %L.top69, !tbaa !21
%223 = getelementptr inbounds %struct.TValue* %221, i32 5
%224 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %223, i32 1)
%225 = icmp eq i32 %224, 0
br i1 %225, label %if.lua.function70, label %if.not.lua.function71
if.lua.function70: ; preds = %exit_iforloop66
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done75
if.not.lua.function71: ; preds = %exit_iforloop66
%226 = icmp eq i32 %224, 1
br i1 %226, label %if.C.function72, label %op_call.done75
if.C.function72: ; preds = %if.not.lua.function71
%ci_top73 = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 1
%227 = load %struct.TValue** %ci_top73, !tbaa !23
%L_top74 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %227, %struct.TValue** %L_top74, !tbaa !21
br label %op_call.done75
op_call.done75: ; preds = %if.C.function72, %if.not.lua.function71, %if.lua.function70
%sunkaddr144 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr145 = add i64 %sunkaddr144, 32
%sunkaddr146 = inttoptr i64 %sunkaddr145 to %struct.TValue**
%228 = load %struct.TValue** %sunkaddr146, !tbaa !14
%229 = getelementptr inbounds %struct.TValue* %228, i32 6
%upvals76 = getelementptr inbounds %struct.LClosure* %3, i32 0, i32 6, i32 0
%230 = load %struct.UpVal** %upvals76, !tbaa !8
%v77147 = bitcast %struct.UpVal* %230 to %struct.TValue**
%231 = load %struct.TValue** %v77147, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %231, %struct.TValue* %5, %struct.TValue* %229)
%232 = load %struct.TValue** %sunkaddr146, !tbaa !14
%233 = getelementptr inbounds %struct.TValue* %232, i32 7
%234 = getelementptr inbounds %struct.TValue* %5, i32 7
%srcvalue78148 = bitcast %struct.TValue* %234 to double*
%destvalue79149 = bitcast %struct.TValue* %233 to double*
%235 = load double* %srcvalue78148, !tbaa !18
store double %235, double* %destvalue79149, !tbaa !18
%srctype80 = getelementptr inbounds %struct.TValue* %234, i32 0, i32 1
%desttype81 = getelementptr inbounds %struct.TValue* %233, i32 0, i32 1
%236 = load i32* %srctype80, !tbaa !15
store i32 %236, i32* %desttype81, !tbaa !15
%237 = load %struct.TValue** %sunkaddr146, !tbaa !14
%238 = getelementptr inbounds %struct.TValue* %237, i32 8
%239 = getelementptr inbounds %struct.TValue* %237, i32 5
%240 = getelementptr inbounds %struct.TValue* %237, i32 1
%value.tt.ptr82 = getelementptr inbounds %struct.TValue* %239, i32 0, i32 1
%value.tt83 = load i32* %value.tt.ptr82, !tbaa !15
%value.tt.ptr84 = getelementptr inbounds %struct.TValue* %240, i32 0, i32 1
%value.tt85 = load i32* %value.tt.ptr84, !tbaa !15
%rb.is.integer = icmp eq i32 %value.tt83, 19
%rc.is.integer = icmp eq i32 %value.tt85, 19
%241 = and i1 %rb.is.integer, %rc.is.integer
br i1 %241, label %if.integer, label %if.not.integer87
if.integer: ; preds = %op_call.done75
%242 = bitcast %struct.TValue* %239 to i64*
%243 = load i64* %242, !tbaa !18
%244 = bitcast %struct.TValue* %240 to i64*
%245 = load i64* %244, !tbaa !18
%246 = sub nsw i64 %243, %245
%247 = bitcast %struct.TValue* %238 to i64*
store i64 %246, i64* %247, !tbaa !18
%dest.tt86 = getelementptr inbounds %struct.TValue* %238, i32 0, i32 1
store i32 19, i32* %dest.tt86, !tbaa !15
br label %done89
if.not.integer87: ; preds = %op_call.done75
%rb.is.float = icmp eq i32 %value.tt83, 3
br i1 %rb.is.float, label %load.rb, label %convert.rb
convert.rb: ; preds = %if.not.integer87
%248 = call i32 @luaV_tonumber_(%struct.TValue* %239, double* %nb)
%rb.float.ok = icmp eq i32 %248, 1
br i1 %rb.float.ok, label %test.rc, label %try_meta
load.rb: ; preds = %if.not.integer87
%249 = bitcast %struct.TValue* %239 to double*
%250 = load double* %249, !tbaa !18
store double %250, double* %nb, !tbaa !17
br label %test.rc
test.rc: ; preds = %load.rb, %convert.rb
%rc.is.float = icmp eq i32 %value.tt85, 3
br i1 %rc.is.float, label %load.rc, label %convert.rc
convert.rc: ; preds = %test.rc
%251 = call i32 @luaV_tonumber_(%struct.TValue* %240, double* %nc)
%rc.float.ok = icmp eq i32 %251, 1
br i1 %rc.float.ok, label %float.op, label %try_meta
load.rc: ; preds = %test.rc
%252 = bitcast %struct.TValue* %240 to double*
%253 = load double* %252, !tbaa !18
store double %253, double* %nc, !tbaa !17
br label %float.op
float.op: ; preds = %load.rc, %convert.rc
%254 = load double* %nb, !tbaa !17
%255 = load double* %nc, !tbaa !17
%256 = fsub double %254, %255
%257 = bitcast %struct.TValue* %238 to double*
store double %256, double* %257, !tbaa !18
%dest.tt88 = getelementptr inbounds %struct.TValue* %238, i32 0, i32 1
store i32 3, i32* %dest.tt88, !tbaa !15
br label %done89
try_meta: ; preds = %convert.rc, %convert.rb
call void @luaT_trybinTM(%struct.lua_State* %L, %struct.TValue* %239, %struct.TValue* %240, %struct.TValue* %238, i32 7)
br label %done89
done89: ; preds = %try_meta, %float.op, %if.integer
%sunkaddr150 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr151 = add i64 %sunkaddr150, 32
%sunkaddr152 = inttoptr i64 %sunkaddr151 to %struct.TValue**
%258 = load %struct.TValue** %sunkaddr152, !tbaa !14
%259 = getelementptr inbounds %struct.TValue* %258, i32 9
%L.top90 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %259, %struct.TValue** %L.top90, !tbaa !21
%260 = getelementptr inbounds %struct.TValue* %258, i32 6
%261 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %260, i32 0)
%262 = icmp eq i32 %261, 0
br i1 %262, label %if.lua.function91, label %if.not.lua.function92
if.lua.function91: ; preds = %done89
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done96
if.not.lua.function92: ; preds = %done89
%263 = icmp eq i32 %261, 1
br i1 %263, label %if.C.function93, label %op_call.done96
if.C.function93: ; preds = %if.not.lua.function92
%ci_top94 = getelementptr inbounds %struct.CallInfo* %0, i32 0, i32 1
%264 = load %struct.TValue** %ci_top94, !tbaa !23
%L_top95 = getelementptr inbounds %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %264, %struct.TValue** %L_top95, !tbaa !21
br label %op_call.done96
op_call.done96: ; preds = %if.C.function93, %if.not.lua.function92, %if.lua.function91
%sunkaddr153 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr154 = add i64 %sunkaddr153, 32
%sunkaddr155 = inttoptr i64 %sunkaddr154 to %struct.TValue**
%265 = load %struct.TValue** %sunkaddr155, !tbaa !14
%266 = getelementptr inbounds %struct.TValue* %265, i32 2
%sizep = getelementptr inbounds %struct.Proto* %4, i32 0, i32 10
%267 = load i32* %sizep, !tbaa !24
%268 = icmp sgt i32 %267, 0
br i1 %268, label %if.then, label %if.else
if.then: ; preds = %op_call.done96
call void @luaF_close(%struct.lua_State* %L, %struct.TValue* %265)
br label %if.else
if.else: ; preds = %if.then, %op_call.done96
%269 = call i32 @luaD_poscall(%struct.lua_State* %L, %struct.TValue* %266, i32 1)
ret i32 1
}
; Function Attrs: nounwind
declare void @luaT_trybinTM(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaD_call(%struct.lua_State*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_poscall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_precall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaF_close(%struct.lua_State*, %struct.TValue*) #0
; Function Attrs: noreturn nounwind
declare void @luaG_runerror(%struct.lua_State*, i8*, ...) #1
; Function Attrs: nounwind
declare i32 @luaV_equalobj(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessthan(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessequal(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_forlimit(%struct.TValue*, i64*, i64, i32*) #0
; Function Attrs: nounwind
declare i32 @luaV_tonumber_(%struct.TValue*, double*) #0
; Function Attrs: nounwind
declare i32 @luaV_tointeger_(%struct.TValue*, i64*) #0
; Function Attrs: nounwind
declare void @luaV_execute(%struct.lua_State*) #0
; Function Attrs: nounwind
declare void @luaV_settable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaV_gettable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_loadnil(%struct.CallInfo*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayint(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayfloat(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newtable(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_setlist(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i64 @luaV_mod(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare i64 @luaV_div(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare void @luaV_objlen(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaC_upvalbarrier_(%struct.lua_State*, %struct.UpVal*) #0
; Function Attrs: nounwind
declare void @raviV_op_concat(%struct.lua_State*, %struct.CallInfo*, i32, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_closure(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_vararg(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviH_set_int(%struct.lua_State*, %struct.Table*, i64, i64) #0
; Function Attrs: nounwind
declare void @raviH_set_float(%struct.lua_State*, %struct.Table*, i64, double) #0
; Function Attrs: nounwind
declare void @raviV_op_shl(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_shr(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
declare i32 @printf(i8*, ...)
declare double @fmod(double, double)
declare double @pow(double, double)
declare double @floor(double)
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!12, !1, i64 44}
!12 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}
!13 = !{!"int", !2, i64 0}
!14 = !{!0, !1, i64 16}
!15 = !{!16, !13, i64 8}
!16 = !{!"TValue", !5, i64 0, !13, i64 8}
!17 = !{!5, !5, i64 0}
!18 = !{!16, !5, i64 0}
!19 = !{!20, !1, i64 0}
!20 = !{!"UpVal", !1, i64 0, !5, i64 8, !16, i64 16}
!21 = !{!22, !1, i64 8}
!22 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !13, i64 104, !13, i64 108, !13, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!23 = !{!0, !1, i64 4}
!24 = !{!12, !13, i64 28}

@ -1,788 +0,0 @@
; ModuleID = 'ravi_module_ravif1'
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
%0 = type { %struct.TValue*, i32*, i64 }
%struct.lua_State = type { %struct.GCObject*, i8, i8, i8, %struct.TValue*, %struct.global_State*, %struct.CallInfo*, i32*, %struct.TValue*, %struct.TValue*, %struct.UpVal*, %struct.GCObject*, %struct.lua_State*, %struct.lua_longjmp*, %struct.CallInfo, i8* (%struct.lua_State*, %struct.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%struct.global_State = type opaque
%struct.TValue = type { %union.Value, i32 }
%union.Value = type { double }
%struct.UpVal = type { %struct.TValue*, i64, %struct.TValue }
%struct.GCObject = type { %struct.GCObject*, i8, i8 }
%struct.lua_longjmp = type opaque
%struct.CallInfo = type { %struct.TValue*, %struct.TValue*, %struct.CallInfo*, %struct.CallInfo*, %0, i64, i16, i8, i8 }
%struct.lua_Debug = type opaque
%struct.LClosure = type { %struct.GCObject*, i8, i8, i8, %struct.GCObject*, %struct.Proto*, [1 x %struct.UpVal*] }
%struct.Proto = type { %struct.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %struct.TValue*, i32*, %struct.Proto**, i32*, %struct.LocVar*, %struct.Upvaldesc*, %struct.LClosure*, %struct.TString*, %struct.GCObject*, %struct.RaviJITProto }
%struct.LocVar = type { %struct.TString*, i32, i32, i32 }
%struct.Upvaldesc = type { %struct.TString*, i32, i8, i8 }
%struct.TString = type { %struct.GCObject*, i8, i8, i8, i8, i32, i64 }
%struct.RaviJITProto = type { i8, i8, i16, i8*, i32 (%struct.lua_State*)* }
%struct.Table = type { %struct.GCObject*, i8, i8, i8, i8, i32, %struct.TValue*, %struct.Node*, %struct.Node*, %struct.Table*, %struct.GCObject*, %struct.RaviArray }
%struct.Node = type { %struct.TValue, %struct.TKey }
%struct.TKey = type { %union.Value, i32, i32 }
%struct.RaviArray = type { i8*, i32, i32, i8, i8 }
@0 = private unnamed_addr constant [17 x i8] c"integer expected\00"
define i32 @ravif1(%struct.lua_State* %L) {
entry:
%nb = alloca double
%nc = alloca double
%ilimit52 = alloca i64
%iidx53 = alloca i64
%ilimit = alloca i64
%iidx = alloca i64
%i = alloca i64
%L_ci = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 6
%0 = load %struct.CallInfo*, %struct.CallInfo** %L_ci, !tbaa !0
%base = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 4, i32 0
%1 = bitcast %struct.CallInfo* %0 to %struct.LClosure***
%2 = load %struct.LClosure**, %struct.LClosure*** %1, !tbaa !7
%3 = load %struct.LClosure*, %struct.LClosure** %2, !tbaa !8
%Proto = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 5
%4 = load %struct.Proto*, %struct.Proto** %Proto, !tbaa !9
%k = getelementptr inbounds %struct.Proto, %struct.Proto* %4, i32 0, i32 14
%5 = load %struct.TValue*, %struct.TValue** %k, !tbaa !11
%6 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%value.tt.ptr = getelementptr inbounds %struct.TValue, %struct.TValue* %6, i32 0, i32 1
%value.tt = load i32, i32* %value.tt.ptr, !tbaa !15
%is.not.integer = icmp ne i32 %value.tt, 19
br i1 %is.not.integer, label %if.not.integer, label %done
if.not.integer: ; preds = %entry
%7 = call i32 @luaV_tointeger_(%struct.TValue* %6, i64* %i)
%int.conversion.failed = icmp eq i32 %7, 0
br i1 %int.conversion.failed, label %if.conversion.failed, label %conversion.ok
if.conversion.failed: ; preds = %if.not.integer
call void (%struct.lua_State*, i8*, ...) @luaG_runerror(%struct.lua_State* %L, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @0, i32 0, i32 0))
br label %conversion.ok
conversion.ok: ; preds = %if.conversion.failed, %if.not.integer
%8 = load i64, i64* %i, !tbaa !17
%9 = bitcast %struct.TValue* %6 to i64*
store i64 %8, i64* %9, !tbaa !18
%dest.tt = getelementptr inbounds %struct.TValue, %struct.TValue* %6, i32 0, i32 1
store i32 19, i32* %dest.tt, !tbaa !15
br label %done
done: ; preds = %conversion.ok, %entry
%sunkaddr = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr100 = add i64 %sunkaddr, 32
%sunkaddr101 = inttoptr i64 %sunkaddr100 to %struct.TValue**
%10 = load %struct.TValue*, %struct.TValue** %sunkaddr101, !tbaa !14
%11 = getelementptr inbounds %struct.TValue, %struct.TValue* %10, i32 1
%upvals = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%12 = load %struct.UpVal*, %struct.UpVal** %upvals, !tbaa !8
%v102 = bitcast %struct.UpVal* %12 to %struct.TValue**
%13 = load %struct.TValue*, %struct.TValue** %v102, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %13, %struct.TValue* %5, %struct.TValue* %11)
%14 = load %struct.TValue*, %struct.TValue** %sunkaddr101, !tbaa !14
%15 = getelementptr inbounds %struct.TValue, %struct.TValue* %14, i32 2
%16 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 1
%srcvalue103 = bitcast %struct.TValue* %16 to double*
%destvalue104 = bitcast %struct.TValue* %15 to double*
%17 = load double, double* %srcvalue103, !tbaa !18
store double %17, double* %destvalue104, !tbaa !18
%srctype = getelementptr inbounds %struct.TValue, %struct.TValue* %16, i32 0, i32 1
%desttype = getelementptr inbounds %struct.TValue, %struct.TValue* %15, i32 0, i32 1
%18 = load i32, i32* %srctype, !tbaa !15
store i32 %18, i32* %desttype, !tbaa !15
%19 = load %struct.TValue*, %struct.TValue** %sunkaddr101, !tbaa !14
%20 = getelementptr inbounds %struct.TValue, %struct.TValue* %19, i32 3
%srcvalue1105 = bitcast %struct.TValue* %19 to double*
%destvalue2106 = bitcast %struct.TValue* %20 to double*
%21 = load double, double* %srcvalue1105, !tbaa !18
store double %21, double* %destvalue2106, !tbaa !18
%srctype3 = getelementptr inbounds %struct.TValue, %struct.TValue* %19, i32 0, i32 1
%desttype4 = getelementptr inbounds %struct.TValue, %struct.TValue* %20, i32 0, i32 1
%22 = load i32, i32* %srctype3, !tbaa !15
store i32 %22, i32* %desttype4, !tbaa !15
%23 = load %struct.TValue*, %struct.TValue** %sunkaddr101, !tbaa !14
%24 = getelementptr inbounds %struct.TValue, %struct.TValue* %23, i32 4
%L.top = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %24, %struct.TValue** %L.top, !tbaa !21
%25 = getelementptr inbounds %struct.TValue, %struct.TValue* %23, i32 1
%26 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %25, i32 0)
%27 = icmp eq i32 %26, 0
br i1 %27, label %if.lua.function, label %if.not.lua.function
if.lua.function: ; preds = %done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done
if.not.lua.function: ; preds = %done
%28 = icmp eq i32 %26, 1
br i1 %28, label %if.C.function, label %op_call.done
if.C.function: ; preds = %if.not.lua.function
%ci_top = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%29 = load %struct.TValue*, %struct.TValue** %ci_top, !tbaa !23
%L_top = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %29, %struct.TValue** %L_top, !tbaa !21
br label %op_call.done
op_call.done: ; preds = %if.C.function, %if.not.lua.function, %if.lua.function
%sunkaddr107 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr108 = add i64 %sunkaddr107, 32
%sunkaddr109 = inttoptr i64 %sunkaddr108 to %struct.TValue**
%30 = load %struct.TValue*, %struct.TValue** %sunkaddr109, !tbaa !14
%31 = getelementptr inbounds %struct.TValue, %struct.TValue* %30, i32 1
%32 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 2
%upvals5 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%33 = load %struct.UpVal*, %struct.UpVal** %upvals5, !tbaa !8
%v6110 = bitcast %struct.UpVal* %33 to %struct.TValue**
%34 = load %struct.TValue*, %struct.TValue** %v6110, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %34, %struct.TValue* %32, %struct.TValue* %31)
%35 = load %struct.TValue*, %struct.TValue** %sunkaddr109, !tbaa !14
%36 = getelementptr inbounds %struct.TValue, %struct.TValue* %35, i32 1
%37 = getelementptr inbounds %struct.TValue, %struct.TValue* %35, i32 1
%38 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %37, %struct.TValue* %38, %struct.TValue* %36)
%39 = load %struct.TValue*, %struct.TValue** %sunkaddr109, !tbaa !14
%40 = getelementptr inbounds %struct.TValue, %struct.TValue* %39, i32 2
%L.top7 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %40, %struct.TValue** %L.top7, !tbaa !21
%41 = getelementptr inbounds %struct.TValue, %struct.TValue* %39, i32 1
%42 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %41, i32 1)
%43 = icmp eq i32 %42, 0
br i1 %43, label %if.lua.function8, label %if.not.lua.function.9
if.lua.function8: ; preds = %op_call.done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.13
if.not.lua.function.9: ; preds = %op_call.done
%44 = icmp eq i32 %42, 1
br i1 %44, label %if.C.function10, label %op_call.done.13
if.C.function10: ; preds = %if.not.lua.function.9
%ci_top11 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%45 = load %struct.TValue*, %struct.TValue** %ci_top11, !tbaa !23
%L_top12 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %45, %struct.TValue** %L_top12, !tbaa !21
br label %op_call.done.13
op_call.done.13: ; preds = %if.C.function10, %if.not.lua.function.9, %if.lua.function8
%sunkaddr111 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr112 = add i64 %sunkaddr111, 32
%sunkaddr113 = inttoptr i64 %sunkaddr112 to %struct.TValue**
%46 = load %struct.TValue*, %struct.TValue** %sunkaddr113, !tbaa !14
%47 = getelementptr inbounds %struct.TValue, %struct.TValue* %46, i32 2
%upvals14 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 1
%48 = load %struct.UpVal*, %struct.UpVal** %upvals14, !tbaa !8
%v15114 = bitcast %struct.UpVal* %48 to %struct.TValue**
%49 = load %struct.TValue*, %struct.TValue** %v15114, !tbaa !19
%srcvalue16115 = bitcast %struct.TValue* %49 to double*
%destvalue17116 = bitcast %struct.TValue* %47 to double*
%50 = load double, double* %srcvalue16115, !tbaa !18
store double %50, double* %destvalue17116, !tbaa !18
%srctype18 = getelementptr inbounds %struct.TValue, %struct.TValue* %49, i32 0, i32 1
%desttype19 = getelementptr inbounds %struct.TValue, %struct.TValue* %47, i32 0, i32 1
%51 = load i32, i32* %srctype18, !tbaa !15
store i32 %51, i32* %desttype19, !tbaa !15
%52 = load %struct.TValue*, %struct.TValue** %sunkaddr113, !tbaa !14
%53 = getelementptr inbounds %struct.TValue, %struct.TValue* %52, i32 3
%srcvalue20117 = bitcast %struct.TValue* %52 to double*
%destvalue21118 = bitcast %struct.TValue* %53 to double*
%54 = load double, double* %srcvalue20117, !tbaa !18
store double %54, double* %destvalue21118, !tbaa !18
%srctype22 = getelementptr inbounds %struct.TValue, %struct.TValue* %52, i32 0, i32 1
%desttype23 = getelementptr inbounds %struct.TValue, %struct.TValue* %53, i32 0, i32 1
%55 = load i32, i32* %srctype22, !tbaa !15
store i32 %55, i32* %desttype23, !tbaa !15
%56 = load %struct.TValue*, %struct.TValue** %sunkaddr113, !tbaa !14
%57 = getelementptr inbounds %struct.TValue, %struct.TValue* %56, i32 4
%srcvalue24119 = bitcast %struct.TValue* %56 to double*
%destvalue25120 = bitcast %struct.TValue* %57 to double*
%58 = load double, double* %srcvalue24119, !tbaa !18
store double %58, double* %destvalue25120, !tbaa !18
%srctype26 = getelementptr inbounds %struct.TValue, %struct.TValue* %56, i32 0, i32 1
%desttype27 = getelementptr inbounds %struct.TValue, %struct.TValue* %57, i32 0, i32 1
%59 = load i32, i32* %srctype26, !tbaa !15
store i32 %59, i32* %desttype27, !tbaa !15
%60 = load %struct.TValue*, %struct.TValue** %sunkaddr113, !tbaa !14
%61 = getelementptr inbounds %struct.TValue, %struct.TValue* %60, i32 5
%L.top28 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %61, %struct.TValue** %L.top28, !tbaa !21
%62 = getelementptr inbounds %struct.TValue, %struct.TValue* %60, i32 2
%63 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %62, i32 1)
%64 = icmp eq i32 %63, 0
br i1 %64, label %if.lua.function29, label %if.not.lua.function.30
if.lua.function29: ; preds = %op_call.done.13
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.34
if.not.lua.function.30: ; preds = %op_call.done.13
%65 = icmp eq i32 %63, 1
br i1 %65, label %if.C.function31, label %op_call.done.34
if.C.function31: ; preds = %if.not.lua.function.30
%ci_top32 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%66 = load %struct.TValue*, %struct.TValue** %ci_top32, !tbaa !23
%L_top33 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %66, %struct.TValue** %L_top33, !tbaa !21
br label %op_call.done.34
op_call.done.34: ; preds = %if.C.function31, %if.not.lua.function.30, %if.lua.function29
%sunkaddr121 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr122 = add i64 %sunkaddr121, 32
%sunkaddr123 = inttoptr i64 %sunkaddr122 to %struct.TValue**
%67 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%68 = getelementptr inbounds %struct.TValue, %struct.TValue* %67, i32 3
%69 = bitcast %struct.TValue* %67 to i64*
%70 = load i64, i64* %69, !tbaa !18
%71 = sitofp i64 %70 to double
%72 = fdiv double 1.000000e+00, %71
%73 = bitcast %struct.TValue* %68 to double*
store double %72, double* %73, !tbaa !18
%dest.tt35 = getelementptr inbounds %struct.TValue, %struct.TValue* %68, i32 0, i32 1
store i32 3, i32* %dest.tt35, !tbaa !15
%74 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%75 = getelementptr inbounds %struct.TValue, %struct.TValue* %74, i32 3
%76 = getelementptr inbounds %struct.TValue, %struct.TValue* %74, i32 3
%77 = bitcast %struct.TValue* %76 to double*
%78 = load double, double* %77, !tbaa !18
%79 = bitcast %struct.TValue* %74 to i64*
%80 = load i64, i64* %79, !tbaa !18
%81 = sitofp i64 %80 to double
%82 = fdiv double %78, %81
%83 = bitcast %struct.TValue* %75 to double*
store double %82, double* %83, !tbaa !18
%dest.tt36 = getelementptr inbounds %struct.TValue, %struct.TValue* %75, i32 0, i32 1
store i32 3, i32* %dest.tt36, !tbaa !15
call void @raviV_op_loadnil(%struct.CallInfo* %0, i32 4, i32 0)
%84 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%85 = getelementptr inbounds %struct.TValue, %struct.TValue* %84, i32 4
%86 = bitcast %struct.TValue* %85 to i64*
store i64 0, i64* %86, !tbaa !18
%dest.tt37 = getelementptr inbounds %struct.TValue, %struct.TValue* %85, i32 0, i32 1
store i32 19, i32* %dest.tt37, !tbaa !15
%87 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%88 = getelementptr inbounds %struct.TValue, %struct.TValue* %87, i32 5
%89 = bitcast %struct.TValue* %88 to i64*
store i64 1, i64* %89, !tbaa !18
%dest.tt38 = getelementptr inbounds %struct.TValue, %struct.TValue* %88, i32 0, i32 1
store i32 19, i32* %dest.tt38, !tbaa !15
%90 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%91 = getelementptr inbounds %struct.TValue, %struct.TValue* %90, i32 6
%srcvalue39124 = bitcast %struct.TValue* %90 to double*
%destvalue40125 = bitcast %struct.TValue* %91 to double*
%92 = load double, double* %srcvalue39124, !tbaa !18
store double %92, double* %destvalue40125, !tbaa !18
%srctype41 = getelementptr inbounds %struct.TValue, %struct.TValue* %90, i32 0, i32 1
%desttype42 = getelementptr inbounds %struct.TValue, %struct.TValue* %91, i32 0, i32 1
%93 = load i32, i32* %srctype41, !tbaa !15
store i32 %93, i32* %desttype42, !tbaa !15
%94 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%95 = getelementptr inbounds %struct.TValue, %struct.TValue* %94, i32 7
%96 = bitcast %struct.TValue* %95 to i64*
store i64 1, i64* %96, !tbaa !18
%dest.tt43 = getelementptr inbounds %struct.TValue, %struct.TValue* %95, i32 0, i32 1
store i32 19, i32* %dest.tt43, !tbaa !15
%97 = load %struct.TValue*, %struct.TValue** %sunkaddr123, !tbaa !14
%98 = getelementptr inbounds %struct.TValue, %struct.TValue* %97, i32 5
%99 = getelementptr inbounds %struct.TValue, %struct.TValue* %97, i32 6
%100 = bitcast %struct.TValue* %99 to i64*
%101 = load i64, i64* %100, !tbaa !18
%102 = bitcast %struct.TValue* %98 to i64*
%103 = load i64, i64* %102, !tbaa !18
%initv-pstep.i = sub nsw i64 %103, 1
store i64 %initv-pstep.i, i64* %iidx, !tbaa !17
store i64 %101, i64* %ilimit, !tbaa !17
br label %forloop35_
forbody21_: ; preds = %forloop35_
%sunkaddr137 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr138 = add i64 %sunkaddr137, 32
%sunkaddr139 = inttoptr i64 %sunkaddr138 to %struct.TValue**
%104 = load %struct.TValue*, %struct.TValue** %sunkaddr139, !tbaa !14
%105 = getelementptr inbounds %struct.TValue, %struct.TValue* %104, i32 8
%106 = load i64, i64* %iidx, !tbaa !17
%107 = bitcast %struct.TValue* %105 to i64*
store i64 %106, i64* %107, !tbaa !18
%dest.tt65 = getelementptr inbounds %struct.TValue, %struct.TValue* %105, i32 0, i32 1
store i32 19, i32* %dest.tt65, !tbaa !15
%sunkaddr126 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr127 = add i64 %sunkaddr126, 32
%sunkaddr128 = inttoptr i64 %sunkaddr127 to %struct.TValue**
%108 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%109 = getelementptr inbounds %struct.TValue, %struct.TValue* %108, i32 9
%110 = getelementptr inbounds %struct.TValue, %struct.TValue* %108, i32 8
%111 = bitcast %struct.TValue* %110 to i64*
%112 = load i64, i64* %111, !tbaa !18
%113 = sub nsw i64 %112, 1
%114 = bitcast %struct.TValue* %109 to i64*
store i64 %113, i64* %114, !tbaa !18
%dest.tt44 = getelementptr inbounds %struct.TValue, %struct.TValue* %109, i32 0, i32 1
store i32 19, i32* %dest.tt44, !tbaa !15
%115 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%116 = getelementptr inbounds %struct.TValue, %struct.TValue* %115, i32 4
%117 = getelementptr inbounds %struct.TValue, %struct.TValue* %115, i32 9
%118 = bitcast %struct.TValue* %117 to i64*
%119 = load i64, i64* %118, !tbaa !18
%120 = bitcast %struct.TValue* %115 to i64*
%121 = load i64, i64* %120, !tbaa !18
%122 = mul nsw i64 %119, %121
%123 = bitcast %struct.TValue* %116 to i64*
store i64 %122, i64* %123, !tbaa !18
%dest.tt45 = getelementptr inbounds %struct.TValue, %struct.TValue* %116, i32 0, i32 1
store i32 19, i32* %dest.tt45, !tbaa !15
%124 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%125 = getelementptr inbounds %struct.TValue, %struct.TValue* %124, i32 9
%126 = bitcast %struct.TValue* %125 to i64*
store i64 1, i64* %126, !tbaa !18
%dest.tt46 = getelementptr inbounds %struct.TValue, %struct.TValue* %125, i32 0, i32 1
store i32 19, i32* %dest.tt46, !tbaa !15
%127 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%128 = getelementptr inbounds %struct.TValue, %struct.TValue* %127, i32 10
%srcvalue47129 = bitcast %struct.TValue* %127 to double*
%destvalue48130 = bitcast %struct.TValue* %128 to double*
%129 = load double, double* %srcvalue47129, !tbaa !18
store double %129, double* %destvalue48130, !tbaa !18
%srctype49 = getelementptr inbounds %struct.TValue, %struct.TValue* %127, i32 0, i32 1
%desttype50 = getelementptr inbounds %struct.TValue, %struct.TValue* %128, i32 0, i32 1
%130 = load i32, i32* %srctype49, !tbaa !15
store i32 %130, i32* %desttype50, !tbaa !15
%131 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%132 = getelementptr inbounds %struct.TValue, %struct.TValue* %131, i32 11
%133 = bitcast %struct.TValue* %132 to i64*
store i64 1, i64* %133, !tbaa !18
%dest.tt51 = getelementptr inbounds %struct.TValue, %struct.TValue* %132, i32 0, i32 1
store i32 19, i32* %dest.tt51, !tbaa !15
%134 = load %struct.TValue*, %struct.TValue** %sunkaddr128, !tbaa !14
%135 = getelementptr inbounds %struct.TValue, %struct.TValue* %134, i32 9
%136 = getelementptr inbounds %struct.TValue, %struct.TValue* %134, i32 10
%137 = bitcast %struct.TValue* %136 to i64*
%138 = load i64, i64* %137, !tbaa !18
%139 = bitcast %struct.TValue* %135 to i64*
%140 = load i64, i64* %139, !tbaa !18
%initv-pstep.i54 = sub nsw i64 %140, 1
store i64 %initv-pstep.i54, i64* %iidx53, !tbaa !17
store i64 %138, i64* %ilimit52, !tbaa !17
br label %forloop34_
forbody27_: ; preds = %forloop34_
%sunkaddr134 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr135 = add i64 %sunkaddr134, 32
%sunkaddr136 = inttoptr i64 %sunkaddr135 to %struct.TValue**
%141 = load %struct.TValue*, %struct.TValue** %sunkaddr136, !tbaa !14
%142 = getelementptr inbounds %struct.TValue, %struct.TValue* %141, i32 12
%143 = load i64, i64* %iidx53, !tbaa !17
%144 = bitcast %struct.TValue* %142 to i64*
store i64 %143, i64* %144, !tbaa !18
%dest.tt61 = getelementptr inbounds %struct.TValue, %struct.TValue* %142, i32 0, i32 1
store i32 19, i32* %dest.tt61, !tbaa !15
%sunkaddr131 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr132 = add i64 %sunkaddr131, 32
%sunkaddr133 = inttoptr i64 %sunkaddr132 to %struct.TValue**
%145 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%146 = getelementptr inbounds %struct.TValue, %struct.TValue* %145, i32 13
%147 = getelementptr inbounds %struct.TValue, %struct.TValue* %145, i32 4
%148 = bitcast %struct.TValue* %147 to i64*
%149 = load i64, i64* %148, !tbaa !18
%150 = getelementptr inbounds %struct.TValue, %struct.TValue* %145, i32 12
%151 = bitcast %struct.TValue* %150 to i64*
%152 = load i64, i64* %151, !tbaa !18
%153 = add nsw i64 %149, %152
%154 = bitcast %struct.TValue* %146 to i64*
store i64 %153, i64* %154, !tbaa !18
%dest.tt55 = getelementptr inbounds %struct.TValue, %struct.TValue* %146, i32 0, i32 1
store i32 19, i32* %dest.tt55, !tbaa !15
%155 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%156 = getelementptr inbounds %struct.TValue, %struct.TValue* %155, i32 14
%157 = getelementptr inbounds %struct.TValue, %struct.TValue* %155, i32 8
%158 = bitcast %struct.TValue* %157 to i64*
%159 = load i64, i64* %158, !tbaa !18
%160 = getelementptr inbounds %struct.TValue, %struct.TValue* %155, i32 12
%161 = bitcast %struct.TValue* %160 to i64*
%162 = load i64, i64* %161, !tbaa !18
%163 = sub nsw i64 %159, %162
%164 = bitcast %struct.TValue* %156 to i64*
store i64 %163, i64* %164, !tbaa !18
%dest.tt56 = getelementptr inbounds %struct.TValue, %struct.TValue* %156, i32 0, i32 1
store i32 19, i32* %dest.tt56, !tbaa !15
%165 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%166 = getelementptr inbounds %struct.TValue, %struct.TValue* %165, i32 14
%167 = getelementptr inbounds %struct.TValue, %struct.TValue* %165, i32 3
%168 = bitcast %struct.TValue* %167 to double*
%169 = load double, double* %168, !tbaa !18
%170 = getelementptr inbounds %struct.TValue, %struct.TValue* %165, i32 14
%171 = bitcast %struct.TValue* %170 to i64*
%172 = load i64, i64* %171, !tbaa !18
%173 = sitofp i64 %172 to double
%174 = fmul double %169, %173
%175 = bitcast %struct.TValue* %166 to double*
store double %174, double* %175, !tbaa !18
%dest.tt57 = getelementptr inbounds %struct.TValue, %struct.TValue* %166, i32 0, i32 1
store i32 3, i32* %dest.tt57, !tbaa !15
%176 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%177 = getelementptr inbounds %struct.TValue, %struct.TValue* %176, i32 15
%178 = getelementptr inbounds %struct.TValue, %struct.TValue* %176, i32 8
%179 = bitcast %struct.TValue* %178 to i64*
%180 = load i64, i64* %179, !tbaa !18
%181 = getelementptr inbounds %struct.TValue, %struct.TValue* %176, i32 12
%182 = bitcast %struct.TValue* %181 to i64*
%183 = load i64, i64* %182, !tbaa !18
%184 = add nsw i64 %180, %183
%185 = bitcast %struct.TValue* %177 to i64*
store i64 %184, i64* %185, !tbaa !18
%dest.tt58 = getelementptr inbounds %struct.TValue, %struct.TValue* %177, i32 0, i32 1
store i32 19, i32* %dest.tt58, !tbaa !15
%186 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%187 = getelementptr inbounds %struct.TValue, %struct.TValue* %186, i32 15
%188 = getelementptr inbounds %struct.TValue, %struct.TValue* %186, i32 15
%189 = bitcast %struct.TValue* %188 to i64*
%190 = load i64, i64* %189, !tbaa !18
%191 = sub nsw i64 %190, 2
%192 = bitcast %struct.TValue* %187 to i64*
store i64 %191, i64* %192, !tbaa !18
%dest.tt59 = getelementptr inbounds %struct.TValue, %struct.TValue* %187, i32 0, i32 1
store i32 19, i32* %dest.tt59, !tbaa !15
%193 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%194 = getelementptr inbounds %struct.TValue, %struct.TValue* %193, i32 14
%195 = getelementptr inbounds %struct.TValue, %struct.TValue* %193, i32 14
%196 = bitcast %struct.TValue* %195 to double*
%197 = load double, double* %196, !tbaa !18
%198 = getelementptr inbounds %struct.TValue, %struct.TValue* %193, i32 15
%199 = bitcast %struct.TValue* %198 to i64*
%200 = load i64, i64* %199, !tbaa !18
%201 = sitofp i64 %200 to double
%202 = fmul double %197, %201
%203 = bitcast %struct.TValue* %194 to double*
store double %202, double* %203, !tbaa !18
%dest.tt60 = getelementptr inbounds %struct.TValue, %struct.TValue* %194, i32 0, i32 1
store i32 3, i32* %dest.tt60, !tbaa !15
%204 = load %struct.TValue*, %struct.TValue** %sunkaddr133, !tbaa !14
%205 = getelementptr inbounds %struct.TValue, %struct.TValue* %204, i32 2
%206 = getelementptr inbounds %struct.TValue, %struct.TValue* %204, i32 13
%207 = getelementptr inbounds %struct.TValue, %struct.TValue* %204, i32 14
call void @luaV_settable(%struct.lua_State* %L, %struct.TValue* %205, %struct.TValue* %206, %struct.TValue* %207)
br label %forloop34_
forloop34_: ; preds = %forbody27_, %forbody21_
%208 = load i64, i64* %iidx53, !tbaa !17
%next.idx = add nsw i64 1, %208
store i64 %next.idx, i64* %iidx53, !tbaa !17
%209 = load i64, i64* %ilimit52, !tbaa !17
%idx.gt.limit = icmp sgt i64 %next.idx, %209
br i1 %idx.gt.limit, label %forloop35_, label %forbody27_
forloop35_: ; preds = %forloop34_, %op_call.done.34
%210 = load i64, i64* %iidx, !tbaa !17
%next.idx62 = add nsw i64 1, %210
store i64 %next.idx62, i64* %iidx, !tbaa !17
%211 = load i64, i64* %ilimit, !tbaa !17
%idx.gt.limit63 = icmp sgt i64 %next.idx62, %211
br i1 %idx.gt.limit63, label %exit_iforloop.66, label %forbody21_
exit_iforloop.66: ; preds = %forloop35_
%sunkaddr140 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr141 = add i64 %sunkaddr140, 32
%sunkaddr142 = inttoptr i64 %sunkaddr141 to %struct.TValue**
%212 = load %struct.TValue*, %struct.TValue** %sunkaddr142, !tbaa !14
%213 = getelementptr inbounds %struct.TValue, %struct.TValue* %212, i32 5
%214 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 2
%upvals67 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%215 = load %struct.UpVal*, %struct.UpVal** %upvals67, !tbaa !8
%v68143 = bitcast %struct.UpVal* %215 to %struct.TValue**
%216 = load %struct.TValue*, %struct.TValue** %v68143, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %216, %struct.TValue* %214, %struct.TValue* %213)
%217 = load %struct.TValue*, %struct.TValue** %sunkaddr142, !tbaa !14
%218 = getelementptr inbounds %struct.TValue, %struct.TValue* %217, i32 5
%219 = getelementptr inbounds %struct.TValue, %struct.TValue* %217, i32 5
%220 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %219, %struct.TValue* %220, %struct.TValue* %218)
%221 = load %struct.TValue*, %struct.TValue** %sunkaddr142, !tbaa !14
%222 = getelementptr inbounds %struct.TValue, %struct.TValue* %221, i32 6
%L.top69 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %222, %struct.TValue** %L.top69, !tbaa !21
%223 = getelementptr inbounds %struct.TValue, %struct.TValue* %221, i32 5
%224 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %223, i32 1)
%225 = icmp eq i32 %224, 0
br i1 %225, label %if.lua.function70, label %if.not.lua.function.71
if.lua.function70: ; preds = %exit_iforloop.66
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.75
if.not.lua.function.71: ; preds = %exit_iforloop.66
%226 = icmp eq i32 %224, 1
br i1 %226, label %if.C.function72, label %op_call.done.75
if.C.function72: ; preds = %if.not.lua.function.71
%ci_top73 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%227 = load %struct.TValue*, %struct.TValue** %ci_top73, !tbaa !23
%L_top74 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %227, %struct.TValue** %L_top74, !tbaa !21
br label %op_call.done.75
op_call.done.75: ; preds = %if.C.function72, %if.not.lua.function.71, %if.lua.function70
%sunkaddr144 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr145 = add i64 %sunkaddr144, 32
%sunkaddr146 = inttoptr i64 %sunkaddr145 to %struct.TValue**
%228 = load %struct.TValue*, %struct.TValue** %sunkaddr146, !tbaa !14
%229 = getelementptr inbounds %struct.TValue, %struct.TValue* %228, i32 6
%upvals76 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%230 = load %struct.UpVal*, %struct.UpVal** %upvals76, !tbaa !8
%v77147 = bitcast %struct.UpVal* %230 to %struct.TValue**
%231 = load %struct.TValue*, %struct.TValue** %v77147, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %231, %struct.TValue* %5, %struct.TValue* %229)
%232 = load %struct.TValue*, %struct.TValue** %sunkaddr146, !tbaa !14
%233 = getelementptr inbounds %struct.TValue, %struct.TValue* %232, i32 7
%234 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 7
%srcvalue78148 = bitcast %struct.TValue* %234 to double*
%destvalue79149 = bitcast %struct.TValue* %233 to double*
%235 = load double, double* %srcvalue78148, !tbaa !18
store double %235, double* %destvalue79149, !tbaa !18
%srctype80 = getelementptr inbounds %struct.TValue, %struct.TValue* %234, i32 0, i32 1
%desttype81 = getelementptr inbounds %struct.TValue, %struct.TValue* %233, i32 0, i32 1
%236 = load i32, i32* %srctype80, !tbaa !15
store i32 %236, i32* %desttype81, !tbaa !15
%237 = load %struct.TValue*, %struct.TValue** %sunkaddr146, !tbaa !14
%238 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 8
%239 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 5
%240 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 1
%value.tt.ptr82 = getelementptr inbounds %struct.TValue, %struct.TValue* %239, i32 0, i32 1
%value.tt83 = load i32, i32* %value.tt.ptr82, !tbaa !15
%value.tt.ptr84 = getelementptr inbounds %struct.TValue, %struct.TValue* %240, i32 0, i32 1
%value.tt85 = load i32, i32* %value.tt.ptr84, !tbaa !15
%rb.is.integer = icmp eq i32 %value.tt83, 19
%rc.is.integer = icmp eq i32 %value.tt85, 19
%241 = and i1 %rb.is.integer, %rc.is.integer
br i1 %241, label %if.integer, label %if.not.integer.87
if.integer: ; preds = %op_call.done.75
%242 = bitcast %struct.TValue* %239 to i64*
%243 = load i64, i64* %242, !tbaa !18
%244 = bitcast %struct.TValue* %240 to i64*
%245 = load i64, i64* %244, !tbaa !18
%246 = sub nsw i64 %243, %245
%247 = bitcast %struct.TValue* %238 to i64*
store i64 %246, i64* %247, !tbaa !18
%dest.tt86 = getelementptr inbounds %struct.TValue, %struct.TValue* %238, i32 0, i32 1
store i32 19, i32* %dest.tt86, !tbaa !15
br label %done.89
if.not.integer.87: ; preds = %op_call.done.75
%rb.is.float = icmp eq i32 %value.tt83, 3
br i1 %rb.is.float, label %load.rb, label %convert.rb
convert.rb: ; preds = %if.not.integer.87
%248 = call i32 @luaV_tonumber_(%struct.TValue* %239, double* %nb)
%rb.float.ok = icmp eq i32 %248, 1
br i1 %rb.float.ok, label %test.rc, label %try_meta
load.rb: ; preds = %if.not.integer.87
%249 = bitcast %struct.TValue* %239 to double*
%250 = load double, double* %249, !tbaa !18
store double %250, double* %nb, !tbaa !17
br label %test.rc
test.rc: ; preds = %load.rb, %convert.rb
%rc.is.float = icmp eq i32 %value.tt85, 3
br i1 %rc.is.float, label %load.rc, label %convert.rc
convert.rc: ; preds = %test.rc
%251 = call i32 @luaV_tonumber_(%struct.TValue* %240, double* %nc)
%rc.float.ok = icmp eq i32 %251, 1
br i1 %rc.float.ok, label %float.op, label %try_meta
load.rc: ; preds = %test.rc
%252 = bitcast %struct.TValue* %240 to double*
%253 = load double, double* %252, !tbaa !18
store double %253, double* %nc, !tbaa !17
br label %float.op
float.op: ; preds = %load.rc, %convert.rc
%254 = load double, double* %nb, !tbaa !17
%255 = load double, double* %nc, !tbaa !17
%256 = fsub double %254, %255
%257 = bitcast %struct.TValue* %238 to double*
store double %256, double* %257, !tbaa !18
%dest.tt88 = getelementptr inbounds %struct.TValue, %struct.TValue* %238, i32 0, i32 1
store i32 3, i32* %dest.tt88, !tbaa !15
br label %done.89
try_meta: ; preds = %convert.rc, %convert.rb
call void @luaT_trybinTM(%struct.lua_State* %L, %struct.TValue* %239, %struct.TValue* %240, %struct.TValue* %238, i32 7)
br label %done.89
done.89: ; preds = %try_meta, %float.op, %if.integer
%sunkaddr150 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr151 = add i64 %sunkaddr150, 32
%sunkaddr152 = inttoptr i64 %sunkaddr151 to %struct.TValue**
%258 = load %struct.TValue*, %struct.TValue** %sunkaddr152, !tbaa !14
%259 = getelementptr inbounds %struct.TValue, %struct.TValue* %258, i32 9
%L.top90 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %259, %struct.TValue** %L.top90, !tbaa !21
%260 = getelementptr inbounds %struct.TValue, %struct.TValue* %258, i32 6
%261 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %260, i32 0)
%262 = icmp eq i32 %261, 0
br i1 %262, label %if.lua.function91, label %if.not.lua.function.92
if.lua.function91: ; preds = %done.89
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.96
if.not.lua.function.92: ; preds = %done.89
%263 = icmp eq i32 %261, 1
br i1 %263, label %if.C.function93, label %op_call.done.96
if.C.function93: ; preds = %if.not.lua.function.92
%ci_top94 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%264 = load %struct.TValue*, %struct.TValue** %ci_top94, !tbaa !23
%L_top95 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %264, %struct.TValue** %L_top95, !tbaa !21
br label %op_call.done.96
op_call.done.96: ; preds = %if.C.function93, %if.not.lua.function.92, %if.lua.function91
%sunkaddr153 = ptrtoint %struct.CallInfo* %0 to i64
%sunkaddr154 = add i64 %sunkaddr153, 32
%sunkaddr155 = inttoptr i64 %sunkaddr154 to %struct.TValue**
%265 = load %struct.TValue*, %struct.TValue** %sunkaddr155, !tbaa !14
%266 = getelementptr inbounds %struct.TValue, %struct.TValue* %265, i32 2
%sizep = getelementptr inbounds %struct.Proto, %struct.Proto* %4, i32 0, i32 10
%267 = load i32, i32* %sizep, !tbaa !24
%268 = icmp sgt i32 %267, 0
br i1 %268, label %if.then, label %if.else
if.then: ; preds = %op_call.done.96
call void @luaF_close(%struct.lua_State* %L, %struct.TValue* %265)
br label %if.else
if.else: ; preds = %if.then, %op_call.done.96
%269 = call i32 @luaD_poscall(%struct.lua_State* %L, %struct.TValue* %266, i32 1)
ret i32 1
}
; Function Attrs: nounwind
declare void @luaT_trybinTM(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaD_call(%struct.lua_State*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_poscall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_precall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaF_close(%struct.lua_State*, %struct.TValue*) #0
; Function Attrs: noreturn nounwind
declare void @luaG_runerror(%struct.lua_State*, i8*, ...) #1
; Function Attrs: nounwind
declare i32 @luaV_equalobj(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessthan(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessequal(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_forlimit(%struct.TValue*, i64*, i64, i32*) #0
; Function Attrs: nounwind
declare i32 @luaV_tonumber_(%struct.TValue*, double*) #0
; Function Attrs: nounwind
declare i32 @luaV_tointeger_(%struct.TValue*, i64*) #0
; Function Attrs: nounwind
declare void @luaV_execute(%struct.lua_State*) #0
; Function Attrs: nounwind
declare void @luaV_settable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaV_gettable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_loadnil(%struct.CallInfo*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayint(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayfloat(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newtable(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_setlist(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i64 @luaV_mod(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare i64 @luaV_div(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare void @luaV_objlen(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaC_upvalbarrier_(%struct.lua_State*, %struct.UpVal*) #0
; Function Attrs: nounwind
declare void @raviV_op_concat(%struct.lua_State*, %struct.CallInfo*, i32, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_closure(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_vararg(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviH_set_int(%struct.lua_State*, %struct.Table*, i64, i64) #0
; Function Attrs: nounwind
declare void @raviH_set_float(%struct.lua_State*, %struct.Table*, i64, double) #0
; Function Attrs: nounwind
declare void @raviV_op_shl(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_shr(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
declare i32 @printf(i8*, ...)
declare double @fmod(double, double)
declare double @pow(double, double)
declare double @floor(double)
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!12, !1, i64 44}
!12 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}
!13 = !{!"int", !2, i64 0}
!14 = !{!0, !1, i64 16}
!15 = !{!16, !13, i64 8}
!16 = !{!"TValue", !5, i64 0, !13, i64 8}
!17 = !{!5, !5, i64 0}
!18 = !{!16, !5, i64 0}
!19 = !{!20, !1, i64 0}
!20 = !{!"UpVal", !1, i64 0, !5, i64 8, !16, i64 16}
!21 = !{!22, !1, i64 8}
!22 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !13, i64 104, !13, i64 108, !13, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!23 = !{!0, !1, i64 4}
!24 = !{!12, !13, i64 28}

@ -1,775 +0,0 @@
; ModuleID = 'ravi_module_ravif1'
%0 = type { %struct.TValue*, i32*, i64 }
%struct.lua_State = type { %struct.GCObject*, i8, i8, i8, %struct.TValue*, %struct.global_State*, %struct.CallInfo*, i32*, %struct.TValue*, %struct.TValue*, %struct.UpVal*, %struct.GCObject*, %struct.lua_State*, %struct.lua_longjmp*, %struct.CallInfo, i8* (%struct.lua_State*, %struct.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%struct.global_State = type opaque
%struct.TValue = type { %union.Value, i32 }
%union.Value = type { double }
%struct.UpVal = type { %struct.TValue*, i64, %struct.TValue }
%struct.GCObject = type { %struct.GCObject*, i8, i8 }
%struct.lua_longjmp = type opaque
%struct.CallInfo = type { %struct.TValue*, %struct.TValue*, %struct.CallInfo*, %struct.CallInfo*, %0, i64, i16, i8, i8 }
%struct.lua_Debug = type opaque
%struct.LClosure = type { %struct.GCObject*, i8, i8, i8, %struct.GCObject*, %struct.Proto*, [1 x %struct.UpVal*] }
%struct.Proto = type { %struct.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %struct.TValue*, i32*, %struct.Proto**, i32*, %struct.LocVar*, %struct.Upvaldesc*, %struct.LClosure*, %struct.TString*, %struct.GCObject*, %struct.RaviJITProto }
%struct.LocVar = type { %struct.TString*, i32, i32, i32 }
%struct.Upvaldesc = type { %struct.TString*, i32, i8, i8 }
%struct.TString = type { %struct.GCObject*, i8, i8, i8, i8, i32, i64 }
%struct.RaviJITProto = type { i8, i8, i16, i8*, i32 (%struct.lua_State*)* }
%struct.Table = type { %struct.GCObject*, i8, i8, i8, i8, i32, %struct.TValue*, %struct.Node*, %struct.Node*, %struct.Table*, %struct.GCObject*, %struct.RaviArray }
%struct.Node = type { %struct.TValue, %struct.TKey }
%struct.TKey = type { %union.Value, i32, i32 }
%struct.RaviArray = type { i8*, i32, i32, i8, i8 }
@0 = private unnamed_addr constant [17 x i8] c"integer expected\00"
define i32 @ravif1(%struct.lua_State* %L) {
entry:
%nb = alloca double
%nc = alloca double
%ilimit52 = alloca i64
%iidx53 = alloca i64
%ilimit = alloca i64
%iidx = alloca i64
%i = alloca i64
%L_ci = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 6
%0 = load %struct.CallInfo*, %struct.CallInfo** %L_ci, !tbaa !0
%base = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 4, i32 0
%1 = bitcast %struct.CallInfo* %0 to %struct.LClosure***
%2 = load %struct.LClosure**, %struct.LClosure*** %1, !tbaa !7
%3 = load %struct.LClosure*, %struct.LClosure** %2, !tbaa !8
%Proto = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 5
%4 = load %struct.Proto*, %struct.Proto** %Proto, !tbaa !9
%k = getelementptr inbounds %struct.Proto, %struct.Proto* %4, i32 0, i32 14
%5 = load %struct.TValue*, %struct.TValue** %k, !tbaa !11
%6 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%value.tt.ptr = getelementptr inbounds %struct.TValue, %struct.TValue* %6, i32 0, i32 1
%value.tt = load i32, i32* %value.tt.ptr, !tbaa !15
%is.not.integer = icmp ne i32 %value.tt, 19
br i1 %is.not.integer, label %if.not.integer, label %done
if.not.integer: ; preds = %entry
%7 = call i32 @luaV_tointeger_(%struct.TValue* %6, i64* %i)
%int.conversion.failed = icmp eq i32 %7, 0
br i1 %int.conversion.failed, label %if.conversion.failed, label %conversion.ok
if.conversion.failed: ; preds = %if.not.integer
call void (%struct.lua_State*, i8*, ...) @luaG_runerror(%struct.lua_State* %L, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @0, i32 0, i32 0))
br label %conversion.ok
conversion.ok: ; preds = %if.conversion.failed, %if.not.integer
%8 = load i64, i64* %i, !tbaa !17
%9 = bitcast %struct.TValue* %6 to i64*
store i64 %8, i64* %9, !tbaa !18
%dest.tt = getelementptr inbounds %struct.TValue, %struct.TValue* %6, i32 0, i32 1
store i32 19, i32* %dest.tt, !tbaa !15
br label %done
done: ; preds = %conversion.ok, %entry
%10 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%11 = getelementptr inbounds %struct.TValue, %struct.TValue* %10, i32 1
%upvals = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%12 = load %struct.UpVal*, %struct.UpVal** %upvals, !tbaa !8
%v = getelementptr inbounds %struct.UpVal, %struct.UpVal* %12, i32 0, i32 0
%13 = load %struct.TValue*, %struct.TValue** %v, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %13, %struct.TValue* %5, %struct.TValue* %11)
%14 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%15 = getelementptr inbounds %struct.TValue, %struct.TValue* %14, i32 2
%16 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 1
%srcvalue = getelementptr inbounds %struct.TValue, %struct.TValue* %16, i32 0, i32 0, i32 0
%destvalue = getelementptr inbounds %struct.TValue, %struct.TValue* %15, i32 0, i32 0, i32 0
%17 = load double, double* %srcvalue, !tbaa !18
store double %17, double* %destvalue, !tbaa !18
%srctype = getelementptr inbounds %struct.TValue, %struct.TValue* %16, i32 0, i32 1
%desttype = getelementptr inbounds %struct.TValue, %struct.TValue* %15, i32 0, i32 1
%18 = load i32, i32* %srctype, !tbaa !15
store i32 %18, i32* %desttype, !tbaa !15
%19 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%20 = getelementptr inbounds %struct.TValue, %struct.TValue* %19, i32 3
%srcvalue1 = getelementptr inbounds %struct.TValue, %struct.TValue* %19, i32 0, i32 0, i32 0
%destvalue2 = getelementptr inbounds %struct.TValue, %struct.TValue* %20, i32 0, i32 0, i32 0
%21 = load double, double* %srcvalue1, !tbaa !18
store double %21, double* %destvalue2, !tbaa !18
%srctype3 = getelementptr inbounds %struct.TValue, %struct.TValue* %19, i32 0, i32 1
%desttype4 = getelementptr inbounds %struct.TValue, %struct.TValue* %20, i32 0, i32 1
%22 = load i32, i32* %srctype3, !tbaa !15
store i32 %22, i32* %desttype4, !tbaa !15
%23 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%24 = getelementptr inbounds %struct.TValue, %struct.TValue* %23, i32 4
%L.top = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %24, %struct.TValue** %L.top, !tbaa !21
%25 = getelementptr inbounds %struct.TValue, %struct.TValue* %23, i32 1
%26 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %25, i32 0)
%27 = icmp eq i32 %26, 0
br i1 %27, label %if.lua.function, label %if.not.lua.function
if.lua.function: ; preds = %done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done
if.not.lua.function: ; preds = %done
%28 = icmp eq i32 %26, 1
br i1 %28, label %if.C.function, label %op_call.done
if.C.function: ; preds = %if.not.lua.function
%ci_top = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%29 = load %struct.TValue*, %struct.TValue** %ci_top, !tbaa !23
%L_top = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %29, %struct.TValue** %L_top, !tbaa !21
br label %op_call.done
op_call.done: ; preds = %if.C.function, %if.not.lua.function, %if.lua.function
%30 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%31 = getelementptr inbounds %struct.TValue, %struct.TValue* %30, i32 1
%32 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 2
%upvals5 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%33 = load %struct.UpVal*, %struct.UpVal** %upvals5, !tbaa !8
%v6 = getelementptr inbounds %struct.UpVal, %struct.UpVal* %33, i32 0, i32 0
%34 = load %struct.TValue*, %struct.TValue** %v6, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %34, %struct.TValue* %32, %struct.TValue* %31)
%35 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%36 = getelementptr inbounds %struct.TValue, %struct.TValue* %35, i32 1
%37 = getelementptr inbounds %struct.TValue, %struct.TValue* %35, i32 1
%38 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %37, %struct.TValue* %38, %struct.TValue* %36)
%39 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%40 = getelementptr inbounds %struct.TValue, %struct.TValue* %39, i32 2
%L.top7 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %40, %struct.TValue** %L.top7, !tbaa !21
%41 = getelementptr inbounds %struct.TValue, %struct.TValue* %39, i32 1
%42 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %41, i32 1)
%43 = icmp eq i32 %42, 0
br i1 %43, label %if.lua.function8, label %if.not.lua.function.9
if.lua.function8: ; preds = %op_call.done
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.13
if.not.lua.function.9: ; preds = %op_call.done
%44 = icmp eq i32 %42, 1
br i1 %44, label %if.C.function10, label %op_call.done.13
if.C.function10: ; preds = %if.not.lua.function.9
%ci_top11 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%45 = load %struct.TValue*, %struct.TValue** %ci_top11, !tbaa !23
%L_top12 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %45, %struct.TValue** %L_top12, !tbaa !21
br label %op_call.done.13
op_call.done.13: ; preds = %if.C.function10, %if.not.lua.function.9, %if.lua.function8
%46 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%47 = getelementptr inbounds %struct.TValue, %struct.TValue* %46, i32 2
%upvals14 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 1
%48 = load %struct.UpVal*, %struct.UpVal** %upvals14, !tbaa !8
%v15 = getelementptr inbounds %struct.UpVal, %struct.UpVal* %48, i32 0, i32 0
%49 = load %struct.TValue*, %struct.TValue** %v15, !tbaa !19
%srcvalue16 = getelementptr inbounds %struct.TValue, %struct.TValue* %49, i32 0, i32 0, i32 0
%destvalue17 = getelementptr inbounds %struct.TValue, %struct.TValue* %47, i32 0, i32 0, i32 0
%50 = load double, double* %srcvalue16, !tbaa !18
store double %50, double* %destvalue17, !tbaa !18
%srctype18 = getelementptr inbounds %struct.TValue, %struct.TValue* %49, i32 0, i32 1
%desttype19 = getelementptr inbounds %struct.TValue, %struct.TValue* %47, i32 0, i32 1
%51 = load i32, i32* %srctype18, !tbaa !15
store i32 %51, i32* %desttype19, !tbaa !15
%52 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%53 = getelementptr inbounds %struct.TValue, %struct.TValue* %52, i32 3
%srcvalue20 = getelementptr inbounds %struct.TValue, %struct.TValue* %52, i32 0, i32 0, i32 0
%destvalue21 = getelementptr inbounds %struct.TValue, %struct.TValue* %53, i32 0, i32 0, i32 0
%54 = load double, double* %srcvalue20, !tbaa !18
store double %54, double* %destvalue21, !tbaa !18
%srctype22 = getelementptr inbounds %struct.TValue, %struct.TValue* %52, i32 0, i32 1
%desttype23 = getelementptr inbounds %struct.TValue, %struct.TValue* %53, i32 0, i32 1
%55 = load i32, i32* %srctype22, !tbaa !15
store i32 %55, i32* %desttype23, !tbaa !15
%56 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%57 = getelementptr inbounds %struct.TValue, %struct.TValue* %56, i32 4
%srcvalue24 = getelementptr inbounds %struct.TValue, %struct.TValue* %56, i32 0, i32 0, i32 0
%destvalue25 = getelementptr inbounds %struct.TValue, %struct.TValue* %57, i32 0, i32 0, i32 0
%58 = load double, double* %srcvalue24, !tbaa !18
store double %58, double* %destvalue25, !tbaa !18
%srctype26 = getelementptr inbounds %struct.TValue, %struct.TValue* %56, i32 0, i32 1
%desttype27 = getelementptr inbounds %struct.TValue, %struct.TValue* %57, i32 0, i32 1
%59 = load i32, i32* %srctype26, !tbaa !15
store i32 %59, i32* %desttype27, !tbaa !15
%60 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%61 = getelementptr inbounds %struct.TValue, %struct.TValue* %60, i32 5
%L.top28 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %61, %struct.TValue** %L.top28, !tbaa !21
%62 = getelementptr inbounds %struct.TValue, %struct.TValue* %60, i32 2
%63 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %62, i32 1)
%64 = icmp eq i32 %63, 0
br i1 %64, label %if.lua.function29, label %if.not.lua.function.30
if.lua.function29: ; preds = %op_call.done.13
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.34
if.not.lua.function.30: ; preds = %op_call.done.13
%65 = icmp eq i32 %63, 1
br i1 %65, label %if.C.function31, label %op_call.done.34
if.C.function31: ; preds = %if.not.lua.function.30
%ci_top32 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%66 = load %struct.TValue*, %struct.TValue** %ci_top32, !tbaa !23
%L_top33 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %66, %struct.TValue** %L_top33, !tbaa !21
br label %op_call.done.34
op_call.done.34: ; preds = %if.C.function31, %if.not.lua.function.30, %if.lua.function29
%67 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%68 = getelementptr inbounds %struct.TValue, %struct.TValue* %67, i32 3
%69 = bitcast %struct.TValue* %67 to i64*
%70 = load i64, i64* %69, !tbaa !18
%71 = sitofp i64 %70 to double
%72 = fdiv double 1.000000e+00, %71
%73 = bitcast %struct.TValue* %68 to double*
store double %72, double* %73, !tbaa !18
%dest.tt35 = getelementptr inbounds %struct.TValue, %struct.TValue* %68, i32 0, i32 1
store i32 3, i32* %dest.tt35, !tbaa !15
%74 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%75 = getelementptr inbounds %struct.TValue, %struct.TValue* %74, i32 3
%76 = getelementptr inbounds %struct.TValue, %struct.TValue* %74, i32 3
%77 = bitcast %struct.TValue* %76 to double*
%78 = load double, double* %77, !tbaa !18
%79 = bitcast %struct.TValue* %74 to i64*
%80 = load i64, i64* %79, !tbaa !18
%81 = sitofp i64 %80 to double
%82 = fdiv double %78, %81
%83 = bitcast %struct.TValue* %75 to double*
store double %82, double* %83, !tbaa !18
%dest.tt36 = getelementptr inbounds %struct.TValue, %struct.TValue* %75, i32 0, i32 1
store i32 3, i32* %dest.tt36, !tbaa !15
call void @raviV_op_loadnil(%struct.CallInfo* %0, i32 4, i32 0)
%84 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%85 = getelementptr inbounds %struct.TValue, %struct.TValue* %84, i32 4
%86 = bitcast %struct.TValue* %85 to i64*
store i64 0, i64* %86, !tbaa !18
%dest.tt37 = getelementptr inbounds %struct.TValue, %struct.TValue* %85, i32 0, i32 1
store i32 19, i32* %dest.tt37, !tbaa !15
%87 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%88 = getelementptr inbounds %struct.TValue, %struct.TValue* %87, i32 5
%89 = bitcast %struct.TValue* %88 to i64*
store i64 1, i64* %89, !tbaa !18
%dest.tt38 = getelementptr inbounds %struct.TValue, %struct.TValue* %88, i32 0, i32 1
store i32 19, i32* %dest.tt38, !tbaa !15
%90 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%91 = getelementptr inbounds %struct.TValue, %struct.TValue* %90, i32 6
%srcvalue39 = getelementptr inbounds %struct.TValue, %struct.TValue* %90, i32 0, i32 0, i32 0
%destvalue40 = getelementptr inbounds %struct.TValue, %struct.TValue* %91, i32 0, i32 0, i32 0
%92 = load double, double* %srcvalue39, !tbaa !18
store double %92, double* %destvalue40, !tbaa !18
%srctype41 = getelementptr inbounds %struct.TValue, %struct.TValue* %90, i32 0, i32 1
%desttype42 = getelementptr inbounds %struct.TValue, %struct.TValue* %91, i32 0, i32 1
%93 = load i32, i32* %srctype41, !tbaa !15
store i32 %93, i32* %desttype42, !tbaa !15
%94 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%95 = getelementptr inbounds %struct.TValue, %struct.TValue* %94, i32 7
%96 = bitcast %struct.TValue* %95 to i64*
store i64 1, i64* %96, !tbaa !18
%dest.tt43 = getelementptr inbounds %struct.TValue, %struct.TValue* %95, i32 0, i32 1
store i32 19, i32* %dest.tt43, !tbaa !15
%97 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%98 = getelementptr inbounds %struct.TValue, %struct.TValue* %97, i32 5
%99 = getelementptr inbounds %struct.TValue, %struct.TValue* %97, i32 6
%100 = bitcast %struct.TValue* %99 to i64*
%101 = load i64, i64* %100, !tbaa !18
%102 = bitcast %struct.TValue* %98 to i64*
%103 = load i64, i64* %102, !tbaa !18
%initv-pstep.i = sub nsw i64 %103, 1
store i64 %initv-pstep.i, i64* %iidx, !tbaa !17
store i64 %101, i64* %ilimit, !tbaa !17
br label %forloop35_
forbody21_: ; preds = %updatei.64
%104 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%105 = getelementptr inbounds %struct.TValue, %struct.TValue* %104, i32 9
%106 = getelementptr inbounds %struct.TValue, %struct.TValue* %104, i32 8
%107 = bitcast %struct.TValue* %106 to i64*
%108 = load i64, i64* %107, !tbaa !18
%109 = sub nsw i64 %108, 1
%110 = bitcast %struct.TValue* %105 to i64*
store i64 %109, i64* %110, !tbaa !18
%dest.tt44 = getelementptr inbounds %struct.TValue, %struct.TValue* %105, i32 0, i32 1
store i32 19, i32* %dest.tt44, !tbaa !15
%111 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%112 = getelementptr inbounds %struct.TValue, %struct.TValue* %111, i32 4
%113 = getelementptr inbounds %struct.TValue, %struct.TValue* %111, i32 9
%114 = bitcast %struct.TValue* %113 to i64*
%115 = load i64, i64* %114, !tbaa !18
%116 = bitcast %struct.TValue* %111 to i64*
%117 = load i64, i64* %116, !tbaa !18
%118 = mul nsw i64 %115, %117
%119 = bitcast %struct.TValue* %112 to i64*
store i64 %118, i64* %119, !tbaa !18
%dest.tt45 = getelementptr inbounds %struct.TValue, %struct.TValue* %112, i32 0, i32 1
store i32 19, i32* %dest.tt45, !tbaa !15
%120 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%121 = getelementptr inbounds %struct.TValue, %struct.TValue* %120, i32 9
%122 = bitcast %struct.TValue* %121 to i64*
store i64 1, i64* %122, !tbaa !18
%dest.tt46 = getelementptr inbounds %struct.TValue, %struct.TValue* %121, i32 0, i32 1
store i32 19, i32* %dest.tt46, !tbaa !15
%123 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%124 = getelementptr inbounds %struct.TValue, %struct.TValue* %123, i32 10
%srcvalue47 = getelementptr inbounds %struct.TValue, %struct.TValue* %123, i32 0, i32 0, i32 0
%destvalue48 = getelementptr inbounds %struct.TValue, %struct.TValue* %124, i32 0, i32 0, i32 0
%125 = load double, double* %srcvalue47, !tbaa !18
store double %125, double* %destvalue48, !tbaa !18
%srctype49 = getelementptr inbounds %struct.TValue, %struct.TValue* %123, i32 0, i32 1
%desttype50 = getelementptr inbounds %struct.TValue, %struct.TValue* %124, i32 0, i32 1
%126 = load i32, i32* %srctype49, !tbaa !15
store i32 %126, i32* %desttype50, !tbaa !15
%127 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%128 = getelementptr inbounds %struct.TValue, %struct.TValue* %127, i32 11
%129 = bitcast %struct.TValue* %128 to i64*
store i64 1, i64* %129, !tbaa !18
%dest.tt51 = getelementptr inbounds %struct.TValue, %struct.TValue* %128, i32 0, i32 1
store i32 19, i32* %dest.tt51, !tbaa !15
%130 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%131 = getelementptr inbounds %struct.TValue, %struct.TValue* %130, i32 9
%132 = getelementptr inbounds %struct.TValue, %struct.TValue* %130, i32 10
%133 = bitcast %struct.TValue* %132 to i64*
%134 = load i64, i64* %133, !tbaa !18
%135 = bitcast %struct.TValue* %131 to i64*
%136 = load i64, i64* %135, !tbaa !18
%initv-pstep.i54 = sub nsw i64 %136, 1
store i64 %initv-pstep.i54, i64* %iidx53, !tbaa !17
store i64 %134, i64* %ilimit52, !tbaa !17
br label %forloop34_
forbody27_: ; preds = %updatei
%137 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%138 = getelementptr inbounds %struct.TValue, %struct.TValue* %137, i32 13
%139 = getelementptr inbounds %struct.TValue, %struct.TValue* %137, i32 4
%140 = bitcast %struct.TValue* %139 to i64*
%141 = load i64, i64* %140, !tbaa !18
%142 = getelementptr inbounds %struct.TValue, %struct.TValue* %137, i32 12
%143 = bitcast %struct.TValue* %142 to i64*
%144 = load i64, i64* %143, !tbaa !18
%145 = add nsw i64 %141, %144
%146 = bitcast %struct.TValue* %138 to i64*
store i64 %145, i64* %146, !tbaa !18
%dest.tt55 = getelementptr inbounds %struct.TValue, %struct.TValue* %138, i32 0, i32 1
store i32 19, i32* %dest.tt55, !tbaa !15
%147 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%148 = getelementptr inbounds %struct.TValue, %struct.TValue* %147, i32 14
%149 = getelementptr inbounds %struct.TValue, %struct.TValue* %147, i32 8
%150 = bitcast %struct.TValue* %149 to i64*
%151 = load i64, i64* %150, !tbaa !18
%152 = getelementptr inbounds %struct.TValue, %struct.TValue* %147, i32 12
%153 = bitcast %struct.TValue* %152 to i64*
%154 = load i64, i64* %153, !tbaa !18
%155 = sub nsw i64 %151, %154
%156 = bitcast %struct.TValue* %148 to i64*
store i64 %155, i64* %156, !tbaa !18
%dest.tt56 = getelementptr inbounds %struct.TValue, %struct.TValue* %148, i32 0, i32 1
store i32 19, i32* %dest.tt56, !tbaa !15
%157 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%158 = getelementptr inbounds %struct.TValue, %struct.TValue* %157, i32 14
%159 = getelementptr inbounds %struct.TValue, %struct.TValue* %157, i32 3
%160 = bitcast %struct.TValue* %159 to double*
%161 = load double, double* %160, !tbaa !18
%162 = getelementptr inbounds %struct.TValue, %struct.TValue* %157, i32 14
%163 = bitcast %struct.TValue* %162 to i64*
%164 = load i64, i64* %163, !tbaa !18
%165 = sitofp i64 %164 to double
%166 = fmul double %161, %165
%167 = bitcast %struct.TValue* %158 to double*
store double %166, double* %167, !tbaa !18
%dest.tt57 = getelementptr inbounds %struct.TValue, %struct.TValue* %158, i32 0, i32 1
store i32 3, i32* %dest.tt57, !tbaa !15
%168 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%169 = getelementptr inbounds %struct.TValue, %struct.TValue* %168, i32 15
%170 = getelementptr inbounds %struct.TValue, %struct.TValue* %168, i32 8
%171 = bitcast %struct.TValue* %170 to i64*
%172 = load i64, i64* %171, !tbaa !18
%173 = getelementptr inbounds %struct.TValue, %struct.TValue* %168, i32 12
%174 = bitcast %struct.TValue* %173 to i64*
%175 = load i64, i64* %174, !tbaa !18
%176 = add nsw i64 %172, %175
%177 = bitcast %struct.TValue* %169 to i64*
store i64 %176, i64* %177, !tbaa !18
%dest.tt58 = getelementptr inbounds %struct.TValue, %struct.TValue* %169, i32 0, i32 1
store i32 19, i32* %dest.tt58, !tbaa !15
%178 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%179 = getelementptr inbounds %struct.TValue, %struct.TValue* %178, i32 15
%180 = getelementptr inbounds %struct.TValue, %struct.TValue* %178, i32 15
%181 = bitcast %struct.TValue* %180 to i64*
%182 = load i64, i64* %181, !tbaa !18
%183 = sub nsw i64 %182, 2
%184 = bitcast %struct.TValue* %179 to i64*
store i64 %183, i64* %184, !tbaa !18
%dest.tt59 = getelementptr inbounds %struct.TValue, %struct.TValue* %179, i32 0, i32 1
store i32 19, i32* %dest.tt59, !tbaa !15
%185 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%186 = getelementptr inbounds %struct.TValue, %struct.TValue* %185, i32 14
%187 = getelementptr inbounds %struct.TValue, %struct.TValue* %185, i32 14
%188 = bitcast %struct.TValue* %187 to double*
%189 = load double, double* %188, !tbaa !18
%190 = getelementptr inbounds %struct.TValue, %struct.TValue* %185, i32 15
%191 = bitcast %struct.TValue* %190 to i64*
%192 = load i64, i64* %191, !tbaa !18
%193 = sitofp i64 %192 to double
%194 = fmul double %189, %193
%195 = bitcast %struct.TValue* %186 to double*
store double %194, double* %195, !tbaa !18
%dest.tt60 = getelementptr inbounds %struct.TValue, %struct.TValue* %186, i32 0, i32 1
store i32 3, i32* %dest.tt60, !tbaa !15
%196 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%197 = getelementptr inbounds %struct.TValue, %struct.TValue* %196, i32 2
%198 = getelementptr inbounds %struct.TValue, %struct.TValue* %196, i32 13
%199 = getelementptr inbounds %struct.TValue, %struct.TValue* %196, i32 14
call void @luaV_settable(%struct.lua_State* %L, %struct.TValue* %197, %struct.TValue* %198, %struct.TValue* %199)
br label %forloop34_
forloop34_: ; preds = %forbody27_, %forbody21_
%200 = load i64, i64* %iidx53, !tbaa !17
%next.idx = add nsw i64 1, %200
store i64 %next.idx, i64* %iidx53, !tbaa !17
%201 = load i64, i64* %ilimit52, !tbaa !17
%idx.gt.limit = icmp sgt i64 %next.idx, %201
br i1 %idx.gt.limit, label %exit_iforloop, label %updatei
updatei: ; preds = %forloop34_
%202 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%203 = getelementptr inbounds %struct.TValue, %struct.TValue* %202, i32 12
%204 = load i64, i64* %iidx53, !tbaa !17
%205 = bitcast %struct.TValue* %203 to i64*
store i64 %204, i64* %205, !tbaa !18
%dest.tt61 = getelementptr inbounds %struct.TValue, %struct.TValue* %203, i32 0, i32 1
store i32 19, i32* %dest.tt61, !tbaa !15
br label %forbody27_
exit_iforloop: ; preds = %forloop34_
br label %forloop35_
forloop35_: ; preds = %exit_iforloop, %op_call.done.34
%206 = load i64, i64* %iidx, !tbaa !17
%next.idx62 = add nsw i64 1, %206
store i64 %next.idx62, i64* %iidx, !tbaa !17
%207 = load i64, i64* %ilimit, !tbaa !17
%idx.gt.limit63 = icmp sgt i64 %next.idx62, %207
br i1 %idx.gt.limit63, label %exit_iforloop.66, label %updatei.64
updatei.64: ; preds = %forloop35_
%208 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%209 = getelementptr inbounds %struct.TValue, %struct.TValue* %208, i32 8
%210 = load i64, i64* %iidx, !tbaa !17
%211 = bitcast %struct.TValue* %209 to i64*
store i64 %210, i64* %211, !tbaa !18
%dest.tt65 = getelementptr inbounds %struct.TValue, %struct.TValue* %209, i32 0, i32 1
store i32 19, i32* %dest.tt65, !tbaa !15
br label %forbody21_
exit_iforloop.66: ; preds = %forloop35_
%212 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%213 = getelementptr inbounds %struct.TValue, %struct.TValue* %212, i32 5
%214 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 2
%upvals67 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%215 = load %struct.UpVal*, %struct.UpVal** %upvals67, !tbaa !8
%v68 = getelementptr inbounds %struct.UpVal, %struct.UpVal* %215, i32 0, i32 0
%216 = load %struct.TValue*, %struct.TValue** %v68, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %216, %struct.TValue* %214, %struct.TValue* %213)
%217 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%218 = getelementptr inbounds %struct.TValue, %struct.TValue* %217, i32 5
%219 = getelementptr inbounds %struct.TValue, %struct.TValue* %217, i32 5
%220 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 3
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %219, %struct.TValue* %220, %struct.TValue* %218)
%221 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%222 = getelementptr inbounds %struct.TValue, %struct.TValue* %221, i32 6
%L.top69 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %222, %struct.TValue** %L.top69, !tbaa !21
%223 = getelementptr inbounds %struct.TValue, %struct.TValue* %221, i32 5
%224 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %223, i32 1)
%225 = icmp eq i32 %224, 0
br i1 %225, label %if.lua.function70, label %if.not.lua.function.71
if.lua.function70: ; preds = %exit_iforloop.66
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.75
if.not.lua.function.71: ; preds = %exit_iforloop.66
%226 = icmp eq i32 %224, 1
br i1 %226, label %if.C.function72, label %op_call.done.75
if.C.function72: ; preds = %if.not.lua.function.71
%ci_top73 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%227 = load %struct.TValue*, %struct.TValue** %ci_top73, !tbaa !23
%L_top74 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %227, %struct.TValue** %L_top74, !tbaa !21
br label %op_call.done.75
op_call.done.75: ; preds = %if.C.function72, %if.not.lua.function.71, %if.lua.function70
%228 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%229 = getelementptr inbounds %struct.TValue, %struct.TValue* %228, i32 6
%upvals76 = getelementptr inbounds %struct.LClosure, %struct.LClosure* %3, i32 0, i32 6, i32 0
%230 = load %struct.UpVal*, %struct.UpVal** %upvals76, !tbaa !8
%v77 = getelementptr inbounds %struct.UpVal, %struct.UpVal* %230, i32 0, i32 0
%231 = load %struct.TValue*, %struct.TValue** %v77, !tbaa !19
call void @luaV_gettable(%struct.lua_State* %L, %struct.TValue* %231, %struct.TValue* %5, %struct.TValue* %229)
%232 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%233 = getelementptr inbounds %struct.TValue, %struct.TValue* %232, i32 7
%234 = getelementptr inbounds %struct.TValue, %struct.TValue* %5, i32 7
%srcvalue78 = getelementptr inbounds %struct.TValue, %struct.TValue* %234, i32 0, i32 0, i32 0
%destvalue79 = getelementptr inbounds %struct.TValue, %struct.TValue* %233, i32 0, i32 0, i32 0
%235 = load double, double* %srcvalue78, !tbaa !18
store double %235, double* %destvalue79, !tbaa !18
%srctype80 = getelementptr inbounds %struct.TValue, %struct.TValue* %234, i32 0, i32 1
%desttype81 = getelementptr inbounds %struct.TValue, %struct.TValue* %233, i32 0, i32 1
%236 = load i32, i32* %srctype80, !tbaa !15
store i32 %236, i32* %desttype81, !tbaa !15
%237 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%238 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 8
%239 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 5
%240 = getelementptr inbounds %struct.TValue, %struct.TValue* %237, i32 1
%value.tt.ptr82 = getelementptr inbounds %struct.TValue, %struct.TValue* %239, i32 0, i32 1
%value.tt83 = load i32, i32* %value.tt.ptr82, !tbaa !15
%value.tt.ptr84 = getelementptr inbounds %struct.TValue, %struct.TValue* %240, i32 0, i32 1
%value.tt85 = load i32, i32* %value.tt.ptr84, !tbaa !15
%rb.is.integer = icmp eq i32 %value.tt83, 19
%rc.is.integer = icmp eq i32 %value.tt85, 19
%241 = and i1 %rb.is.integer, %rc.is.integer
br i1 %241, label %if.integer, label %if.not.integer.87
if.integer: ; preds = %op_call.done.75
%242 = bitcast %struct.TValue* %239 to i64*
%243 = load i64, i64* %242, !tbaa !18
%244 = bitcast %struct.TValue* %240 to i64*
%245 = load i64, i64* %244, !tbaa !18
%246 = sub nsw i64 %243, %245
%247 = bitcast %struct.TValue* %238 to i64*
store i64 %246, i64* %247, !tbaa !18
%dest.tt86 = getelementptr inbounds %struct.TValue, %struct.TValue* %238, i32 0, i32 1
store i32 19, i32* %dest.tt86, !tbaa !15
br label %done.89
if.not.integer.87: ; preds = %op_call.done.75
%rb.is.float = icmp eq i32 %value.tt83, 3
br i1 %rb.is.float, label %load.rb, label %convert.rb
convert.rb: ; preds = %if.not.integer.87
%248 = call i32 @luaV_tonumber_(%struct.TValue* %239, double* %nb)
%rb.float.ok = icmp eq i32 %248, 1
br i1 %rb.float.ok, label %test.rc, label %try_meta
load.rb: ; preds = %if.not.integer.87
%249 = bitcast %struct.TValue* %239 to double*
%250 = load double, double* %249, !tbaa !18
store double %250, double* %nb, !tbaa !17
br label %test.rc
test.rc: ; preds = %load.rb, %convert.rb
%rc.is.float = icmp eq i32 %value.tt85, 3
br i1 %rc.is.float, label %load.rc, label %convert.rc
convert.rc: ; preds = %test.rc
%251 = call i32 @luaV_tonumber_(%struct.TValue* %240, double* %nc)
%rc.float.ok = icmp eq i32 %251, 1
br i1 %rc.float.ok, label %float.op, label %try_meta
load.rc: ; preds = %test.rc
%252 = bitcast %struct.TValue* %240 to double*
%253 = load double, double* %252, !tbaa !18
store double %253, double* %nc, !tbaa !17
br label %float.op
float.op: ; preds = %load.rc, %convert.rc
%254 = load double, double* %nb, !tbaa !17
%255 = load double, double* %nc, !tbaa !17
%256 = fsub double %254, %255
%257 = bitcast %struct.TValue* %238 to double*
store double %256, double* %257, !tbaa !18
%dest.tt88 = getelementptr inbounds %struct.TValue, %struct.TValue* %238, i32 0, i32 1
store i32 3, i32* %dest.tt88, !tbaa !15
br label %done.89
try_meta: ; preds = %convert.rc, %convert.rb
call void @luaT_trybinTM(%struct.lua_State* %L, %struct.TValue* %239, %struct.TValue* %240, %struct.TValue* %238, i32 7)
br label %done.89
done.89: ; preds = %try_meta, %float.op, %if.integer
%258 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%259 = getelementptr inbounds %struct.TValue, %struct.TValue* %258, i32 9
%L.top90 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %259, %struct.TValue** %L.top90, !tbaa !21
%260 = getelementptr inbounds %struct.TValue, %struct.TValue* %258, i32 6
%261 = call i32 @luaD_precall(%struct.lua_State* %L, %struct.TValue* %260, i32 0)
%262 = icmp eq i32 %261, 0
br i1 %262, label %if.lua.function91, label %if.not.lua.function.92
if.lua.function91: ; preds = %done.89
call void @luaV_execute(%struct.lua_State* %L)
br label %op_call.done.96
if.not.lua.function.92: ; preds = %done.89
%263 = icmp eq i32 %261, 1
br i1 %263, label %if.C.function93, label %op_call.done.96
if.C.function93: ; preds = %if.not.lua.function.92
%ci_top94 = getelementptr inbounds %struct.CallInfo, %struct.CallInfo* %0, i32 0, i32 1
%264 = load %struct.TValue*, %struct.TValue** %ci_top94, !tbaa !23
%L_top95 = getelementptr inbounds %struct.lua_State, %struct.lua_State* %L, i32 0, i32 4
store %struct.TValue* %264, %struct.TValue** %L_top95, !tbaa !21
br label %op_call.done.96
op_call.done.96: ; preds = %if.C.function93, %if.not.lua.function.92, %if.lua.function91
%265 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%266 = getelementptr inbounds %struct.TValue, %struct.TValue* %265, i32 2
%sizep = getelementptr inbounds %struct.Proto, %struct.Proto* %4, i32 0, i32 10
%267 = load i32, i32* %sizep, !tbaa !24
%268 = icmp sgt i32 %267, 0
br i1 %268, label %if.then, label %if.else
if.then: ; preds = %op_call.done.96
call void @luaF_close(%struct.lua_State* %L, %struct.TValue* %265)
br label %if.else
if.else: ; preds = %if.then, %op_call.done.96
%269 = call i32 @luaD_poscall(%struct.lua_State* %L, %struct.TValue* %266, i32 1)
ret i32 1
return: ; No predecessors!
%270 = load %struct.TValue*, %struct.TValue** %base, !tbaa !14
%sizep97 = getelementptr inbounds %struct.Proto, %struct.Proto* %4, i32 0, i32 10
%271 = load i32, i32* %sizep97, !tbaa !24
%272 = icmp sgt i32 %271, 0
br i1 %272, label %if.then98, label %if.else.99
if.then98: ; preds = %return
call void @luaF_close(%struct.lua_State* %L, %struct.TValue* %270)
br label %if.else.99
if.else.99: ; preds = %if.then98, %return
%273 = call i32 @luaD_poscall(%struct.lua_State* %L, %struct.TValue* %270, i32 0)
ret i32 1
}
; Function Attrs: nounwind
declare void @luaT_trybinTM(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaD_call(%struct.lua_State*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_poscall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare i32 @luaD_precall(%struct.lua_State*, %struct.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaF_close(%struct.lua_State*, %struct.TValue*) #0
; Function Attrs: noreturn nounwind
declare void @luaG_runerror(%struct.lua_State*, i8*, ...) #1
; Function Attrs: nounwind
declare i32 @luaV_equalobj(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessthan(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_lessequal(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaV_forlimit(%struct.TValue*, i64*, i64, i32*) #0
; Function Attrs: nounwind
declare i32 @luaV_tonumber_(%struct.TValue*, double*) #0
; Function Attrs: nounwind
declare i32 @luaV_tointeger_(%struct.TValue*, i64*) #0
; Function Attrs: nounwind
declare void @luaV_execute(%struct.lua_State*) #0
; Function Attrs: nounwind
declare void @luaV_settable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaV_gettable(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_loadnil(%struct.CallInfo*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayint(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayfloat(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newtable(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_setlist(%struct.lua_State*, %struct.CallInfo*, %struct.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare i64 @luaV_mod(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare i64 @luaV_div(%struct.lua_State*, i64, i64) #0
; Function Attrs: nounwind
declare void @luaV_objlen(%struct.lua_State*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @luaC_upvalbarrier_(%struct.lua_State*, %struct.UpVal*) #0
; Function Attrs: nounwind
declare void @raviV_op_concat(%struct.lua_State*, %struct.CallInfo*, i32, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_closure(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_vararg(%struct.lua_State*, %struct.CallInfo*, %struct.LClosure*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviH_set_int(%struct.lua_State*, %struct.Table*, i64, i64) #0
; Function Attrs: nounwind
declare void @raviH_set_float(%struct.lua_State*, %struct.Table*, i64, double) #0
; Function Attrs: nounwind
declare void @raviV_op_shl(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_shr(%struct.lua_State*, %struct.TValue*, %struct.TValue*, %struct.TValue*) #0
declare i32 @printf(i8*, ...)
declare double @fmod(double, double)
declare double @pow(double, double)
declare double @floor(double)
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!12, !1, i64 44}
!12 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}
!13 = !{!"int", !2, i64 0}
!14 = !{!0, !1, i64 16}
!15 = !{!16, !13, i64 8}
!16 = !{!"TValue", !5, i64 0, !13, i64 8}
!17 = !{!5, !5, i64 0}
!18 = !{!16, !5, i64 0}
!19 = !{!20, !1, i64 0}
!20 = !{!"UpVal", !1, i64 0, !5, i64 8, !16, i64 16}
!21 = !{!22, !1, i64 8}
!22 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !13, i64 104, !13, i64 108, !13, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!23 = !{!0, !1, i64 4}
!24 = !{!12, !13, i64 28}

@ -1,22 +0,0 @@
function x(t) return t; end
function f()
local tt: integer[] = {1}
local ss: number[] = { 55.5 }
tt = x(tt)
ss = x(ss)
end
assert(ravi.compile(x))
assert(ravi.compile(f))
ravi.dumpllvm(x)
ravi.dumpllvm(f)
assert(pcall(f))
function f()
local tt: integer[] = {1}
tt = x({})
end
ravi.dumplua(f)
assert(ravi.compile(f))
ravi.dumpllvm(f)
-- Following causes a misaligned stack exception
assert(not pcall(f))
print("test OK")

@ -1,75 +0,0 @@
; ModuleID = 'ravi_module_ravif2'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc-elf"
%0 = type { %ravi.TValue*, i32*, i64 }
%ravi.lua_State = type { %ravi.GCObject*, i8, i8, i8, %ravi.TValue*, %ravi.global_State*, %ravi.CallInfo*, i32*, %ravi.TValue*, %ravi.TValue*, %ravi.UpVal*, %ravi.GCObject*, %ravi.lua_State*, %ravi.lua_longjmp*, %ravi.CallInfo, i8* (%ravi.lua_State*, %ravi.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%ravi.global_State = type opaque
%ravi.TValue = type { %ravi.Value, i32 }
%ravi.Value = type { double }
%ravi.UpVal = type { %ravi.TValue*, i64, %ravi.TValue }
%ravi.GCObject = type { %ravi.GCObject*, i8, i8 }
%ravi.lua_longjmp = type opaque
%ravi.CallInfo = type { %ravi.TValue*, %ravi.TValue*, %ravi.CallInfo*, %ravi.CallInfo*, %0, i64, i16, i8, i8 }
%ravi.lua_Debug = type opaque
%ravi.LClosure = type { %ravi.GCObject*, i8, i8, i8, %ravi.GCObject*, %ravi.Proto*, [1 x %ravi.UpVal*] }
%ravi.Proto = type { %ravi.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %ravi.TValue*, i32*, %ravi.Proto**, i32*, %ravi.LocVar*, %ravi.Upvaldesc*, %ravi.LClosure*, %ravi.TString*, %ravi.GCObject*, %ravi.RaviJITProto }
%ravi.LocVar = type { %ravi.TString*, i32, i32, i32 }
%ravi.Upvaldesc = type { %ravi.TString*, i32, i8, i8 }
%ravi.TString = type { %ravi.GCObject*, i8, i8, i8, i32, i64, %ravi.TString* }
%ravi.RaviJITProto = type { i8, i8, i16, i8*, i32 (%ravi.lua_State*)* }
; Function Attrs: nounwind
define i32 @ravif2(%ravi.lua_State* %L) #0 {
entry:
%L_ci = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 6
%0 = load %ravi.CallInfo** %L_ci, align 8, !tbaa !0
%base = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 4, i32 0
%1 = bitcast %ravi.CallInfo* %0 to %ravi.LClosure***
%2 = load %ravi.LClosure*** %1, align 8, !tbaa !7
%3 = load %ravi.LClosure** %2, align 8, !tbaa !8
%Proto = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 5
%4 = load %ravi.Proto** %Proto, align 8, !tbaa !9
%5 = load %ravi.TValue** %base, align 8, !tbaa !11
%6 = getelementptr inbounds %ravi.TValue* %5, i64 1
%L.top = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 4
store %ravi.TValue* %6, %ravi.TValue** %L.top, align 8, !tbaa !12
%sizep = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 10
%7 = load i32* %sizep, align 4, !tbaa !15
%8 = icmp sgt i32 %7, 0
br i1 %8, label %if.then, label %if.else
if.then: ; preds = %entry
tail call void @luaF_close(%ravi.lua_State* %L, %ravi.TValue* %5)
br label %if.else
if.else: ; preds = %if.then, %entry
%9 = tail call i32 @luaD_poscall(%ravi.lua_State* %L, %ravi.TValue* %5)
ret i32 1
}
; Function Attrs: nounwind
declare i32 @luaD_poscall(%ravi.lua_State*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @luaF_close(%ravi.lua_State*, %ravi.TValue*) #0
attributes #0 = { nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!0, !1, i64 16}
!12 = !{!13, !1, i64 8}
!13 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !14, i64 104, !14, i64 108, !14, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!14 = !{!"int", !2, i64 0}
!15 = !{!16, !14, i64 28}
!16 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}

@ -1,286 +0,0 @@
; ModuleID = 'ravi_module_ravif3'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc-elf"
%0 = type { %ravi.TValue*, i32*, i64 }
%ravi.lua_State = type { %ravi.GCObject*, i8, i8, i8, %ravi.TValue*, %ravi.global_State*, %ravi.CallInfo*, i32*, %ravi.TValue*, %ravi.TValue*, %ravi.UpVal*, %ravi.GCObject*, %ravi.lua_State*, %ravi.lua_longjmp*, %ravi.CallInfo, i8* (%ravi.lua_State*, %ravi.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%ravi.global_State = type opaque
%ravi.TValue = type { %ravi.Value, i32 }
%ravi.Value = type { double }
%ravi.UpVal = type { %ravi.TValue*, i64, %ravi.TValue }
%ravi.GCObject = type { %ravi.GCObject*, i8, i8 }
%ravi.lua_longjmp = type opaque
%ravi.CallInfo = type { %ravi.TValue*, %ravi.TValue*, %ravi.CallInfo*, %ravi.CallInfo*, %0, i64, i16, i8, i8 }
%ravi.lua_Debug = type opaque
%ravi.LClosure = type { %ravi.GCObject*, i8, i8, i8, %ravi.GCObject*, %ravi.Proto*, [1 x %ravi.UpVal*] }
%ravi.Proto = type { %ravi.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %ravi.TValue*, i32*, %ravi.Proto**, i32*, %ravi.LocVar*, %ravi.Upvaldesc*, %ravi.LClosure*, %ravi.TString*, %ravi.GCObject*, %ravi.RaviJITProto }
%ravi.LocVar = type { %ravi.TString*, i32, i32, i32 }
%ravi.Upvaldesc = type { %ravi.TString*, i32, i8, i8 }
%ravi.TString = type { %ravi.GCObject*, i8, i8, i8, i32, i64, %ravi.TString* }
%ravi.RaviJITProto = type { i8, i8, i16, i8*, i32 (%ravi.lua_State*)* }
%ravi.Table = type { %ravi.GCObject*, i8, i8, i8, i8, i32, %ravi.TValue*, %ravi.Node*, %ravi.Node*, %ravi.Table*, %ravi.GCObject*, %ravi.RaviArray }
%ravi.Node = type { %ravi.TValue, %ravi.TKey }
%ravi.TKey = type { %ravi.Value, i32, i32 }
%ravi.RaviArray = type { i8*, i32, i32, i32 }
@0 = private unnamed_addr constant [19 x i8] c"integer[] expected\00"
@1 = private unnamed_addr constant [18 x i8] c"number[] expected\00"
; Function Attrs: nounwind
define i32 @ravif3(%ravi.lua_State* %L) #0 {
entry:
%L_ci = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 6
%0 = load %ravi.CallInfo** %L_ci, align 8, !tbaa !0
%base = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 4, i32 0
%1 = bitcast %ravi.CallInfo* %0 to %ravi.LClosure***
%2 = load %ravi.LClosure*** %1, align 8, !tbaa !7
%3 = load %ravi.LClosure** %2, align 8, !tbaa !8
%Proto = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 5
%4 = load %ravi.Proto** %Proto, align 8, !tbaa !9
%k = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 14
%5 = load %ravi.TValue** %k, align 8, !tbaa !11
%6 = load %ravi.TValue** %base, align 8, !tbaa !14
tail call void @raviV_op_newarrayint(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %6)
%7 = load %ravi.TValue** %base, align 8, !tbaa !14
%srcvalue40 = bitcast %ravi.TValue* %5 to double*
%destvalue = getelementptr inbounds %ravi.TValue* %7, i64 1, i32 0, i32 0
%8 = load double* %srcvalue40, align 8, !tbaa !15
store double %8, double* %destvalue, align 8, !tbaa !15
%srctype = getelementptr inbounds %ravi.TValue* %5, i64 0, i32 1
%desttype = getelementptr inbounds %ravi.TValue* %7, i64 1, i32 1
%9 = load i32* %srctype, align 4, !tbaa !17
store i32 %9, i32* %desttype, align 4, !tbaa !17
tail call void @raviV_op_setlist(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %7, i32 1, i32 1)
%10 = load %ravi.TValue** %base, align 8, !tbaa !14
%11 = getelementptr inbounds %ravi.TValue* %10, i64 1
tail call void @raviV_op_newarrayfloat(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %11)
%12 = load %ravi.TValue** %base, align 8, !tbaa !14
%srcvalue1 = getelementptr inbounds %ravi.TValue* %5, i64 1, i32 0, i32 0
%destvalue2 = getelementptr inbounds %ravi.TValue* %12, i64 2, i32 0, i32 0
%13 = load double* %srcvalue1, align 8, !tbaa !15
store double %13, double* %destvalue2, align 8, !tbaa !15
%srctype3 = getelementptr inbounds %ravi.TValue* %5, i64 1, i32 1
%desttype4 = getelementptr inbounds %ravi.TValue* %12, i64 2, i32 1
%14 = load i32* %srctype3, align 4, !tbaa !17
store i32 %14, i32* %desttype4, align 4, !tbaa !17
%15 = getelementptr inbounds %ravi.TValue* %12, i64 1
tail call void @raviV_op_setlist(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %15, i32 1, i32 1)
%16 = load %ravi.TValue** %base, align 8, !tbaa !14
%17 = getelementptr inbounds %ravi.TValue* %16, i64 2
%18 = getelementptr inbounds %ravi.TValue* %5, i64 2
%upvals = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 6, i64 0
%19 = load %ravi.UpVal** %upvals, align 8, !tbaa !8
%v41 = bitcast %ravi.UpVal* %19 to %ravi.TValue**
%20 = load %ravi.TValue** %v41, align 8, !tbaa !18
tail call void @luaV_gettable(%ravi.lua_State* %L, %ravi.TValue* %20, %ravi.TValue* %18, %ravi.TValue* %17)
%21 = load %ravi.TValue** %base, align 8, !tbaa !14
%srcvalue542 = bitcast %ravi.TValue* %21 to double*
%destvalue6 = getelementptr inbounds %ravi.TValue* %21, i64 3, i32 0, i32 0
%22 = load double* %srcvalue542, align 8, !tbaa !15
store double %22, double* %destvalue6, align 8, !tbaa !15
%srctype7 = getelementptr inbounds %ravi.TValue* %21, i64 0, i32 1
%desttype8 = getelementptr inbounds %ravi.TValue* %21, i64 3, i32 1
%23 = load i32* %srctype7, align 4, !tbaa !17
store i32 %23, i32* %desttype8, align 4, !tbaa !17
%24 = getelementptr inbounds %ravi.TValue* %21, i64 4
%L.top = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 4
store %ravi.TValue* %24, %ravi.TValue** %L.top, align 8, !tbaa !20
%25 = getelementptr inbounds %ravi.TValue* %21, i64 2
%26 = tail call i32 @luaD_precall(%ravi.lua_State* %L, %ravi.TValue* %25, i32 1)
switch i32 %26, label %op_call.done [
i32 0, label %if.lua.function
i32 1, label %if.C.function
]
if.lua.function: ; preds = %entry
tail call void @luaV_execute(%ravi.lua_State* %L)
br label %op_call.done
if.C.function: ; preds = %entry
%ci_top = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 1
%27 = load %ravi.TValue** %ci_top, align 8, !tbaa !22
%sunkaddr = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr43 = add i64 %sunkaddr, 16
%sunkaddr44 = inttoptr i64 %sunkaddr43 to %ravi.TValue**
store %ravi.TValue* %27, %ravi.TValue** %sunkaddr44, align 8, !tbaa !20
br label %op_call.done
op_call.done: ; preds = %entry, %if.C.function, %if.lua.function
%sunkaddr45 = ptrtoint %ravi.CallInfo* %0 to i64
%sunkaddr46 = add i64 %sunkaddr45, 32
%sunkaddr47 = inttoptr i64 %sunkaddr46 to %ravi.TValue**
%28 = load %ravi.TValue** %sunkaddr47, align 8, !tbaa !14
%29 = getelementptr inbounds %ravi.TValue* %28, i64 2
%value.tt.ptr = getelementptr inbounds %ravi.TValue* %28, i64 2, i32 1
%value.tt = load i32* %value.tt.ptr, align 4, !tbaa !17
%is.not.table = icmp eq i32 %value.tt, 69
br i1 %is.not.table, label %test.if.array, label %if.not.table
if.not.table: ; preds = %op_call.done, %test.if.array
tail call void @luaG_runerror(%ravi.lua_State* %L, i8* getelementptr inbounds ([19 x i8]* @0, i64 0, i64 0))
unreachable
test.if.array: ; preds = %op_call.done
%30 = bitcast %ravi.TValue* %29 to %ravi.Table**
%31 = load %ravi.Table** %30, align 8, !tbaa !23
%raviarray.type_ptr = getelementptr inbounds %ravi.Table* %31, i64 0, i32 11, i32 1
%raviarray.type = load i32* %raviarray.type_ptr, align 4, !tbaa !24
%is.array.type = icmp eq i32 %raviarray.type, 3
br i1 %is.array.type, label %done, label %if.not.table
done: ; preds = %test.if.array
%32 = ptrtoint %ravi.Table* %31 to i64
%33 = bitcast %ravi.TValue* %28 to i64*
store i64 %32, i64* %33, align 8, !tbaa !15
%desttype12 = getelementptr inbounds %ravi.TValue* %28, i64 0, i32 1
store i32 69, i32* %desttype12, align 4, !tbaa !17
%sunkaddr48 = ptrtoint %ravi.LClosure* %3 to i64
%sunkaddr49 = add i64 %sunkaddr48, 32
%sunkaddr50 = inttoptr i64 %sunkaddr49 to %ravi.UpVal**
%34 = load %ravi.UpVal** %sunkaddr50, align 8, !tbaa !8
%v1451 = bitcast %ravi.UpVal* %34 to %ravi.TValue**
%35 = load %ravi.TValue** %v1451, align 8, !tbaa !18
tail call void @luaV_gettable(%ravi.lua_State* %L, %ravi.TValue* %35, %ravi.TValue* %18, %ravi.TValue* %29)
%sunkaddr52 = ptrtoint %ravi.CallInfo* %0 to i64
%sunkaddr53 = add i64 %sunkaddr52, 32
%sunkaddr54 = inttoptr i64 %sunkaddr53 to %ravi.TValue**
%36 = load %ravi.TValue** %sunkaddr54, align 8, !tbaa !14
%srcvalue15 = getelementptr inbounds %ravi.TValue* %36, i64 1, i32 0, i32 0
%destvalue16 = getelementptr inbounds %ravi.TValue* %36, i64 3, i32 0, i32 0
%37 = load double* %srcvalue15, align 8, !tbaa !15
store double %37, double* %destvalue16, align 8, !tbaa !15
%srctype17 = getelementptr inbounds %ravi.TValue* %36, i64 1, i32 1
%desttype18 = getelementptr inbounds %ravi.TValue* %36, i64 3, i32 1
%38 = load i32* %srctype17, align 4, !tbaa !17
store i32 %38, i32* %desttype18, align 4, !tbaa !17
%39 = getelementptr inbounds %ravi.TValue* %36, i64 4
%sunkaddr55 = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr56 = add i64 %sunkaddr55, 16
%sunkaddr57 = inttoptr i64 %sunkaddr56 to %ravi.TValue**
store %ravi.TValue* %39, %ravi.TValue** %sunkaddr57, align 8, !tbaa !20
%40 = getelementptr inbounds %ravi.TValue* %36, i64 2
%41 = tail call i32 @luaD_precall(%ravi.lua_State* %L, %ravi.TValue* %40, i32 1)
switch i32 %41, label %op_call.done25 [
i32 0, label %if.lua.function20
i32 1, label %if.C.function22
]
if.lua.function20: ; preds = %done
tail call void @luaV_execute(%ravi.lua_State* %L)
br label %op_call.done25
if.C.function22: ; preds = %done
%ci_top23 = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 1
%42 = load %ravi.TValue** %ci_top23, align 8, !tbaa !22
%sunkaddr58 = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr59 = add i64 %sunkaddr58, 16
%sunkaddr60 = inttoptr i64 %sunkaddr59 to %ravi.TValue**
store %ravi.TValue* %42, %ravi.TValue** %sunkaddr60, align 8, !tbaa !20
br label %op_call.done25
op_call.done25: ; preds = %done, %if.C.function22, %if.lua.function20
%sunkaddr61 = ptrtoint %ravi.CallInfo* %0 to i64
%sunkaddr62 = add i64 %sunkaddr61, 32
%sunkaddr63 = inttoptr i64 %sunkaddr62 to %ravi.TValue**
%43 = load %ravi.TValue** %sunkaddr63, align 8, !tbaa !14
%value.tt.ptr26 = getelementptr inbounds %ravi.TValue* %43, i64 2, i32 1
%value.tt27 = load i32* %value.tt.ptr26, align 4, !tbaa !17
%is.not.table28 = icmp eq i32 %value.tt27, 69
br i1 %is.not.table28, label %test.if.array30, label %if.not.table29
if.not.table29: ; preds = %op_call.done25, %test.if.array30
tail call void @luaG_runerror(%ravi.lua_State* %L, i8* getelementptr inbounds ([18 x i8]* @1, i64 0, i64 0))
unreachable
test.if.array30: ; preds = %op_call.done25
%44 = getelementptr inbounds %ravi.TValue* %43, i64 2
%45 = bitcast %ravi.TValue* %44 to %ravi.Table**
%46 = load %ravi.Table** %45, align 8, !tbaa !23
%raviarray.type_ptr31 = getelementptr inbounds %ravi.Table* %46, i64 0, i32 11, i32 1
%raviarray.type32 = load i32* %raviarray.type_ptr31, align 4, !tbaa !24
%is.array.type33 = icmp eq i32 %raviarray.type32, 4
br i1 %is.array.type33, label %done34, label %if.not.table29
done34: ; preds = %test.if.array30
%47 = ptrtoint %ravi.Table* %46 to i64
%destvalue36 = getelementptr inbounds %ravi.TValue* %43, i64 1, i32 0, i32 0
%48 = bitcast double* %destvalue36 to i64*
store i64 %47, i64* %48, align 8, !tbaa !15
%desttype38 = getelementptr inbounds %ravi.TValue* %43, i64 1, i32 1
store i32 69, i32* %desttype38, align 4, !tbaa !17
%sunkaddr64 = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr65 = add i64 %sunkaddr64, 16
%sunkaddr66 = inttoptr i64 %sunkaddr65 to %ravi.TValue**
store %ravi.TValue* %43, %ravi.TValue** %sunkaddr66, align 8, !tbaa !20
%sizep = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 10
%49 = load i32* %sizep, align 4, !tbaa !27
%50 = icmp sgt i32 %49, 0
br i1 %50, label %if.then, label %if.else
if.then: ; preds = %done34
tail call void @luaF_close(%ravi.lua_State* %L, %ravi.TValue* %43)
br label %if.else
if.else: ; preds = %if.then, %done34
%51 = tail call i32 @luaD_poscall(%ravi.lua_State* %L, %ravi.TValue* %43)
ret i32 1
}
; Function Attrs: nounwind
declare i32 @luaD_poscall(%ravi.lua_State*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaD_precall(%ravi.lua_State*, %ravi.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaF_close(%ravi.lua_State*, %ravi.TValue*) #0
; Function Attrs: noreturn nounwind
declare void @luaG_runerror(%ravi.lua_State*, i8*) #1
; Function Attrs: nounwind
declare void @luaV_execute(%ravi.lua_State*) #0
; Function Attrs: nounwind
declare void @luaV_gettable(%ravi.lua_State*, %ravi.TValue*, %ravi.TValue*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayint(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayfloat(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_setlist(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*, i32, i32) #0
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!12, !1, i64 44}
!12 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}
!13 = !{!"int", !2, i64 0}
!14 = !{!0, !1, i64 16}
!15 = !{!16, !5, i64 0}
!16 = !{!"TValue", !5, i64 0, !13, i64 8}
!17 = !{!16, !13, i64 8}
!18 = !{!19, !1, i64 0}
!19 = !{!"UpVal", !1, i64 0, !5, i64 8, !16, i64 16}
!20 = !{!21, !1, i64 8}
!21 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !13, i64 104, !13, i64 108, !13, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!22 = !{!0, !1, i64 4}
!23 = !{!16, !1, i64 0}
!24 = !{!25, !2, i64 36}
!25 = !{!"Table", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !13, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !26, i64 32}
!26 = !{!"RaviArray", !1, i64 0, !2, i64 4, !13, i64 8, !13, i64 12}
!27 = !{!12, !13, i64 28}

@ -1,192 +0,0 @@
; ModuleID = 'ravi_module_ravif4'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc-elf"
%0 = type { %ravi.TValue*, i32*, i64 }
%ravi.lua_State = type { %ravi.GCObject*, i8, i8, i8, %ravi.TValue*, %ravi.global_State*, %ravi.CallInfo*, i32*, %ravi.TValue*, %ravi.TValue*, %ravi.UpVal*, %ravi.GCObject*, %ravi.lua_State*, %ravi.lua_longjmp*, %ravi.CallInfo, i8* (%ravi.lua_State*, %ravi.lua_Debug*)*, i64, i32, i32, i32, i16, i16, i8, i8 }
%ravi.global_State = type opaque
%ravi.TValue = type { %ravi.Value, i32 }
%ravi.Value = type { double }
%ravi.UpVal = type { %ravi.TValue*, i64, %ravi.TValue }
%ravi.GCObject = type { %ravi.GCObject*, i8, i8 }
%ravi.lua_longjmp = type opaque
%ravi.CallInfo = type { %ravi.TValue*, %ravi.TValue*, %ravi.CallInfo*, %ravi.CallInfo*, %0, i64, i16, i8, i8 }
%ravi.lua_Debug = type opaque
%ravi.LClosure = type { %ravi.GCObject*, i8, i8, i8, %ravi.GCObject*, %ravi.Proto*, [1 x %ravi.UpVal*] }
%ravi.Proto = type { %ravi.GCObject*, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %ravi.TValue*, i32*, %ravi.Proto**, i32*, %ravi.LocVar*, %ravi.Upvaldesc*, %ravi.LClosure*, %ravi.TString*, %ravi.GCObject*, %ravi.RaviJITProto }
%ravi.LocVar = type { %ravi.TString*, i32, i32, i32 }
%ravi.Upvaldesc = type { %ravi.TString*, i32, i8, i8 }
%ravi.TString = type { %ravi.GCObject*, i8, i8, i8, i32, i64, %ravi.TString* }
%ravi.RaviJITProto = type { i8, i8, i16, i8*, i32 (%ravi.lua_State*)* }
%ravi.Table = type { %ravi.GCObject*, i8, i8, i8, i8, i32, %ravi.TValue*, %ravi.Node*, %ravi.Node*, %ravi.Table*, %ravi.GCObject*, %ravi.RaviArray }
%ravi.Node = type { %ravi.TValue, %ravi.TKey }
%ravi.TKey = type { %ravi.Value, i32, i32 }
%ravi.RaviArray = type { i8*, i32, i32, i32 }
@0 = private unnamed_addr constant [19 x i8] c"integer[] expected\00"
; Function Attrs: nounwind
define i32 @ravif4(%ravi.lua_State* %L) #0 {
entry:
%L_ci = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 6
%0 = load %ravi.CallInfo** %L_ci, align 8, !tbaa !0
%base = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 4, i32 0
%1 = bitcast %ravi.CallInfo* %0 to %ravi.LClosure***
%2 = load %ravi.LClosure*** %1, align 8, !tbaa !7
%3 = load %ravi.LClosure** %2, align 8, !tbaa !8
%Proto = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 5
%4 = load %ravi.Proto** %Proto, align 8, !tbaa !9
%k = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 14
%5 = load %ravi.TValue** %k, align 8, !tbaa !11
%6 = load %ravi.TValue** %base, align 8, !tbaa !14
tail call void @raviV_op_newarrayint(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %6)
%7 = load %ravi.TValue** %base, align 8, !tbaa !14
%srcvalue6 = bitcast %ravi.TValue* %5 to double*
%destvalue = getelementptr inbounds %ravi.TValue* %7, i64 1, i32 0, i32 0
%8 = load double* %srcvalue6, align 8, !tbaa !15
store double %8, double* %destvalue, align 8, !tbaa !15
%srctype = getelementptr inbounds %ravi.TValue* %5, i64 0, i32 1
%desttype = getelementptr inbounds %ravi.TValue* %7, i64 1, i32 1
%9 = load i32* %srctype, align 4, !tbaa !17
store i32 %9, i32* %desttype, align 4, !tbaa !17
tail call void @raviV_op_setlist(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %7, i32 1, i32 1)
%10 = load %ravi.TValue** %base, align 8, !tbaa !14
%11 = getelementptr inbounds %ravi.TValue* %10, i64 1
%12 = getelementptr inbounds %ravi.TValue* %5, i64 1
%upvals = getelementptr inbounds %ravi.LClosure* %3, i64 0, i32 6, i64 0
%13 = load %ravi.UpVal** %upvals, align 8, !tbaa !8
%v7 = bitcast %ravi.UpVal* %13 to %ravi.TValue**
%14 = load %ravi.TValue** %v7, align 8, !tbaa !18
tail call void @luaV_gettable(%ravi.lua_State* %L, %ravi.TValue* %14, %ravi.TValue* %12, %ravi.TValue* %11)
%15 = load %ravi.TValue** %base, align 8, !tbaa !14
%16 = getelementptr inbounds %ravi.TValue* %15, i64 2
tail call void @raviV_op_newtable(%ravi.lua_State* %L, %ravi.CallInfo* %0, %ravi.TValue* %16, i32 0, i32 0)
%17 = load %ravi.TValue** %base, align 8, !tbaa !14
%18 = getelementptr inbounds %ravi.TValue* %17, i64 3
%L.top = getelementptr inbounds %ravi.lua_State* %L, i64 0, i32 4
store %ravi.TValue* %18, %ravi.TValue** %L.top, align 8, !tbaa !20
%19 = getelementptr inbounds %ravi.TValue* %17, i64 1
%20 = tail call i32 @luaD_precall(%ravi.lua_State* %L, %ravi.TValue* %19, i32 1)
switch i32 %20, label %op_call.done [
i32 0, label %if.lua.function
i32 1, label %if.C.function
]
if.lua.function: ; preds = %entry
tail call void @luaV_execute(%ravi.lua_State* %L)
br label %op_call.done
if.C.function: ; preds = %entry
%ci_top = getelementptr inbounds %ravi.CallInfo* %0, i64 0, i32 1
%21 = load %ravi.TValue** %ci_top, align 8, !tbaa !22
%sunkaddr = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr8 = add i64 %sunkaddr, 16
%sunkaddr9 = inttoptr i64 %sunkaddr8 to %ravi.TValue**
store %ravi.TValue* %21, %ravi.TValue** %sunkaddr9, align 8, !tbaa !20
br label %op_call.done
op_call.done: ; preds = %entry, %if.C.function, %if.lua.function
%sunkaddr10 = ptrtoint %ravi.CallInfo* %0 to i64
%sunkaddr11 = add i64 %sunkaddr10, 32
%sunkaddr12 = inttoptr i64 %sunkaddr11 to %ravi.TValue**
%22 = load %ravi.TValue** %sunkaddr12, align 8, !tbaa !14
%value.tt.ptr = getelementptr inbounds %ravi.TValue* %22, i64 1, i32 1
%value.tt = load i32* %value.tt.ptr, align 4, !tbaa !17
%is.not.table = icmp eq i32 %value.tt, 69
br i1 %is.not.table, label %test.if.array, label %if.not.table
if.not.table: ; preds = %op_call.done, %test.if.array
tail call void @luaG_runerror(%ravi.lua_State* %L, i8* getelementptr inbounds ([19 x i8]* @0, i64 0, i64 0))
unreachable
test.if.array: ; preds = %op_call.done
%23 = getelementptr inbounds %ravi.TValue* %22, i64 1
%24 = bitcast %ravi.TValue* %23 to %ravi.Table**
%25 = load %ravi.Table** %24, align 8, !tbaa !23
%raviarray.type_ptr = getelementptr inbounds %ravi.Table* %25, i64 0, i32 11, i32 1
%raviarray.type = load i32* %raviarray.type_ptr, align 4, !tbaa !24
%is.array.type = icmp eq i32 %raviarray.type, 3
br i1 %is.array.type, label %done, label %if.not.table
done: ; preds = %test.if.array
%26 = ptrtoint %ravi.Table* %25 to i64
%27 = bitcast %ravi.TValue* %22 to i64*
store i64 %26, i64* %27, align 8, !tbaa !15
%desttype4 = getelementptr inbounds %ravi.TValue* %22, i64 0, i32 1
store i32 69, i32* %desttype4, align 4, !tbaa !17
%sunkaddr13 = ptrtoint %ravi.lua_State* %L to i64
%sunkaddr14 = add i64 %sunkaddr13, 16
%sunkaddr15 = inttoptr i64 %sunkaddr14 to %ravi.TValue**
store %ravi.TValue* %22, %ravi.TValue** %sunkaddr15, align 8, !tbaa !20
%sizep = getelementptr inbounds %ravi.Proto* %4, i64 0, i32 10
%28 = load i32* %sizep, align 4, !tbaa !27
%29 = icmp sgt i32 %28, 0
br i1 %29, label %if.then, label %if.else
if.then: ; preds = %done
tail call void @luaF_close(%ravi.lua_State* %L, %ravi.TValue* %22)
br label %if.else
if.else: ; preds = %if.then, %done
%30 = tail call i32 @luaD_poscall(%ravi.lua_State* %L, %ravi.TValue* %22)
ret i32 1
}
; Function Attrs: nounwind
declare i32 @luaD_poscall(%ravi.lua_State*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare i32 @luaD_precall(%ravi.lua_State*, %ravi.TValue*, i32) #0
; Function Attrs: nounwind
declare void @luaF_close(%ravi.lua_State*, %ravi.TValue*) #0
; Function Attrs: noreturn nounwind
declare void @luaG_runerror(%ravi.lua_State*, i8*) #1
; Function Attrs: nounwind
declare void @luaV_execute(%ravi.lua_State*) #0
; Function Attrs: nounwind
declare void @luaV_gettable(%ravi.lua_State*, %ravi.TValue*, %ravi.TValue*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newarrayint(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*) #0
; Function Attrs: nounwind
declare void @raviV_op_newtable(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*, i32, i32) #0
; Function Attrs: nounwind
declare void @raviV_op_setlist(%ravi.lua_State*, %ravi.CallInfo*, %ravi.TValue*, i32, i32) #0
attributes #0 = { nounwind }
attributes #1 = { noreturn nounwind }
!0 = !{!"CallInfo", !1, i64 0, !1, i64 4, !1, i64 8, !1, i64 12, !4, i64 16, !5, i64 32, !6, i64 40, !2, i64 42, !2, i64 43}
!1 = !{!"any pointer", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C / C++ TBAA"}
!4 = !{!"CallInfo_l", !1, i64 0, !1, i64 4, !5, i64 8}
!5 = !{!"long long", !2, i64 0}
!6 = !{!"short", !2, i64 0}
!7 = !{!0, !1, i64 0}
!8 = !{!1, !1, i64 0}
!9 = !{!10, !1, i64 12}
!10 = !{!"LClosure", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16}
!11 = !{!12, !1, i64 44}
!12 = !{!"Proto", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !2, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !1, i64 44, !1, i64 48, !1, i64 52, !1, i64 56, !1, i64 60, !1, i64 64, !1, i64 68, !1, i64 72, !1, i64 76, !2, i64 80}
!13 = !{!"int", !2, i64 0}
!14 = !{!0, !1, i64 16}
!15 = !{!16, !5, i64 0}
!16 = !{!"TValue", !5, i64 0, !13, i64 8}
!17 = !{!16, !13, i64 8}
!18 = !{!19, !1, i64 0}
!19 = !{!"UpVal", !1, i64 0, !5, i64 8, !16, i64 16}
!20 = !{!21, !1, i64 8}
!21 = !{!"lua_State", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !1, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !1, i64 32, !1, i64 36, !1, i64 40, !1, i64 44, !0, i64 48, !1, i64 92, !5, i64 96, !13, i64 104, !13, i64 108, !13, i64 112, !6, i64 114, !6, i64 116, !2, i64 118, !2, i64 119}
!22 = !{!0, !1, i64 4}
!23 = !{!16, !1, i64 0}
!24 = !{!25, !2, i64 36}
!25 = !{!"Table", !1, i64 0, !2, i64 4, !2, i64 5, !2, i64 6, !2, i64 7, !13, i64 8, !1, i64 12, !1, i64 16, !1, i64 20, !1, i64 24, !1, i64 28, !26, i64 32}
!26 = !{!"RaviArray", !1, i64 0, !2, i64 4, !13, i64 8, !13, i64 12}
!27 = !{!12, !13, i64 28}
Loading…
Cancel
Save