The purpose of the code in this file is to optimize the register usage.
*/
-#include <stdio.h>
-#include "common.h" // Include everything in the SDCC src directory
-#include "newalloc.h"
-#include "ralloc.h"
-#include "device.h"
-#include "pcode.h"
+#include "main.h"
#include "pcoderegs.h"
#include "pcodeflow.h"
-#include "main.h"
+#include "ralloc.h"
-extern void dbg_dumpregusage(void);
-extern pCode * findPrevInstruction(pCode *pci);
-extern pBranch * pBranchAppend(pBranch *h, pBranch *n);
-void unlinkpCode(pCode *pc);
-extern int pCodeSearchCondition(pCode *pc, unsigned int cond, int contIfSkip);
-char *pCode2str(char *str, int size, pCode *pc);
-//static int sameRegs (const regs *reg1, const regs *reg2);
-int total_registers_saved=0;
-int register_optimization=1;
+static int total_registers_saved=0;
+static int register_optimization=1;
/*-----------------------------------------------------------------*
* void AddRegToFlow(regs *reg, pCodeFlow *pcfl)
*-----------------------------------------------------------------*/
/*
-void AddRegToFlow(regs *reg, pCodeFlow *pcfl)
+static void AddRegToFlow(regs *reg, pCodeFlow *pcfl)
{
if(!reg || ! pcfl || !isPCFL(pcflow))
*/
+#if 0
/*-----------------------------------------------------------------*
*
*-----------------------------------------------------------------*/
-void dbg_regusage(set *fregs)
+static void dbg_regusage(set *fregs)
{
regs *reg;
pCode *pcfl;
}
}
}
+#endif
+#if 0
/*-----------------------------------------------------------------*
*
*-----------------------------------------------------------------*/
-void dbg_dumpregusage(void)
+static void dbg_dumpregusage(void)
{
fprintf(stderr,"*** Register Usage ***\n");
dbg_regusage(dynProcessorRegs);
}
-
+#endif
/*-----------------------------------------------------------------*
* void pCodeRegMapLiveRangesInFlow(pCodeFlow *pcfl)
*-----------------------------------------------------------------*/
-void pCodeRegMapLiveRangesInFlow(pCodeFlow *pcfl)
+static void pCodeRegMapLiveRangesInFlow(pCodeFlow *pcfl)
{
pCode *pc=NULL;
* void RemoveRegsFromSet(set *regset)
*
*-----------------------------------------------------------------*/
-void RemoveRegsFromSet(set *regset)
+static void RemoveRegsFromSet(set *regset)
{
regs *reg;
int used;
}
}
-void RegsUnMapLiveRanges(void);
-extern pFile *the_pFile;
-void pic14_ReMapLiveRanges(void)
+static void pic14_ReMapLiveRanges(void)
{
pBlock *pb;
if (!the_pFile) return;
/*-----------------------------------------------------------------*
*
*-----------------------------------------------------------------*/
-int regUsedinRange(pCode *pc1, pCode *pc2, regs *reg)
+static int regUsedinRange(pCode *pc1, pCode *pc2, regs *reg)
{
int i=0;
regs *testreg;
return 0;
}
-int regIsSpecial (regs *reg, int mayBeGlobal)
+static int regIsSpecial (regs *reg, int mayBeGlobal)
{
if (!reg) return 0;
*
*
*-----------------------------------------------------------------*/
-int pCodeOptime2pCodes(pCode *pc1, pCode *pc2, pCode *pcfl_used, regs *reg, int can_free, int optimize_level)
+static int pCodeOptime2pCodes(pCode *pc1, pCode *pc2, pCode *pcfl_used, regs *reg, int can_free, int optimize_level)
{
pCode *pct1, *pct2;
regs *reg1, *reg2;
/*-----------------------------------------------------------------*
* void pCodeRegOptimeRegUsage(pBlock *pb)
*-----------------------------------------------------------------*/
-void OptimizeRegUsage(set *fregs, int optimize_multi_uses, int optimize_level)
+static void OptimizeRegUsage(set *fregs, int optimize_multi_uses, int optimize_level)
{
regs *reg;
int used;
if(pc1 && isPCI(pc1) && ( (pcfl1 = PCI(pc1)->pcflow) != NULL) ) {
- //while(rset2 && searching) {
if(rset2) {
pc2 = rset2->item;
} // while
}
-int regIsDead (regs *reg, int cond, pCode *pc)
+static int regIsDead (regs *reg, int cond, pCode *pc)
{
set *seenStates = NULL;
set *todo = NULL;
which may not be done for SFRs (side-effects on read possible)).
------------------------------------------------------------------ */
-extern void unBuildFlow (pBlock *pb);
-extern void RegsUnMapLiveRanges ();
-extern void BuildFlow (pBlock *pb);
-extern void LinkFlow (pBlock *pb);
-extern void BuildFlowTree (pBlock *pb);
-extern void pCodeRegMapLiveRanges (pBlock *pb);
-extern pFile *the_pFile;
-
static int pCodeRemove (pCode *pc, const char *comment)
{
pCode *pcprev, *pcnext;
Find the first (unique) assignment to `reg' (prior to pc).
------------------------------------------------------------------ */
-pCode *findAssignmentToReg (regs *reg, pCode *pc)
+static pCode *findAssignmentToReg (regs *reg, pCode *pc)
{
pCode *curr;
Find a register that holds the same value as `reg' (an alias).
------------------------------------------------------------------ */
-regs *findRegisterAlias (regs *reg, pCode *pc)
+static regs *findRegisterAlias (regs *reg, pCode *pc)
{
pCode *curr;
it with a better variant if possible.
------------------------------------------------------------------ */
-void analyzeAndReplacePCI (pCodeInstruction *pci)
+static void analyzeAndReplacePCI (pCodeInstruction *pci)
{
regs *op_reg, *alias_reg;
} // switch
}
-extern pFile *the_pFile;
-
/* ------------------------------------------------------------------
Find and remove dead pCodes.
------------------------------------------------------------------ */
not used) -- these should be removed in a following sweep phase.
------------------------------------------------------------------ */
-void optimizeDataflow (void)
+static void optimizeDataflow (void)
{
pBlock *pb;
* void RegsUnMapLiveRanges(set *regset)
*
*-----------------------------------------------------------------*/
-void RegsSetUnMapLiveRanges(set *regset)
+static void RegsSetUnMapLiveRanges(set *regset)
{
regs *reg;