comparison libinterp/interp-core/jit-typeinfo.h @ 15337:3f43e9d6d86e

JIT compile anonymous functions * jit-ir.h (jit_block::front, jit_block::back): New function. (jit_call::jit_call): New overloads. (jit_return): New class. * jit-typeinfo.cc (octave_jit_create_undef): New function. (jit_operation::to_idx): Correctly handle empty type vector. (jit_typeinfo::jit_typeinfo): Add destroy_fn and initialize create_undef. * jit-typeinfo.h (jit_typeinfo::get_any_ptr, jit_typeinfo::destroy, jit_typeinfo::create_undef): New function. * pt-jit.cc (jit_convert::jit_convert): Add overload and refactor. (jit_convert::initialize, jit_convert_llvm::convert_loop, jit_convert_llvm::convert_function, tree_jit::do_execute, jit_function_info::jit_function_info, jit_function_info::execute, jit_function_info::match): New function. (jit_convert::get_variable): Support function variable lookup. (jit_convert_llvm::convert): Handle loop/function agnostic stuff. (jit_convert_llvm::visit): Handle function creation as well. (tree_jit::execute): Move implementation to tree_jit::do_execute. (jit_info::compile): Call convert_loop instead of convert. * pt-jit.h (jit_convert::jit_convert): New overload. (jit_convert::initialize, jit_convert_llvm::convert_loop, jit_convert_llvm::convert_function, tree_jit::do_execute): New function. (jit_convert::create_variable, jit_convert_llvm::initialize): Update signature. (tree_jit::execute): Made static. (tree_jit::tree_jit): Made private. (jit_function_info): New class. * ov-usr-fcn.cc (octave_user_function::~octave_user_function): Delete jit_info. (octave_user_function::octave_user_function): Maybe JIT and use is_special_expr and special_expr. (octave_user_function::special_expr): New function. * ov-usr-fcn.h (octave_user_function::is_special_expr, octave_user_function::special_expr, octave_user_function::get_info, octave_user_function::stash_info): New function. * pt-decl.h (tree_decl_elt::name): New function. * pt-eval.cc (tree_evaluator::visit_simple_for_command, tree_evaluator::visit_while_command): Use static tree_jit methods.
author Max Brister <max@2bass.com>
date Sun, 09 Sep 2012 00:29:00 -0600
parents 8125773322d4
children 8355fddce815
comparison
equal deleted inserted replaced
15336:5fff79162342 15337:3f43e9d6d86e
450 static llvm::Type *get_scalar_llvm (void) 450 static llvm::Type *get_scalar_llvm (void)
451 { return instance->scalar->to_llvm (); } 451 { return instance->scalar->to_llvm (); }
452 452
453 static jit_type *get_scalar_ptr (void) { return instance->scalar_ptr; } 453 static jit_type *get_scalar_ptr (void) { return instance->scalar_ptr; }
454 454
455 static jit_type *get_any_ptr (void) { return instance->any_ptr; }
456
455 static jit_type *get_range (void) { return instance->range; } 457 static jit_type *get_range (void) { return instance->range; }
456 458
457 static jit_type *get_string (void) { return instance->string; } 459 static jit_type *get_string (void) { return instance->string; }
458 460
459 static jit_type *get_bool (void) { return instance->boolean; } 461 static jit_type *get_bool (void) { return instance->boolean; }
496 static const jit_function& get_release (jit_type *type) 498 static const jit_function& get_release (jit_type *type)
497 { 499 {
498 return instance->release_fn.overload (type); 500 return instance->release_fn.overload (type);
499 } 501 }
500 502
503 static const jit_operation& destroy (void)
504 {
505 return instance->destroy_fn;
506 }
507
501 static const jit_operation& print_value (void) 508 static const jit_operation& print_value (void)
502 { 509 {
503 return instance->print_fn; 510 return instance->print_fn;
504 } 511 }
505 512
560 567
561 static const jit_function& end (jit_value *value, jit_value *index, 568 static const jit_function& end (jit_value *value, jit_value *index,
562 jit_value *count) 569 jit_value *count)
563 { 570 {
564 return instance->do_end (value, index, count); 571 return instance->do_end (value, index, count);
572 }
573
574 static const jit_operation& create_undef (void)
575 {
576 return instance->create_undef_fn;
565 } 577 }
566 private: 578 private:
567 jit_typeinfo (llvm::Module *m, llvm::ExecutionEngine *e); 579 jit_typeinfo (llvm::Module *m, llvm::ExecutionEngine *e);
568 580
569 // FIXME: Do these methods really need to be in jit_typeinfo? 581 // FIXME: Do these methods really need to be in jit_typeinfo?
749 761
750 std::vector<jit_operation> binary_ops; 762 std::vector<jit_operation> binary_ops;
751 std::vector<jit_operation> unary_ops; 763 std::vector<jit_operation> unary_ops;
752 jit_operation grab_fn; 764 jit_operation grab_fn;
753 jit_operation release_fn; 765 jit_operation release_fn;
766 jit_operation destroy_fn;
754 jit_operation print_fn; 767 jit_operation print_fn;
755 jit_operation for_init_fn; 768 jit_operation for_init_fn;
756 jit_operation for_check_fn; 769 jit_operation for_check_fn;
757 jit_operation for_index_fn; 770 jit_operation for_index_fn;
758 jit_operation logically_true_fn; 771 jit_operation logically_true_fn;
759 jit_operation make_range_fn; 772 jit_operation make_range_fn;
760 jit_paren_subsref paren_subsref_fn; 773 jit_paren_subsref paren_subsref_fn;
761 jit_paren_subsasgn paren_subsasgn_fn; 774 jit_paren_subsasgn paren_subsasgn_fn;
762 jit_operation end1_fn; 775 jit_operation end1_fn;
763 jit_operation end_fn; 776 jit_operation end_fn;
777 jit_operation create_undef_fn;
764 778
765 jit_function any_call; 779 jit_function any_call;
766 780
767 // type id -> cast function TO that type 781 // type id -> cast function TO that type
768 std::vector<jit_operation> casts; 782 std::vector<jit_operation> casts;