|  |  | @@ -266,6 +266,29 @@ ra_add_transitive_reg_conflict(struct ra_regs *regs, | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Makes every conflict on the given register transitive.  In other words, | 
		
	
		
			
			|  |  |  | * every register that conflicts with r will now conflict with every other | 
		
	
		
			
			|  |  |  | * register conflicting with r. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * This can simplify code for setting up multiple register classes | 
		
	
		
			
			|  |  |  | * which are aggregates of some base hardware registers, compared to | 
		
	
		
			
			|  |  |  | * explicitly using ra_add_reg_conflict. | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | void | 
		
	
		
			
			|  |  |  | ra_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int r) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | struct ra_reg *reg = ®s->regs[r]; | 
		
	
		
			
			|  |  |  | BITSET_WORD tmp; | 
		
	
		
			
			|  |  |  | int c; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | BITSET_FOREACH_SET(c, tmp, reg->conflicts, regs->count) { | 
		
	
		
			
			|  |  |  | struct ra_reg *other = ®s->regs[c]; | 
		
	
		
			
			|  |  |  | for (unsigned i = 0; i < BITSET_WORDS(regs->count); i++) | 
		
	
		
			
			|  |  |  | other->conflicts[i] |= reg->conflicts[i]; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | unsigned int | 
		
	
		
			
			|  |  |  | ra_alloc_reg_class(struct ra_regs *regs) | 
		
	
		
			
			|  |  |  | { |