ir_function_inlining: Implement inlining in many more cases.
We still don't inline for control flow in the inlined function, and we
don't have any limits on what we will inline.
diff --git a/ir_function_inlining.cpp b/ir_function_inlining.cpp
index 025124a..ba556a8 100644
--- a/ir_function_inlining.cpp
+++ b/ir_function_inlining.cpp
@@ -122,6 +122,9 @@
void
ir_function_cloning_visitor::visit(ir_loop *ir)
{
+ /* FINISHME: Implement loop cloning. */
+ assert(0);
+
(void)ir;
this->result = NULL;
}
@@ -129,6 +132,9 @@
void
ir_function_cloning_visitor::visit(ir_loop_jump *ir)
{
+ /* FINISHME: Implement loop cloning. */
+ assert(0);
+
(void) ir;
this->result = NULL;
}
@@ -137,6 +143,7 @@
void
ir_function_cloning_visitor::visit(ir_function_signature *ir)
{
+ assert(0);
(void)ir;
this->result = NULL;
}
@@ -145,6 +152,7 @@
void
ir_function_cloning_visitor::visit(ir_function *ir)
{
+ assert(0);
(void) ir;
this->result = NULL;
}
@@ -274,32 +282,14 @@
void
ir_function_cloning_visitor::visit(ir_if *ir)
{
+ /* FINISHME: Implement if cloning. */
+ assert(0);
+
(void) ir;
result = NULL;
}
bool
-can_inline(ir_call *call)
-{
- bool found_return = false;
-
- /* FINISHME: Right now we only allow a single statement that is a return.
- */
- foreach_iter(exec_list_iterator, iter, call->get_callee()->body) {
- ir_instruction *ir = (ir_instruction *)iter.get();
- if (ir->get_next()->get_next() != NULL)
- return false;
-
- if (!ir->as_return())
- return false;
-
- found_return = true;
- }
-
- return found_return;
-}
-
-bool
automatic_inlining_predicate(ir_instruction *ir)
{
ir_call *call = ir->as_call();