ir_function_inlining: Allow inlining of loops and conditionals.
The new cloning code handles them.
This commit is contained in:
committed by
Ian Romanick
parent
4b6fd39c89
commit
8006576b36
@@ -39,28 +39,14 @@ class ir_function_can_inline_visitor : public ir_hierarchical_visitor {
|
||||
public:
|
||||
ir_function_can_inline_visitor()
|
||||
{
|
||||
this->can_inline = true;
|
||||
this->num_returns = 0;
|
||||
}
|
||||
|
||||
virtual ir_visitor_status visit_enter(ir_loop *);
|
||||
virtual ir_visitor_status visit_enter(ir_return *);
|
||||
virtual ir_visitor_status visit_enter(ir_if *);
|
||||
|
||||
bool can_inline;
|
||||
int num_returns;
|
||||
};
|
||||
|
||||
ir_visitor_status
|
||||
ir_function_can_inline_visitor::visit_enter(ir_loop *ir)
|
||||
{
|
||||
/* FINISHME: Implement loop cloning in ir_function_inlining.cpp */
|
||||
(void) ir;
|
||||
this->can_inline = false;
|
||||
return visit_stop;
|
||||
}
|
||||
|
||||
|
||||
ir_visitor_status
|
||||
ir_function_can_inline_visitor::visit_enter(ir_return *ir)
|
||||
{
|
||||
@@ -69,16 +55,6 @@ ir_function_can_inline_visitor::visit_enter(ir_return *ir)
|
||||
return visit_continue;
|
||||
}
|
||||
|
||||
|
||||
ir_visitor_status
|
||||
ir_function_can_inline_visitor::visit_enter(ir_if *ir)
|
||||
{
|
||||
/* FINISHME: Implement if cloning in ir_function_inlining.cpp. */
|
||||
(void) ir;
|
||||
this->can_inline = false;
|
||||
return visit_stop;
|
||||
}
|
||||
|
||||
bool
|
||||
can_inline(ir_call *call)
|
||||
{
|
||||
@@ -91,5 +67,5 @@ can_inline(ir_call *call)
|
||||
if (last && !last->as_return())
|
||||
v.num_returns++;
|
||||
|
||||
return v.can_inline && v.num_returns == 1;
|
||||
return v.num_returns == 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user