From 483d6200c69cf6c490ee09f089d1cc28686c18dc Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 4 Jan 2021 14:15:30 -0600 Subject: [PATCH] array literal assignment optimization --- bin/onyx | Bin 304640 -> 304632 bytes progs/odin_example.onyx | 15 +++-- src/onyxwasm.c | 123 ++++++++++++++++++++++++++-------------- 3 files changed, 89 insertions(+), 49 deletions(-) diff --git a/bin/onyx b/bin/onyx index 6ea6feebf02c890c805e4a8d137968b5a8c11245..08a86280a1d7502212ba9f29e3ba1b2b6185cf29 100755 GIT binary patch delta 35303 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 delta 34803 zcmch=2Y6J)*9W{icLNC}1xQFjOG1D^CY^8edM^xBi z-#Aa}mMrdE-FV1eri`d@W$B3?%eCA`V&jCKUA=tnmenlw{EFFSb9eVC+}+1o<7?qx zyYO6)&^7Ck!h@kAvAp$Ap-){A;$!tGtldOB_Oc$Jh&Zv?T7^!>iAYgvDBVmDwWwwb z@ruYPq|aN3>Y)+SEtVALj8>_Rzx5#bJ%PWMn@*Qnh_G_c47ONu@749o3nt%|BHVhF zVp@tu)>mm*OVQTafZl2;YKz^2$?7kH3;)wn#995%PqA3+&ZNjF`=TPhypDq;*Sxg| zvQ}6=$zpMK3~qhE?}dEo*G9ChkgkwDelK*UciKSrGjyblXkh)D?zR#2tY1*gwxYeb z@jeY}E8>N90KL;zv=W#58I>u#+g6;lRv%nsv6KY;?Q)IwtCeK2q~?!|j7oJ}OLbh< zv*>EPs3-J3w4ehjAJ<;2hR(C?Ma}BB#=Gn8(l6sX8y#a9-K3vkG&SlVdRoJ1eg`o? zl5*~C53QGd*_k^~2&^o0ty=R2d-KmTR{TAggJ?#nY z?Lnu~deEU!Pv~+Uw9g2-kR*aa{&>c%y@Ch7kNlINy~h*U*MokU5|Tv~aVV3{jfKBw zB#RCqBQv2Yci-5-LlcK24ow`EIDD^t(ILOQG+N(XgwfSx(O8rnL>syzL%YsmK+Hy^ z+|cZR>)dX0BZS zcM+lfcML^t1qU;z;Z#wZ8rVg1@qG`eAloitt?OumU1W+gnMQ7Zy&L<)ovqR^YCBuh zpnfT0d^g*0rg}x8vHeFoD%+iDQMql<(r1U2#(Sfk6|upSKnpA4W2(?q1c#PS^~i|& zD*hd658m2~`gavIf{P53I!29lbV5V8O?z#abjjMTaLL&|vPSp2ida!2RVGrqp?cN0 zdSUc#H+ZPxa9PJ{DW&T;S=F(2sz?$Gm7*6@p{Ra0spt$Ry7!lfhTWM_O|Sq7>uGM| zOmTLI)LzoLwD$S~r3d@=fcD`^`?em?u|}C$p(k|omT@wSzi*@|{b2HXd>8-eD@zq= zNNnsb6Mc+?GU1~%F#w~KD-8i{8^}c`poLQW9i8BB6;wY{<8)EA>gEBGc636#yZxvQ zlzyC>4nH1AmL(icM{y%mqIxeR;#Fc264o`evKMN6rN6B4KZ&JlT&JI`adL0exKNq= zX>aH#Op@9ka^h^7O!Vjjg@u&UN2H5YT_yHcAGFrizJ_*jumhdzB0~HZ_bpw@u0ArL zm-j_L|D;N}+82uND@!}{gW}ul%XAUbNhMNqAWdWC=#cYDa(vRYsu)GSgh2v8HU8=c9MCS6JMx2=a8_TCI8{@ zv`f|E`QZ>a8!x55=fsQznW&qAL}Ck>n8k_ys&x)?BBiZls%IjxLDgpx64te}G7}{n zSN2qT1_Eo9JtH|0pd7uK6TdZ=db~#<;Z)3^5oo{kE=K$L4UaAD)I!=bLOdgyDU*{% zqQo~TF$+C$8NQ31$`qXwZ?=@m+l)eDjI#J;PPA?#nR7^31Id3hoSs4(CPK~gqrpF? z`0qI}uBjBRI|hk-W#cSPj8pzO%!$RSIjWBp1FC&xbhZ@#TYmoB(G#O?`2}dkjO(OV z$BIyECVh%aNK42m8FY0Bq0{qfWjy^nR`d`lN@wag==`7qdm_dEFSpLW+&ZVz?s1~3 zNQ;$&#NXpENcgGxc77JNb!jZCu$&X+mC`>9Mpdrecrf);o>!2tcBi88Xvp%aj!h?^ zQD(Q7y?t?%jQB3?OE*rLcp34hCLrRAmGc`-gyN!xvixi$tVh|=>7pn`VznnhKv&W; zI8if7G6#{celJ@$WHN}iq9rjN3F{5nUOSnXrE>UXf%ubiq>EXq%#FZ=x2lEL6eL>I zk!t#LqOLMy%@ov6w3hYruWi)Nueep|`faD^saSwriIv$uoQmu>>&nDkPF!vx6ZUD$ zG?0n6IH4&w|H+9Z5t3;?9oAl_tm$H2wxtD^G|@lRaoz5m5vAXV<8=3@E4AmEVa58d z^;<86cCvabej2!8&*hxW4SOyE&o#9K8oGHhDz!M=LOC-;Q1EL_Wyz-1-30m^?9k3` z77K$?dBfbWj|cn+y_sv#$#bpuiyJQQA-#vfXTpHD-E2htfJy)PGqS(O=h8qA}Dhf28ceCI0pm7 zce4;Er()&k^n10^0dkDm%*N={K!xef+0gW2m@Lq54m8ze73t!|NQrF(CORrIkg`)>1bsot?&HMYm1M>s2NL;yGBK7D+f`ZHIFX|ARCo!A=m04; z3<=yg7rcZD>{WV%69Q{|r9dA}{GhUa#EHHYC3BAxXH}lAFC!74^1RK7D@yDd5?FVJ z<)eh2O5nA82#iunFL9!tl5X(|>rr)hkrOi%bA}Vg6w~lkB;F}64OxJMbqcM26(v|J zNGzfN0*zF0(>ZavoMa9d2_+W11WY}p=UGm?p^DqViCZe+`M_ z$Qb=jM;SFSb_cc-N?v&121SA9d1(@#B(*W}N0qBmAykz!= zE|*`eJY(BMKXTxaD{+ez3A^K<-SK0|>2=sFX#9j!MX? zJTDSVciK&i@x-T7nT{O);`yTTN-uB!-z3ut&NnuutD=W;E73|9L zk1f(u3m$_`icG);L0F2z7FjZEz00N7*=MTGVYG+tXGYt?NxAo|ev4)prS#!Vr;~n* z-hm1F#l4SQsri)ih6wIDvWE1jGp}u(0nu6_Y%?HCGdkf0(D`Px zCi`-X8QpgUXnM98e!#)j){K707S}POoi_vZGoxeJ#sBO!)w$pp&|l4Ha5lU6m>E9z zHPAvc`U1Onl^OLu4b*8y({2KtVMY(_06M%hn$4~MF1t9TG|Xu0?|?QlqwCq=8fLV| zL7-*L=sI@s&0Qu>O!)=qS%qSrGUl=35}hsHZx)W_f#M4@>dVdXrWw7+#pRmO;ok$D zXhw(J2HJnuqwLZ{XK_gz_C%stc+Iy!qs{0^HX_iBR@w{HwbNARZ?6F@F{5F3T-h%D zJ2RZdgUU`by8bZGkIm?(?6oCk^zm+>bIqu@3Urhwnq6FS?-t;mo^WxAYb(&!W;BoM zT-%JU-v_j!8I9yf`Fn@S6DQg67oMPqKVtwY<`MeH6Ih|y=YeiAqZ!`-eb0=hao=~C z(f&JuPBWu6j+CK{WegFD)lP7dG zIQz62uE~9WuNiH@ZTFcOeZYO6%xD-l=t48v`AeYV&1iO+i-7x@;R2qBJDAbexkc-n z(Q~_iRyL#U*~O2xndttL+l*aY;K zt=T3xj29n=%)%wSM%ZXZYpwmSKaZn9-vB*?Y)LKOQj9kJuA?%&5+bkF{p>SzbB3VMbr$ zVJX{;&SI~PbEDbr>Br7XtKM$djYe|_#+%XS_XDkGMmur`3oxSxxH~^6EL~?*t}FZJ zH=v&D->C-xA2$o1;{e)fM!(~T|G5i;f8XMu82A*HlTxK(pqwt=tg#N zTQgdbU0lbEj${}6nbCEh0R87H&(<&T&E}=muV%O%cgAC8bm|$Pg=VxF52UNi=y6{4 zIn8K&UOCJtjT-CU9A1$QFAekhx8@f>Q_Se96F{4p(LZ>osbNNYaZHpoqxX4bb#tTi z#MAZf7aSC475rpX?87m!-;8E(OnhNRBR&QCrWw7+JMK2 zC1#Y^!*e}RtbcFv$TrFoE-taNi?6SE`H8-PoHv+9`MlY`d>TO1gKf*qX zFZNk>)8vmusJM5EoF9v@I(0Pcx#W9=|AF@RODe`=KV$o)Bn!6>yDG|k87mckEDEfj zQ06BhJp0UglTW8&6|+l7(Q#knFwtTLjPWEtuyzT6nE+z%mW;(kUt!MP^gW zUvW~X)v|49S>6qb`_hLki+_lV9`qKxl4;~DJ$yCf(XyLa;TSkT7LT)7L#IQr
  • _ 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 diff --git a/progs/odin_example.onyx b/progs/odin_example.onyx index 7dd0778f..8791accb 100644 --- a/progs/odin_example.onyx +++ b/progs/odin_example.onyx @@ -85,6 +85,14 @@ BadUnion :: struct { Vec2 :: struct { x: i32; y: i32; } Entity :: struct { use pos: Vec2; } +array_literal_optim :: proc () #export { + // This needs to be optimized + bar : [5] u32; + bar = u32.[ 1, 2, 3, 4, 5 ]; + bar[2] = 1234; + for b: bar do printf("b: %i\n", b); +} + main :: proc (args: [] cstr) { a : BadUnion; a.int = 1234; @@ -100,14 +108,11 @@ main :: proc (args: [] cstr) { foo : [5] [2] u32; foo = f(); + array_literal_optim(); + printf("%p == %p\n", cast(^u32) foo, ^foo); for ^thing: foo do for t: *thing do printf("%p %i\n", thing, t); - // This needs to be optimized - bar := u32.[ 1, 2, 3, 4, 5 ]; - bar[2] = 1234; - for b: bar do printf("b: %i\n", b); - println(compress(f32.[ 1, 2, 3, 4, 5 ], proc (a: $T, b: T) -> T { return a + b; })); } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index ebed5db1..b95bb834 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -369,6 +369,7 @@ EMIT_FUNC(function_body, AstFunction* fd); EMIT_FUNC(block, AstBlock* block, b32 generate_block_headers); EMIT_FUNC(statement, AstNode* stmt); EMIT_FUNC(assignment, AstBinaryOp* assign); +EMIT_FUNC(assignment_of_array, AstBinaryOp* assign); EMIT_FUNC(store_instruction, Type* type, u32 offset); EMIT_FUNC(load_instruction, Type* type, u32 offset); EMIT_FUNC(if, AstIfWhile* if_node); @@ -496,50 +497,7 @@ EMIT_FUNC(assignment, AstBinaryOp* assign) { } if (assign->right->type->kind == Type_Kind_Array) { - Type* rtype = assign->right->type; - - Type* elem_type = rtype; - u32 elem_count = 1; - while (elem_type->kind == Type_Kind_Array) { - elem_count *= elem_type->Array.count; - elem_type = elem_type->Array.elem; - } - u32 elem_size = type_size_of(elem_type); - - u64 lptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); - u64 rptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); - - emit_location(mod, &code, assign->left); - WIL(WI_LOCAL_SET, lptr_local); - - emit_expression(mod, &code, assign->right); - WIL(WI_LOCAL_SET, rptr_local); - - // NOTE: Currently, we inline the copying of the array; But if the array has - // many elements, this could result in a LOT of instructions. Maybe for lengths - // greater than like 16 we output a loop that copies them? - // - brendanfh 2020/12/16 - fori (i, 0, elem_count) { - if (!type_is_structlike(elem_type)) - WIL(WI_LOCAL_GET, lptr_local); - - if (bh_arr_last(code).type == WI_LOCAL_SET && bh_arr_last(code).data.l == rptr_local) - bh_arr_last(code).type = WI_LOCAL_TEE; - else - WIL(WI_LOCAL_GET, rptr_local); - emit_load_instruction(mod, &code, elem_type, i * elem_size); - - if (!type_is_structlike(elem_type)) { - emit_store_instruction(mod, &code, elem_type, i * elem_size); - } else { - WIL(WI_LOCAL_GET, lptr_local); - emit_store_instruction(mod, &code, elem_type, i * elem_size); - } - } - - local_raw_free(mod->local_alloc, WASM_TYPE_INT32); - local_raw_free(mod->local_alloc, WASM_TYPE_INT32); - + emit_assignment_of_array(mod, &code, assign); *pcode = code; return; } @@ -604,6 +562,83 @@ EMIT_FUNC(assignment, AstBinaryOp* assign) { *pcode = code; } +EMIT_FUNC(assignment_of_array, AstBinaryOp* assign) { + bh_arr(WasmInstruction) code = *pcode; + + Type* rtype = assign->right->type; + assert(rtype->kind == Type_Kind_Array); + + Type* elem_type = rtype; + u32 elem_count = 1; + while (elem_type->kind == Type_Kind_Array) { + elem_count *= elem_type->Array.count; + elem_type = elem_type->Array.elem; + } + u32 elem_size = type_size_of(elem_type); + + if (assign->right->kind == Ast_Kind_Array_Literal) { + u64 lptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); + + emit_location(mod, &code, assign->left); + WIL(WI_LOCAL_SET, lptr_local); + + AstArrayLiteral* al = (AstArrayLiteral *) assign->right; + fori (i, 0, elem_count) { + if (!type_is_structlike(elem_type)) + WIL(WI_LOCAL_GET, lptr_local); + + emit_expression(mod, &code, al->values[i]); + + if (!type_is_structlike(elem_type)) { + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } else { + WIL(WI_LOCAL_GET, lptr_local); + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } + } + + local_raw_free(mod->local_alloc, WASM_TYPE_INT32); + + } else { + u64 lptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); + u64 rptr_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); + + emit_location(mod, &code, assign->left); + WIL(WI_LOCAL_SET, lptr_local); + + emit_expression(mod, &code, assign->right); + WIL(WI_LOCAL_SET, rptr_local); + + // NOTE: Currently, we inline the copying of the array; But if the array has + // many elements, this could result in a LOT of instructions. Maybe for lengths + // greater than like 16 we output a loop that copies them? + // - brendanfh 2020/12/16 + fori (i, 0, elem_count) { + if (!type_is_structlike(elem_type)) + WIL(WI_LOCAL_GET, lptr_local); + + if (bh_arr_last(code).type == WI_LOCAL_SET && bh_arr_last(code).data.l == rptr_local) + bh_arr_last(code).type = WI_LOCAL_TEE; + else + WIL(WI_LOCAL_GET, rptr_local); + emit_load_instruction(mod, &code, elem_type, i * elem_size); + + if (!type_is_structlike(elem_type)) { + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } else { + WIL(WI_LOCAL_GET, lptr_local); + emit_store_instruction(mod, &code, elem_type, i * elem_size); + } + } + + local_raw_free(mod->local_alloc, WASM_TYPE_INT32); + local_raw_free(mod->local_alloc, WASM_TYPE_INT32); + } + + *pcode = code; + return; +} + EMIT_FUNC(store_instruction, Type* type, u32 offset) { bh_arr(WasmInstruction) code = *pcode; -- 2.25.1