Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 511 lines (457 sloc) 15.682 kb
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
1 /*
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
2 * MacRuby Compiler.
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
3 *
4 * This file is covered by the Ruby license. See COPYING for more details.
5 *
4aca101 @drernie Added 2010 Copyrights
drernie authored
6 * Copyright (C) 2008-2010, Apple Inc. All rights reserved.
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
7 */
8
cb65416 the great schism, part I
Laurent Sansonetti authored
9 #ifndef __COMPILER_H_
10 #define __COMPILER_H_
11
12 // For the dispatcher.
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
13 #define DISPATCH_VCALL 0x1 // no receiver, no argument
14 #define DISPATCH_FCALL 0x2 // no receiver, one or more arguments
15 #define DISPATCH_SUPER 0x4 // super call
16 #define DISPATCH_SPLAT 0x8 // has splat
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
17 #define SPLAT_ARG_FOLLOWS 0xdeadbeef
cb65416 the great schism, part I
Laurent Sansonetti authored
18
370e385 get rid of bad allocas, disable frame pointer elimination, simplified co...
Laurent Sansonetti authored
19 // For const lookup.
20 #define CONST_LOOKUP_LEXICAL 1
21 #define CONST_LOOKUP_DYNAMIC_CLASS 2
22
cb65416 the great schism, part I
Laurent Sansonetti authored
23 // For defined?
24 #define DEFINED_IVAR 1
25 #define DEFINED_GVAR 2
26 #define DEFINED_CVAR 3
27 #define DEFINED_CONST 4
28 #define DEFINED_LCONST 5
29 #define DEFINED_SUPER 6
30 #define DEFINED_METHOD 7
31
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
32 #if defined(__cplusplus)
33
a6a5d3e started to trim out the static library
Laurent Sansonetti authored
34 #if !defined(MACRUBY_STATIC)
35
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
36 class RoxorInterpreter;
37
cb65416 the great schism, part I
Laurent Sansonetti authored
38 class RoxorCompiler {
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
39 friend class RoxorInterpreter;
40
cb65416 the great schism, part I
Laurent Sansonetti authored
41 public:
42 static llvm::Module *module;
43 static RoxorCompiler *shared;
44
cf73725 experimental debugger
Laurent Sansonetti authored
45 RoxorCompiler(bool debug_mode);
cb65416 the great schism, part I
Laurent Sansonetti authored
46 virtual ~RoxorCompiler(void) { }
47
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
48 void set_fname(const char *_fname);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
49
cb65416 the great schism, part I
Laurent Sansonetti authored
50 Value *compile_node(NODE *node);
51
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
52 virtual Function *compile_main_function(NODE *node,
53 bool *can_be_interpreted);
cb65416 the great schism, part I
Laurent Sansonetti authored
54 Function *compile_read_attr(ID name);
55 Function *compile_write_attr(ID name);
9fab1ac fixed variadic functions/methods calls
Laurent Sansonetti authored
56 Function *compile_stub(const char *types, bool variadic, int min_argc,
57 bool is_objc);
485e435 Allow methods/blocks with 12+ arguments
Thibault Martin-Lagardette authored
58 Function *compile_long_arity_stub(int argc, bool is_block);
cb65416 the great schism, part I
Laurent Sansonetti authored
59 Function *compile_bs_struct_new(rb_vm_bs_boxed_t *bs_boxed);
60 Function *compile_bs_struct_writer(rb_vm_bs_boxed_t *bs_boxed,
61 int field);
62 Function *compile_ffi_function(void *stub, void *imp, int argc);
63 Function *compile_to_rval_convertor(const char *type);
64 Function *compile_to_ocval_convertor(const char *type);
c1c347f AOT compiler: now supporting objc stubs and super dispatch
Laurent Sansonetti authored
65 Function *compile_objc_stub(Function *ruby_func, IMP ruby_imp,
66 const rb_vm_arity_t &arity, const char *types);
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
67 Function *compile_block_caller(rb_vm_block_t *block);
4b7c757 cleaning a bit public headers, added support for methods defined for the...
Laurent Sansonetti authored
68 Function *compile_mri_stub(void *imp, const int arity);
cb65416 the great schism, part I
Laurent Sansonetti authored
69
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
70 void inline_function_calls(Function *f);
71
cb65416 the great schism, part I
Laurent Sansonetti authored
72 const Type *convert_type(const char *type);
73
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
74 bool is_inside_eval(void) { return inside_eval; }
75 void set_inside_eval(bool flag) { inside_eval = flag; }
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
76 bool is_dynamic_class(void) { return dynamic_class; }
77 void set_dynamic_class(bool flag) { dynamic_class = flag; }
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
78
9b5bce3 when calculating a backtrace path from a -e script, omit the current dir...
Laurent Sansonetti authored
79 void generate_location_path(std::string &path, DILocation loc);
80
cb65416 the great schism, part I
Laurent Sansonetti authored
81 protected:
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
82 DIFactory *debug_info;
83 DICompileUnit debug_compile_unit;
84 DISubprogram debug_subprogram;
85
cf73725 experimental debugger
Laurent Sansonetti authored
86 bool debug_mode;
cb65416 the great schism, part I
Laurent Sansonetti authored
87 const char *fname;
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
88 bool inside_eval;
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
89 bool should_interpret;
90 bool can_interpret;
cb65416 the great schism, part I
Laurent Sansonetti authored
91
92 std::map<ID, Value *> lvars;
93 std::vector<ID> dvars;
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
94 std::map<ID, void *> ivars_slots_cache;
cb65416 the great schism, part I
Laurent Sansonetti authored
95 std::map<std::string, GlobalVariable *> static_strings;
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
96 std::map<CFHashCode, GlobalVariable *> static_ustrings;
cb65416 the great schism, part I
Laurent Sansonetti authored
97
0ff5064 optimizing symetric masgns
Laurent Sansonetti authored
98 class MAsgnValue {
99 public:
100 CallInst *ary;
101 std::vector<CallInst *> sets;
102 };
103 std::vector<MAsgnValue> masgn_values;
104
cb65416 the great schism, part I
Laurent Sansonetti authored
105 #if ROXOR_COMPILER_DEBUG
106 int level;
107 # define DEBUG_LEVEL_INC() (level++)
108 # define DEBUG_LEVEL_DEC() (level--)
109 #else
110 # define DEBUG_LEVEL_INC()
111 # define DEBUG_LEVEL_DEC()
112 #endif
113
2541db3 added preliminary support for backtracing/symbolication
Laurent Sansonetti authored
114 unsigned int current_line;
cb65416 the great schism, part I
Laurent Sansonetti authored
115 BasicBlock *bb;
116 BasicBlock *entry_bb;
117 ID current_mid;
164ca93 fixed super within a method that has a splat argument
Laurent Sansonetti authored
118 rb_vm_arity_t current_arity;
cb65416 the great schism, part I
Laurent Sansonetti authored
119 ID self_id;
120 Value *current_self;
121 bool current_block;
1961daa better fix than last one
Laurent Sansonetti authored
122 bool current_block_chain;
cb65416 the great schism, part I
Laurent Sansonetti authored
123 Value *current_var_uses;
124 Value *running_block;
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
125 Value *current_block_arg;
cb65416 the great schism, part I
Laurent Sansonetti authored
126 BasicBlock *begin_bb;
63c77f8 @vincentisambart now rescues in rescues should work properly in most cases
vincentisambart authored
127 BasicBlock *rescue_invoke_bb;
128 BasicBlock *rescue_rethrow_bb;
cb65416 the great schism, part I
Laurent Sansonetti authored
129 BasicBlock *ensure_bb;
130 bool current_rescue;
131 NODE *current_block_node;
132 Function *current_block_func;
1e86229 fixed ZSUPER compilation inside blocks
Laurent Sansonetti authored
133 Function *current_non_block_func;
cb65416 the great schism, part I
Laurent Sansonetti authored
134 GlobalVariable *current_opened_class;
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
135 bool dynamic_class;
cb65416 the great schism, part I
Laurent Sansonetti authored
136 BasicBlock *current_loop_begin_bb;
137 BasicBlock *current_loop_body_bb;
138 BasicBlock *current_loop_end_bb;
513ee74 @vincentisambart Fixed the return value of while/until loops
vincentisambart authored
139 PHINode *current_loop_exit_val;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
140 int return_from_block;
141 int return_from_block_ids;
5d7a33f @vincentisambart when there are multiple returns in an ensure,
vincentisambart authored
142 PHINode *ensure_pn;
13f5368 fixed a bunch of super-dispatch bugs
Laurent Sansonetti authored
143 bool block_declaration;
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
144 AllocaInst *dispatch_argv;
cb65416 the great schism, part I
Laurent Sansonetti authored
145
5bcbc93 issue write barriers when storing objects into Binding slots (this shoul...
Laurent Sansonetti authored
146 Function *writeBarrierFunc;
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
147 Function *dispatchFunc;
38456a4 most fast ops in place
Laurent Sansonetti authored
148 Function *fastPlusFunc;
149 Function *fastMinusFunc;
150 Function *fastMultFunc;
151 Function *fastDivFunc;
152 Function *fastLtFunc;
153 Function *fastLeFunc;
154 Function *fastGtFunc;
155 Function *fastGeFunc;
944d624 optimize #== and #!= for non fixnum/float types
Laurent Sansonetti authored
156 Function *fastEqFunc;
157 Function *fastNeqFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
158 Function *fastEqqFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
159 Function *fastArefFunc;
160 Function *fastAsetFunc;
161 Function *fastShiftFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
162 Function *whenSplatFunc;
163 Function *prepareBlockFunc;
164 Function *pushBindingFunc;
165 Function *getBlockFunc;
166 Function *currentBlockObjectFunc;
167 Function *getConstFunc;
168 Function *setConstFunc;
169 Function *prepareMethodFunc;
170 Function *singletonClassFunc;
171 Function *defineClassFunc;
172 Function *prepareIvarSlotFunc;
173 Function *getIvarFunc;
174 Function *setIvarFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
175 Function *willChangeValueFunc;
176 Function *didChangeValueFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
177 Function *definedFunc;
178 Function *undefFunc;
179 Function *aliasFunc;
180 Function *valiasFunc;
181 Function *newHashFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
182 Function *storeHashFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
183 Function *toAFunc;
184 Function *toAryFunc;
185 Function *catArrayFunc;
186 Function *dupArrayFunc;
187 Function *newArrayFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
188 Function *asetArrayFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
189 Function *newStructFunc;
190 Function *newOpaqueFunc;
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
191 Function *newPointerFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
192 Function *getStructFieldsFunc;
193 Function *getOpaqueDataFunc;
194 Function *getPointerPtrFunc;
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
195 Function *xmallocFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
196 Function *checkArityFunc;
197 Function *setStructFunc;
198 Function *newRangeFunc;
199 Function *newRegexpFunc;
200 Function *strInternFunc;
00b147f add basic support for __method__ and __callee__
Laurent Sansonetti authored
201 Function *selToSymFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
202 Function *keepVarsFunc;
203 Function *masgnGetElemBeforeSplatFunc;
204 Function *masgnGetElemAfterSplatFunc;
205 Function *masgnGetSplatFunc;
206 Function *newStringFunc;
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
207 Function *newString2Func;
208 Function *newString3Func;
cb65416 the great schism, part I
Laurent Sansonetti authored
209 Function *yieldFunc;
7da28cb make sure break makes yield return from its scope
Laurent Sansonetti authored
210 Function *getBrokenFunc;
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
211 Function *blockEvalFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
212 Function *gvarSetFunc;
213 Function *gvarGetFunc;
214 Function *cvarSetFunc;
215 Function *cvarGetFunc;
216 Function *currentExceptionFunc;
217 Function *popExceptionFunc;
218 Function *getSpecialFunc;
219 Function *breakFunc;
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
220 Function *returnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
221 Function *returnedFromBlockFunc;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
222 Function *checkReturnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
223 Function *setHasEnsureFunc;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
224 Function *setScopeFunc;
225 Function *setCurrentClassFunc;
cf73725 experimental debugger
Laurent Sansonetti authored
226 Function *debugTrapFunc;
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
227 Function *getFFStateFunc;
228 Function *setFFStateFunc;
945dba1 moving more primitives to the kernel
Laurent Sansonetti authored
229 Function *releaseOwnershipFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
230 Function *ocvalToRvalFunc;
231 Function *charToRvalFunc;
232 Function *ucharToRvalFunc;
233 Function *shortToRvalFunc;
234 Function *ushortToRvalFunc;
235 Function *intToRvalFunc;
236 Function *uintToRvalFunc;
237 Function *longToRvalFunc;
238 Function *ulongToRvalFunc;
239 Function *longLongToRvalFunc;
240 Function *ulongLongToRvalFunc;
241 Function *floatToRvalFunc;
242 Function *doubleToRvalFunc;
243 Function *selToRvalFunc;
244 Function *charPtrToRvalFunc;
245 Function *rvalToOcvalFunc;
246 Function *rvalToBoolFunc;
247 Function *rvalToCharFunc;
248 Function *rvalToUcharFunc;
249 Function *rvalToShortFunc;
250 Function *rvalToUshortFunc;
251 Function *rvalToIntFunc;
252 Function *rvalToUintFunc;
253 Function *rvalToLongFunc;
254 Function *rvalToUlongFunc;
255 Function *rvalToLongLongFunc;
256 Function *rvalToUlongLongFunc;
257 Function *rvalToFloatFunc;
258 Function *rvalToDoubleFunc;
259 Function *rvalToSelFunc;
260 Function *rvalToCharPtrFunc;
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
261 Function *initBlockFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
262
263 Constant *zeroVal;
264 Constant *oneVal;
265 Constant *twoVal;
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
266 Constant *threeVal;
cb65416 the great schism, part I
Laurent Sansonetti authored
267 Constant *nilVal;
268 Constant *trueVal;
269 Constant *falseVal;
270 Constant *undefVal;
271 Constant *splatArgFollowsVal;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
272 Constant *defaultScope;
273 Constant *publicScope;
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
274
275 const Type *VoidTy;
276 const Type *Int1Ty;
277 const Type *Int8Ty;
278 const Type *Int16Ty;
279 const Type *Int32Ty;
280 const Type *Int64Ty;
281 const Type *FloatTy;
282 const Type *DoubleTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
283 const Type *RubyObjTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
284 const PointerType *RubyObjPtrTy;
285 const PointerType *RubyObjPtrPtrTy;
286 const PointerType *PtrTy;
287 const PointerType *PtrPtrTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
288 const Type *IntTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
289 const PointerType *Int32PtrTy;
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
290 const Type *BitTy;
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
291 const Type *BlockLiteralTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
292
fa57162 follow LLVM ToT
Laurent Sansonetti authored
293 unsigned dbg_mdkind;
294
cb65416 the great schism, part I
Laurent Sansonetti authored
295 void compile_node_error(const char *msg, NODE *node);
296
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
297 Function *
298 get_function(const char *name) {
299 Function *f = module->getFunction(name);
300 if (f == NULL) {
301 printf("function %s cannot be found!\n", name);
302 abort();
303 }
304 return f;
305 }
306
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
307 virtual Constant *
308 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
309 if (type == NULL) {
310 type = PtrTy;
311 }
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
312 if (ptr == NULL) {
313 return ConstantPointerNull::get(type);
314 }
315 else {
316 Constant *ptrint = ConstantInt::get(IntTy, (long)ptr);
317 return ConstantExpr::getIntToPtr(ptrint, type);
318 }
cb65416 the great schism, part I
Laurent Sansonetti authored
319 }
320
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
321 Constant *
322 compile_const_pointer_to_pointer(void *ptr) {
323 return compile_const_pointer(ptr, PtrPtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
324 }
325
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
326 bool should_inline_function(Function *f);
327
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
328 Value *compile_node0(NODE *node);
1e86229 fixed ZSUPER compilation inside blocks
Laurent Sansonetti authored
329 Function *compile_scope(NODE *node);
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
330 Value *compile_call(NODE *node);
331 Value *compile_yield(NODE *node);
fb086cf reduce usage of std::vector
Laurent Sansonetti authored
332 Instruction *compile_protected_call(Value *imp, Value **args_begin,
333 Value **args_end);
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
334 Instruction *compile_protected_call(Value *imp, std::vector<Value *>
335 &params);
336 Value *recompile_dispatch_argv(std::vector<Value *> &params, int idx);
cb65416 the great schism, part I
Laurent Sansonetti authored
337 void compile_dispatch_arguments(NODE *args,
338 std::vector<Value *> &arguments, int *pargc);
339 Function::ArgumentListType::iterator compile_optional_arguments(
340 Function::ArgumentListType::iterator iter, NODE *node);
341 void compile_boolean_test(Value *condVal, BasicBlock *ifTrueBB,
342 BasicBlock *ifFalseBB);
343 void compile_when_arguments(NODE *args, Value *comparedToVal,
344 BasicBlock *thenBB);
345 void compile_single_when_argument(NODE *arg, Value *comparedToVal,
346 BasicBlock *thenBB);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
347 void compile_method_definition(NODE *node);
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
348 virtual void compile_prepare_method(Value *classVal, Value *sel,
349 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
350 NODE *body);
cb65416 the great schism, part I
Laurent Sansonetti authored
351 Value *compile_dispatch_call(std::vector<Value *> &params);
352 Value *compile_when_splat(Value *comparedToVal, Value *splatVal);
353 Value *compile_attribute_assign(NODE *node, Value *extra_val);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
354 virtual Value *compile_prepare_block_args(Function *func, int *flags);
945dba1 moving more primitives to the kernel
Laurent Sansonetti authored
355 Value *compile_prepare_block(void);
356 Value *compile_block(NODE *node);
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
357 Value *compile_block_get(Value *block_object);
cb65416 the great schism, part I
Laurent Sansonetti authored
358 Value *compile_binding(void);
359 Value *compile_optimized_dispatch_call(SEL sel, int argc,
360 std::vector<Value *> &params);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
361 Value *compile_lvar_assignment(ID vid, Value *val);
362 Value *compile_dvar_assignment(ID vid, Value *val);
363 Value *compile_lvar_get(ID vid);
cb65416 the great schism, part I
Laurent Sansonetti authored
364 Value *compile_ivar_assignment(ID vid, Value *val);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
365 Value *compile_ivar_get(ID vid);
cb65416 the great schism, part I
Laurent Sansonetti authored
366 Value *compile_cvar_assignment(ID vid, Value *val);
eeb7a10 added support for @@foo||=42, a lot of changes for a very stupid functio...
Laurent Sansonetti authored
367 Value *compile_cvar_get(ID vid, bool check);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
368 Value *compile_gvar_assignment(NODE *node, Value *val);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
369 Value *compile_gvar_get(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
370 Value *compile_constant_declaration(NODE *node, Value *val);
0ff5064 optimizing symetric masgns
Laurent Sansonetti authored
371 Value *compile_multiple_assignment(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
372 Value *compile_multiple_assignment(NODE *node, Value *val);
373 void compile_multiple_assignment_element(NODE *node, Value *val);
374 Value *compile_current_class(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
375 virtual Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
376 virtual Value *compile_standarderror(void);
e037cf2 fix a const lookup bug inside Foo::Bar modules
Laurent Sansonetti authored
377 Value *compile_class_path(NODE *node, int *flags);
cb65416 the great schism, part I
Laurent Sansonetti authored
378 Value *compile_const(ID id, Value *outer);
379 Value *compile_singleton_class(Value *obj);
380 Value *compile_defined_expression(NODE *node);
381 Value *compile_dstr(NODE *node);
382 Value *compile_dvar_slot(ID name);
383 void compile_break_val(Value *val);
e8d79c7 @vincentisambart a return in an ensure should now work properly
vincentisambart authored
384 void compile_simple_return(Value *val);
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
385 Value *compile_set_has_ensure(Value *val);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
386 void compile_return_from_block(Value *val, int id);
387 void compile_return_from_block_handler(int id);
cb65416 the great schism, part I
Laurent Sansonetti authored
388 Value *compile_jump(NODE *node);
389 virtual Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
390 virtual Value *compile_sel(SEL sel, bool add_to_bb=true) {
391 return compile_const_pointer(sel, PtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
392 }
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
393 virtual Value *compile_id(ID id);
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
394 Instruction *compile_const_global_string(const char *str,
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
395 const size_t str_len);
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
396 Instruction *compile_const_global_string(const char *str) {
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
397 return compile_const_global_string(str, strlen(str));
398 }
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
399 Instruction *compile_const_global_ustring(const UniChar *str,
f045214 regexps are now AOT compilable
Laurent Sansonetti authored
400 const size_t str_len);
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
401
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
402 Value *compile_arity(rb_vm_arity_t &arity);
95f3b23 added support for AOT compilation of literal ranges
Laurent Sansonetti authored
403 Instruction *compile_range(Value *beg, Value *end, bool exclude_end,
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
404 bool retain=false);
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
405 Value *compile_literal(VALUE val);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
406 virtual Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
407 virtual Value *compile_global_entry(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
408
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
409 void compile_set_current_scope(Value *klass, Value *scope);
410 Value *compile_set_current_class(Value *klass);
411
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
412 Value *compile_landing_pad_header(void);
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
413 void compile_landing_pad_footer(bool pop_exception=true);
c80c60a in the objc->ruby 32-bit stub convert ruby exceptions to objc
Laurent Sansonetti authored
414 Value *compile_current_exception(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
415 void compile_rethrow_exception(void);
23ef57e now properly popping exceptions from the VM stack when we unwind from a ...
Laurent Sansonetti authored
416 void compile_pop_exception(int pos=0);
cb65416 the great schism, part I
Laurent Sansonetti authored
417 Value *compile_lvar_slot(ID name);
5bcbc93 issue write barriers when storing objects into Binding slots (this shoul...
Laurent Sansonetti authored
418 Value *compile_lvar_slot(ID name, bool *need_wb);
cb65416 the great schism, part I
Laurent Sansonetti authored
419 bool compile_lvars(ID *tbl);
420 Value *compile_new_struct(Value *klass, std::vector<Value *> &fields);
421 Value *compile_new_opaque(Value *klass, Value *val);
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
422 Value *compile_new_pointer(const char *type, Value *val);
cb65416 the great schism, part I
Laurent Sansonetti authored
423 void compile_get_struct_fields(Value *val, Value *buf,
424 rb_vm_bs_boxed_t *bs_boxed);
425 Value *compile_get_opaque_data(Value *val, rb_vm_bs_boxed_t *bs_boxed,
426 Value *slot);
427 Value *compile_get_cptr(Value *val, const char *type, Value *slot);
428 void compile_check_arity(Value *given, Value *requested);
429 void compile_set_struct(Value *rcv, int field, Value *val);
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
430 Value *compile_xmalloc(size_t len);
cb65416 the great schism, part I
Laurent Sansonetti authored
431
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
432 Value *compile_lambda_to_funcptr(const char *type, Value *val,
433 Value *slot, bool is_block);
cb65416 the great schism, part I
Laurent Sansonetti authored
434 Value *compile_conversion_to_c(const char *type, Value *val,
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
435 Value *slot);
cb65416 the great schism, part I
Laurent Sansonetti authored
436 Value *compile_conversion_to_ruby(const char *type,
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
437 const Type *llvm_type, Value *val);
cf73725 experimental debugger
Laurent Sansonetti authored
438 void compile_debug_trap(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
439
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
440 virtual Value *compile_slot_cache(ID id);
2a1240c @vincentisambart some refactoring
vincentisambart authored
441 void compile_keep_vars(BasicBlock *startBB, BasicBlock *mergeBB);
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
442
cb65416 the great schism, part I
Laurent Sansonetti authored
443 SEL mid_to_sel(ID mid, int arity);
4e1a3ba let's attach more metadata
Laurent Sansonetti authored
444
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
445 Value *compile_get_ffstate(GlobalVariable *ffstate);
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
446 Value *compile_set_ffstate(Value *val, Value *expected,
447 GlobalVariable *ffstate, BasicBlock *mergeBB, Function *f);
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
448 Value *compile_ff2(NODE *current_node);
449 Value *compile_ff3(NODE *current_node);
450
4e1a3ba let's attach more metadata
Laurent Sansonetti authored
451 void attach_current_line_metadata(Instruction *insn);
cb65416 the great schism, part I
Laurent Sansonetti authored
452 };
453
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
454 #define context (RoxorCompiler::module->getContext())
455
cb65416 the great schism, part I
Laurent Sansonetti authored
456 class RoxorAOTCompiler : public RoxorCompiler {
457 public:
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
458 RoxorAOTCompiler(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
459
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
460 Function *compile_main_function(NODE *node, bool *can_be_interpreted);
cb65416 the great schism, part I
Laurent Sansonetti authored
461
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
462 // BridgeSupport metadata needed for AOT compilation.
463 std::map<SEL, std::vector<std::string> *> bs_c_stubs_types,
464 bs_objc_stubs_types;
465
466 void load_bs_full_file(const char *path);
467
cb65416 the great schism, part I
Laurent Sansonetti authored
468 private:
469 std::map<ID, GlobalVariable *> ccaches;
470 std::map<SEL, GlobalVariable *> sels;
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
471 std::map<ID, GlobalVariable *> ids;
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
472 std::map<ID, GlobalVariable *> global_entries;
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
473 std::vector<GlobalVariable *> ivar_slots;
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
474 std::map<VALUE, GlobalVariable *> literals;
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
475 std::vector<std::string> c_stubs, objc_stubs;
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
476
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
477 GlobalVariable *cObject_gvar;
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
478 GlobalVariable *cStandardError_gvar;
479 std::vector<GlobalVariable *> class_gvars;
cb65416 the great schism, part I
Laurent Sansonetti authored
480
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
481 Function *compile_init_function(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
482 Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
483 Value *compile_sel(SEL sel, bool add_to_bb=true);
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
484 void compile_prepare_method(Value *classVal, Value *sel,
485 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
486 NODE *body);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
487 Value *compile_prepare_block_args(Function *func, int *flags);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
488 Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
489 Value *compile_standarderror(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
490 Value *compile_id(ID id);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
491 Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
492 Value *compile_global_entry(NODE *node);
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
493 Value *compile_slot_cache(ID id);
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
494
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
495 Constant *
496 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
cb65416 the great schism, part I
Laurent Sansonetti authored
497 if (ptr == NULL) {
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
498 return RoxorCompiler::compile_const_pointer(ptr, type);
cb65416 the great schism, part I
Laurent Sansonetti authored
499 }
500 printf("compile_const_pointer() called with a non-NULL pointer " \
501 "on the AOT compiler - leaving the ship!\n");
502 abort();
503 }
504 };
505
a6a5d3e started to trim out the static library
Laurent Sansonetti authored
506 #endif // !MACRUBY_STATIC
507
cb65416 the great schism, part I
Laurent Sansonetti authored
508 #endif /* __cplusplus */
509
510 #endif /* __COMPILER_H_ */
Something went wrong with that request. Please try again.