MWCC/includes/compiler/IroUnrollLoop.h

24 lines
1.5 KiB
C

#ifndef COMPILER_IROUNROLLLOOP_H
#define COMPILER_IROUNROLLLOOP_H
#include "compiler/IrOptimizer.h"
#include "compiler/IroLinearForm.h"
extern void IRO_LoopUnroller(void);
extern void IRO_IterateForLoopBody(IRONode *start, IRONode *end, IROLoop *loop, IROLinear *destnode, SInt32 addConst, CInt64 *val, Boolean funkyFlag);
extern void IRO_LinearizeForLoopPostLoop(IRONode *fnode1, IRONode *fnode2, IROLoop *loop, IRONode *fnode3, UInt32 unrollFactor);
extern IROLinear *BuildEarlyLoopExitTest(IROLinearType type, IROList *list);
extern IROLinear *BuildLoopExitTest(IROLinearType type, IROList *list);
extern int IsIterationCountConstant(IROLoop *loop, CInt64 *pval);
extern void NoOpBlock(IRONode *fnode);
extern void IRO_TestConstantIterationCount(IROLoop *loop, CInt64 *iterCount, SInt32 vectorStride, UInt32 *unrollFactor, SInt32 *leftOver, UInt32 *needOrigLoop, UInt32 *needUnrollBodyTest, UInt32 *resetUnrolledFinalValue);
extern IROLinear *BuildOrigIterationCount(IROList *list, IROLoop *loop);
extern IROLinear *BuildNewFinalvalue(IROLinear *iterCount, UInt32 unrollFactor, IROList *list, IROLoop *loop);
extern void BuildUnrolledBodyEntryTest(IROList *list, IROLinear *iterCount, UInt32 unrollFactor, CLabel *label);
extern void ChangeInductionReference(IROLinear *first, IROLinear *last, CInt64 val, IROLoop *loop);
extern IROLinear *UpdateInductionIncrement(IROLoop *loop, SInt32 value, IROLinear *before);
extern void GenInitialAssignment(IROLoop *loop, Object *var, IROList *list);
extern void GenNewInduction(void);
#endif