Patch from Jim Hawkridge that prevents stack registers from being optimized away.
[fw/sdcc] / src / pic / pcoderegs.c
index 955baae58aed70f68e4823f496eebf9677d907b9..633e8df50fde076d9c402afc99e5171818bb7499 100644 (file)
@@ -282,7 +282,7 @@ static void Remove1pcode(pCode *pc, regs *reg, int debug_code)
     SAFE_snprintf(ppbuff,&size, ";%d", debug_code);
     pCode2str(*ppbuff, size, pc);
     pCodeInsertBefore(pc, newpCodeCharP(buff1));
-    fprintf(stderr,"removing instruction:\n%s\n",buff1);
+    //fprintf(stderr,"removing instruction:\n%s\n",buff1);
   }
 
   pc->destruct(pc);
@@ -317,7 +317,7 @@ void  RemoveRegsFromSet(set *regset)
 
        pc = setFirstItem(reg->reglives.usedpCodes);
 
-       if(reg->type == REG_SFR) {
+       if(reg->type == REG_SFR || reg->type == REG_STK) {
          //fprintf(stderr, "not removing SFR reg %s even though used only once\n",reg->name);
          continue;
        }
@@ -344,7 +344,7 @@ void  RemoveRegsFromSet(set *regset)
            pc->print(stderr,pc);
            fprintf(stderr,"reg %s, type =%d\n",r->name, r->type);
          }
-         fprintf(stderr," removing reg %s because it is used only once\n",reg->name);
+         //fprintf(stderr," removing reg %s because it is used only once\n",reg->name);
          Remove1pcode(pc, reg, 1);
          /*
            unlinkpCode(pc);
@@ -389,7 +389,7 @@ static void Remove2pcodes(pCode *pcflow, pCode *pc1, pCode *pc2, regs *reg, int
   if(!reg)
     return;
 
-  fprintf(stderr,"%s\n",__FUNCTION__);
+  //fprintf(stderr,"%s\n",__FUNCTION__);
   if(pc1)
     Remove1pcode(pc1, reg, debug_code++);
 
@@ -660,7 +660,7 @@ void OptimizeRegUsage(set *fregs, int optimize_multi_uses, int optimize_level)
     reg = fregs->item;
     fregs = fregs->next;
 
-    if(reg->type == REG_SFR) {
+    if(reg->type == REG_SFR || reg->type == REG_STK) {
       //fprintf(stderr,"skipping SFR: %s\n",reg->name);
       continue;
     }