mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
Implement IR return instructions
This commit is contained in:
parent
3359e58eac
commit
9578c87ce2
4 changed files with 62 additions and 0 deletions
45
ir.h
45
ir.h
|
|
@ -323,6 +323,51 @@ private:
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* \name Jump-like IR instructions.
|
||||
*
|
||||
* These include \c break, \c continue, \c return, and \c discard.
|
||||
*/
|
||||
/*@{*/
|
||||
class ir_jump : public ir_instruction {
|
||||
protected:
|
||||
ir_jump()
|
||||
: ir_instruction(ir_op_jump)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
};
|
||||
|
||||
class ir_return : public ir_jump {
|
||||
public:
|
||||
ir_return()
|
||||
: value(NULL)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
|
||||
ir_return(ir_expression *value)
|
||||
: value(value)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
|
||||
ir_expression *get_value() const
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
virtual void accept(ir_visitor *v)
|
||||
{
|
||||
v->visit(this);
|
||||
}
|
||||
|
||||
private:
|
||||
ir_expression *value;
|
||||
};
|
||||
/*@}*/
|
||||
|
||||
|
||||
struct ir_swizzle_mask {
|
||||
unsigned x:2;
|
||||
unsigned y:2;
|
||||
|
|
|
|||
|
|
@ -142,3 +142,18 @@ ir_print_visitor::visit(ir_call *ir)
|
|||
printf("(call FINISHME: function name here\n");
|
||||
printf(" (FINISHME: function paramaters here))\n");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ir_print_visitor::visit(ir_return *ir)
|
||||
{
|
||||
printf("(return");
|
||||
|
||||
ir_expression *const value = ir->get_value();
|
||||
if (value) {
|
||||
printf(" ");
|
||||
value->accept(this);
|
||||
}
|
||||
|
||||
printf(")\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ public:
|
|||
virtual void visit(ir_assignment *);
|
||||
virtual void visit(ir_constant *);
|
||||
virtual void visit(ir_call *);
|
||||
virtual void visit(ir_return *);
|
||||
/*@}*/
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ public:
|
|||
virtual void visit(class ir_assignment *) = 0;
|
||||
virtual void visit(class ir_constant *) = 0;
|
||||
virtual void visit(class ir_call *) = 0;
|
||||
virtual void visit(class ir_return *) = 0;
|
||||
/*@}*/
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue