ppir_op_load_temp,
ppir_op_store_temp,
- ppir_op_store_color,
ppir_op_const,
ppir_op_branch,
ppir_op_undef,
+ ppir_op_dummy,
ppir_op_num,
} ppir_op;
struct ppir_instr *instr;
int instr_pos;
struct ppir_block *block;
+ bool is_end;
/* for scheduler */
struct list_head succ_list;
/* for liveness analysis */
struct ppir_liveness *live_in;
struct ppir_liveness *live_out;
+ /* live_internal is to mark registers only live within an
+ * instruction, without propagation */
+ struct ppir_liveness *live_internal;
struct set *live_in_set;
struct set *live_out_set;
+ struct set *live_internal_set;
} ppir_instr;
typedef struct ppir_block {
struct ra_regs *ra;
struct lima_fs_shader_state *prog;
+ bool uses_discard;
/* for scheduler */
int sched_instr_base;
void ppir_node_replace_child(ppir_node *parent, ppir_node *old_child, ppir_node *new_child);
void ppir_node_replace_all_succ(ppir_node *dst, ppir_node *src);
void ppir_node_replace_pred(ppir_dep *dep, ppir_node *new_pred);
-void ppir_delete_if_orphan(ppir_block *block, ppir_node *node);
ppir_dep *ppir_dep_for_pred(ppir_node *node, ppir_node *pred);
-ppir_node *ppir_node_clone(ppir_block *block, ppir_node *node);
/* Assumes that node successors are in the same block */
ppir_node *ppir_node_insert_mov(ppir_node *node);
+ppir_node *ppir_node_insert_mov_all_blocks(ppir_node *node);
static inline bool ppir_node_is_root(ppir_node *node)
{
}
}
-static inline int ppir_src_get_mask(ppir_node *node)
-{
- ppir_dest *dest = ppir_node_get_dest(node);
- if (dest)
- return dest->write_mask;
-
- return 0x01;
-}
-
static inline int ppir_node_get_src_num(ppir_node *node)
{
switch (node->type) {
}
}
-static inline ppir_src *ppir_node_get_src_for_pred(ppir_node *node, ppir_node *pred)
-{
- for (int i = 0; i < ppir_node_get_src_num(node); i++) {
- ppir_src *src = ppir_node_get_src(node, i);
- if (src && src->node == pred)
- return src;
- }
-
- return NULL;
-}
-
static inline void ppir_node_target_assign(ppir_src *src, ppir_node *node)
{
ppir_dest *dest = ppir_node_get_dest(node);
return -1;
}
+static inline int ppir_src_get_mask(ppir_src *src)
+{
+ ppir_reg *reg = ppir_src_get_reg(src);
+ int mask = 0;
+
+ for (int i = 0; i < reg->num_components; i++)
+ mask |= (1 << src->swizzle[i]);
+
+ return mask;
+}
+
static inline bool ppir_target_is_scaler(ppir_dest *dest)
{
switch (dest->type) {