Don't allow the same IR to be added to the sequence list more than once
(sometimes happens because op_dup, but makes no sense).
This commit is contained in:
		
							parent
							
								
									96dffd2007
								
							
						
					
					
						commit
						df239b3f90
					
				
					 1 changed files with 15 additions and 1 deletions
				
			
		|  | @ -75,7 +75,7 @@ static struct ir* appendir(struct ir* ir) | ||||||
|     int i; |     int i; | ||||||
| 
 | 
 | ||||||
|     assert(current_bb != NULL); |     assert(current_bb != NULL); | ||||||
|     array_append(¤t_bb->irs, ir); |     array_appendu(¤t_bb->irs, ir); | ||||||
| 
 | 
 | ||||||
|     ir_print('0', ir); |     ir_print('0', ir); | ||||||
|     return ir; |     return ir; | ||||||
|  | @ -196,6 +196,7 @@ static void insn_simple(int opcode) | ||||||
|              |              | ||||||
|         case op_cii: simple_convert(IR_CII1); break; |         case op_cii: simple_convert(IR_CII1); break; | ||||||
|         case op_ciu: simple_convert(IR_CIU1); break; |         case op_ciu: simple_convert(IR_CIU1); break; | ||||||
|  |         case op_cui: simple_convert(IR_CUI1); break; | ||||||
| 
 | 
 | ||||||
|         case op_cmp: |         case op_cmp: | ||||||
|             push( |             push( | ||||||
|  | @ -406,6 +407,9 @@ static void insn_ivalue(int opcode, arith value) | ||||||
|         case op_sru: simple_alu2(opcode, value, IR_LSR); break; |         case op_sru: simple_alu2(opcode, value, IR_LSR); break; | ||||||
|         case op_ngi: simple_alu1(opcode, value, IR_NEG); break; |         case op_ngi: simple_alu1(opcode, value, IR_NEG); break; | ||||||
| 
 | 
 | ||||||
|  |         case op_adu: simple_alu2(opcode, value, IR_ADD); break; | ||||||
|  |         case op_sbu: simple_alu2(opcode, value, IR_SUB); break; | ||||||
|  | 
 | ||||||
|         case op_and: simple_alu2(opcode, value, IR_AND); break; |         case op_and: simple_alu2(opcode, value, IR_AND); break; | ||||||
|         case op_ior: simple_alu2(opcode, value, IR_OR); break; |         case op_ior: simple_alu2(opcode, value, IR_OR); break; | ||||||
|         case op_xor: simple_alu2(opcode, value, IR_EOR); break; |         case op_xor: simple_alu2(opcode, value, IR_EOR); break; | ||||||
|  | @ -712,6 +716,16 @@ static void insn_lvalue(int opcode, const char* label, arith offset) | ||||||
|             ); |             ); | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|  |         case op_zre: | ||||||
|  |             appendir( | ||||||
|  |                 new_ir2( | ||||||
|  |                     IR_STORE, EM_wordsize, | ||||||
|  |                     address_of_external(label, offset), | ||||||
|  |                     new_wordir(0) | ||||||
|  |                 ) | ||||||
|  |             ); | ||||||
|  |             break; | ||||||
|  |                  | ||||||
|         case op_cal: |         case op_cal: | ||||||
|             assert(offset == 0); |             assert(offset == 0); | ||||||
|             materialise_stack(); |             materialise_stack(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue