Commit Graph

339 Commits

Author SHA1 Message Date
Alexey Andreev
aef1e2e206 Fixing bugs in nullness analyzer 2017-01-02 16:55:17 +03:00
Alexey Andreev
5fd95f21cb Refactor nullness tests 2017-01-02 13:28:35 +03:00
Alexey Andreev
9dc4b47253 Add nullness analysis 2016-12-27 00:28:37 +03:00
Alexey Andreev
ae5e1e4962 Store instructions as double-linked list instead of ArrayList 2016-12-20 00:03:14 +03:00
Alexey Andreev
231dcbaf36 Working on new nullness checker that uses augmented program representation 2016-12-04 22:30:35 +03:00
Alexey Andreev
730d3f3070 Use $$ prefix for exception handling variables, since $ used for local variables 2016-12-04 20:52:57 +03:00
Alexey Andreev
973231752f Avoid creating of unnecessary phi functions 2016-12-04 20:51:00 +03:00
Alexey Andreev
7ca6a4d64e Add IR parser of catch blocks 2016-12-04 19:47:10 +03:00
Alexey Andreev
6883b59fc3 Add IR parser of field get/set and switch instructions 2016-12-04 19:47:10 +03:00
Alexey Andreev
fb53667e77 Refactor textual IR parser 2016-12-04 19:47:10 +03:00
Alexey Andreev
6084491119 Add IR parser of different simple instructions 2016-12-04 19:47:10 +03:00
Alexey Andreev
2b94a8b05c Add IR parser of cast instructions 2016-12-04 19:47:09 +03:00
Alexey Andreev
825acfc85a Add IR parser of invoke instructions 2016-12-04 19:47:09 +03:00
Alexey Andreev
c16de76b23 Add IR parser of constant instructions 2016-12-04 19:47:09 +03:00
Alexey Andreev
f6308c1782 Add IR parser of binary operations and phi functions 2016-12-04 19:47:09 +03:00
Alexey Andreev
6148d7a943 Add support of branching instructions to listing parser 2016-12-04 19:47:09 +03:00
Alexey Andreev
e5db8d4afc Add support of goto and return instructions to textual IR parser 2016-12-04 19:47:09 +03:00
Alexey Andreev
93f8c2cf39 Creating textual IR parser 2016-12-04 19:47:09 +03:00
Alexey Andreev
55158c9e13 Move textual IR related things to a separate package 2016-12-04 19:47:09 +03:00
Alexey Andreev
e5fe82f0fe Working on textual IR 2016-12-04 19:47:09 +03:00
Alexey Andreev
6f92dadad5 Fix bugs in nullness checker. Use it in LICM 2016-12-04 19:47:09 +03:00
Alexey Andreev
2894c541f7 Add nullness checker 2016-12-04 19:47:09 +03:00
Alexey Andreev
0b4629d959 Refactor optimization API 2016-12-04 19:47:07 +03:00
Alexey Andreev
b7d760188e When native method returns undefined and Java expects string, produce null. Add $ prefix to local variables to avoid name clashing with global declarations 2016-12-03 14:30:43 +03:00
Alexey Andreev
ad39024795 Prevent PhiUpdater from placing e-phis with source variable equal to receiver 2016-12-03 13:46:02 +03:00
Alexey Andreev
86b78b8f5d Avoid creating programs with number of variables less than number of parameters 2016-11-29 22:32:22 +03:00
Alexey Andreev
2e20287f80 JS: fix operator priority when rendering new expression 2016-11-22 22:10:18 +03:00
Alexey Andreev
9364ad943a WASM: add support of 0x0D binary version 2016-11-20 22:22:33 +03:00
Alexey Andreev
24efd1f49c Fix support of async <clinit> when called by getstatic/putstatic 2016-11-20 17:50:47 +03:00
Alexey Andreev
c023ac2053 Change translation of <clinit> invocations 2016-11-20 17:08:46 +03:00
Alexey Andreev
764c9bbb1e Working on support of async <clinit> methods 2016-11-17 23:24:16 +03:00
Alexey Andreev
f61cfb23b5 After inlining remove unreachable basic blocks and unused variables. When removing unreachable basic blocks, remove corresponding phi inputs as well. 2016-11-06 21:12:59 +03:00
Alexey Andreev
aebfe7d165 During node splitting, create copies for previously copied nodes, if necessary. See #219 2016-11-04 16:55:56 +03:00
Alexey Andreev
4b766f7b73 Fix implementation of Tarjan SCC finding algorithm 2016-11-04 16:15:15 +03:00
Alexey Andreev
daf5ada5c6 Fix converting JS floating-point numbers to long (fix #228). 2016-11-04 14:12:51 +03:00
Alexey Andreev
2a3b0cd597 Fix generation of variable names in minified mode (fix #227). JUnit runner can be configured to run tests in minified and optimized modes. Apply these modes to travis config. 2016-11-04 13:21:01 +03:00
Alexey Andreev
1335476abe WASM: Add option to trace all call_indirect opcodes 2016-10-27 19:12:37 +03:00
Alexey Andreev
af10879a81 Remove unnecessary IDEA project files 2016-10-27 12:55:28 +03:00
Alexey Andreev
b3b1b54582 Remove unnecessary dependencies 2016-10-26 15:02:41 +03:00
Alexey Andreev
9fd744f550 Report more details about calling async code from sync method 2016-10-22 17:40:32 +03:00
Alexey Andreev
37d4c3349e Add AbstractInstructionReader, use it instead InstructionReader where possible 2016-10-22 16:25:38 +03:00
Alexey Andreev
3dbca7959b When unexpected exception occurs during optimization, dump IR to stderr. 2016-10-22 15:57:17 +03:00
Alexey Andreev
9c33ef686b WASM: fix support of 0xC binary version 2016-10-17 21:53:09 +03:00
Alexey Andreev
d6cc340676 WASM: fix remaining errors in WebAssembly 0xC 2016-10-14 22:32:12 +03:00
Alexey Andreev
56b1f54dda WASM: implementing support of 0xC version 2016-10-12 23:45:13 +03:00
Alexey Andreev
b4916ee4e7 WASM: fix bugs in support of 0xC binary version 2016-10-09 12:57:11 +03:00
Alexey Andreev
386c703459 WASM: implementing support of 0xC binary version 2016-10-06 19:56:45 +03:00
Alexey Andreev
499ce8c029 WASM: add some GC interop methods 2016-10-06 16:21:09 +03:00
Alexey Andreev
0041130d00 WASM: support multianewarray, fix jbox2d benchmark for WebAssembly 2016-10-06 15:49:58 +03:00
Alexey Andreev
9643e12710 WASM: align heap location by 4 bytes 2016-10-01 00:19:13 +03:00
Alexey Andreev
ef9d8a30bc WASM: fix translation of binary operations 2016-09-30 00:46:45 +03:00
Alexey Andreev
cc0c68e809 WASM: porting jbox2d benchmark to WebAssembly 2016-09-29 20:05:32 +03:00
Alexey Andreev
f890680e90 WASM: fix bugs in exception handling 2016-09-29 16:31:27 +03:00
Alexey Andreev
cbd74d41f4 WASM: fix exception handling. Use if instead of switch after call site when possible 2016-09-29 16:31:27 +03:00
Alexey Andreev
8a012178ed WASM: add support of offset field in memory operations 2016-09-29 16:31:27 +03:00
Alexey Andreev
25c9b03dff WASM: implement throwing exceptions 2016-09-29 16:31:27 +03:00
Alexey Andreev
4e431e2f77 WASM: refactoring shadow stack 2016-09-29 16:31:27 +03:00
Alexey Andreev
b67d243ad4 WASM: add transformation that converts exception handling to explicit guard checks 2016-09-22 16:27:28 +03:00
Alexey Andreev
8af1e3e66d Merge remote-tracking branch 'origin/shadow-stack-minimization' 2016-09-22 11:30:14 +03:00
Alexey Andreev
4f218b17f8 WASM: creating memory access trace transformation 2016-09-22 11:09:16 +03:00
Alexey Andreev
ff6a917bc3 WASM: don't write Address objects to GC roots 2016-09-22 00:10:37 +03:00
Alexey Andreev
fc3d36ec4c WASM: improving algorithm that generates instructions to store variables in shadow stack 2016-09-22 00:08:58 +03:00
Alexey Andreev
fcf0394214 WASM: add flag that allows to insert assertions before each memory access in C code 2016-09-19 22:34:16 +03:00
Alexey Andreev
033e57e7e7 WASM: fix bug in generating virtual table in some cases 2016-09-17 20:18:59 +03:00
Alexey Andreev
0a00551af1 WASM: add support of Character.toLowerCase/toUpperCase. Add _ prefix to names in c output 2016-09-17 12:37:49 +03:00
Alexey Andreev
6c5a691fc9 Fixing minor bugs 2016-09-17 10:42:46 +03:00
Alexey Andreev
1b78de9b40 Minor fixes after rebase 2016-09-17 09:59:13 +03:00
Alexey Andreev
7aaf67d16f Fix minor bugs 2016-09-17 09:33:53 +03:00
Alexey Andreev
8bfcb5f086 frontend: fix support of Integer.TYPE, Long.TYPE, etc. 2016-09-17 09:33:50 +03:00
Alexey Andreev
ed7e8ff7f4 javascript: refactor renderer 2016-09-17 09:21:26 +03:00
Alexey Andreev
7cd72f0e96 wasm: add optimization that removes unused functions from wasm module 2016-09-17 09:19:34 +03:00
Alexey Andreev
bb2f23b19b Fix bugs in runtime. Add support for System.out 2016-09-17 09:19:34 +03:00
Alexey Andreev
67098a60ef Fix bugs in GC and runtime 2016-09-17 09:19:34 +03:00
Alexey Andreev
de299dda48 Fix bugs in GC 2016-09-17 09:19:34 +03:00
Alexey Andreev
f2668b867d wasm: fix bugs in GC and runtime 2016-09-17 09:19:34 +03:00
Alexey Andreev
582177654a Fix liveness analysis used to put shadow stack values. Fix type inference of local variables. Don't put Object.monitor to class layout 2016-09-17 09:19:34 +03:00
Alexey Andreev
d28ff73c51 Fix bugs in GC 2016-09-17 09:19:34 +03:00
Alexey Andreev
e92ad161ef Fix bugs in register allocator 2016-09-17 09:19:34 +03:00
Alexey Andreev
fae2963900 Fix bugs in GC and runtime 2016-09-17 09:19:34 +03:00
Alexey Andreev
43b0700c10 Fix bugs in propagating names via register allocator 2016-09-17 09:19:34 +03:00
Alexey Andreev
593dafdd73 Fixing bugs in GC 2016-09-17 09:19:33 +03:00
Alexey Andreev
d76598ab68 Don't write Structure, Function and Address to GC roots 2016-09-17 09:19:33 +03:00
Alexey Andreev
3370898a54 Implementing simple mark&sweep GC 2016-09-17 09:19:33 +03:00
Alexey Andreev
ae5d701aac Implementing simple mark&sweep GC 2016-09-17 09:19:33 +03:00
Alexey Andreev
f7296e0389 Add static GC roots 2016-09-17 09:19:33 +03:00
Alexey Andreev
f79716d53d Add class field layout for GC 2016-09-17 09:19:33 +03:00
Alexey Andreev
476086af47 Add transformation passes that maintain GC roots on shadow stack. Add support of shadow stack intrinsics 2016-09-17 09:19:33 +03:00
Alexey Andreev
bfc37b10b5 Don't generate redundant clinit instructions 2016-09-17 09:19:33 +03:00
Alexey Andreev
74db07537d Fix bugs with memory operations 2016-09-17 09:19:33 +03:00
Alexey Andreev
f7e39e6a4d Remove call to initializer from wasm generator, put it into IR transformer. Add intrinsic to check whether class has been initializer. Add IR transformer that guards call to initializer with this intrinsic 2016-09-17 09:19:33 +03:00
Alexey Andreev
eaf31c1309 Minor fixes 2016-09-17 09:19:33 +03:00
Alexey Andreev
4d6c91aff8 Emit binary WASM compatible with SpiderMonkey 2016-09-17 09:19:33 +03:00
Alexey Andreev
40af27811f Allow to run WASM generator via maven. 2016-09-17 09:19:32 +03:00
Alexey Andreev
8b3e160d8c Fix bug in JavaScript backend 2016-09-17 09:19:32 +03:00
Alexey Andreev
9143714168 Refactor target API. Add ability to generate wast and C from wasm target 2016-09-17 09:19:32 +03:00
Alexey Andreev
de4128b377 Use little-endian data section, remove metainformation section 2016-09-17 09:19:32 +03:00
Alexey Andreev
09d8b581c0 Fix generation of WASM binary format 2016-09-17 09:19:32 +03:00
Alexey Andreev
d0def96dba Further work on WASM binary format generator 2016-09-17 09:19:32 +03:00
Alexey Andreev
c70ba8f16d Fix bug in function signatures 2016-09-17 09:19:32 +03:00
Alexey Andreev
9fd5a87a00 Fix copying memory blocks 2016-09-17 09:19:31 +03:00
Alexey Andreev
26749150f6 Add support for Class.isAssignableFrom 2016-09-17 09:19:31 +03:00
Alexey Andreev
bb4040af23 Fix bugs 2016-09-17 09:19:31 +03:00
Alexey Andreev
1ae683ead3 System.arrayCopy works 2016-09-17 09:19:31 +03:00
Alexey Andreev
ca3258417b Implementing System.arraycopy 2016-09-17 09:19:31 +03:00
Alexey Andreev
cc9af93021 Keep variable names in generated sources 2016-09-17 09:19:31 +03:00
Alexey Andreev
ef5145d6fd Trying to preserve variable names after GVN 2016-09-17 09:19:29 +03:00
Alexey Andreev
1c1b0c69fa Propagating variable name via compiler's pipeline 2016-09-17 09:11:59 +03:00
Alexey Andreev
c5c453d95b Fix bug in fillZero function 2016-09-17 09:11:10 +03:00
Alexey Andreev
375506e875 Fix bugs in C emitter. Improve generation of temporary variables in WASM generation. Improve test class 2016-09-17 09:11:10 +03:00
Alexey Andreev
0ac61919d5 Creating Wasm -> C translator 2016-09-17 09:11:10 +03:00
Alexey Andreev
199d91d28c Further work on WASM tree -> C renderer 2016-09-17 09:11:10 +03:00
Alexey Andreev
1fb929e9ae Creating C renderer for WASM tree, in order to enable debugging until WASM gets its own debugging support 2016-09-17 09:11:10 +03:00
Alexey Andreev
4fd20794c1 Refactoring. Fix checkstyle errors 2016-09-17 09:11:07 +03:00
Alexey Andreev
6483f518cf Remove unused classes 2016-09-17 09:00:48 +03:00
Alexey Andreev
9fb97fd53f Refactoring 2016-09-17 09:00:40 +03:00
Alexey Andreev
7679d12888 Replace NodeModifier by ElementModifier 2016-09-17 08:59:03 +03:00
Alexey Andreev
1be9ffb19e Rename InstructionLocation to TextLocation. Replace NodeLocation by TextLocation 2016-09-17 08:59:03 +03:00
Alexey Andreev
3dd76c9355 Fix bugs in WASM target 2016-09-17 08:59:03 +03:00
Alexey Andreev
06a96911a1 Further improvements in WASM target 2016-09-17 08:59:03 +03:00
Alexey Andreev
5479d24a21 Implementing reflection in WASM 2016-09-17 08:59:02 +03:00
Alexey Andreev
3f02cad9e7 Further development of WASM backend 2016-09-17 08:59:02 +03:00
Alexey Andreev
35b59ed916 Add support of Object.hashCode 2016-09-17 08:59:02 +03:00
Alexey Andreev
8c6cf1840b Add support of clinit 2016-09-17 08:59:02 +03:00
Alexey Andreev
d2cdd5e1e9 Zero memory after allocation 2016-09-17 08:59:02 +03:00
Alexey Andreev
ca874d178d Add variables and variable types to AST. Use types to properly render variables in WASM 2016-09-17 08:59:02 +03:00
Alexey Andreev
fc2c6b9e07 Add support of strings (breaks compilation for some reason) 2016-09-17 08:59:02 +03:00
Alexey Andreev
278b926c04 Fix support of primitive arrays 2016-09-17 08:59:02 +03:00
Alexey Andreev
164ebeb629 Refactoring RTTI, add type annotation to array subscription instructions 2016-09-17 08:59:02 +03:00
Alexey Andreev
73d4a389b7 Fix static fields 2016-09-17 08:59:02 +03:00
Alexey Andreev
38638bc560 Add compressed binary data to store RTTI 2016-09-17 08:59:01 +03:00
Alexey Andreev
421eca8a49 Add support for array of objects 2016-09-17 08:59:01 +03:00
Alexey Andreev
38aca08993 Add support for instanceof expressions 2016-09-17 08:59:01 +03:00
Alexey Andreev
1aacbea4d0 Fix switch generation for general case 2016-09-17 08:59:01 +03:00
Alexey Andreev
850609bb72 Provide more information in class header 2016-09-17 08:59:01 +03:00
Alexey Andreev
fe5aca5139 Add support of virtual method invocation 2016-09-17 08:59:01 +03:00
Alexey Andreev
45993091e4 Fix minor bugs in WASM backend 2016-09-17 08:59:01 +03:00
Alexey Andreev
a1fe87ff70 Move several annotations 2016-09-17 08:59:01 +03:00
Alexey Andreev
d5e9168323 Fix bug with JS long emulator 2016-09-17 08:59:01 +03:00
Alexey Andreev
861742a2fb Fix bug with JS operator precedence 2016-09-17 08:59:01 +03:00
Alexey Andreev
675abe8740 Start supporting classes in WASM 2016-09-17 08:59:01 +03:00
Alexey Andreev
081efd2d60 Fix bugs in JavaScript backend 2016-09-17 08:59:00 +03:00
Alexey Andreev
055312055b Minor optimization of expression negation 2016-09-17 08:59:00 +03:00
Alexey Andreev
964d2cdf5b Minimal WASM example works 2016-09-17 08:59:00 +03:00
Alexey Andreev
4fa0669e9a Move WasmTarget to another package visible to git 2016-09-17 08:59:00 +03:00
Alexey Andreev
47997cde87 Rename target package to backend to avoid gitignore 2016-09-17 08:59:00 +03:00
Alexey Andreev
89c16b9807 Fixing bugs in WASM emitter 2016-09-17 08:58:56 +03:00
Alexey Andreev
e5356fae27 Add WASM s-expr emitter 2016-09-17 08:55:59 +03:00
Alexey Andreev
1484e970dd Add WASM generator 2016-09-17 08:55:59 +03:00
Alexey Andreev
888710102f Refactoring 2016-09-17 08:55:59 +03:00
Alexey Andreev
4961e3d92d Refactor AST 2016-09-17 08:55:59 +03:00