lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2025年01月09日 13:08:08 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2025年01月09日 13:08:08 -0300
commita6bb2b5a7cf36e074e12ccaed32990b437deb784 (patch)
tree0865bfcd5cef206425b7f19cd62da21785851207
parent808fdde9e81cc1f43fd3ef3b01d24744c18bc123 (diff)
downloadlightning-a6bb2b5a7cf36e074e12ccaed32990b437deb784.tar.gz
Fix incorrect optimization on a load/followed by a storeHEAD master
The logic was not expecting using memory to zero or sign extend a value. To keep the original intent of the optimization, only loads followed by a store of a wordsize value are kept, to prevent too many noops by some code generation/translation tool.
Diffstat
-rw-r--r--lib/lightning.c 27
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/lightning.c b/lib/lightning.c
index 643c5f1..656e5f7 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -3817,12 +3817,13 @@ _simplify_stxi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node)
if (value->kind == 0) {
switch (node->code) {
/* no information about signed/unsigned either */
- case jit_code_stxi_c: value->code = jit_code_ldxi_c; break;
- case jit_code_stxi_s: value->code = jit_code_ldxi_s; break;
+#if __WORDSIZE == 32
case jit_code_stxi_i: value->code = jit_code_ldxi_i; break;
- case jit_code_stxi_l: value->code = jit_code_ldxi_l; break;
case jit_code_stxi_f: value->code = jit_code_ldxi_f; break;
+#else
+ case jit_code_stxi_l: value->code = jit_code_ldxi_l; break;
case jit_code_stxi_d: value->code = jit_code_ldxi_d; break;
+#endif
default: abort();
}
value->kind = jit_kind_code;
@@ -3943,20 +3944,26 @@ _simplify(jit_state_t *_jit)
simplify_spill(node = prev, regno);
}
break;
- case jit_code_ldxi_c: case jit_code_ldxi_uc:
- case jit_code_ldxi_s: case jit_code_ldxi_us:
- case jit_code_ldxi_i: case jit_code_ldxi_ui:
+#if __WORDSIZE == 32
+ case jit_code_ldxi_i:
+ case jit_code_ldxi_f:
+#else
case jit_code_ldxi_l:
- case jit_code_ldxi_f: case jit_code_ldxi_d:
+ case jit_code_ldxi_d:
+#endif
regno = jit_regno(node->u.w);
if (simplify_ldxi(prev, node)) {
result = 1;
simplify_spill(node = prev, regno);
}
break;
- case jit_code_stxi_c: case jit_code_stxi_s:
- case jit_code_stxi_i: case jit_code_stxi_l:
- case jit_code_stxi_f: case jit_code_stxi_d:
+#if __WORDSIZE == 32
+ case jit_code_stxi_i:
+ case jit_code_stxi_f:
+#else
+ case jit_code_stxi_l:
+ case jit_code_stxi_d:
+#endif
regno = jit_regno(node->u.w);
if (simplify_stxi(prev, node)) {
result = 1;
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月06日 12:38:55 +0000

AltStyle によって変換されたページ (->オリジナル) /