Home | History | Annotate | Download | only in program

Lines Matching refs:regs

90    struct ra_reg *regs;
98 GLboolean *regs;
103 * This is "how many regs are in the set."
146 struct ra_regs *regs;
167 struct ra_regs *regs;
169 regs = rzalloc(mem_ctx, struct ra_regs);
170 regs->count = count;
171 regs->regs = rzalloc_array(regs, struct ra_reg, count);
174 regs->regs[i].conflicts = rzalloc_array(regs->regs, GLboolean, count);
175 regs->regs[i].conflicts[i] = GL_TRUE;
177 regs->regs[i].conflict_list = ralloc_array(regs->regs, unsigned int, 4);
178 regs->regs[i].conflict_list_size = 4;
179 regs->regs[i].conflict_list[0] = i;
180 regs->regs[i].num_conflicts = 1;
183 return regs;
187 ra_add_conflict_list(struct ra_regs *regs, unsigned int r1, unsigned int r2)
189 struct ra_reg *reg1 = &regs->regs[r1];
193 reg1->conflict_list = reralloc(regs->regs, reg1->conflict_list,
201 ra_add_reg_conflict(struct ra_regs *regs, unsigned int r1, unsigned int r2)
203 if (!regs->regs[r1].conflicts[r2]) {
204 ra_add_conflict_list(regs, r1, r2);
205 ra_add_conflict_list(regs, r2, r1);
218 ra_add_transitive_reg_conflict(struct ra_regs *regs,
223 ra_add_reg_conflict(regs, reg, base_reg);
225 for (i = 0; i < regs->regs[base_reg].num_conflicts; i++) {
226 ra_add_reg_conflict(regs, reg, regs->regs[base_reg].conflict_list[i]);
231 ra_alloc_reg_class(struct ra_regs *regs)
235 regs->classes = reralloc(regs->regs, regs->classes, struct ra_class *,
236 regs->class_count + 1);
238 class = rzalloc(regs, struct ra_class);
239 regs->classes[regs->class_count] = class;
241 class->regs = rzalloc_array(class, GLboolean, regs->count);
243 return regs->class_count++;
247 ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int r)
249 struct ra_class *class = regs->classes[c];
251 class->regs[r] = GL_TRUE;
260 ra_set_finalize(struct ra_regs *regs)
264 for (b = 0; b < regs->class_count; b++) {
265 regs->classes[b]->q = ralloc_array(regs, unsigned int, regs->class_count);
268 /* Compute, for each class B and C, how many regs of B an
271 for (b = 0; b < regs->class_count; b++) {
272 for (c = 0; c < regs->class_count; c++) {
276 for (rc = 0; rc < regs->count; rc++) {
280 if (!regs->classes[c]->regs[rc])
283 for (i = 0; i < regs->regs[rc].num_conflicts; i++) {
284 unsigned int rb = regs->regs[rc].conflict_list[i];
285 if (regs->classes[b]->regs[rb])
290 regs->classes[b]->q[c] = max_conflicts;
304 ra_alloc_interference_graph(struct ra_regs *regs, unsigned int count)
309 g = rzalloc(regs, struct ra_graph);
310 g->regs = regs;
355 q += g->regs->classes[n_class]->q[n2_class];
359 return q < g->regs->classes[n_class]->p;
416 struct ra_class *c = g->regs->classes[g->nodes[n].class];
421 for (r = 0; r < g->regs->count; r++) {
422 if (!c->regs[r])
430 g->regs->regs[r].conflicts[g->nodes[n2].reg]) {
437 if (r == g->regs->count)
519 benefit += ((float)g->regs->classes[n_class]->q[n2_class] /
520 g->regs->classes[n_class]->p);