Mercurial > octave
annotate libinterp/parse-tree/pt-jit.h @ 29572:aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
Files affected: make_int.cc, file-editor-tab.cc, octave-qscintilla.cc,
Cell.cc, Cell.h, call-stack.cc, call-stack.h, cellfun.cc, data.cc,
debug.cc, dlmread.cc, error.cc, event-queue.h, fcn-info.cc,
fcn-info.h, file-io.cc, ft-text-renderer.cc, gl2ps-print.cc,
graphics.cc, graphics.in.h, help.cc, hex2num.cc, input.cc,
latex-text-renderer.cc, load-path.cc, load-save.cc, load-save.h,
ls-hdf5.cc, ls-mat-ascii.cc, ls-mat5.cc, ls-oct-text.cc, mex.cc,
mexproto.h, mxarray.h, oct-map.cc, oct-stream.cc, oct-stream.h,
pager.cc, pager.h, pr-output.cc, regexp.cc, settings.h,
stack-frame.cc, stack-frame.h, strfns.cc, syminfo.cc, symrec.h,
symscope.cc, symscope.h, symtab.cc, sysdep.cc, toplev.cc, utils.cc,
utils.h, variables.cc, __fltk_uigetfile__.cc, __init_fltk__.cc,
audioread.cc, gzip.cc, cdef-class.cc, cdef-manager.cc, cdef-method.cc,
cdef-object.cc, cdef-object.h, ov-base-diag.cc, ov-base-diag.h,
ov-base-mat.cc, ov-base-mat.h, ov-base-scalar.cc, ov-base-scalar.h,
ov-base-sparse.h, ov-base.cc, ov-base.h, ov-cell.cc, ov-cell.h,
ov-ch-mat.cc, ov-class.cc, ov-class.h, ov-classdef.cc,
ov-fcn-handle.cc, ov-java.cc, ov-lazy-idx.h, ov-perm.cc, ov-perm.h,
ov-range.h, ov-str-mat.cc, ov-struct.cc, ov-struct.h, ov-usr-fcn.cc,
ov-usr-fcn.h, ov.cc, ov.h, ovl.cc, octave.cc, bp-table.cc, jit-ir.cc,
jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.h, lex.h, lex.ll,
oct-lvalue.cc, oct-parse.yy, parse.h, profiler.h, pt-eval.cc,
pt-eval.h, pt-jit.cc, pt-jit.h, pt-pr-code.cc, pt-tm-const.cc,
pt-tm-const.h, Array.h, CMatrix.cc, DiagArray2.h, PermMatrix.h,
Sparse.h, dMatrix.cc, fCMatrix.cc, fMatrix.cc, bsxfun-defs.cc,
oct-fftw.cc, oct-fftw.h, randpoisson.cc, sparse-chol.cc,
mx-inlines.cc, file-ops.cc, lo-sysdep.cc, oct-env.cc, oct-time.cc,
action-container.cc, action-container.h, base-list.h, caseless-str.h,
cmd-edit.cc, cmd-hist.cc, data-conv.cc, data-conv.h, f77-fcn.h,
file-info.cc, file-info.h, kpse.cc, kpse.h, lo-cutils.h, lo-hash.h,
lo-regexp.cc, oct-base64.cc, oct-base64.h, oct-binmap.h, oct-glob.cc,
oct-shlib.cc, oct-shlib.h, oct-sort.cc, oct-sparse.h, oct-string.cc,
quit.cc, unwind-prot.h, url-transfer.cc, main.in.cc, mkoctfile.in.cc,
and shared-fcns.h.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 28 Apr 2021 22:57:42 -0400 |
parents | 0a5b15007766 |
children |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
3 // Copyright (C) 2012-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
14899 | 25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
26 #if ! defined (octave_pt_jit_h) |
17822
ebb3ef964372
maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
27 #define octave_pt_jit_h 1 |
14899 | 28 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
30 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21244
diff
changeset
|
31 #if defined (HAVE_LLVM) |
14932
1f914446157d
Locate and link with LLVM properly
Max Brister <max@2bass.com>
parents:
14928
diff
changeset
|
32 |
26542
e590d8ad9ed0
jit: Remove jit::PassManager and jit::FunctionPassManager from public API
Julien Bect <jbect@users.sourceforge.net>
parents:
26535
diff
changeset
|
33 #include "jit-util.h" |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
34 #include "jit-typeinfo.h" |
15016
005cb78e1dd1
Split pt-jit into multiple files.
Max Brister <max@2bass.com>
parents:
15014
diff
changeset
|
35 #include "jit-ir.h" |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
36 #include "pt-walk.h" |
24362
3fc24b792a24
avoid including symtab.h, symscope.h, or symrec.h unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24361
diff
changeset
|
37 #include "symscope.h" |
14899 | 38 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
39 // octave_value_list is not (yet) in the octave namespace |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
40 class octave_value_list; |
14899 | 41 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
42 namespace octave |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
43 { |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
44 namespace jit |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
45 { |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
46 typedef std::unique_ptr<llvm::Module> ModuleOwner; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
47 typedef std::unique_ptr<llvm::ExecutionEngine> EngineOwner; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
48 } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
49 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
50 // Convert from the parse tree (AST) to the low level Octave IR. |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
51 class |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
52 jit_convert : public tree_walker |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
53 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
54 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
55 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
56 typedef std::pair<jit_type *, std::string> type_bound; |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
57 typedef std::vector<type_bound> type_bound_vector; |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
58 typedef std::map<std::string, jit_variable *> variable_map; |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
59 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
60 jit_convert (tree& tee, jit_type *for_bounds = nullptr); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
61 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
62 jit_convert (octave_user_function& fcn, const std::vector<jit_type *>& args); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
63 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
64 template <typename ...Args> |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
65 jit_call * create_checked (const Args&... args) |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
66 { |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
67 jit_call *ret = m_factory.create<jit_call> (args...); |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
68 return create_checked_impl (ret); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
69 } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
70 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
71 jit_block_list& get_blocks (void) { return m_blocks; } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
72 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
73 const type_bound_vector& get_bounds (void) const { return m_bounds; } |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
74 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
75 jit_factory& get_factory (void) { return m_factory; } |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
76 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
77 llvm::Function *get_function (void) const { return m_function; } |
14906 | 78 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
79 const variable_map& get_variable_map (void) const { return m_vmap; } |
14906 | 80 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
81 void visit_anon_fcn_handle (tree_anon_fcn_handle&); |
14906 | 82 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
83 void visit_argument_list (tree_argument_list&); |
14906 | 84 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
85 void visit_binary_expression (tree_binary_expression&); |
23425
7dfa3bc8e3d5
handle boolean expressions separately in JIT compiler
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
86 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
87 void visit_boolean_expression (tree_boolean_expression&); |
14906 | 88 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
89 void visit_break_command (tree_break_command&); |
14906 | 90 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
91 void visit_colon_expression (tree_colon_expression&); |
14906 | 92 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
93 void visit_continue_command (tree_continue_command&); |
14906 | 94 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
95 void visit_decl_command (tree_decl_command&); |
14906 | 96 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
97 void visit_decl_init_list (tree_decl_init_list&); |
14906 | 98 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
99 void visit_decl_elt (tree_decl_elt&); |
14906 | 100 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
101 void visit_simple_for_command (tree_simple_for_command&); |
14906 | 102 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
103 void visit_complex_for_command (tree_complex_for_command&); |
14906 | 104 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
105 void visit_octave_user_script (octave_user_script&); |
14906 | 106 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
107 void visit_octave_user_function (octave_user_function&); |
14906 | 108 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
109 void visit_octave_user_function_header (octave_user_function&); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
110 |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
111 void visit_octave_user_function_trailer (octave_user_function&); |
14906 | 112 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
113 void visit_function_def (tree_function_def&); |
14906 | 114 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
115 void visit_identifier (tree_identifier&); |
14906 | 116 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
117 void visit_if_clause (tree_if_clause&); |
14906 | 118 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
119 void visit_if_command (tree_if_command&); |
14906 | 120 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
121 void visit_if_command_list (tree_if_command_list&); |
14906 | 122 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
123 void visit_index_expression (tree_index_expression&); |
14906 | 124 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
125 void visit_matrix (tree_matrix&); |
14906 | 126 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
127 void visit_cell (tree_cell&); |
14906 | 128 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
129 void visit_multi_assignment (tree_multi_assignment&); |
14906 | 130 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
131 void visit_no_op_command (tree_no_op_command&); |
14906 | 132 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
133 void visit_constant (tree_constant&); |
14906 | 134 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
135 void visit_fcn_handle (tree_fcn_handle&); |
14906 | 136 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
137 void visit_parameter_list (tree_parameter_list&); |
14906 | 138 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
139 void visit_postfix_expression (tree_postfix_expression&); |
14906 | 140 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
141 void visit_prefix_expression (tree_prefix_expression&); |
14906 | 142 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
143 void visit_return_command (tree_return_command&); |
14906 | 144 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
145 void visit_simple_assignment (tree_simple_assignment&); |
14906 | 146 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
147 void visit_statement (tree_statement&); |
14906 | 148 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
149 void visit_statement_list (tree_statement_list&); |
14906 | 150 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
151 void visit_switch_case (tree_switch_case&); |
14906 | 152 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
153 void visit_switch_case_list (tree_switch_case_list&); |
14906 | 154 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
155 void visit_switch_command (tree_switch_command&); |
14906 | 156 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
157 void visit_try_catch_command (tree_try_catch_command&); |
14906 | 158 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
159 void visit_unwind_protect_command (tree_unwind_protect_command&); |
14906 | 160 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
161 void visit_while_command (tree_while_command&); |
14906 | 162 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
163 void visit_do_until_command (tree_do_until_command&); |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
164 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
165 private: |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
166 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
167 std::vector<std::pair<std::string, bool>> m_arguments; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
168 type_bound_vector m_bounds; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
169 |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
170 bool m_converting_function; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
171 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
172 // the scope of the function we are converting, or the current scope |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
173 symbol_scope m_scope; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
174 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
175 jit_factory m_factory; |
15182
a7a56b436de2
Factor out jit_block_list and jit_factory from jit_convert
Max Brister <max@2bass.com>
parents:
15181
diff
changeset
|
176 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
177 // used instead of return values from visit_* functions |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
178 jit_value *m_result; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
179 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
180 jit_block *m_entry_block; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
181 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
182 jit_block *m_final_block; |
14938
bab44e3ee291
Adding basic error support to JIT
Max Brister <max@2bass.com>
parents:
14937
diff
changeset
|
183 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
184 jit_block *m_block; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
185 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
186 llvm::Function *m_function; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
187 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
188 jit_block_list m_blocks; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
189 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
190 std::vector<jit_magic_end::context> m_end_context; |
15056
bc32288f4a42
Support the end keyword for one dimentional indexing in JIT.
Max Brister <max@2bass.com>
parents:
15027
diff
changeset
|
191 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
192 std::size_t m_iterator_count; |
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
193 std::size_t m_for_bounds_count; |
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
194 std::size_t m_short_count; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
195 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
196 variable_map m_vmap; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
197 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
198 void initialize (const symbol_scope& s); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
199 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
200 jit_call * create_checked_impl (jit_call *ret); |
14961
903a5ee2cdde
Simplify the creation of error checks in jit
Max Brister <max@2bass.com>
parents:
14960
diff
changeset
|
201 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
202 // get an existing vairable. If the variable does not exist, it will not be |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
203 // created |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
204 jit_variable * find_variable (const std::string& vname) const; |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
205 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
206 // get a variable, create it if it does not exist. The type will default to |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
207 // the variable's current type in the symbol table. |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
208 jit_variable * get_variable (const std::string& vname); |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
209 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
210 // create a variable of the given name and given type. Will also insert an |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
211 // extract statement |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
212 jit_variable * create_variable (const std::string& vname, jit_type *type, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
213 bool isarg = true); |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
214 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
215 // The name of the next for loop iterator. If inc is false, then the |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
216 // iterator counter will not be incremented. |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
217 std::string next_iterator (bool inc = true) |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
218 { return next_name ("#iter", m_iterator_count, inc); } |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
219 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
220 std::string next_for_bounds (bool inc = true) |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
221 { return next_name ("#for_bounds", m_for_bounds_count, inc); } |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
222 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
223 std::string next_shortcircut_result (bool inc = true) |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
224 { return next_name ("#shortcircut_result", m_short_count, inc); } |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
225 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
226 std::string next_name (const char *prefix, std::size_t& count, bool inc); |
15027
741d2dbcc117
Check trip count before compiling for loops.
Max Brister <max@2bass.com>
parents:
15023
diff
changeset
|
227 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
228 jit_instruction * resolve (tree_index_expression& exp, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
229 jit_value *extra_arg = nullptr, bool lhs = false); |
14969
bbeef7b8ea2e
Add support for matrix indexed assignment to JIT
Max Brister <max@2bass.com>
parents:
14968
diff
changeset
|
230 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
231 jit_value * do_assign (tree_expression *exp, jit_value *rhs, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
232 bool artificial = false); |
14969
bbeef7b8ea2e
Add support for matrix indexed assignment to JIT
Max Brister <max@2bass.com>
parents:
14968
diff
changeset
|
233 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
234 jit_value * do_assign (const std::string& lhs, jit_value *rhs, bool print, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
235 bool artificial = false); |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
236 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
237 jit_value * visit (tree *tee) { return visit (*tee); } |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
238 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
239 jit_value * visit (tree& tee); |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
240 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
241 typedef std::list<jit_block *> block_list; |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
242 block_list m_breaks; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
243 block_list m_continues; |
14935
5801e031a3b5
Place releases after last use and generalize dom visiting
Max Brister <max@2bass.com>
parents:
14932
diff
changeset
|
244 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
245 void finish_breaks (jit_block *dest, const block_list& lst); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
246 }; |
14928
39d52aa37a08
Use standard SSA construction algorithm, and support break/continue
Max Brister <max@2bass.com>
parents:
14926
diff
changeset
|
247 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
248 // Convert from the low level Octave IR to LLVM |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
249 class |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
250 jit_convert_llvm : public jit_ir_walker |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
251 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
252 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
253 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
254 llvm::Function * convert_loop (const jit_module& module, |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
255 const jit_block_list& blocks, |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
256 const std::list<jit_value *>& constants, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
257 const std::string& llvm_function_name); |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
258 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
259 jit_function convert_function (const jit_module& module, |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
260 const jit_block_list& blocks, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
261 const std::list<jit_value *>& constants, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
262 octave_user_function& fcn, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
263 const std::vector<jit_type *>& args); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
264 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
265 // arguments to the llvm::Function for loops |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
266 const std::vector<std::pair<std::string, bool>>& get_arguments(void) const |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
267 { return m_argument_vec; } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
268 |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
269 #define JIT_METH(clname) \ |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
270 virtual void visit (jit_ ## clname&); |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
271 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
272 JIT_VISIT_IR_CLASSES; |
14906 | 273 |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
274 #undef JIT_METH |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
275 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
276 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
277 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
278 // name -> argument index (used for compiling functions) |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
279 std::map<std::string, int> m_argument_index; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
280 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
281 std::vector<std::pair<std::string, bool>> m_argument_vec; |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
282 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
283 // name -> llvm argument (used for compiling loops) |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
284 std::map<std::string, llvm::Value *> m_arguments; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
285 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
286 bool m_converting_function; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
287 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
288 // only used if we are converting a function |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
289 jit_function m_creating; |
15370
8355fddce815
Use sret and do not use save/restore stack (bug #37308)
Max Brister <max@2bass.com>
parents:
15337
diff
changeset
|
290 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
291 llvm::Function *m_function; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
292 llvm::BasicBlock *m_prelude; |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
293 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
294 void convert (const jit_block_list& blocks, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
295 const std::list<jit_value *>& constants); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
296 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
297 void finish_phi (jit_phi *phi); |
14906 | 298 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
299 void visit (jit_value *jvalue) |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
300 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
301 return visit (*jvalue); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
302 } |
14917
232d8ab07932
Rewrite pt-jit.* adding new low level octave IR
Max Brister <max@2bass.com>
parents:
14915
diff
changeset
|
303 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
304 void visit (jit_value& jvalue) |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
305 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
306 jvalue.accept (*this); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
307 } |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
308 }; |
14906 | 309 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
310 // type inference and SSA construction on the low level Octave IR |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
311 class |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
312 jit_infer |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
313 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
314 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
315 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
316 typedef jit_convert::variable_map variable_map; |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
317 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
318 jit_infer (jit_factory& afactory, jit_block_list& ablocks, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
319 const variable_map& avmap); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
320 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
321 jit_block_list& get_blocks (void) const { return m_blocks; } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
322 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
323 jit_factory& get_factory (void) const { return m_factory; } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
324 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
325 void infer (void); |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
326 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
327 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
328 |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
329 jit_block_list& m_blocks; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
330 jit_factory& m_factory; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
331 const variable_map& m_vmap; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
332 std::list<jit_instruction *> m_worklist; |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
333 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
334 void append_users (jit_value *v); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
335 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
336 void append_users_term (jit_terminator *term); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
337 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
338 void construct_ssa (void); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
339 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
340 void do_construct_ssa (jit_block& block, std::size_t avisit_count); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
341 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
342 jit_block& entry_block (void) { return *m_blocks.front (); } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
343 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
344 jit_block& final_block (void) { return *m_blocks.back (); } |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
345 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
346 void place_releases (void); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
347 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
348 void push_worklist (jit_instruction *instr); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
349 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
350 void remove_dead (); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
351 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
352 void release_dead_phi (jit_block& ablock); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
353 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
354 void release_temp (jit_block& ablock, std::set<jit_value *>& temp); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
355 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
356 void simplify_phi (void); |
15191
ed4f4fb78586
Move type inference from jit_convert to jit_infer
Max Brister <max@2bass.com>
parents:
15183
diff
changeset
|
357 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
358 void simplify_phi (jit_phi& phi); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
359 }; |
14903 | 360 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
361 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
362 class jit_module; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
363 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
364 class |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
365 tree_jit |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
366 { |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
367 // ----- Constructor/destructor (singleton pattern) ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
368 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
369 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
370 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
371 ~tree_jit (void); |
14899 | 372 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
373 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
374 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
375 tree_jit (void); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
376 static tree_jit& instance (void); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
377 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
378 // ----- Initialization ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
379 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
380 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
381 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
382 static bool initialized; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
383 bool do_initialize (void); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
384 |
26535
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
385 // ----- LLVM context ----- |
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
386 |
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
387 public: |
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
388 |
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
389 static llvm::LLVMContext llvm_context; |
d68381feb6cb
jit: Avoid the use of llvm::getGlobalContext, removed in LLVM 3.9
Julien Bect <jbect@users.sourceforge.net>
parents:
26376
diff
changeset
|
390 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
391 // ----- Target machine ---- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
392 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
393 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
394 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
395 static const llvm::TargetMachine* get_target_machine (void) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
396 { return instance ().target_machine; } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
397 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
398 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
399 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
400 llvm::TargetMachine *target_machine; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
401 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
402 // ----- Create LLVM modules and engines ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
403 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
404 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
405 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
406 static jit::ModuleOwner |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
407 open_new_module (const std::string& module_name = generate_unique_module_name ()); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
408 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
409 static jit::EngineOwner |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
410 create_new_engine (jit::ModuleOwner module_owner); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
411 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
412 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
413 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
414 jit::ModuleOwner |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
415 do_open_new_module (const std::string& module_name) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
416 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
417 // ----- Registering JIT modules (module+engine pairs) ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
418 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
419 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
420 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
421 static void register_jit_module (jit_module* jm) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
422 { instance ().do_register_jit_module (jm); } |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
423 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
424 static void unregister_jit_module (jit_module* jm) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
425 { instance ().do_unregister_jit_module (jm); } |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
426 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
427 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
428 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
429 // List of all currently registered jit modules |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
430 std::list<jit_module*> jm_list; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
431 void do_register_jit_module (jit_module* jm); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
432 void do_unregister_jit_module (jit_module* jm); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
433 void do_dump_all_modules (void) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
434 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
435 // ----- Symbol resolution ----- |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
436 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
437 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
438 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
439 static void* getPointerToNamedFunction (const std::string &name) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
440 { return instance ().do_getPointerToNamedFunction (name); } |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
441 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
442 static uint64_t getSymbolAddress (const std::string &name) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
443 { return instance ().do_getSymbolAddress (name); } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
444 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
445 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
446 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
447 void* do_getPointerToNamedFunction (const std::string &Name) const; |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
448 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
449 uint64_t do_getSymbolAddress (const std::string &name) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
450 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
451 // ----- Generate unique identifiers ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
452 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
453 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
454 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
455 static std::string generate_unique_forloop_name (void) |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
456 { |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
457 return std::string ("jittedForLoop") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
458 + std::to_string (next_forloop_number ++); |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
459 } |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
460 // FIXME: Check that the identifier does not exist |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
461 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
462 static std::string generate_unique_function_name (void) |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
463 { |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
464 return std::string ("jittedFunction") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
465 + std::to_string (next_function_number ++); |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
466 } |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
467 // FIXME: Check that the identifier does not exist |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
468 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
469 static std::string generate_unique_module_name (void) |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
470 { |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
471 return std::string ("octaveJITModule") |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
472 + std::to_string (next_module_number ++); |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
473 } |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
474 // FIXME: Check that the identifier does not exist |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
475 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
476 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
477 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
478 static int next_forloop_number; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
479 static int next_function_number; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
480 static int next_module_number; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
481 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
482 // ----- JIT and execute ASTs ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
483 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
484 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
485 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
486 static bool execute (tree_simple_for_command& cmd, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
487 const octave_value& bounds) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
488 { return instance ().do_execute (cmd, bounds); } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
489 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
490 static bool execute (tree_while_command& cmd) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
491 { return instance ().do_execute (cmd); } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
492 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
493 static bool execute (octave_user_function& fcn, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
494 const octave_value_list& args, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
495 octave_value_list& retval) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
496 { return instance ().do_execute (fcn, args, retval); } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
497 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
498 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
499 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
500 bool do_execute (tree_simple_for_command& cmd, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
501 const octave_value& bounds); |
14899 | 502 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
503 bool do_execute (tree_while_command& cmd); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
504 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
505 bool do_execute (octave_user_function& fcn, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
506 const octave_value_list& args, |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
507 octave_value_list& retval); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
508 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
509 // ----- Miscellaneous ----- |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
510 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
511 bool enabled (void); |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
512 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
513 std::size_t trip_count (const octave_value& bounds) const; |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
514 }; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
515 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
516 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
517 class |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
518 jit_module |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
519 { |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
520 // TODO: Encapsulate all operations that can modify the module, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
521 // and prevent them if the module has been finalized |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
522 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
523 // TODO: Consider creating the engine at the end only? |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
524 // I have read somewhere that this is more efficient (nor sure) |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
525 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
526 public: |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
527 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
528 // Create an open module and associated JIT engine |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
529 jit_module (const std::string& module_name |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
530 = tree_jit::generate_unique_module_name ()); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
531 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
532 // Delete the underlying JIT engine |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
533 ~jit_module (); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
534 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
535 // Create an LLVM function in the module, with external linkage |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
536 llvm::Function* |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
537 create_llvm_function (llvm::FunctionType *ftype, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
538 const llvm::Twine &name) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
539 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
540 // Create a global in the module, with external linkage |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
541 llvm::GlobalVariable* |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
542 create_global_variable (llvm::Type *type, bool is_constant, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
543 const llvm::Twine& name) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
544 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
545 // Create or insert an LLVM Function declaration for an intrinsic, |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
546 // and return it |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
547 llvm::Function* |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
548 get_intrinsic_declaration (std::size_t id, |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
549 std::vector<llvm::Type*> types) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
550 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
551 // Underlying type of enums defined in yet-inconplete types |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
552 typedef unsigned llvm_gv_linkage; // FIXME: autoconf this |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
553 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
554 // add_global_mapping tells the execution engine where a specified |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
555 // global value (variable or function) is |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
556 template <typename ptr_type> |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
557 void add_global_mapping (const llvm::GlobalValue* gv, ptr_type p) const |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
558 { |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
559 do_add_global_mapping (gv, reinterpret_cast<void *> (p)); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
560 } |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
561 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
562 // Return the address of the specified function. |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
563 uint64_t getFunctionAddress (const std::string &name) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
564 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
565 // Optimize a function in the LLVM module |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
566 void optimize (llvm::Function *fn) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
567 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
568 // FIXME: Once this has been called, we should not be able |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
569 // to change anything in the module... |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
570 void finalizeObject (void); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
571 |
24446
4ca5c9f899d3
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
24362
diff
changeset
|
572 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
573 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
574 void do_add_global_mapping (const llvm::GlobalValue* gv, void* p) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
575 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
576 llvm::Module *m_module; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
577 llvm::ExecutionEngine *m_engine; |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
578 }; |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
579 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
580 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
581 class |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
582 jit_info : public jit_module |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
583 { |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
584 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
585 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
586 // we use a pointer here so we don't have to include ov.h |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
587 typedef std::map<std::string, const octave_value *> vmap; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
588 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
589 jit_info (tree& tee); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
590 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
591 jit_info (tree& tee, const octave_value& for_bounds); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
592 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
593 jit_info (tree_simple_for_command& tee, const octave_value& for_bounds); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
594 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
595 bool execute (const vmap& extra_vars = vmap ()) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
596 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
597 bool match (const vmap& extra_vars = vmap ()) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
598 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
599 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
600 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
601 typedef jit_convert::type_bound type_bound; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
602 typedef jit_convert::type_bound_vector type_bound_vector; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
603 typedef void (*jited_function)(octave_base_value**); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
604 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
605 void compile (tree& tee, jit_type *for_bounds = 0); |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
606 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
607 octave_value find (const vmap& extra_vars, const std::string& vname) const; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
608 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
609 // LLVM function associated to this jit_info object |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
610 std::string m_llvm_function_name; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
611 jited_function m_function; |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
612 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
613 std::vector<std::pair<std::string, bool>> m_arguments; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
614 type_bound_vector m_bounds; |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
615 }; |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
616 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
617 |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
618 class |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
619 jit_function_info : public jit_module |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
620 { |
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
621 public: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
622 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
623 jit_function_info (octave_user_function& fcn, |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
624 const octave_value_list& ov_args); |
14903 | 625 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
626 bool execute (const octave_value_list& ov_args, |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
627 octave_value_list& retval) const; |
15337
3f43e9d6d86e
JIT compile anonymous functions
Max Brister <max@2bass.com>
parents:
15334
diff
changeset
|
628 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
629 bool match (const octave_value_list& ov_args) const; |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
630 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
631 private: |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
632 |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
633 typedef octave_base_value *(*jited_function)(octave_base_value**); |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
634 |
24249
790b4389cfb4
jit: Use MJCIT instead of the old JIT
Julien Bect <jbect@users.sourceforge.net>
parents:
24239
diff
changeset
|
635 // LLVM function associated to this jit_info object |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
636 std::string m_llvm_function_name; |
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
637 jited_function m_function; |
14913
c7071907a641
Use symbol_record_ref instead of names in JIT
Max Brister <max@2bass.com>
parents:
14911
diff
changeset
|
638 |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
639 std::vector<jit_type *> m_argument_types; |
24239
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
640 }; |
51e408a7d38f
jit: Move everything inside the octave namespace
Julien Bect <jbect@users.sourceforge.net>
parents:
24238
diff
changeset
|
641 } |
14937
78e1457c5bf5
Remove some macros from pt-jit.h and pt-jit.cc
Max Brister <max@2bass.com>
parents:
14936
diff
changeset
|
642 |
14899 | 643 #endif |
24846
7620f1f5290d
use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
644 |
14932
1f914446157d
Locate and link with LLVM properly
Max Brister <max@2bass.com>
parents:
14928
diff
changeset
|
645 #endif |