summaryrefslogtreecommitdiff
path: root/includes/compiler/IroUnrollLoop.h
blob: 8a51a9b8936ab43a2339d67cc617cf47e4d7cb2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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