; Harbour LLVM IR - generated from tests/llvm/codeblock.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_CODEBLOCK = internal constant [1 x i8] c"\07"
@.pcode.HB_FUN_MAIN = internal constant [202 x i8] c"\0D\05\00\24\09\00\59\0D\00\02\00\00\00\5F\01\5F\02\48\06\50\01\24\0A\00\5C\64\50\02\24\0B\00\59\0F\00\01\00\01\00\02\00\5F\01\5F\FF\48\06\50\03\24\0C\00\59\1E\00\01\00\00\00\30\02\00\59\0D\00\01\00\00\00\5F\01\5C\02\41\06\5F\01\70\01\7A\48\06\50\04\24\0F\00\B0\03\00\30\02\00\5A\0D\6A\08\6E\6F\20\61\72\67\73\00\06\70\00\14\01\24\10\00\B0\03\00\30\02\00\5F\01\5C\03\5C\04\70\02\14\01\24\11\00\B0\03\00\30\02\00\5F\03\5C\05\70\01\14\01\24\12\00\B0\03\00\30\02\00\5F\04\5C\0A\70\01\14\01\24\14\00\59\0C\00\01\00\00\00\5F\01\7A\31\06\50\05\24\15\00\B0\03\00\30\02\00\5F\05\5C\2A\70\01\14\01\24\16\00\64\6E\07"

@.sym.0 = private constant [10 x i8] c"\43\4F\44\45\42\4C\4F\43\4B\00"
@.sym.1 = private constant [5 x i8] c"\4D\41\49\4E\00"
@.sym.2 = private constant [5 x i8] c"\45\56\41\4C\00"
@.sym.3 = private constant [5 x i8] c"\51\4F\55\54\00"

@.modname = private constant [25 x i8] c"\74\65\73\74\73\2F\6C\6C\76\6D\2F\63\6F\64\65\62\6C\6F\63\6B\2E\70\72\67\00"

@symbols_table = internal global [4 x %HB_SYMB] [
  %HB_SYMB { i8* getelementptr([10 x i8], [10 x i8]* @.sym.0, i32 0, i32 0),
           i64 517,
           i8* bitcast(void()* @HB_FUN_CODEBLOCK 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 33,
           i8* null,
           i8* null },
  %HB_SYMB { i8* getelementptr([5 x i8], [5 x i8]* @.sym.3, i32 0, i32 0),
           i64 1,
           i8* bitcast(void()* @HB_FUN_QOUT to i8*),
           i8* null }
]


define void @HB_FUN_CODEBLOCK() {
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 5, 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_pushblock(i8* getelementptr([202 x i8], [202 x i8]* @.pcode.HB_FUN_MAIN, i32 0, i32 6), %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0))
  br label %i19
i19:
  %r19 = call i32 @hb_vmsh_poplocal(i32 1)
  %c19 = icmp ne i32 %r19, 0
  br i1 %c19, label %epilogue, label %i21
i21:
  br label %i24
i24:
  %r24 = call i32 @hb_vmsh_pushint(i32 100)
  %c24 = icmp ne i32 %r24, 0
  br i1 %c24, label %epilogue, label %i26
i26:
  %r26 = call i32 @hb_vmsh_poplocal(i32 2)
  %c26 = icmp ne i32 %r26, 0
  br i1 %c26, label %epilogue, label %i28
i28:
  br label %i31
i31:
  %r31 = call i32 @hb_vmsh_pushblock(i8* getelementptr([202 x i8], [202 x i8]* @.pcode.HB_FUN_MAIN, i32 0, i32 31), %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0))
  br label %i46
i46:
  %r46 = call i32 @hb_vmsh_poplocal(i32 3)
  %c46 = icmp ne i32 %r46, 0
  br i1 %c46, label %epilogue, label %i48
i48:
  br label %i51
i51:
  %r51 = call i32 @hb_vmsh_pushblock(i8* getelementptr([202 x i8], [202 x i8]* @.pcode.HB_FUN_MAIN, i32 0, i32 51), %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0))
  br label %i81
i81:
  %r81 = call i32 @hb_vmsh_poplocal(i32 4)
  %c81 = icmp ne i32 %r81, 0
  br i1 %c81, label %epilogue, label %i83
i83:
  br label %i86
i86:
  %r86 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c86 = icmp ne i32 %r86, 0
  br i1 %c86, label %epilogue, label %ipfs86a
ipfs86a:
  %r86b = call i32 @hb_vmsh_pushnil()
  %c86b = icmp ne i32 %r86b, 0
  br i1 %c86b, label %epilogue, label %i89
i89:
  %r89 = call i32 @hb_vmsh_message(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c89 = icmp ne i32 %r89, 0
  br i1 %c89, label %epilogue, label %i92
i92:
  %r92 = call i32 @hb_vmsh_pushblock(i8* getelementptr([202 x i8], [202 x i8]* @.pcode.HB_FUN_MAIN, i32 0, i32 92), %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0))
  br label %i105
i105:
  %r105 = call i32 @hb_vmsh_send(i32 0)
  %c105 = icmp ne i32 %r105, 0
  br i1 %c105, label %epilogue, label %i107
i107:
  %r107 = call i32 @hb_vmsh_do(i32 1)
  %c107 = icmp ne i32 %r107, 0
  br i1 %c107, label %epilogue, label %i109
i109:
  br label %i112
i112:
  %r112 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c112 = icmp ne i32 %r112, 0
  br i1 %c112, label %epilogue, label %ipfs112a
ipfs112a:
  %r112b = call i32 @hb_vmsh_pushnil()
  %c112b = icmp ne i32 %r112b, 0
  br i1 %c112b, label %epilogue, label %i115
i115:
  %r115 = call i32 @hb_vmsh_message(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c115 = icmp ne i32 %r115, 0
  br i1 %c115, label %epilogue, label %i118
i118:
  %r118 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c118 = icmp ne i32 %r118, 0
  br i1 %c118, label %epilogue, label %i120
i120:
  %r120 = call i32 @hb_vmsh_pushint(i32 3)
  %c120 = icmp ne i32 %r120, 0
  br i1 %c120, label %epilogue, label %i122
i122:
  %r122 = call i32 @hb_vmsh_pushint(i32 4)
  %c122 = icmp ne i32 %r122, 0
  br i1 %c122, label %epilogue, label %i124
i124:
  %r124 = call i32 @hb_vmsh_send(i32 2)
  %c124 = icmp ne i32 %r124, 0
  br i1 %c124, label %epilogue, label %i126
i126:
  %r126 = call i32 @hb_vmsh_do(i32 1)
  %c126 = icmp ne i32 %r126, 0
  br i1 %c126, label %epilogue, label %i128
i128:
  br label %i131
i131:
  %r131 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c131 = icmp ne i32 %r131, 0
  br i1 %c131, label %epilogue, label %ipfs131a
ipfs131a:
  %r131b = call i32 @hb_vmsh_pushnil()
  %c131b = icmp ne i32 %r131b, 0
  br i1 %c131b, label %epilogue, label %i134
i134:
  %r134 = call i32 @hb_vmsh_message(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c134 = icmp ne i32 %r134, 0
  br i1 %c134, label %epilogue, label %i137
i137:
  %r137 = call i32 @hb_vmsh_pushlocal(i32 3)
  %c137 = icmp ne i32 %r137, 0
  br i1 %c137, label %epilogue, label %i139
i139:
  %r139 = call i32 @hb_vmsh_pushint(i32 5)
  %c139 = icmp ne i32 %r139, 0
  br i1 %c139, label %epilogue, label %i141
i141:
  %r141 = call i32 @hb_vmsh_send(i32 1)
  %c141 = icmp ne i32 %r141, 0
  br i1 %c141, label %epilogue, label %i143
i143:
  %r143 = call i32 @hb_vmsh_do(i32 1)
  %c143 = icmp ne i32 %r143, 0
  br i1 %c143, label %epilogue, label %i145
i145:
  br label %i148
i148:
  %r148 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c148 = icmp ne i32 %r148, 0
  br i1 %c148, label %epilogue, label %ipfs148a
ipfs148a:
  %r148b = call i32 @hb_vmsh_pushnil()
  %c148b = icmp ne i32 %r148b, 0
  br i1 %c148b, label %epilogue, label %i151
i151:
  %r151 = call i32 @hb_vmsh_message(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c151 = icmp ne i32 %r151, 0
  br i1 %c151, label %epilogue, label %i154
i154:
  %r154 = call i32 @hb_vmsh_pushlocal(i32 4)
  %c154 = icmp ne i32 %r154, 0
  br i1 %c154, label %epilogue, label %i156
i156:
  %r156 = call i32 @hb_vmsh_pushint(i32 10)
  %c156 = icmp ne i32 %r156, 0
  br i1 %c156, label %epilogue, label %i158
i158:
  %r158 = call i32 @hb_vmsh_send(i32 1)
  %c158 = icmp ne i32 %r158, 0
  br i1 %c158, label %epilogue, label %i160
i160:
  %r160 = call i32 @hb_vmsh_do(i32 1)
  %c160 = icmp ne i32 %r160, 0
  br i1 %c160, label %epilogue, label %i162
i162:
  br label %i165
i165:
  %r165 = call i32 @hb_vmsh_pushblock(i8* getelementptr([202 x i8], [202 x i8]* @.pcode.HB_FUN_MAIN, i32 0, i32 165), %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0))
  br label %i177
i177:
  %r177 = call i32 @hb_vmsh_poplocal(i32 5)
  %c177 = icmp ne i32 %r177, 0
  br i1 %c177, label %epilogue, label %i179
i179:
  br label %i182
i182:
  %r182 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c182 = icmp ne i32 %r182, 0
  br i1 %c182, label %epilogue, label %ipfs182a
ipfs182a:
  %r182b = call i32 @hb_vmsh_pushnil()
  %c182b = icmp ne i32 %r182b, 0
  br i1 %c182b, label %epilogue, label %i185
i185:
  %r185 = call i32 @hb_vmsh_message(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c185 = icmp ne i32 %r185, 0
  br i1 %c185, label %epilogue, label %i188
i188:
  %r188 = call i32 @hb_vmsh_pushlocal(i32 5)
  %c188 = icmp ne i32 %r188, 0
  br i1 %c188, label %epilogue, label %i190
i190:
  %r190 = call i32 @hb_vmsh_pushint(i32 42)
  %c190 = icmp ne i32 %r190, 0
  br i1 %c190, label %epilogue, label %i192
i192:
  %r192 = call i32 @hb_vmsh_send(i32 1)
  %c192 = icmp ne i32 %r192, 0
  br i1 %c192, label %epilogue, label %i194
i194:
  %r194 = call i32 @hb_vmsh_do(i32 1)
  %c194 = icmp ne i32 %r194, 0
  br i1 %c194, label %epilogue, label %i196
i196:
  br label %i199
i199:
  %r199 = call i32 @hb_vmsh_pushnil()
  %c199 = icmp ne i32 %r199, 0
  br i1 %c199, label %epilogue, label %i200
i200:
  %r200 = call i32 @hb_vmsh_retvalue()
  %c200 = icmp ne i32 %r200, 0
  br i1 %c200, label %epilogue, label %i201
i201:
  br label %epilogue
epilogue:
  ret void
}

define internal void @hb_vm_SymbolInit() {
  %r = call %HB_SYMB* @hb_vmProcessSymbols(
    %HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 0),
    i16 4,
    i8* getelementptr([25 x i8], [25 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"
