; Harbour LLVM IR - generated from tests/llvm/arith.prg
target triple = "x86_64-pc-linux-gnu"
%HB_SYMB = type { i8*, i64, i8*, i8* }

declare void @hb_vmExecute(i8*, %HB_SYMB*)
declare %HB_SYMB* @hb_vmProcessSymbols(%HB_SYMB*, i16, i8*, i32, i16)
declare i32 @hb_vmsh_pushnil()
declare i32 @hb_vmsh_pushlogical(i32)
declare i32 @hb_vmsh_pushint(i32)
declare i32 @hb_vmsh_pushlong(i64)
declare i32 @hb_vmsh_pushlonglong(i64)
declare i32 @hb_vmsh_pushdouble(double, i32, i32)
declare i32 @hb_vmsh_pushstring(i8*, i64)
declare i32 @hb_vmsh_pushlocal(i32)
declare i32 @hb_vmsh_poplocal(i32)
declare i32 @hb_vmsh_pushstatic(i32)
declare i32 @hb_vmsh_popstatic(i32)
declare i32 @hb_vmsh_pushsymbol(%HB_SYMB*)
declare i32 @hb_vmsh_plus()
declare i32 @hb_vmsh_minus()
declare i32 @hb_vmsh_mult()
declare i32 @hb_vmsh_divide()
declare i32 @hb_vmsh_modulus()
declare i32 @hb_vmsh_power()
declare i32 @hb_vmsh_negate()
declare i32 @hb_vmsh_equal()
declare i32 @hb_vmsh_exactlyequal()
declare i32 @hb_vmsh_notequal()
declare i32 @hb_vmsh_less()
declare i32 @hb_vmsh_lessequal()
declare i32 @hb_vmsh_greater()
declare i32 @hb_vmsh_greaterequal()
declare i32 @hb_vmsh_and()
declare i32 @hb_vmsh_or()
declare i32 @hb_vmsh_not()
declare i32 @hb_vmsh_pop()
declare i32 @hb_vmsh_duplicate()
declare i32 @hb_vmsh_frame(i32, i32)
declare i32 @hb_vmsh_function(i32)
declare i32 @hb_vmsh_do(i32)
declare i32 @hb_vmsh_retvalue()
declare i32 @hb_vmsh_poplogical(i32*)
declare i32 @hb_vmsh_fortest()
declare i32 @hb_vmsh_inc()
declare i32 @hb_vmsh_dec()
declare i32 @hb_vmsh_duplunref()
declare i32 @hb_vmsh_pushunref()
declare i32 @hb_vmsh_pluseqpop()
declare i32 @hb_vmsh_minuseqpop()
declare i32 @hb_vmsh_multeqpop()
declare i32 @hb_vmsh_diveqpop()
declare i32 @hb_vmsh_modeqpop()
declare i32 @hb_vmsh_expeqpop()
declare i32 @hb_vmsh_deceqpop()
declare i32 @hb_vmsh_inceqpop()
declare i32 @hb_vmsh_pluseq()
declare i32 @hb_vmsh_minuseq()
declare i32 @hb_vmsh_multeq()
declare i32 @hb_vmsh_diveq()
declare i32 @hb_vmsh_modeq()
declare i32 @hb_vmsh_expeq()
declare i32 @hb_vmsh_deceq()
declare i32 @hb_vmsh_inceq()
declare i32 @hb_vmsh_pushlocalref(i32)
declare i32 @hb_vmsh_pushstaticref(i32)
declare i32 @hb_vmsh_localinc(i32)
declare i32 @hb_vmsh_localdec(i32)
declare i32 @hb_vmsh_localincpush(i32)
declare i32 @hb_vmsh_localaddint(i32, i32)
declare i32 @hb_vmsh_localnearaddint(i32, i32)
declare i32 @hb_vmsh_arraypush()
declare i32 @hb_vmsh_arraypushref()
declare i32 @hb_vmsh_arraypop()
declare i32 @hb_vmsh_pushaparams()
declare i32 @hb_vmsh_arraydim(i32)
declare i32 @hb_vmsh_arraygen(i32)
declare i32 @hb_vmsh_hashgen(i32)
declare i32 @hb_vmsh_pushalias()
declare i32 @hb_vmsh_popalias()
declare i32 @hb_vmsh_swapalias()
declare i32 @hb_vmsh_pushfield(%HB_SYMB*)
declare i32 @hb_vmsh_popfield(%HB_SYMB*)
declare i32 @hb_vmsh_pushmemvar(%HB_SYMB*)
declare i32 @hb_vmsh_pushmemvarref(%HB_SYMB*)
declare i32 @hb_vmsh_popmemvar(%HB_SYMB*)
declare i32 @hb_vmsh_pushvariable(%HB_SYMB*)
declare i32 @hb_vmsh_popvariable(%HB_SYMB*)
declare i32 @hb_vmsh_pushaliasedfield(%HB_SYMB*)
declare i32 @hb_vmsh_popaliasedfield(%HB_SYMB*)
declare i32 @hb_vmsh_pushaliasedvar(%HB_SYMB*)
declare i32 @hb_vmsh_popaliasedvar(%HB_SYMB*)
declare i32 @hb_vmsh_pushself()
declare i32 @hb_vmsh_pushovarref()
declare i32 @hb_vmsh_withobjectstart()
declare i32 @hb_vmsh_withobjectend()
declare i32 @hb_vmsh_funcptr()
declare i32 @hb_vmsh_message(%HB_SYMB*)
declare i32 @hb_vmsh_withobjectmessage(%HB_SYMB*)
declare i32 @hb_vmsh_send(i32)
declare i32 @hb_vmsh_enumstart(i32, i32)
declare i32 @hb_vmsh_enumnext()
declare i32 @hb_vmsh_enumprev()
declare i32 @hb_vmsh_enumend()
declare i32 @hb_vmsh_switchidx(i8*, i32)
declare i32 @hb_vmsh_pushblock(i8*, %HB_SYMB*)
declare i32 @hb_vmsh_macropushindex()
declare i32 @hb_vmsh_macropushref()
declare i32 @hb_vmsh_macrosymbol()
declare i32 @hb_vmsh_macrotext()
declare i32 @hb_vmsh_macropop(i32)
declare i32 @hb_vmsh_macropopaliased(i32)
declare i32 @hb_vmsh_macropush(i32)
declare i32 @hb_vmsh_macropushlist(i32)
declare i32 @hb_vmsh_macropushpare(i32)
declare i32 @hb_vmsh_macropushaliased(i32)
declare i32 @hb_vmsh_macroarraygen(i32)
declare i32 @hb_vmsh_macrodo(i32)
declare i32 @hb_vmsh_macrofunc(i32)
declare i32 @hb_vmsh_macrosend(i32)
declare i32 @hb_vmsh_seqbegin(i8*)
declare i32 @hb_vmsh_seqend()
declare i32 @hb_vmsh_seqrecover()
declare i32 @hb_vmsh_seqalways(i8*)
declare i32 @hb_vmsh_alwaysbegin(i8*)
declare i32 @hb_vmsh_alwaysend()
declare i32 @hb_vmsh_seqblock()
declare void @hb_INITSTATICS()
declare void @hb_INITLINES()
declare void @HB_FUN_QOUT()

@symbols = internal global %HB_SYMB* null

@.pcode.HB_FUN_ARITH = internal constant [1 x i8] c"\07"
@.pcode.HB_FUN_MAIN = internal constant [67 x i8] c"\0D\02\00\24\02\00\5C\07\50\01\5C\05\50\02\24\03\00\B0\02\00\5F\01\5F\02\48\5F\01\5F\02\31\5F\01\5F\02\41\5F\01\5F\02\12\14\04\24\04\00\B0\02\00\5F\01\42\5F\01\5F\02\48\5C\02\41\14\02\24\05\00\64\6E\07"

@.sym.0 = private constant [6 x i8] c"\41\52\49\54\48\00"
@.sym.1 = private constant [5 x i8] c"\4D\41\49\4E\00"
@.sym.2 = private constant [5 x i8] c"\51\4F\55\54\00"

@.modname = private constant [21 x i8] c"\74\65\73\74\73\2F\6C\6C\76\6D\2F\61\72\69\74\68\2E\70\72\67\00"

@symbols_table = internal global [3 x %HB_SYMB] [
  %HB_SYMB { i8* getelementptr([6 x i8], [6 x i8]* @.sym.0, i32 0, i32 0),
           i64 517,
           i8* bitcast(void()* @HB_FUN_ARITH to i8*),
           i8* null },
  %HB_SYMB { i8* getelementptr([5 x i8], [5 x i8]* @.sym.1, i32 0, i32 0),
           i64 513,
           i8* bitcast(void()* @HB_FUN_MAIN to i8*),
           i8* null },
  %HB_SYMB { i8* getelementptr([5 x i8], [5 x i8]* @.sym.2, i32 0, i32 0),
           i64 1,
           i8* bitcast(void()* @HB_FUN_QOUT to i8*),
           i8* null }
]


define void @HB_FUN_ARITH() {
entry:
  br label %i0
i0:
  br label %epilogue
epilogue:
  ret void
}

define void @HB_FUN_MAIN() {
entry:
  br label %i0
i0:
  %r0 = call i32 @hb_vmsh_frame(i32 2, i32 0)
  %c0 = icmp ne i32 %r0, 0
  br i1 %c0, label %epilogue, label %i3
i3:
  br label %i6
i6:
  %r6 = call i32 @hb_vmsh_pushint(i32 7)
  %c6 = icmp ne i32 %r6, 0
  br i1 %c6, label %epilogue, label %i8
i8:
  %r8 = call i32 @hb_vmsh_poplocal(i32 1)
  %c8 = icmp ne i32 %r8, 0
  br i1 %c8, label %epilogue, label %i10
i10:
  %r10 = call i32 @hb_vmsh_pushint(i32 5)
  %c10 = icmp ne i32 %r10, 0
  br i1 %c10, label %epilogue, label %i12
i12:
  %r12 = call i32 @hb_vmsh_poplocal(i32 2)
  %c12 = icmp ne i32 %r12, 0
  br i1 %c12, label %epilogue, label %i14
i14:
  br label %i17
i17:
  %r17 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([3 x %HB_SYMB], [3 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c17 = icmp ne i32 %r17, 0
  br i1 %c17, label %epilogue, label %ipfs17a
ipfs17a:
  %r17b = call i32 @hb_vmsh_pushnil()
  %c17b = icmp ne i32 %r17b, 0
  br i1 %c17b, label %epilogue, label %i20
i20:
  %r20 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c20 = icmp ne i32 %r20, 0
  br i1 %c20, label %epilogue, label %i22
i22:
  %r22 = call i32 @hb_vmsh_pushlocal(i32 2)
  %c22 = icmp ne i32 %r22, 0
  br i1 %c22, label %epilogue, label %i24
i24:
  %r24 = call i32 @hb_vmsh_plus()
  %c24 = icmp ne i32 %r24, 0
  br i1 %c24, label %epilogue, label %i25
i25:
  %r25 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c25 = icmp ne i32 %r25, 0
  br i1 %c25, label %epilogue, label %i27
i27:
  %r27 = call i32 @hb_vmsh_pushlocal(i32 2)
  %c27 = icmp ne i32 %r27, 0
  br i1 %c27, label %epilogue, label %i29
i29:
  %r29 = call i32 @hb_vmsh_minus()
  %c29 = icmp ne i32 %r29, 0
  br i1 %c29, label %epilogue, label %i30
i30:
  %r30 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c30 = icmp ne i32 %r30, 0
  br i1 %c30, label %epilogue, label %i32
i32:
  %r32 = call i32 @hb_vmsh_pushlocal(i32 2)
  %c32 = icmp ne i32 %r32, 0
  br i1 %c32, label %epilogue, label %i34
i34:
  %r34 = call i32 @hb_vmsh_mult()
  %c34 = icmp ne i32 %r34, 0
  br i1 %c34, label %epilogue, label %i35
i35:
  %r35 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c35 = icmp ne i32 %r35, 0
  br i1 %c35, label %epilogue, label %i37
i37:
  %r37 = call i32 @hb_vmsh_pushlocal(i32 2)
  %c37 = icmp ne i32 %r37, 0
  br i1 %c37, label %epilogue, label %i39
i39:
  %r39 = call i32 @hb_vmsh_divide()
  %c39 = icmp ne i32 %r39, 0
  br i1 %c39, label %epilogue, label %i40
i40:
  %r40 = call i32 @hb_vmsh_do(i32 4)
  %c40 = icmp ne i32 %r40, 0
  br i1 %c40, label %epilogue, label %i42
i42:
  br label %i45
i45:
  %r45 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([3 x %HB_SYMB], [3 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c45 = icmp ne i32 %r45, 0
  br i1 %c45, label %epilogue, label %ipfs45a
ipfs45a:
  %r45b = call i32 @hb_vmsh_pushnil()
  %c45b = icmp ne i32 %r45b, 0
  br i1 %c45b, label %epilogue, label %i48
i48:
  %r48 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c48 = icmp ne i32 %r48, 0
  br i1 %c48, label %epilogue, label %i50
i50:
  %r50 = call i32 @hb_vmsh_negate()
  %c50 = icmp ne i32 %r50, 0
  br i1 %c50, label %epilogue, label %i51
i51:
  %r51 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c51 = icmp ne i32 %r51, 0
  br i1 %c51, label %epilogue, label %i53
i53:
  %r53 = call i32 @hb_vmsh_pushlocal(i32 2)
  %c53 = icmp ne i32 %r53, 0
  br i1 %c53, label %epilogue, label %i55
i55:
  %r55 = call i32 @hb_vmsh_plus()
  %c55 = icmp ne i32 %r55, 0
  br i1 %c55, label %epilogue, label %i56
i56:
  %r56 = call i32 @hb_vmsh_pushint(i32 2)
  %c56 = icmp ne i32 %r56, 0
  br i1 %c56, label %epilogue, label %i58
i58:
  %r58 = call i32 @hb_vmsh_mult()
  %c58 = icmp ne i32 %r58, 0
  br i1 %c58, label %epilogue, label %i59
i59:
  %r59 = call i32 @hb_vmsh_do(i32 2)
  %c59 = icmp ne i32 %r59, 0
  br i1 %c59, label %epilogue, label %i61
i61:
  br label %i64
i64:
  %r64 = call i32 @hb_vmsh_pushnil()
  %c64 = icmp ne i32 %r64, 0
  br i1 %c64, label %epilogue, label %i65
i65:
  %r65 = call i32 @hb_vmsh_retvalue()
  %c65 = icmp ne i32 %r65, 0
  br i1 %c65, label %epilogue, label %i66
i66:
  br label %epilogue
epilogue:
  ret void
}

define internal void @hb_vm_SymbolInit() {
  %r = call %HB_SYMB* @hb_vmProcessSymbols(
    %HB_SYMB* getelementptr([3 x %HB_SYMB], [3 x %HB_SYMB]* @symbols_table, i32 0, i32 0),
    i16 3,
    i8* getelementptr([21 x i8], [21 x i8]* @.modname, i32 0, i32 0),
    i32 0, i16 3)
  store %HB_SYMB* %r, %HB_SYMB** @symbols
  ret void
}

@__hb_init_ptr = global [1 x void()*] [void()* @hb_vm_SymbolInit], section ".init_array", align 8
@llvm.used = appending global [1 x i8*] [i8* bitcast([1 x void()*]* @__hb_init_ptr to i8*)], section "llvm.metadata"
