glsl2: Add cmp field to ir_loop
This reprents the type of comparison between the loop induction variable and the loop termination value.
This commit is contained in:
@@ -701,6 +701,18 @@ ir_constant::has_value(const ir_constant *c) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ir_loop::ir_loop()
|
||||||
|
{
|
||||||
|
this->ir_type = ir_type_loop;
|
||||||
|
this->cmp = ir_unop_neg;
|
||||||
|
this->from = NULL;
|
||||||
|
this->to = NULL;
|
||||||
|
this->increment = NULL;
|
||||||
|
this->counter = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ir_dereference_variable::ir_dereference_variable(ir_variable *var)
|
ir_dereference_variable::ir_dereference_variable(ir_variable *var)
|
||||||
{
|
{
|
||||||
this->ir_type = ir_type_dereference_variable;
|
this->ir_type = ir_type_dereference_variable;
|
||||||
|
@@ -461,10 +461,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
class ir_loop : public ir_instruction {
|
class ir_loop : public ir_instruction {
|
||||||
public:
|
public:
|
||||||
ir_loop() : from(NULL), to(NULL), increment(NULL), counter(NULL)
|
ir_loop();
|
||||||
{
|
|
||||||
ir_type = ir_type_loop;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
|
virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const;
|
||||||
|
|
||||||
@@ -493,12 +490,30 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Loop counter and controls
|
* \name Loop counter and controls
|
||||||
|
*
|
||||||
|
* Represents a loop like a FORTRAN \c do-loop.
|
||||||
|
*
|
||||||
|
* \note
|
||||||
|
* If \c from and \c to are the same value, the loop will execute once.
|
||||||
*/
|
*/
|
||||||
/*@{*/
|
/*@{*/
|
||||||
ir_rvalue *from;
|
ir_rvalue *from; /** Value of the loop counter on the first
|
||||||
ir_rvalue *to;
|
* iteration of the loop.
|
||||||
|
*/
|
||||||
|
ir_rvalue *to; /** Value of the loop counter on the last
|
||||||
|
* iteration of the loop.
|
||||||
|
*/
|
||||||
ir_rvalue *increment;
|
ir_rvalue *increment;
|
||||||
ir_variable *counter;
|
ir_variable *counter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison operation in the loop terminator.
|
||||||
|
*
|
||||||
|
* If any of the loop control fields are non-\c NULL, this field must be
|
||||||
|
* one of \c ir_binop_less, \c ir_binop_greater, \c ir_binop_lequal,
|
||||||
|
* \c ir_binop_gequal, \c ir_binop_equal, or \c ir_binop_nequal.
|
||||||
|
*/
|
||||||
|
int cmp;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -134,6 +134,7 @@ ir_loop::clone(void *mem_ctx, struct hash_table *ht) const
|
|||||||
new_loop->body_instructions.push_tail(ir->clone(mem_ctx, ht));
|
new_loop->body_instructions.push_tail(ir->clone(mem_ctx, ht));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_loop->cmp = this->cmp;
|
||||||
return new_loop;
|
return new_loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user