Parcourir la source

Costant folding for math array allocation (optimization)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6881 8c9fc860-2736-0410-a75d-ab315db34111
felixf il y a 8 ans
Parent
commit
0dd24a6b79
1 fichiers modifiés avec 9 ajouts et 9 suppressions
  1. 9 9
      source/FoxIntermediateBackend.Mod

+ 9 - 9
source/FoxIntermediateBackend.Mod

@@ -8244,9 +8244,9 @@ TYPE
 							END;
 							Emit(Push(position,r.op));
 							IF i=1 THEN
-								ReuseCopy(reg,r.op);
+								CopyInt(reg, r.op);
 							ELSE
-								Emit(Mul(position,reg,reg,r.op)); (*! optimize the multiplication of immediate operands *)
+								MulInt(reg, reg, r.op);
 							END;
 							ReleaseOperand(r);
 							INC(dim);
@@ -8266,7 +8266,7 @@ TYPE
 									t := t(SyntaxTree.MathArrayType).arrayBase.resolved;
 								END;
 								tmp := IntermediateCode.Immediate(reg.type,staticLength);
-								Emit(Mul(position,reg,reg,tmp));
+								MulInt(reg,reg,tmp);
 							END;
 							Designate(p0,l);
 							IF isTensor THEN
@@ -8295,7 +8295,7 @@ TYPE
 							Emit(Pop(position,adr));
 							GetMathArrayField(tmp,adr,MathPtrOffset);
 							IntermediateCode.InitRegister(reg,addressType,IntermediateCode.GeneralPurposeRegister,AcquireRegister(addressType,IntermediateCode.GeneralPurposeRegister));
-							Emit(Add(position,reg,tmp,IntermediateCode.Immediate(addressType,ToMemoryUnits(system,ArrDataArrayOffset))));
+							AddInt(reg, tmp, IntermediateCode.Immediate(addressType,ToMemoryUnits(system,ArrDataArrayOffset)));
 							PutMathArrayField(adr,reg,MathAdrOffset);
 							ReleaseIntermediateOperand(tmp);
 							ReleaseIntermediateOperand(reg);
@@ -8306,10 +8306,10 @@ TYPE
 								size := ToMemoryUnits(system,system.AlignedSizeOf(SemanticChecker.ArrayBase(type,openDim)));
 							END;
 							IF (size # 1) THEN
-								Emit(Mul(position,reg,reg,IntermediateCode.Immediate(addressType,size))); (*! optimize the multiplication of immediate operands *)
+								MulInt(reg,reg,IntermediateCode.Immediate(addressType,size)); (*! optimize the multiplication of immediate operands *)
 							END;
 							tmp := IntermediateCode.Immediate(addressType,ToMemoryUnits(system,SysDataArrayOffset));
-							Emit(Add(position,reg,reg,tmp));
+							AddInt(reg,reg,tmp);
 
 							Designate(p0,l);
 							IF isTensor THEN
@@ -8328,7 +8328,7 @@ TYPE
 							Emit(Pop(position,adr));
 							GetMathArrayField(tmp,adr,MathPtrOffset);
 							IntermediateCode.InitRegister(reg,addressType,IntermediateCode.GeneralPurposeRegister,AcquireRegister(addressType,IntermediateCode.GeneralPurposeRegister));
-							Emit(Add(position,reg,tmp,IntermediateCode.Immediate(addressType,ToMemoryUnits(system,SysDataArrayOffset))));
+							AddInt(reg,tmp,IntermediateCode.Immediate(addressType,ToMemoryUnits(system,SysDataArrayOffset)));
 							PutMathArrayField(adr,reg,MathAdrOffset);
 							ReleaseIntermediateOperand(tmp);
 							ReleaseIntermediateOperand(reg);
@@ -8358,9 +8358,9 @@ TYPE
 							PutMathArrayIncrement(adr,tmp,i);
 							IF i > 0 THEN
 								IF i=openDim-1 THEN
-									ReuseCopy(tmp,tmp);
+									CopyInt(tmp,tmp);
 								END;
-								Emit(Mul(position,tmp,tmp,reg));
+								MulInt(tmp,tmp,reg);
 							END;
 							DEC(i);
 						END;