; Harbour LLVM IR - generated from tests/llvm/arraymdim.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()
declare void @HB_FUN_LEN()

@symbols = internal global %HB_SYMB* null

@.pcode.HB_FUN_ARRAYMDIM = internal constant [1 x i8] c"\07"
@.pcode.HB_FUN_MAIN = internal constant [91 x i8] c"\0D\01\00\24\02\00\5C\03\5C\04\03\02\00\50\01\24\03\00\5C\0B\5F\01\7A\01\7A\02\24\04\00\5C\22\5F\01\5C\03\01\5C\04\02\24\05\00\B0\02\00\5F\01\7A\01\7A\01\5F\01\5C\03\01\5C\04\01\14\02\24\06\00\B0\02\00\B0\03\00\5F\01\0C\01\B0\03\00\5F\01\7A\01\0C\01\14\02\24\07\00\64\6E\07"

@.sym.0 = private constant [10 x i8] c"\41\52\52\41\59\4D\44\49\4D\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"
@.sym.3 = private constant [4 x i8] c"\4C\45\4E\00"

@.modname = private constant [25 x i8] c"\74\65\73\74\73\2F\6C\6C\76\6D\2F\61\72\72\61\79\6D\64\69\6D\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_ARRAYMDIM 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 },
  %HB_SYMB { i8* getelementptr([4 x i8], [4 x i8]* @.sym.3, i32 0, i32 0),
           i64 1,
           i8* bitcast(void()* @HB_FUN_LEN to i8*),
           i8* null }
]


define void @HB_FUN_ARRAYMDIM() {
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 1, 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 3)
  %c6 = icmp ne i32 %r6, 0
  br i1 %c6, label %epilogue, label %i8
i8:
  %r8 = call i32 @hb_vmsh_pushint(i32 4)
  %c8 = icmp ne i32 %r8, 0
  br i1 %c8, label %epilogue, label %i10
i10:
  %r10 = call i32 @hb_vmsh_arraydim(i32 2)
  %c10 = icmp ne i32 %r10, 0
  br i1 %c10, label %epilogue, label %i13
i13:
  %r13 = call i32 @hb_vmsh_poplocal(i32 1)
  %c13 = icmp ne i32 %r13, 0
  br i1 %c13, label %epilogue, label %i15
i15:
  br label %i18
i18:
  %r18 = call i32 @hb_vmsh_pushint(i32 11)
  %c18 = icmp ne i32 %r18, 0
  br i1 %c18, 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_pushint(i32 1)
  %c22 = icmp ne i32 %r22, 0
  br i1 %c22, label %epilogue, label %i23
i23:
  %r23 = call i32 @hb_vmsh_arraypush()
  %c23 = icmp ne i32 %r23, 0
  br i1 %c23, label %epilogue, label %i24
i24:
  %r24 = call i32 @hb_vmsh_pushint(i32 1)
  %c24 = icmp ne i32 %r24, 0
  br i1 %c24, label %epilogue, label %i25
i25:
  %r25 = call i32 @hb_vmsh_arraypop()
  %c25 = icmp ne i32 %r25, 0
  br i1 %c25, label %epilogue, label %i26
i26:
  br label %i29
i29:
  %r29 = call i32 @hb_vmsh_pushint(i32 34)
  %c29 = icmp ne i32 %r29, 0
  br i1 %c29, label %epilogue, label %i31
i31:
  %r31 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c31 = icmp ne i32 %r31, 0
  br i1 %c31, label %epilogue, label %i33
i33:
  %r33 = call i32 @hb_vmsh_pushint(i32 3)
  %c33 = icmp ne i32 %r33, 0
  br i1 %c33, label %epilogue, label %i35
i35:
  %r35 = call i32 @hb_vmsh_arraypush()
  %c35 = icmp ne i32 %r35, 0
  br i1 %c35, label %epilogue, label %i36
i36:
  %r36 = call i32 @hb_vmsh_pushint(i32 4)
  %c36 = icmp ne i32 %r36, 0
  br i1 %c36, label %epilogue, label %i38
i38:
  %r38 = call i32 @hb_vmsh_arraypop()
  %c38 = icmp ne i32 %r38, 0
  br i1 %c38, label %epilogue, label %i39
i39:
  br label %i42
i42:
  %r42 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c42 = icmp ne i32 %r42, 0
  br i1 %c42, label %epilogue, label %ipfs42a
ipfs42a:
  %r42b = call i32 @hb_vmsh_pushnil()
  %c42b = icmp ne i32 %r42b, 0
  br i1 %c42b, label %epilogue, label %i45
i45:
  %r45 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c45 = icmp ne i32 %r45, 0
  br i1 %c45, label %epilogue, label %i47
i47:
  %r47 = call i32 @hb_vmsh_pushint(i32 1)
  %c47 = icmp ne i32 %r47, 0
  br i1 %c47, label %epilogue, label %i48
i48:
  %r48 = call i32 @hb_vmsh_arraypush()
  %c48 = icmp ne i32 %r48, 0
  br i1 %c48, label %epilogue, label %i49
i49:
  %r49 = call i32 @hb_vmsh_pushint(i32 1)
  %c49 = icmp ne i32 %r49, 0
  br i1 %c49, label %epilogue, label %i50
i50:
  %r50 = call i32 @hb_vmsh_arraypush()
  %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_pushint(i32 3)
  %c53 = icmp ne i32 %r53, 0
  br i1 %c53, label %epilogue, label %i55
i55:
  %r55 = call i32 @hb_vmsh_arraypush()
  %c55 = icmp ne i32 %r55, 0
  br i1 %c55, label %epilogue, label %i56
i56:
  %r56 = call i32 @hb_vmsh_pushint(i32 4)
  %c56 = icmp ne i32 %r56, 0
  br i1 %c56, label %epilogue, label %i58
i58:
  %r58 = call i32 @hb_vmsh_arraypush()
  %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_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 2))
  %c64 = icmp ne i32 %r64, 0
  br i1 %c64, label %epilogue, label %ipfs64a
ipfs64a:
  %r64b = call i32 @hb_vmsh_pushnil()
  %c64b = icmp ne i32 %r64b, 0
  br i1 %c64b, label %epilogue, label %i67
i67:
  %r67 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c67 = icmp ne i32 %r67, 0
  br i1 %c67, label %epilogue, label %ipfs67a
ipfs67a:
  %r67b = call i32 @hb_vmsh_pushnil()
  %c67b = icmp ne i32 %r67b, 0
  br i1 %c67b, label %epilogue, label %i70
i70:
  %r70 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c70 = icmp ne i32 %r70, 0
  br i1 %c70, label %epilogue, label %i72
i72:
  %r72 = call i32 @hb_vmsh_function(i32 1)
  %c72 = icmp ne i32 %r72, 0
  br i1 %c72, label %epilogue, label %i74
i74:
  %r74 = call i32 @hb_vmsh_pushsymbol(%HB_SYMB* getelementptr([4 x %HB_SYMB], [4 x %HB_SYMB]* @symbols_table, i32 0, i32 3))
  %c74 = icmp ne i32 %r74, 0
  br i1 %c74, label %epilogue, label %ipfs74a
ipfs74a:
  %r74b = call i32 @hb_vmsh_pushnil()
  %c74b = icmp ne i32 %r74b, 0
  br i1 %c74b, label %epilogue, label %i77
i77:
  %r77 = call i32 @hb_vmsh_pushlocal(i32 1)
  %c77 = icmp ne i32 %r77, 0
  br i1 %c77, label %epilogue, label %i79
i79:
  %r79 = call i32 @hb_vmsh_pushint(i32 1)
  %c79 = icmp ne i32 %r79, 0
  br i1 %c79, label %epilogue, label %i80
i80:
  %r80 = call i32 @hb_vmsh_arraypush()
  %c80 = icmp ne i32 %r80, 0
  br i1 %c80, label %epilogue, label %i81
i81:
  %r81 = call i32 @hb_vmsh_function(i32 1)
  %c81 = icmp ne i32 %r81, 0
  br i1 %c81, label %epilogue, label %i83
i83:
  %r83 = call i32 @hb_vmsh_do(i32 2)
  %c83 = icmp ne i32 %r83, 0
  br i1 %c83, label %epilogue, label %i85
i85:
  br label %i88
i88:
  %r88 = call i32 @hb_vmsh_pushnil()
  %c88 = icmp ne i32 %r88, 0
  br i1 %c88, label %epilogue, label %i89
i89:
  %r89 = call i32 @hb_vmsh_retvalue()
  %c89 = icmp ne i32 %r89, 0
  br i1 %c89, label %epilogue, label %i90
i90:
  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"
