Problem 1007
Alternating Difference: creative-telescoping recurrence for an algebraic generating function. 10M terms, modular arithmetic mod 1e9+9.
View problem on Project Euler
Performance comparison
| Metric | Our solution | Best known |
| Time complexity | O(n^2) | O(log n) |
| Space complexity | O(n) | O(1) |
| Approach | Flow solution | Modular exponentiation |
| Verdict | Suboptimal |
Flow source
# Project Euler 1007
# Alternating Difference: creative-telescoping recurrence for an algebraic
# generating function. 10M terms, modular arithmetic mod 1e9+9.
extern {
function calloc(n: i64, size: i64) -> ptr<void>
function free(p: ptr<void>) -> void
}
const MOD: i64 = 1000000009
const TARGET: i64 = 10000000
function mod_pow(base: i64, exp: i64, m: i64) -> i64 {
let mut result: i64 = 1
let mut b: i64 = base % m
let mut e: i64 = exp
while e > 0 {
if (e & 1) == 1 {
result = result * b % m
}
b = b * b % m
e = e >> 1
}
return result
}
# polynomial_value: Horner's method, coefficients low degree first
function poly_val(coeffs: ptr<i64>, n: i64) -> i64 {
let mut v: i64 = 0
let mut i: i64 = 11
while i >= 0 {
v = (v * n + coeffs[i]) % MOD
i = i - 1
}
return v
}
function main() -> i32 {
# 11 x 12 coefficient table (low degree first per row)
let coeffs: ptr<i64> = calloc(11 * 12, 8)
# Row 0
coeffs[0] = 564542217; coeffs[1] = 325536195; coeffs[2] = 625565095
coeffs[3] = 258562828; coeffs[4] = 50309146; coeffs[5] = 721049696
coeffs[6] = 308910873; coeffs[7] = 234609857; coeffs[8] = 352444580
coeffs[9] = 112684852; coeffs[10] = 526098889; coeffs[11] = 775427372
# Row 1
coeffs[12] = 756354407; coeffs[13] = 876712396; coeffs[14] = 925232674
coeffs[15] = 209529903; coeffs[16] = 431043426; coeffs[17] = 98036193
coeffs[18] = 411159730; coeffs[19] = 650080946; coeffs[20] = 586735744
coeffs[21] = 802393957; coeffs[22] = 917731008; coeffs[23] = 662122179
# Row 2
coeffs[24] = 770353449; coeffs[25] = 88154905; coeffs[26] = 504692236
coeffs[27] = 655625322; coeffs[28] = 572603598; coeffs[29] = 991869888
coeffs[30] = 915468074; coeffs[31] = 693094161; coeffs[32] = 179919603
coeffs[33] = 873974932; coeffs[34] = 986423939; coeffs[35] = 193800523
# Row 3
coeffs[36] = 547044626; coeffs[37] = 431921333; coeffs[38] = 336871141
coeffs[39] = 405939744; coeffs[40] = 684304146; coeffs[41] = 406844875
coeffs[42] = 110268327; coeffs[43] = 6418661; coeffs[44] = 533987403
coeffs[45] = 378546146; coeffs[46] = 256517355; coeffs[47] = 458272153
# Row 4
coeffs[48] = 584021986; coeffs[49] = 820086388; coeffs[50] = 399407432
coeffs[51] = 363471199; coeffs[52] = 28065946; coeffs[53] = 158462463
coeffs[54] = 212035288; coeffs[55] = 642246323; coeffs[56] = 128937736
coeffs[57] = 729528060; coeffs[58] = 400553445; coeffs[59] = 904647134
# Row 5
coeffs[60] = 130412455; coeffs[61] = 271277001; coeffs[62] = 847789671
coeffs[63] = 369809900; coeffs[64] = 273501501; coeffs[65] = 415528861
coeffs[66] = 103000357; coeffs[67] = 79415045; coeffs[68] = 892620950
coeffs[69] = 963713973; coeffs[70] = 920486784; coeffs[71] = 150788293
# Row 6
coeffs[72] = 841263954; coeffs[73] = 877714966; coeffs[74] = 231261912
coeffs[75] = 145551205; coeffs[76] = 358810941; coeffs[77] = 739118822
coeffs[78] = 741630308; coeffs[79] = 51109887; coeffs[80] = 572039589
coeffs[81] = 586686863; coeffs[82] = 780306805; coeffs[83] = 753840921
# Row 7
coeffs[84] = 924453715; coeffs[85] = 724710183; coeffs[86] = 251343960
coeffs[87] = 617970784; coeffs[88] = 108843307; coeffs[89] = 820712895
coeffs[90] = 926891587; coeffs[91] = 544054172; coeffs[92] = 772790579
coeffs[93] = 265582300; coeffs[94] = 658210597; coeffs[95] = 233845863
# Row 8
coeffs[96] = 348850580; coeffs[97] = 18190700; coeffs[98] = 135200071
coeffs[99] = 740796395; coeffs[100] = 394618090; coeffs[101] = 119264792
coeffs[102] = 469650557; coeffs[103] = 922517855; coeffs[104] = 620146658
coeffs[105] = 577934689; coeffs[106] = 143405744; coeffs[107] = 743846391
# Row 9
coeffs[108] = 363458011; coeffs[109] = 696243382; coeffs[110] = 636220249
coeffs[111] = 229509005; coeffs[112] = 303332388; coeffs[113] = 631146571
coeffs[114] = 677124719; coeffs[115] = 152104366; coeffs[116] = 123244817
coeffs[117] = 586518959; coeffs[118] = 314105934; coeffs[119] = 924615366
# Row 10 (denominator polynomial)
coeffs[120] = 193410267; coeffs[121] = 911570216; coeffs[122] = 570155372
coeffs[123] = 848170664; coeffs[124] = 434343571; coeffs[125] = 332813236
coeffs[126] = 991880938; coeffs[127] = 357506900; coeffs[128] = 867920836
coeffs[129] = 464991138; coeffs[130] = 0; coeffs[131] = 1
# Initial values: A(0)..A(10)
let vals: ptr<i64> = calloc(TARGET + 1, 8)
vals[0] = 0
vals[1] = MOD - 1
vals[2] = MOD - 2
vals[3] = MOD - 6
vals[4] = MOD - 20
vals[5] = MOD - 76
vals[6] = MOD - 314
vals[7] = MOD - 1409
vals[8] = MOD - 6732
vals[9] = MOD - 33900
vals[10] = MOD - 177666
if TARGET < 11 {
printf("%lld\n", vals[TARGET])
free(coeffs)
free(vals)
return 0
}
# Recurrence: for n = 1 .. TARGET-10,
# A(n+10) = -sum_{j=0..9} poly(coeffs[j], n) * A(n+j) / poly(coeffs[10], n)
let mut n: i64 = 1
while n <= TARGET - 10 {
let mut total: i64 = 0
let mut j: i64 = 0
while j < 10 {
let pj: i64 = poly_val(coeffs + j * 12, n)
total = (total + pj * vals[n + j]) % MOD
j = j + 1
}
let den: i64 = poly_val(coeffs + 120, n)
let inv_den: i64 = mod_pow(den, MOD - 2, MOD)
vals[n + 10] = (MOD - total) * inv_den % MOD
n = n + 1
}
printf("%lld\n", vals[TARGET])
free(coeffs)
free(vals)
return 0
}
Generated C
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Flow runtime helpers */
typedef struct flow_temp_node { struct flow_temp_node* next; } flow_temp_node;
static flow_temp_node* flow_temp_head = NULL;
static int flow_temp_atexit_set = 0;
__attribute__((unused)) static void flow_temp_free_all(void) {
while (flow_temp_head) {
flow_temp_node* n = flow_temp_head;
flow_temp_head = n->next;
free(n);
}
}
__attribute__((unused)) static void* flow_temp_alloc(size_t nbytes) {
flow_temp_node* node = (flow_temp_node*)malloc(sizeof(flow_temp_node) + nbytes);
if (!node) return NULL;
node->next = flow_temp_head;
flow_temp_head = node;
if (!flow_temp_atexit_set) {
flow_temp_atexit_set = 1;
atexit(flow_temp_free_all);
}
return (void*)(node + 1);
}
#ifndef FLOW_DIAG
#define FLOW_DIAG(msg) fprintf(stderr, "%s", (msg))
#endif
#ifndef FLOW_LOG
#define FLOW_LOG(fmt, ...) printf(fmt, __VA_ARGS__)
#endif
#ifndef FLOW_LOG_EMPTY
#define FLOW_LOG_EMPTY(fmt) printf(fmt)
#endif
static char* flow_strcat(const char* a, const char* b) {
size_t la = strlen(a ? a : ""), lb = strlen(b ? b : "");
char* r = (char*)flow_temp_alloc(la + lb + 1);
if (!r) return NULL;
if (la) memcpy(r, a, la);
if (lb) memcpy(r + la, b, lb);
r[la + lb] = '\0';
return r;
}
#define __flow_in_arr(arr, val) __extension__ ({ \
int _found = 0; \
size_t _n = sizeof(arr)/sizeof((arr)[0]); \
for (size_t _i = 0; _i < _n; _i++) { \
if ((arr)[_i] == (val)) { _found = 1; break; } \
} _found; })
/* Unified fault handler (MISRA #279) — override with -DFLOW_FAULT_HANDLER=fn */
#ifndef FLOW_FAULT_HANDLER
__attribute__((unused)) static inline void flow_fault_handler(const char* msg) {
fprintf(stderr, "flow: %s\n", msg ? msg : "fault");
abort();
#if defined(__GNUC__) || defined(__clang__)
__builtin_unreachable();
#endif
}
#else
#define flow_fault_handler FLOW_FAULT_HANDLER
#endif
#define flow_div_by_zero_handler() flow_fault_handler("division by zero")
#define flow_shift_ub_handler() flow_fault_handler("invalid shift (amount out of range or left-shift of negative)")
#ifndef FLOW_CHECKED_DIV
#define FLOW_CHECKED_DIV(L, R) (((R) != 0) ? ((L) / (R)) : (flow_div_by_zero_handler(), (L) * 0))
#endif
#ifndef FLOW_CHECKED_MOD
#define FLOW_CHECKED_MOD(L, R) (((R) != 0) ? ((L) % (R)) : (flow_div_by_zero_handler(), (L) * 0))
#endif
#ifndef FLOW_CHECKED_SHL
#define FLOW_CHECKED_SHL(L, R) ((((R) >= 0) && ((unsigned long long)(R) < (sizeof(L) * 8ull)) && ((L) >= 0)) ? ((L) << (R)) : (flow_shift_ub_handler(), (L) * 0))
#endif
#ifndef FLOW_CHECKED_SHR
#define FLOW_CHECKED_SHR(L, R) ((((R) >= 0) && ((unsigned long long)(R) < (sizeof(L) * 8ull))) ? ((L) >> (R)) : (flow_shift_ub_handler(), (L) * 0))
#endif
#include <math.h>
void* _ui_state = NULL;
static inline float i32_to_f32(int32_t v) { return (float)v; }
/* Host stub for @gpu kernels (device codegen replaces this). */
static inline int32_t gpu_thread_id(void) { return 0; }
int64_t mod_pow_i64_i64_i64(int64_t base, int64_t exp, int64_t m);
int64_t poly_val_ptr_i64_i64(int64_t* coeffs, int64_t n);
int32_t main(void);
static const int64_t MOD = 1000000009;
static const int64_t TARGET = 10000000;
int64_t mod_pow_i64_i64_i64(int64_t base, int64_t exp, int64_t m) {
int64_t result = 1;
int64_t b = FLOW_CHECKED_MOD((base), (m));
int64_t e = exp;
while (e > 0) {
if ((e & 1) == 1) {
result = FLOW_CHECKED_MOD(((result * b)), (m));
}
b = FLOW_CHECKED_MOD(((b * b)), (m));
e = FLOW_CHECKED_SHR((e), (1));
}
return result;
}
int64_t poly_val_ptr_i64_i64(int64_t* coeffs, int64_t n) {
int64_t v = 0;
int64_t i = 11;
while (i >= 0) {
v = FLOW_CHECKED_MOD((((v * n) + coeffs[i])), (MOD));
i = (i - 1);
}
return v;
}
int32_t main(void) {
int64_t* coeffs = (int64_t*)(calloc((11 * 12), 8));
coeffs[0] = 564542217;
coeffs[1] = 325536195;
coeffs[2] = 625565095;
coeffs[3] = 258562828;
coeffs[4] = 50309146;
coeffs[5] = 721049696;
coeffs[6] = 308910873;
coeffs[7] = 234609857;
coeffs[8] = 352444580;
coeffs[9] = 112684852;
coeffs[10] = 526098889;
coeffs[11] = 775427372;
coeffs[12] = 756354407;
coeffs[13] = 876712396;
coeffs[14] = 925232674;
coeffs[15] = 209529903;
coeffs[16] = 431043426;
coeffs[17] = 98036193;
coeffs[18] = 411159730;
coeffs[19] = 650080946;
coeffs[20] = 586735744;
coeffs[21] = 802393957;
coeffs[22] = 917731008;
coeffs[23] = 662122179;
coeffs[24] = 770353449;
coeffs[25] = 88154905;
coeffs[26] = 504692236;
coeffs[27] = 655625322;
coeffs[28] = 572603598;
coeffs[29] = 991869888;
coeffs[30] = 915468074;
coeffs[31] = 693094161;
coeffs[32] = 179919603;
coeffs[33] = 873974932;
coeffs[34] = 986423939;
coeffs[35] = 193800523;
coeffs[36] = 547044626;
coeffs[37] = 431921333;
coeffs[38] = 336871141;
coeffs[39] = 405939744;
coeffs[40] = 684304146;
coeffs[41] = 406844875;
coeffs[42] = 110268327;
coeffs[43] = 6418661;
coeffs[44] = 533987403;
coeffs[45] = 378546146;
coeffs[46] = 256517355;
coeffs[47] = 458272153;
coeffs[48] = 584021986;
coeffs[49] = 820086388;
coeffs[50] = 399407432;
coeffs[51] = 363471199;
coeffs[52] = 28065946;
coeffs[53] = 158462463;
coeffs[54] = 212035288;
coeffs[55] = 642246323;
coeffs[56] = 128937736;
coeffs[57] = 729528060;
coeffs[58] = 400553445;
coeffs[59] = 904647134;
coeffs[60] = 130412455;
coeffs[61] = 271277001;
coeffs[62] = 847789671;
coeffs[63] = 369809900;
coeffs[64] = 273501501;
coeffs[65] = 415528861;
coeffs[66] = 103000357;
coeffs[67] = 79415045;
coeffs[68] = 892620950;
coeffs[69] = 963713973;
coeffs[70] = 920486784;
coeffs[71] = 150788293;
coeffs[72] = 841263954;
coeffs[73] = 877714966;
coeffs[74] = 231261912;
coeffs[75] = 145551205;
coeffs[76] = 358810941;
coeffs[77] = 739118822;
coeffs[78] = 741630308;
coeffs[79] = 51109887;
coeffs[80] = 572039589;
coeffs[81] = 586686863;
coeffs[82] = 780306805;
coeffs[83] = 753840921;
coeffs[84] = 924453715;
coeffs[85] = 724710183;
coeffs[86] = 251343960;
coeffs[87] = 617970784;
coeffs[88] = 108843307;
coeffs[89] = 820712895;
coeffs[90] = 926891587;
coeffs[91] = 544054172;
coeffs[92] = 772790579;
coeffs[93] = 265582300;
coeffs[94] = 658210597;
coeffs[95] = 233845863;
coeffs[96] = 348850580;
coeffs[97] = 18190700;
coeffs[98] = 135200071;
coeffs[99] = 740796395;
coeffs[100] = 394618090;
coeffs[101] = 119264792;
coeffs[102] = 469650557;
coeffs[103] = 922517855;
coeffs[104] = 620146658;
coeffs[105] = 577934689;
coeffs[106] = 143405744;
coeffs[107] = 743846391;
coeffs[108] = 363458011;
coeffs[109] = 696243382;
coeffs[110] = 636220249;
coeffs[111] = 229509005;
coeffs[112] = 303332388;
coeffs[113] = 631146571;
coeffs[114] = 677124719;
coeffs[115] = 152104366;
coeffs[116] = 123244817;
coeffs[117] = 586518959;
coeffs[118] = 314105934;
coeffs[119] = 924615366;
coeffs[120] = 193410267;
coeffs[121] = 911570216;
coeffs[122] = 570155372;
coeffs[123] = 848170664;
coeffs[124] = 434343571;
coeffs[125] = 332813236;
coeffs[126] = 991880938;
coeffs[127] = 357506900;
coeffs[128] = 867920836;
coeffs[129] = 464991138;
coeffs[130] = 0;
coeffs[131] = 1;
int64_t* vals = (int64_t*)(calloc((TARGET + 1), 8));
vals[0] = 0;
vals[1] = (MOD - 1);
vals[2] = (MOD - 2);
vals[3] = (MOD - 6);
vals[4] = (MOD - 20);
vals[5] = (MOD - 76);
vals[6] = (MOD - 314);
vals[7] = (MOD - 1409);
vals[8] = (MOD - 6732);
vals[9] = (MOD - 33900);
vals[10] = (MOD - 177666);
if (TARGET < 11) {
printf("%lld\n", vals[TARGET]);
free(coeffs);
free(vals);
return 0;
}
int64_t n = 1;
while (n <= (TARGET - 10)) {
int64_t total = 0;
int64_t j = 0;
while (j < 10) {
int64_t pj = poly_val_ptr_i64_i64((coeffs + (j * 12)), n);
total = FLOW_CHECKED_MOD(((total + (pj * vals[(n + j)]))), (MOD));
j = (j + 1);
}
int64_t den = poly_val_ptr_i64_i64((coeffs + 120), n);
int64_t inv_den = mod_pow_i64_i64_i64(den, (MOD - 2), MOD);
vals[(n + 10)] = FLOW_CHECKED_MOD((((MOD - total) * inv_den)), (MOD));
n = (n + 1);
}
printf("%lld\n", vals[TARGET]);
free(coeffs);
free(vals);
return 0;
}
Generated MLIR
module {
llvm.func @printf(!llvm.ptr, ...) -> i32
llvm.mlir.global internal constant @str_0("%lld\n\00") {addr_space = 0 : i32} : !llvm.array<6 x i8>
func.func private @calloc(i64, i64) -> !llvm.ptr
func.func private @free(!llvm.ptr) -> ()
// Constant: MOD
llvm.mlir.global internal constant @MOD(1000000009 : i64) : i64
// Constant: TARGET
llvm.mlir.global internal constant @TARGET(10000000 : i64) : i64
func.func @mod_pow(%arg0: i64, %arg1: i64, %arg2: i64) -> i64 {
%0 = arith.constant 1 : i32
%1 = arith.extsi %0 : i32 to i64
%2 = llvm.mlir.constant(1 : i64) : i64
%3 = llvm.alloca %2 x i64 : (i64) -> !llvm.ptr
llvm.store %1, %3 : i64, !llvm.ptr
%4 = arith.remsi %arg0, %arg2 : i64
%5 = llvm.mlir.constant(1 : i64) : i64
%6 = llvm.alloca %5 x i64 : (i64) -> !llvm.ptr
llvm.store %4, %6 : i64, !llvm.ptr
%7 = llvm.mlir.constant(1 : i64) : i64
%8 = llvm.alloca %7 x i64 : (i64) -> !llvm.ptr
llvm.store %arg1, %8 : i64, !llvm.ptr
cf.br ^bb0
^bb0:
%9 = llvm.load %8 : !llvm.ptr -> i64
%10 = arith.constant 0 : i32
%12 = arith.extsi %10 : i32 to i64
%11 = arith.cmpi sgt, %9, %12 : i64
cf.cond_br %11, ^bb1, ^bb2
^bb1:
%13 = llvm.load %8 : !llvm.ptr -> i64
%14 = arith.constant 1 : i32
%16 = arith.extsi %14 : i32 to i64
%15 = arith.andi %13, %16 : i64
%17 = arith.constant 1 : i32
%19 = arith.extsi %17 : i32 to i64
%18 = arith.cmpi eq, %15, %19 : i64
cf.cond_br %18, ^bb3, ^bb4
^bb3:
%20 = llvm.load %3 : !llvm.ptr -> i64
%21 = llvm.load %6 : !llvm.ptr -> i64
%22 = arith.muli %20, %21 : i64
%23 = arith.remsi %22, %arg2 : i64
llvm.store %23, %3 : i64, !llvm.ptr
cf.br ^bb5
^bb4:
cf.br ^bb5
^bb5:
%24 = llvm.load %6 : !llvm.ptr -> i64
%25 = llvm.load %6 : !llvm.ptr -> i64
%26 = arith.muli %24, %25 : i64
%27 = arith.remsi %26, %arg2 : i64
llvm.store %27, %6 : i64, !llvm.ptr
%28 = llvm.load %8 : !llvm.ptr -> i64
%29 = arith.constant 1 : i32
%31 = arith.extsi %29 : i32 to i64
%30 = arith.shrsi %28, %31 : i64
llvm.store %30, %8 : i64, !llvm.ptr
cf.br ^bb0
^bb2:
%32 = llvm.load %3 : !llvm.ptr -> i64
func.return %32 : i64
}
func.func @poly_val(%arg0: !llvm.ptr, %arg1: i64) -> i64 {
%33 = arith.constant 0 : i32
%34 = arith.extsi %33 : i32 to i64
%35 = llvm.mlir.constant(1 : i64) : i64
%36 = llvm.alloca %35 x i64 : (i64) -> !llvm.ptr
llvm.store %34, %36 : i64, !llvm.ptr
%37 = arith.constant 11 : i32
%38 = arith.extsi %37 : i32 to i64
%39 = llvm.mlir.constant(1 : i64) : i64
%40 = llvm.alloca %39 x i64 : (i64) -> !llvm.ptr
llvm.store %38, %40 : i64, !llvm.ptr
cf.br ^bb6
^bb6:
%41 = llvm.load %40 : !llvm.ptr -> i64
%42 = arith.constant 0 : i32
%44 = arith.extsi %42 : i32 to i64
%43 = arith.cmpi sge, %41, %44 : i64
cf.cond_br %43, ^bb7, ^bb8
^bb7:
%45 = llvm.load %36 : !llvm.ptr -> i64
%46 = arith.muli %45, %arg1 : i64
%48 = llvm.load %40 : !llvm.ptr -> i64
%49 = llvm.getelementptr %arg0[%48] : (!llvm.ptr, i64) -> !llvm.ptr, i64
%47 = llvm.load %49 : !llvm.ptr -> i64
%50 = arith.addi %46, %47 : i64
%51 = llvm.mlir.addressof @MOD : !llvm.ptr
%52 = llvm.load %51 : !llvm.ptr -> i64
%53 = arith.remsi %50, %52 : i64
llvm.store %53, %36 : i64, !llvm.ptr
%54 = llvm.load %40 : !llvm.ptr -> i64
%55 = arith.constant 1 : i32
%57 = arith.extsi %55 : i32 to i64
%56 = arith.subi %54, %57 : i64
llvm.store %56, %40 : i64, !llvm.ptr
cf.br ^bb6
^bb8:
%58 = llvm.load %36 : !llvm.ptr -> i64
func.return %58 : i64
}
func.func @main() -> i32 {
%60 = arith.constant 11 : i32
%61 = arith.constant 12 : i32
%62 = arith.muli %60, %61 : i32
%63 = arith.constant 8 : i32
%64 = arith.extsi %62 : i32 to i64
%65 = arith.extsi %63 : i32 to i64
%59 = func.call @calloc(%64, %65) : (i64, i64) -> !llvm.ptr
%66 = arith.constant 564542217 : i32
%67 = arith.constant 0 : i32
%68 = arith.extsi %66 : i32 to i64
%69 = arith.extsi %67 : i32 to i64
%70 = llvm.getelementptr %59[%69] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %68, %70 : i64, !llvm.ptr
%71 = arith.constant 325536195 : i32
%72 = arith.constant 1 : i32
%73 = arith.extsi %71 : i32 to i64
%74 = arith.extsi %72 : i32 to i64
%75 = llvm.getelementptr %59[%74] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %73, %75 : i64, !llvm.ptr
%76 = arith.constant 625565095 : i32
%77 = arith.constant 2 : i32
%78 = arith.extsi %76 : i32 to i64
%79 = arith.extsi %77 : i32 to i64
%80 = llvm.getelementptr %59[%79] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %78, %80 : i64, !llvm.ptr
%81 = arith.constant 258562828 : i32
%82 = arith.constant 3 : i32
%83 = arith.extsi %81 : i32 to i64
%84 = arith.extsi %82 : i32 to i64
%85 = llvm.getelementptr %59[%84] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %83, %85 : i64, !llvm.ptr
%86 = arith.constant 50309146 : i32
%87 = arith.constant 4 : i32
%88 = arith.extsi %86 : i32 to i64
%89 = arith.extsi %87 : i32 to i64
%90 = llvm.getelementptr %59[%89] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %88, %90 : i64, !llvm.ptr
%91 = arith.constant 721049696 : i32
%92 = arith.constant 5 : i32
%93 = arith.extsi %91 : i32 to i64
%94 = arith.extsi %92 : i32 to i64
%95 = llvm.getelementptr %59[%94] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %93, %95 : i64, !llvm.ptr
%96 = arith.constant 308910873 : i32
%97 = arith.constant 6 : i32
%98 = arith.extsi %96 : i32 to i64
%99 = arith.extsi %97 : i32 to i64
%100 = llvm.getelementptr %59[%99] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %98, %100 : i64, !llvm.ptr
%101 = arith.constant 234609857 : i32
%102 = arith.constant 7 : i32
%103 = arith.extsi %101 : i32 to i64
%104 = arith.extsi %102 : i32 to i64
%105 = llvm.getelementptr %59[%104] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %103, %105 : i64, !llvm.ptr
%106 = arith.constant 352444580 : i32
%107 = arith.constant 8 : i32
%108 = arith.extsi %106 : i32 to i64
%109 = arith.extsi %107 : i32 to i64
%110 = llvm.getelementptr %59[%109] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %108, %110 : i64, !llvm.ptr
%111 = arith.constant 112684852 : i32
%112 = arith.constant 9 : i32
%113 = arith.extsi %111 : i32 to i64
%114 = arith.extsi %112 : i32 to i64
%115 = llvm.getelementptr %59[%114] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %113, %115 : i64, !llvm.ptr
%116 = arith.constant 526098889 : i32
%117 = arith.constant 10 : i32
%118 = arith.extsi %116 : i32 to i64
%119 = arith.extsi %117 : i32 to i64
%120 = llvm.getelementptr %59[%119] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %118, %120 : i64, !llvm.ptr
%121 = arith.constant 775427372 : i32
%122 = arith.constant 11 : i32
%123 = arith.extsi %121 : i32 to i64
%124 = arith.extsi %122 : i32 to i64
%125 = llvm.getelementptr %59[%124] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %123, %125 : i64, !llvm.ptr
%126 = arith.constant 756354407 : i32
%127 = arith.constant 12 : i32
%128 = arith.extsi %126 : i32 to i64
%129 = arith.extsi %127 : i32 to i64
%130 = llvm.getelementptr %59[%129] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %128, %130 : i64, !llvm.ptr
%131 = arith.constant 876712396 : i32
%132 = arith.constant 13 : i32
%133 = arith.extsi %131 : i32 to i64
%134 = arith.extsi %132 : i32 to i64
%135 = llvm.getelementptr %59[%134] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %133, %135 : i64, !llvm.ptr
%136 = arith.constant 925232674 : i32
%137 = arith.constant 14 : i32
%138 = arith.extsi %136 : i32 to i64
%139 = arith.extsi %137 : i32 to i64
%140 = llvm.getelementptr %59[%139] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %138, %140 : i64, !llvm.ptr
%141 = arith.constant 209529903 : i32
%142 = arith.constant 15 : i32
%143 = arith.extsi %141 : i32 to i64
%144 = arith.extsi %142 : i32 to i64
%145 = llvm.getelementptr %59[%144] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %143, %145 : i64, !llvm.ptr
%146 = arith.constant 431043426 : i32
%147 = arith.constant 16 : i32
%148 = arith.extsi %146 : i32 to i64
%149 = arith.extsi %147 : i32 to i64
%150 = llvm.getelementptr %59[%149] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %148, %150 : i64, !llvm.ptr
%151 = arith.constant 98036193 : i32
%152 = arith.constant 17 : i32
%153 = arith.extsi %151 : i32 to i64
%154 = arith.extsi %152 : i32 to i64
%155 = llvm.getelementptr %59[%154] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %153, %155 : i64, !llvm.ptr
%156 = arith.constant 411159730 : i32
%157 = arith.constant 18 : i32
%158 = arith.extsi %156 : i32 to i64
%159 = arith.extsi %157 : i32 to i64
%160 = llvm.getelementptr %59[%159] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %158, %160 : i64, !llvm.ptr
%161 = arith.constant 650080946 : i32
%162 = arith.constant 19 : i32
%163 = arith.extsi %161 : i32 to i64
%164 = arith.extsi %162 : i32 to i64
%165 = llvm.getelementptr %59[%164] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %163, %165 : i64, !llvm.ptr
%166 = arith.constant 586735744 : i32
%167 = arith.constant 20 : i32
%168 = arith.extsi %166 : i32 to i64
%169 = arith.extsi %167 : i32 to i64
%170 = llvm.getelementptr %59[%169] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %168, %170 : i64, !llvm.ptr
%171 = arith.constant 802393957 : i32
%172 = arith.constant 21 : i32
%173 = arith.extsi %171 : i32 to i64
%174 = arith.extsi %172 : i32 to i64
%175 = llvm.getelementptr %59[%174] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %173, %175 : i64, !llvm.ptr
%176 = arith.constant 917731008 : i32
%177 = arith.constant 22 : i32
%178 = arith.extsi %176 : i32 to i64
%179 = arith.extsi %177 : i32 to i64
%180 = llvm.getelementptr %59[%179] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %178, %180 : i64, !llvm.ptr
%181 = arith.constant 662122179 : i32
%182 = arith.constant 23 : i32
%183 = arith.extsi %181 : i32 to i64
%184 = arith.extsi %182 : i32 to i64
%185 = llvm.getelementptr %59[%184] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %183, %185 : i64, !llvm.ptr
%186 = arith.constant 770353449 : i32
%187 = arith.constant 24 : i32
%188 = arith.extsi %186 : i32 to i64
%189 = arith.extsi %187 : i32 to i64
%190 = llvm.getelementptr %59[%189] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %188, %190 : i64, !llvm.ptr
%191 = arith.constant 88154905 : i32
%192 = arith.constant 25 : i32
%193 = arith.extsi %191 : i32 to i64
%194 = arith.extsi %192 : i32 to i64
%195 = llvm.getelementptr %59[%194] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %193, %195 : i64, !llvm.ptr
%196 = arith.constant 504692236 : i32
%197 = arith.constant 26 : i32
%198 = arith.extsi %196 : i32 to i64
%199 = arith.extsi %197 : i32 to i64
%200 = llvm.getelementptr %59[%199] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %198, %200 : i64, !llvm.ptr
%201 = arith.constant 655625322 : i32
%202 = arith.constant 27 : i32
%203 = arith.extsi %201 : i32 to i64
%204 = arith.extsi %202 : i32 to i64
%205 = llvm.getelementptr %59[%204] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %203, %205 : i64, !llvm.ptr
%206 = arith.constant 572603598 : i32
%207 = arith.constant 28 : i32
%208 = arith.extsi %206 : i32 to i64
%209 = arith.extsi %207 : i32 to i64
%210 = llvm.getelementptr %59[%209] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %208, %210 : i64, !llvm.ptr
%211 = arith.constant 991869888 : i32
%212 = arith.constant 29 : i32
%213 = arith.extsi %211 : i32 to i64
%214 = arith.extsi %212 : i32 to i64
%215 = llvm.getelementptr %59[%214] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %213, %215 : i64, !llvm.ptr
%216 = arith.constant 915468074 : i32
%217 = arith.constant 30 : i32
%218 = arith.extsi %216 : i32 to i64
%219 = arith.extsi %217 : i32 to i64
%220 = llvm.getelementptr %59[%219] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %218, %220 : i64, !llvm.ptr
%221 = arith.constant 693094161 : i32
%222 = arith.constant 31 : i32
%223 = arith.extsi %221 : i32 to i64
%224 = arith.extsi %222 : i32 to i64
%225 = llvm.getelementptr %59[%224] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %223, %225 : i64, !llvm.ptr
%226 = arith.constant 179919603 : i32
%227 = arith.constant 32 : i32
%228 = arith.extsi %226 : i32 to i64
%229 = arith.extsi %227 : i32 to i64
%230 = llvm.getelementptr %59[%229] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %228, %230 : i64, !llvm.ptr
%231 = arith.constant 873974932 : i32
%232 = arith.constant 33 : i32
%233 = arith.extsi %231 : i32 to i64
%234 = arith.extsi %232 : i32 to i64
%235 = llvm.getelementptr %59[%234] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %233, %235 : i64, !llvm.ptr
%236 = arith.constant 986423939 : i32
%237 = arith.constant 34 : i32
%238 = arith.extsi %236 : i32 to i64
%239 = arith.extsi %237 : i32 to i64
%240 = llvm.getelementptr %59[%239] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %238, %240 : i64, !llvm.ptr
%241 = arith.constant 193800523 : i32
%242 = arith.constant 35 : i32
%243 = arith.extsi %241 : i32 to i64
%244 = arith.extsi %242 : i32 to i64
%245 = llvm.getelementptr %59[%244] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %243, %245 : i64, !llvm.ptr
%246 = arith.constant 547044626 : i32
%247 = arith.constant 36 : i32
%248 = arith.extsi %246 : i32 to i64
%249 = arith.extsi %247 : i32 to i64
%250 = llvm.getelementptr %59[%249] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %248, %250 : i64, !llvm.ptr
%251 = arith.constant 431921333 : i32
%252 = arith.constant 37 : i32
%253 = arith.extsi %251 : i32 to i64
%254 = arith.extsi %252 : i32 to i64
%255 = llvm.getelementptr %59[%254] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %253, %255 : i64, !llvm.ptr
%256 = arith.constant 336871141 : i32
%257 = arith.constant 38 : i32
%258 = arith.extsi %256 : i32 to i64
%259 = arith.extsi %257 : i32 to i64
%260 = llvm.getelementptr %59[%259] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %258, %260 : i64, !llvm.ptr
%261 = arith.constant 405939744 : i32
%262 = arith.constant 39 : i32
%263 = arith.extsi %261 : i32 to i64
%264 = arith.extsi %262 : i32 to i64
%265 = llvm.getelementptr %59[%264] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %263, %265 : i64, !llvm.ptr
%266 = arith.constant 684304146 : i32
%267 = arith.constant 40 : i32
%268 = arith.extsi %266 : i32 to i64
%269 = arith.extsi %267 : i32 to i64
%270 = llvm.getelementptr %59[%269] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %268, %270 : i64, !llvm.ptr
%271 = arith.constant 406844875 : i32
%272 = arith.constant 41 : i32
%273 = arith.extsi %271 : i32 to i64
%274 = arith.extsi %272 : i32 to i64
%275 = llvm.getelementptr %59[%274] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %273, %275 : i64, !llvm.ptr
%276 = arith.constant 110268327 : i32
%277 = arith.constant 42 : i32
%278 = arith.extsi %276 : i32 to i64
%279 = arith.extsi %277 : i32 to i64
%280 = llvm.getelementptr %59[%279] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %278, %280 : i64, !llvm.ptr
%281 = arith.constant 6418661 : i32
%282 = arith.constant 43 : i32
%283 = arith.extsi %281 : i32 to i64
%284 = arith.extsi %282 : i32 to i64
%285 = llvm.getelementptr %59[%284] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %283, %285 : i64, !llvm.ptr
%286 = arith.constant 533987403 : i32
%287 = arith.constant 44 : i32
%288 = arith.extsi %286 : i32 to i64
%289 = arith.extsi %287 : i32 to i64
%290 = llvm.getelementptr %59[%289] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %288, %290 : i64, !llvm.ptr
%291 = arith.constant 378546146 : i32
%292 = arith.constant 45 : i32
%293 = arith.extsi %291 : i32 to i64
%294 = arith.extsi %292 : i32 to i64
%295 = llvm.getelementptr %59[%294] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %293, %295 : i64, !llvm.ptr
%296 = arith.constant 256517355 : i32
%297 = arith.constant 46 : i32
%298 = arith.extsi %296 : i32 to i64
%299 = arith.extsi %297 : i32 to i64
%300 = llvm.getelementptr %59[%299] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %298, %300 : i64, !llvm.ptr
%301 = arith.constant 458272153 : i32
%302 = arith.constant 47 : i32
%303 = arith.extsi %301 : i32 to i64
%304 = arith.extsi %302 : i32 to i64
%305 = llvm.getelementptr %59[%304] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %303, %305 : i64, !llvm.ptr
%306 = arith.constant 584021986 : i32
%307 = arith.constant 48 : i32
%308 = arith.extsi %306 : i32 to i64
%309 = arith.extsi %307 : i32 to i64
%310 = llvm.getelementptr %59[%309] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %308, %310 : i64, !llvm.ptr
%311 = arith.constant 820086388 : i32
%312 = arith.constant 49 : i32
%313 = arith.extsi %311 : i32 to i64
%314 = arith.extsi %312 : i32 to i64
%315 = llvm.getelementptr %59[%314] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %313, %315 : i64, !llvm.ptr
%316 = arith.constant 399407432 : i32
%317 = arith.constant 50 : i32
%318 = arith.extsi %316 : i32 to i64
%319 = arith.extsi %317 : i32 to i64
%320 = llvm.getelementptr %59[%319] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %318, %320 : i64, !llvm.ptr
%321 = arith.constant 363471199 : i32
%322 = arith.constant 51 : i32
%323 = arith.extsi %321 : i32 to i64
%324 = arith.extsi %322 : i32 to i64
%325 = llvm.getelementptr %59[%324] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %323, %325 : i64, !llvm.ptr
%326 = arith.constant 28065946 : i32
%327 = arith.constant 52 : i32
%328 = arith.extsi %326 : i32 to i64
%329 = arith.extsi %327 : i32 to i64
%330 = llvm.getelementptr %59[%329] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %328, %330 : i64, !llvm.ptr
%331 = arith.constant 158462463 : i32
%332 = arith.constant 53 : i32
%333 = arith.extsi %331 : i32 to i64
%334 = arith.extsi %332 : i32 to i64
%335 = llvm.getelementptr %59[%334] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %333, %335 : i64, !llvm.ptr
%336 = arith.constant 212035288 : i32
%337 = arith.constant 54 : i32
%338 = arith.extsi %336 : i32 to i64
%339 = arith.extsi %337 : i32 to i64
%340 = llvm.getelementptr %59[%339] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %338, %340 : i64, !llvm.ptr
%341 = arith.constant 642246323 : i32
%342 = arith.constant 55 : i32
%343 = arith.extsi %341 : i32 to i64
%344 = arith.extsi %342 : i32 to i64
%345 = llvm.getelementptr %59[%344] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %343, %345 : i64, !llvm.ptr
%346 = arith.constant 128937736 : i32
%347 = arith.constant 56 : i32
%348 = arith.extsi %346 : i32 to i64
%349 = arith.extsi %347 : i32 to i64
%350 = llvm.getelementptr %59[%349] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %348, %350 : i64, !llvm.ptr
%351 = arith.constant 729528060 : i32
%352 = arith.constant 57 : i32
%353 = arith.extsi %351 : i32 to i64
%354 = arith.extsi %352 : i32 to i64
%355 = llvm.getelementptr %59[%354] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %353, %355 : i64, !llvm.ptr
%356 = arith.constant 400553445 : i32
%357 = arith.constant 58 : i32
%358 = arith.extsi %356 : i32 to i64
%359 = arith.extsi %357 : i32 to i64
%360 = llvm.getelementptr %59[%359] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %358, %360 : i64, !llvm.ptr
%361 = arith.constant 904647134 : i32
%362 = arith.constant 59 : i32
%363 = arith.extsi %361 : i32 to i64
%364 = arith.extsi %362 : i32 to i64
%365 = llvm.getelementptr %59[%364] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %363, %365 : i64, !llvm.ptr
%366 = arith.constant 130412455 : i32
%367 = arith.constant 60 : i32
%368 = arith.extsi %366 : i32 to i64
%369 = arith.extsi %367 : i32 to i64
%370 = llvm.getelementptr %59[%369] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %368, %370 : i64, !llvm.ptr
%371 = arith.constant 271277001 : i32
%372 = arith.constant 61 : i32
%373 = arith.extsi %371 : i32 to i64
%374 = arith.extsi %372 : i32 to i64
%375 = llvm.getelementptr %59[%374] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %373, %375 : i64, !llvm.ptr
%376 = arith.constant 847789671 : i32
%377 = arith.constant 62 : i32
%378 = arith.extsi %376 : i32 to i64
%379 = arith.extsi %377 : i32 to i64
%380 = llvm.getelementptr %59[%379] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %378, %380 : i64, !llvm.ptr
%381 = arith.constant 369809900 : i32
%382 = arith.constant 63 : i32
%383 = arith.extsi %381 : i32 to i64
%384 = arith.extsi %382 : i32 to i64
%385 = llvm.getelementptr %59[%384] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %383, %385 : i64, !llvm.ptr
%386 = arith.constant 273501501 : i32
%387 = arith.constant 64 : i32
%388 = arith.extsi %386 : i32 to i64
%389 = arith.extsi %387 : i32 to i64
%390 = llvm.getelementptr %59[%389] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %388, %390 : i64, !llvm.ptr
%391 = arith.constant 415528861 : i32
%392 = arith.constant 65 : i32
%393 = arith.extsi %391 : i32 to i64
%394 = arith.extsi %392 : i32 to i64
%395 = llvm.getelementptr %59[%394] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %393, %395 : i64, !llvm.ptr
%396 = arith.constant 103000357 : i32
%397 = arith.constant 66 : i32
%398 = arith.extsi %396 : i32 to i64
%399 = arith.extsi %397 : i32 to i64
%400 = llvm.getelementptr %59[%399] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %398, %400 : i64, !llvm.ptr
%401 = arith.constant 79415045 : i32
%402 = arith.constant 67 : i32
%403 = arith.extsi %401 : i32 to i64
%404 = arith.extsi %402 : i32 to i64
%405 = llvm.getelementptr %59[%404] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %403, %405 : i64, !llvm.ptr
%406 = arith.constant 892620950 : i32
%407 = arith.constant 68 : i32
%408 = arith.extsi %406 : i32 to i64
%409 = arith.extsi %407 : i32 to i64
%410 = llvm.getelementptr %59[%409] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %408, %410 : i64, !llvm.ptr
%411 = arith.constant 963713973 : i32
%412 = arith.constant 69 : i32
%413 = arith.extsi %411 : i32 to i64
%414 = arith.extsi %412 : i32 to i64
%415 = llvm.getelementptr %59[%414] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %413, %415 : i64, !llvm.ptr
%416 = arith.constant 920486784 : i32
%417 = arith.constant 70 : i32
%418 = arith.extsi %416 : i32 to i64
%419 = arith.extsi %417 : i32 to i64
%420 = llvm.getelementptr %59[%419] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %418, %420 : i64, !llvm.ptr
%421 = arith.constant 150788293 : i32
%422 = arith.constant 71 : i32
%423 = arith.extsi %421 : i32 to i64
%424 = arith.extsi %422 : i32 to i64
%425 = llvm.getelementptr %59[%424] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %423, %425 : i64, !llvm.ptr
%426 = arith.constant 841263954 : i32
%427 = arith.constant 72 : i32
%428 = arith.extsi %426 : i32 to i64
%429 = arith.extsi %427 : i32 to i64
%430 = llvm.getelementptr %59[%429] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %428, %430 : i64, !llvm.ptr
%431 = arith.constant 877714966 : i32
%432 = arith.constant 73 : i32
%433 = arith.extsi %431 : i32 to i64
%434 = arith.extsi %432 : i32 to i64
%435 = llvm.getelementptr %59[%434] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %433, %435 : i64, !llvm.ptr
%436 = arith.constant 231261912 : i32
%437 = arith.constant 74 : i32
%438 = arith.extsi %436 : i32 to i64
%439 = arith.extsi %437 : i32 to i64
%440 = llvm.getelementptr %59[%439] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %438, %440 : i64, !llvm.ptr
%441 = arith.constant 145551205 : i32
%442 = arith.constant 75 : i32
%443 = arith.extsi %441 : i32 to i64
%444 = arith.extsi %442 : i32 to i64
%445 = llvm.getelementptr %59[%444] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %443, %445 : i64, !llvm.ptr
%446 = arith.constant 358810941 : i32
%447 = arith.constant 76 : i32
%448 = arith.extsi %446 : i32 to i64
%449 = arith.extsi %447 : i32 to i64
%450 = llvm.getelementptr %59[%449] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %448, %450 : i64, !llvm.ptr
%451 = arith.constant 739118822 : i32
%452 = arith.constant 77 : i32
%453 = arith.extsi %451 : i32 to i64
%454 = arith.extsi %452 : i32 to i64
%455 = llvm.getelementptr %59[%454] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %453, %455 : i64, !llvm.ptr
%456 = arith.constant 741630308 : i32
%457 = arith.constant 78 : i32
%458 = arith.extsi %456 : i32 to i64
%459 = arith.extsi %457 : i32 to i64
%460 = llvm.getelementptr %59[%459] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %458, %460 : i64, !llvm.ptr
%461 = arith.constant 51109887 : i32
%462 = arith.constant 79 : i32
%463 = arith.extsi %461 : i32 to i64
%464 = arith.extsi %462 : i32 to i64
%465 = llvm.getelementptr %59[%464] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %463, %465 : i64, !llvm.ptr
%466 = arith.constant 572039589 : i32
%467 = arith.constant 80 : i32
%468 = arith.extsi %466 : i32 to i64
%469 = arith.extsi %467 : i32 to i64
%470 = llvm.getelementptr %59[%469] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %468, %470 : i64, !llvm.ptr
%471 = arith.constant 586686863 : i32
%472 = arith.constant 81 : i32
%473 = arith.extsi %471 : i32 to i64
%474 = arith.extsi %472 : i32 to i64
%475 = llvm.getelementptr %59[%474] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %473, %475 : i64, !llvm.ptr
%476 = arith.constant 780306805 : i32
%477 = arith.constant 82 : i32
%478 = arith.extsi %476 : i32 to i64
%479 = arith.extsi %477 : i32 to i64
%480 = llvm.getelementptr %59[%479] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %478, %480 : i64, !llvm.ptr
%481 = arith.constant 753840921 : i32
%482 = arith.constant 83 : i32
%483 = arith.extsi %481 : i32 to i64
%484 = arith.extsi %482 : i32 to i64
%485 = llvm.getelementptr %59[%484] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %483, %485 : i64, !llvm.ptr
%486 = arith.constant 924453715 : i32
%487 = arith.constant 84 : i32
%488 = arith.extsi %486 : i32 to i64
%489 = arith.extsi %487 : i32 to i64
%490 = llvm.getelementptr %59[%489] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %488, %490 : i64, !llvm.ptr
%491 = arith.constant 724710183 : i32
%492 = arith.constant 85 : i32
%493 = arith.extsi %491 : i32 to i64
%494 = arith.extsi %492 : i32 to i64
%495 = llvm.getelementptr %59[%494] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %493, %495 : i64, !llvm.ptr
%496 = arith.constant 251343960 : i32
%497 = arith.constant 86 : i32
%498 = arith.extsi %496 : i32 to i64
%499 = arith.extsi %497 : i32 to i64
%500 = llvm.getelementptr %59[%499] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %498, %500 : i64, !llvm.ptr
%501 = arith.constant 617970784 : i32
%502 = arith.constant 87 : i32
%503 = arith.extsi %501 : i32 to i64
%504 = arith.extsi %502 : i32 to i64
%505 = llvm.getelementptr %59[%504] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %503, %505 : i64, !llvm.ptr
%506 = arith.constant 108843307 : i32
%507 = arith.constant 88 : i32
%508 = arith.extsi %506 : i32 to i64
%509 = arith.extsi %507 : i32 to i64
%510 = llvm.getelementptr %59[%509] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %508, %510 : i64, !llvm.ptr
%511 = arith.constant 820712895 : i32
%512 = arith.constant 89 : i32
%513 = arith.extsi %511 : i32 to i64
%514 = arith.extsi %512 : i32 to i64
%515 = llvm.getelementptr %59[%514] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %513, %515 : i64, !llvm.ptr
%516 = arith.constant 926891587 : i32
%517 = arith.constant 90 : i32
%518 = arith.extsi %516 : i32 to i64
%519 = arith.extsi %517 : i32 to i64
%520 = llvm.getelementptr %59[%519] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %518, %520 : i64, !llvm.ptr
%521 = arith.constant 544054172 : i32
%522 = arith.constant 91 : i32
%523 = arith.extsi %521 : i32 to i64
%524 = arith.extsi %522 : i32 to i64
%525 = llvm.getelementptr %59[%524] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %523, %525 : i64, !llvm.ptr
%526 = arith.constant 772790579 : i32
%527 = arith.constant 92 : i32
%528 = arith.extsi %526 : i32 to i64
%529 = arith.extsi %527 : i32 to i64
%530 = llvm.getelementptr %59[%529] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %528, %530 : i64, !llvm.ptr
%531 = arith.constant 265582300 : i32
%532 = arith.constant 93 : i32
%533 = arith.extsi %531 : i32 to i64
%534 = arith.extsi %532 : i32 to i64
%535 = llvm.getelementptr %59[%534] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %533, %535 : i64, !llvm.ptr
%536 = arith.constant 658210597 : i32
%537 = arith.constant 94 : i32
%538 = arith.extsi %536 : i32 to i64
%539 = arith.extsi %537 : i32 to i64
%540 = llvm.getelementptr %59[%539] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %538, %540 : i64, !llvm.ptr
%541 = arith.constant 233845863 : i32
%542 = arith.constant 95 : i32
%543 = arith.extsi %541 : i32 to i64
%544 = arith.extsi %542 : i32 to i64
%545 = llvm.getelementptr %59[%544] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %543, %545 : i64, !llvm.ptr
%546 = arith.constant 348850580 : i32
%547 = arith.constant 96 : i32
%548 = arith.extsi %546 : i32 to i64
%549 = arith.extsi %547 : i32 to i64
%550 = llvm.getelementptr %59[%549] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %548, %550 : i64, !llvm.ptr
%551 = arith.constant 18190700 : i32
%552 = arith.constant 97 : i32
%553 = arith.extsi %551 : i32 to i64
%554 = arith.extsi %552 : i32 to i64
%555 = llvm.getelementptr %59[%554] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %553, %555 : i64, !llvm.ptr
%556 = arith.constant 135200071 : i32
%557 = arith.constant 98 : i32
%558 = arith.extsi %556 : i32 to i64
%559 = arith.extsi %557 : i32 to i64
%560 = llvm.getelementptr %59[%559] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %558, %560 : i64, !llvm.ptr
%561 = arith.constant 740796395 : i32
%562 = arith.constant 99 : i32
%563 = arith.extsi %561 : i32 to i64
%564 = arith.extsi %562 : i32 to i64
%565 = llvm.getelementptr %59[%564] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %563, %565 : i64, !llvm.ptr
%566 = arith.constant 394618090 : i32
%567 = arith.constant 100 : i32
%568 = arith.extsi %566 : i32 to i64
%569 = arith.extsi %567 : i32 to i64
%570 = llvm.getelementptr %59[%569] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %568, %570 : i64, !llvm.ptr
%571 = arith.constant 119264792 : i32
%572 = arith.constant 101 : i32
%573 = arith.extsi %571 : i32 to i64
%574 = arith.extsi %572 : i32 to i64
%575 = llvm.getelementptr %59[%574] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %573, %575 : i64, !llvm.ptr
%576 = arith.constant 469650557 : i32
%577 = arith.constant 102 : i32
%578 = arith.extsi %576 : i32 to i64
%579 = arith.extsi %577 : i32 to i64
%580 = llvm.getelementptr %59[%579] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %578, %580 : i64, !llvm.ptr
%581 = arith.constant 922517855 : i32
%582 = arith.constant 103 : i32
%583 = arith.extsi %581 : i32 to i64
%584 = arith.extsi %582 : i32 to i64
%585 = llvm.getelementptr %59[%584] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %583, %585 : i64, !llvm.ptr
%586 = arith.constant 620146658 : i32
%587 = arith.constant 104 : i32
%588 = arith.extsi %586 : i32 to i64
%589 = arith.extsi %587 : i32 to i64
%590 = llvm.getelementptr %59[%589] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %588, %590 : i64, !llvm.ptr
%591 = arith.constant 577934689 : i32
%592 = arith.constant 105 : i32
%593 = arith.extsi %591 : i32 to i64
%594 = arith.extsi %592 : i32 to i64
%595 = llvm.getelementptr %59[%594] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %593, %595 : i64, !llvm.ptr
%596 = arith.constant 143405744 : i32
%597 = arith.constant 106 : i32
%598 = arith.extsi %596 : i32 to i64
%599 = arith.extsi %597 : i32 to i64
%600 = llvm.getelementptr %59[%599] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %598, %600 : i64, !llvm.ptr
%601 = arith.constant 743846391 : i32
%602 = arith.constant 107 : i32
%603 = arith.extsi %601 : i32 to i64
%604 = arith.extsi %602 : i32 to i64
%605 = llvm.getelementptr %59[%604] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %603, %605 : i64, !llvm.ptr
%606 = arith.constant 363458011 : i32
%607 = arith.constant 108 : i32
%608 = arith.extsi %606 : i32 to i64
%609 = arith.extsi %607 : i32 to i64
%610 = llvm.getelementptr %59[%609] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %608, %610 : i64, !llvm.ptr
%611 = arith.constant 696243382 : i32
%612 = arith.constant 109 : i32
%613 = arith.extsi %611 : i32 to i64
%614 = arith.extsi %612 : i32 to i64
%615 = llvm.getelementptr %59[%614] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %613, %615 : i64, !llvm.ptr
%616 = arith.constant 636220249 : i32
%617 = arith.constant 110 : i32
%618 = arith.extsi %616 : i32 to i64
%619 = arith.extsi %617 : i32 to i64
%620 = llvm.getelementptr %59[%619] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %618, %620 : i64, !llvm.ptr
%621 = arith.constant 229509005 : i32
%622 = arith.constant 111 : i32
%623 = arith.extsi %621 : i32 to i64
%624 = arith.extsi %622 : i32 to i64
%625 = llvm.getelementptr %59[%624] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %623, %625 : i64, !llvm.ptr
%626 = arith.constant 303332388 : i32
%627 = arith.constant 112 : i32
%628 = arith.extsi %626 : i32 to i64
%629 = arith.extsi %627 : i32 to i64
%630 = llvm.getelementptr %59[%629] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %628, %630 : i64, !llvm.ptr
%631 = arith.constant 631146571 : i32
%632 = arith.constant 113 : i32
%633 = arith.extsi %631 : i32 to i64
%634 = arith.extsi %632 : i32 to i64
%635 = llvm.getelementptr %59[%634] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %633, %635 : i64, !llvm.ptr
%636 = arith.constant 677124719 : i32
%637 = arith.constant 114 : i32
%638 = arith.extsi %636 : i32 to i64
%639 = arith.extsi %637 : i32 to i64
%640 = llvm.getelementptr %59[%639] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %638, %640 : i64, !llvm.ptr
%641 = arith.constant 152104366 : i32
%642 = arith.constant 115 : i32
%643 = arith.extsi %641 : i32 to i64
%644 = arith.extsi %642 : i32 to i64
%645 = llvm.getelementptr %59[%644] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %643, %645 : i64, !llvm.ptr
%646 = arith.constant 123244817 : i32
%647 = arith.constant 116 : i32
%648 = arith.extsi %646 : i32 to i64
%649 = arith.extsi %647 : i32 to i64
%650 = llvm.getelementptr %59[%649] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %648, %650 : i64, !llvm.ptr
%651 = arith.constant 586518959 : i32
%652 = arith.constant 117 : i32
%653 = arith.extsi %651 : i32 to i64
%654 = arith.extsi %652 : i32 to i64
%655 = llvm.getelementptr %59[%654] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %653, %655 : i64, !llvm.ptr
%656 = arith.constant 314105934 : i32
%657 = arith.constant 118 : i32
%658 = arith.extsi %656 : i32 to i64
%659 = arith.extsi %657 : i32 to i64
%660 = llvm.getelementptr %59[%659] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %658, %660 : i64, !llvm.ptr
%661 = arith.constant 924615366 : i32
%662 = arith.constant 119 : i32
%663 = arith.extsi %661 : i32 to i64
%664 = arith.extsi %662 : i32 to i64
%665 = llvm.getelementptr %59[%664] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %663, %665 : i64, !llvm.ptr
%666 = arith.constant 193410267 : i32
%667 = arith.constant 120 : i32
%668 = arith.extsi %666 : i32 to i64
%669 = arith.extsi %667 : i32 to i64
%670 = llvm.getelementptr %59[%669] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %668, %670 : i64, !llvm.ptr
%671 = arith.constant 911570216 : i32
%672 = arith.constant 121 : i32
%673 = arith.extsi %671 : i32 to i64
%674 = arith.extsi %672 : i32 to i64
%675 = llvm.getelementptr %59[%674] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %673, %675 : i64, !llvm.ptr
%676 = arith.constant 570155372 : i32
%677 = arith.constant 122 : i32
%678 = arith.extsi %676 : i32 to i64
%679 = arith.extsi %677 : i32 to i64
%680 = llvm.getelementptr %59[%679] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %678, %680 : i64, !llvm.ptr
%681 = arith.constant 848170664 : i32
%682 = arith.constant 123 : i32
%683 = arith.extsi %681 : i32 to i64
%684 = arith.extsi %682 : i32 to i64
%685 = llvm.getelementptr %59[%684] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %683, %685 : i64, !llvm.ptr
%686 = arith.constant 434343571 : i32
%687 = arith.constant 124 : i32
%688 = arith.extsi %686 : i32 to i64
%689 = arith.extsi %687 : i32 to i64
%690 = llvm.getelementptr %59[%689] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %688, %690 : i64, !llvm.ptr
%691 = arith.constant 332813236 : i32
%692 = arith.constant 125 : i32
%693 = arith.extsi %691 : i32 to i64
%694 = arith.extsi %692 : i32 to i64
%695 = llvm.getelementptr %59[%694] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %693, %695 : i64, !llvm.ptr
%696 = arith.constant 991880938 : i32
%697 = arith.constant 126 : i32
%698 = arith.extsi %696 : i32 to i64
%699 = arith.extsi %697 : i32 to i64
%700 = llvm.getelementptr %59[%699] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %698, %700 : i64, !llvm.ptr
%701 = arith.constant 357506900 : i32
%702 = arith.constant 127 : i32
%703 = arith.extsi %701 : i32 to i64
%704 = arith.extsi %702 : i32 to i64
%705 = llvm.getelementptr %59[%704] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %703, %705 : i64, !llvm.ptr
%706 = arith.constant 867920836 : i32
%707 = arith.constant 128 : i32
%708 = arith.extsi %706 : i32 to i64
%709 = arith.extsi %707 : i32 to i64
%710 = llvm.getelementptr %59[%709] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %708, %710 : i64, !llvm.ptr
%711 = arith.constant 464991138 : i32
%712 = arith.constant 129 : i32
%713 = arith.extsi %711 : i32 to i64
%714 = arith.extsi %712 : i32 to i64
%715 = llvm.getelementptr %59[%714] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %713, %715 : i64, !llvm.ptr
%716 = arith.constant 0 : i32
%717 = arith.constant 130 : i32
%718 = arith.extsi %716 : i32 to i64
%719 = arith.extsi %717 : i32 to i64
%720 = llvm.getelementptr %59[%719] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %718, %720 : i64, !llvm.ptr
%721 = arith.constant 1 : i32
%722 = arith.constant 131 : i32
%723 = arith.extsi %721 : i32 to i64
%724 = arith.extsi %722 : i32 to i64
%725 = llvm.getelementptr %59[%724] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %723, %725 : i64, !llvm.ptr
%727 = llvm.mlir.addressof @TARGET : !llvm.ptr
%728 = llvm.load %727 : !llvm.ptr -> i64
%729 = arith.constant 1 : i32
%731 = arith.extsi %729 : i32 to i64
%730 = arith.addi %728, %731 : i64
%732 = arith.constant 8 : i32
%733 = arith.extsi %732 : i32 to i64
%726 = func.call @calloc(%730, %733) : (i64, i64) -> !llvm.ptr
%734 = arith.constant 0 : i32
%735 = arith.constant 0 : i32
%736 = arith.extsi %734 : i32 to i64
%737 = arith.extsi %735 : i32 to i64
%738 = llvm.getelementptr %726[%737] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %736, %738 : i64, !llvm.ptr
%739 = llvm.mlir.addressof @MOD : !llvm.ptr
%740 = llvm.load %739 : !llvm.ptr -> i64
%741 = arith.constant 1 : i32
%743 = arith.extsi %741 : i32 to i64
%742 = arith.subi %740, %743 : i64
%744 = arith.constant 1 : i32
%745 = arith.extsi %744 : i32 to i64
%746 = llvm.getelementptr %726[%745] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %742, %746 : i64, !llvm.ptr
%747 = llvm.mlir.addressof @MOD : !llvm.ptr
%748 = llvm.load %747 : !llvm.ptr -> i64
%749 = arith.constant 2 : i32
%751 = arith.extsi %749 : i32 to i64
%750 = arith.subi %748, %751 : i64
%752 = arith.constant 2 : i32
%753 = arith.extsi %752 : i32 to i64
%754 = llvm.getelementptr %726[%753] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %750, %754 : i64, !llvm.ptr
%755 = llvm.mlir.addressof @MOD : !llvm.ptr
%756 = llvm.load %755 : !llvm.ptr -> i64
%757 = arith.constant 6 : i32
%759 = arith.extsi %757 : i32 to i64
%758 = arith.subi %756, %759 : i64
%760 = arith.constant 3 : i32
%761 = arith.extsi %760 : i32 to i64
%762 = llvm.getelementptr %726[%761] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %758, %762 : i64, !llvm.ptr
%763 = llvm.mlir.addressof @MOD : !llvm.ptr
%764 = llvm.load %763 : !llvm.ptr -> i64
%765 = arith.constant 20 : i32
%767 = arith.extsi %765 : i32 to i64
%766 = arith.subi %764, %767 : i64
%768 = arith.constant 4 : i32
%769 = arith.extsi %768 : i32 to i64
%770 = llvm.getelementptr %726[%769] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %766, %770 : i64, !llvm.ptr
%771 = llvm.mlir.addressof @MOD : !llvm.ptr
%772 = llvm.load %771 : !llvm.ptr -> i64
%773 = arith.constant 76 : i32
%775 = arith.extsi %773 : i32 to i64
%774 = arith.subi %772, %775 : i64
%776 = arith.constant 5 : i32
%777 = arith.extsi %776 : i32 to i64
%778 = llvm.getelementptr %726[%777] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %774, %778 : i64, !llvm.ptr
%779 = llvm.mlir.addressof @MOD : !llvm.ptr
%780 = llvm.load %779 : !llvm.ptr -> i64
%781 = arith.constant 314 : i32
%783 = arith.extsi %781 : i32 to i64
%782 = arith.subi %780, %783 : i64
%784 = arith.constant 6 : i32
%785 = arith.extsi %784 : i32 to i64
%786 = llvm.getelementptr %726[%785] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %782, %786 : i64, !llvm.ptr
%787 = llvm.mlir.addressof @MOD : !llvm.ptr
%788 = llvm.load %787 : !llvm.ptr -> i64
%789 = arith.constant 1409 : i32
%791 = arith.extsi %789 : i32 to i64
%790 = arith.subi %788, %791 : i64
%792 = arith.constant 7 : i32
%793 = arith.extsi %792 : i32 to i64
%794 = llvm.getelementptr %726[%793] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %790, %794 : i64, !llvm.ptr
%795 = llvm.mlir.addressof @MOD : !llvm.ptr
%796 = llvm.load %795 : !llvm.ptr -> i64
%797 = arith.constant 6732 : i32
%799 = arith.extsi %797 : i32 to i64
%798 = arith.subi %796, %799 : i64
%800 = arith.constant 8 : i32
%801 = arith.extsi %800 : i32 to i64
%802 = llvm.getelementptr %726[%801] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %798, %802 : i64, !llvm.ptr
%803 = llvm.mlir.addressof @MOD : !llvm.ptr
%804 = llvm.load %803 : !llvm.ptr -> i64
%805 = arith.constant 33900 : i32
%807 = arith.extsi %805 : i32 to i64
%806 = arith.subi %804, %807 : i64
%808 = arith.constant 9 : i32
%809 = arith.extsi %808 : i32 to i64
%810 = llvm.getelementptr %726[%809] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %806, %810 : i64, !llvm.ptr
%811 = llvm.mlir.addressof @MOD : !llvm.ptr
%812 = llvm.load %811 : !llvm.ptr -> i64
%813 = arith.constant 177666 : i32
%815 = arith.extsi %813 : i32 to i64
%814 = arith.subi %812, %815 : i64
%816 = arith.constant 10 : i32
%817 = arith.extsi %816 : i32 to i64
%818 = llvm.getelementptr %726[%817] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %814, %818 : i64, !llvm.ptr
%819 = llvm.mlir.addressof @TARGET : !llvm.ptr
%820 = llvm.load %819 : !llvm.ptr -> i64
%821 = arith.constant 11 : i32
%823 = arith.extsi %821 : i32 to i64
%822 = arith.cmpi slt, %820, %823 : i64
cf.cond_br %822, ^bb9, ^bb10
^bb9:
%824 = llvm.mlir.addressof @str_0 : !llvm.ptr
%826 = llvm.mlir.addressof @TARGET : !llvm.ptr
%827 = llvm.load %826 : !llvm.ptr -> i64
%828 = llvm.getelementptr %726[%827] : (!llvm.ptr, i64) -> !llvm.ptr, i64
%825 = llvm.load %828 : !llvm.ptr -> i64
%829 = llvm.call @printf(%824, %825) vararg(!llvm.func<i32 (ptr, ...)>) : (!llvm.ptr, i64) -> i32
func.call @free(%59) : (!llvm.ptr) -> ()
func.call @free(%726) : (!llvm.ptr) -> ()
%832 = arith.constant 0 : i32
func.return %832 : i32
^bb10:
cf.br ^bb11
^bb11:
%833 = arith.constant 1 : i32
%834 = arith.extsi %833 : i32 to i64
%835 = llvm.mlir.constant(1 : i64) : i64
%836 = llvm.alloca %835 x i64 : (i64) -> !llvm.ptr
llvm.store %834, %836 : i64, !llvm.ptr
cf.br ^bb12
^bb12:
%837 = llvm.load %836 : !llvm.ptr -> i64
%838 = llvm.mlir.addressof @TARGET : !llvm.ptr
%839 = llvm.load %838 : !llvm.ptr -> i64
%840 = arith.constant 10 : i32
%842 = arith.extsi %840 : i32 to i64
%841 = arith.subi %839, %842 : i64
%843 = arith.cmpi sle, %837, %841 : i64
cf.cond_br %843, ^bb13, ^bb14
^bb13:
%844 = arith.constant 0 : i32
%845 = arith.extsi %844 : i32 to i64
%846 = llvm.mlir.constant(1 : i64) : i64
%847 = llvm.alloca %846 x i64 : (i64) -> !llvm.ptr
llvm.store %845, %847 : i64, !llvm.ptr
%848 = arith.constant 0 : i32
%849 = arith.extsi %848 : i32 to i64
%850 = llvm.mlir.constant(1 : i64) : i64
%851 = llvm.alloca %850 x i64 : (i64) -> !llvm.ptr
llvm.store %849, %851 : i64, !llvm.ptr
cf.br ^bb15
^bb15:
%852 = llvm.load %851 : !llvm.ptr -> i64
%853 = arith.constant 10 : i32
%855 = arith.extsi %853 : i32 to i64
%854 = arith.cmpi slt, %852, %855 : i64
cf.cond_br %854, ^bb16, ^bb17
^bb16:
# String concatenation: !llvm.ptr + i64
%858 = llvm.load %836 : !llvm.ptr -> i64
%856 = func.call @poly_val(%857, %858) : (!llvm.ptr, i64) -> i64
%859 = llvm.load %847 : !llvm.ptr -> i64
%861 = llvm.load %836 : !llvm.ptr -> i64
%862 = llvm.load %851 : !llvm.ptr -> i64
%863 = arith.addi %861, %862 : i64
%864 = llvm.getelementptr %726[%863] : (!llvm.ptr, i64) -> !llvm.ptr, i64
%860 = llvm.load %864 : !llvm.ptr -> i64
%865 = arith.muli %856, %860 : i64
%866 = arith.addi %859, %865 : i64
%867 = llvm.mlir.addressof @MOD : !llvm.ptr
%868 = llvm.load %867 : !llvm.ptr -> i64
%869 = arith.remsi %866, %868 : i64
llvm.store %869, %847 : i64, !llvm.ptr
%870 = llvm.load %851 : !llvm.ptr -> i64
%871 = arith.constant 1 : i32
%873 = arith.extsi %871 : i32 to i64
%872 = arith.addi %870, %873 : i64
llvm.store %872, %851 : i64, !llvm.ptr
cf.br ^bb15
^bb17:
# String concatenation: !llvm.ptr + i32
%876 = llvm.load %836 : !llvm.ptr -> i64
%874 = func.call @poly_val(%875, %876) : (!llvm.ptr, i64) -> i64
%878 = llvm.mlir.addressof @MOD : !llvm.ptr
%879 = llvm.load %878 : !llvm.ptr -> i64
%880 = arith.constant 2 : i32
%882 = arith.extsi %880 : i32 to i64
%881 = arith.subi %879, %882 : i64
%883 = llvm.mlir.addressof @MOD : !llvm.ptr
%884 = llvm.load %883 : !llvm.ptr -> i64
%877 = func.call @mod_pow(%874, %881, %884) : (i64, i64, i64) -> i64
%885 = llvm.mlir.addressof @MOD : !llvm.ptr
%886 = llvm.load %885 : !llvm.ptr -> i64
%887 = llvm.load %847 : !llvm.ptr -> i64
%888 = arith.subi %886, %887 : i64
%889 = arith.muli %888, %877 : i64
%890 = llvm.mlir.addressof @MOD : !llvm.ptr
%891 = llvm.load %890 : !llvm.ptr -> i64
%892 = arith.remsi %889, %891 : i64
%893 = llvm.load %836 : !llvm.ptr -> i64
%894 = arith.constant 10 : i32
%896 = arith.extsi %894 : i32 to i64
%895 = arith.addi %893, %896 : i64
%897 = llvm.getelementptr %726[%895] : (!llvm.ptr, i64) -> !llvm.ptr, i64
llvm.store %892, %897 : i64, !llvm.ptr
%898 = llvm.load %836 : !llvm.ptr -> i64
%899 = arith.constant 1 : i32
%901 = arith.extsi %899 : i32 to i64
%900 = arith.addi %898, %901 : i64
llvm.store %900, %836 : i64, !llvm.ptr
cf.br ^bb12
^bb14:
%902 = llvm.mlir.addressof @str_0 : !llvm.ptr
%904 = llvm.mlir.addressof @TARGET : !llvm.ptr
%905 = llvm.load %904 : !llvm.ptr -> i64
%906 = llvm.getelementptr %726[%905] : (!llvm.ptr, i64) -> !llvm.ptr, i64
%903 = llvm.load %906 : !llvm.ptr -> i64
%907 = llvm.call @printf(%902, %903) vararg(!llvm.func<i32 (ptr, ...)>) : (!llvm.ptr, i64) -> i32
func.call @free(%59) : (!llvm.ptr) -> ()
func.call @free(%726) : (!llvm.ptr) -> ()
%910 = arith.constant 0 : i32
func.return %910 : i32
}
}