Commit c8b67a48 by Nicolas Capens

Abstract llvm::BasicBlock usage.

Bug swiftshader:10 Change-Id: Ib45d459aa4f68e572b1deaa03e0aaf83002b7881 Reviewed-on: https://swiftshader-review.googlesource.com/7275Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent ac230129
...@@ -75,9 +75,8 @@ namespace sw ...@@ -75,9 +75,8 @@ namespace sw
Optimization optimization[10] = {InstructionCombining, Disabled}; Optimization optimization[10] = {InstructionCombining, Disabled};
class Type : public llvm::Type class Type : public llvm::Type {};
{ class BasicBlock : public llvm::BasicBlock {};
};
inline Type *T(llvm::Type *t) inline Type *T(llvm::Type *t)
{ {
...@@ -89,6 +88,11 @@ namespace sw ...@@ -89,6 +88,11 @@ namespace sw
return reinterpret_cast<std::vector<llvm::Type*>&>(t); return reinterpret_cast<std::vector<llvm::Type*>&>(t);
} }
inline BasicBlock *B(llvm::BasicBlock *t)
{
return reinterpret_cast<BasicBlock*>(t);
}
Nucleus::Nucleus() Nucleus::Nucleus()
{ {
codegenMutex.lock(); // Reactor and LLVM are currently not thread safe codegenMutex.lock(); // Reactor and LLVM are currently not thread safe
...@@ -240,7 +244,7 @@ namespace sw ...@@ -240,7 +244,7 @@ namespace sw
Value *Nucleus::allocateStackVariable(Type *type, int arraySize) Value *Nucleus::allocateStackVariable(Type *type, int arraySize)
{ {
// Need to allocate it in the entry block for mem2reg to work // Need to allocate it in the entry block for mem2reg to work
BasicBlock &entryBlock = ::function->getEntryBlock(); llvm::BasicBlock &entryBlock = ::function->getEntryBlock();
Instruction *declaration; Instruction *declaration;
...@@ -260,12 +264,12 @@ namespace sw ...@@ -260,12 +264,12 @@ namespace sw
BasicBlock *Nucleus::createBasicBlock() BasicBlock *Nucleus::createBasicBlock()
{ {
return BasicBlock::Create(*::context, "", ::function); return B(BasicBlock::Create(*::context, "", ::function));
} }
BasicBlock *Nucleus::getInsertBlock() BasicBlock *Nucleus::getInsertBlock()
{ {
return ::builder->GetInsertBlock(); return B(::builder->GetInsertBlock());
} }
void Nucleus::setInsertBlock(BasicBlock *basicBlock) void Nucleus::setInsertBlock(BasicBlock *basicBlock)
...@@ -276,7 +280,7 @@ namespace sw ...@@ -276,7 +280,7 @@ namespace sw
BasicBlock *Nucleus::getPredecessor(BasicBlock *basicBlock) BasicBlock *Nucleus::getPredecessor(BasicBlock *basicBlock)
{ {
return *pred_begin(basicBlock); return B(*pred_begin(basicBlock));
} }
void Nucleus::createFunction(Type *ReturnType, std::vector<Type*> &Params) void Nucleus::createFunction(Type *ReturnType, std::vector<Type*> &Params)
...@@ -680,12 +684,12 @@ namespace sw ...@@ -680,12 +684,12 @@ namespace sw
return ::builder->CreateSelect(C, ifTrue, ifFalse); return ::builder->CreateSelect(C, ifTrue, ifFalse);
} }
Value *Nucleus::createSwitch(llvm::Value *V, llvm::BasicBlock *Dest, unsigned NumCases) Value *Nucleus::createSwitch(llvm::Value *V, BasicBlock *Dest, unsigned NumCases)
{ {
return ::builder->CreateSwitch(V, Dest, NumCases); return ::builder->CreateSwitch(V, Dest, NumCases);
} }
void Nucleus::addSwitchCase(llvm::Value *Switch, int Case, llvm::BasicBlock *Branch) void Nucleus::addSwitchCase(llvm::Value *Switch, int Case, BasicBlock *Branch)
{ {
static_cast<SwitchInst*>(Switch)->addCase(llvm::ConstantInt::get(Type::getInt32Ty(*::context), Case, true), Branch); static_cast<SwitchInst*>(Switch)->addCase(llvm::ConstantInt::get(Type::getInt32Ty(*::context), Case, true), Branch);
} }
......
...@@ -32,12 +32,12 @@ namespace llvm ...@@ -32,12 +32,12 @@ namespace llvm
{ {
class Value; class Value;
class Constant; class Constant;
class BasicBlock;
} }
namespace sw namespace sw
{ {
class Type; class Type;
class BasicBlock;
enum Optimization enum Optimization
{ {
...@@ -71,10 +71,10 @@ namespace sw ...@@ -71,10 +71,10 @@ namespace sw
Routine *acquireRoutine(const wchar_t *name, bool runOptimizations = true); Routine *acquireRoutine(const wchar_t *name, bool runOptimizations = true);
static llvm::Value *allocateStackVariable(Type *type, int arraySize = 0); static llvm::Value *allocateStackVariable(Type *type, int arraySize = 0);
static llvm::BasicBlock *createBasicBlock(); static BasicBlock *createBasicBlock();
static llvm::BasicBlock *getInsertBlock(); static BasicBlock *getInsertBlock();
static void setInsertBlock(llvm::BasicBlock *basicBlock); static void setInsertBlock(BasicBlock *basicBlock);
static llvm::BasicBlock *getPredecessor(llvm::BasicBlock *basicBlock); static BasicBlock *getPredecessor(BasicBlock *basicBlock);
static void createFunction(Type *ReturnType, std::vector<Type*> &Params); static void createFunction(Type *ReturnType, std::vector<Type*> &Params);
static llvm::Value *getArgument(unsigned int index); static llvm::Value *getArgument(unsigned int index);
...@@ -82,8 +82,8 @@ namespace sw ...@@ -82,8 +82,8 @@ namespace sw
// Terminators // Terminators
static llvm::Value *createRetVoid(); static llvm::Value *createRetVoid();
static llvm::Value *createRet(llvm::Value *V); static llvm::Value *createRet(llvm::Value *V);
static llvm::Value *createBr(llvm::BasicBlock *dest); static llvm::Value *createBr(BasicBlock *dest);
static llvm::Value *createCondBr(llvm::Value *cond, llvm::BasicBlock *ifTrue, llvm::BasicBlock *ifFalse); static llvm::Value *createCondBr(llvm::Value *cond, BasicBlock *ifTrue, BasicBlock *ifFalse);
// Binary operators // Binary operators
static llvm::Value *createAdd(llvm::Value *lhs, llvm::Value *rhs); static llvm::Value *createAdd(llvm::Value *lhs, llvm::Value *rhs);
...@@ -171,8 +171,8 @@ namespace sw ...@@ -171,8 +171,8 @@ namespace sw
// Other instructions // Other instructions
static llvm::Value *createSelect(llvm::Value *C, llvm::Value *ifTrue, llvm::Value *ifFalse); static llvm::Value *createSelect(llvm::Value *C, llvm::Value *ifTrue, llvm::Value *ifFalse);
static llvm::Value *createSwitch(llvm::Value *V, llvm::BasicBlock *Dest, unsigned NumCases); static llvm::Value *createSwitch(llvm::Value *V, BasicBlock *Dest, unsigned NumCases);
static void addSwitchCase(llvm::Value *Switch, int Case, llvm::BasicBlock *Branch); static void addSwitchCase(llvm::Value *Switch, int Case, BasicBlock *Branch);
static llvm::Value *createUnreachable(); static llvm::Value *createUnreachable();
// Derived instructions // Derived instructions
...@@ -2451,9 +2451,9 @@ namespace sw ...@@ -2451,9 +2451,9 @@ namespace sw
// RValue<Array<T>> operator--(const Array<T> &val, int); // Post-decrement // RValue<Array<T>> operator--(const Array<T> &val, int); // Post-decrement
// const Array<T> &operator--(const Array<T> &val); // Pre-decrement // const Array<T> &operator--(const Array<T> &val); // Pre-decrement
llvm::BasicBlock *beginLoop(); BasicBlock *beginLoop();
bool branch(RValue<Bool> cmp, llvm::BasicBlock *bodyBB, llvm::BasicBlock *endBB); bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB);
bool elseBlock(llvm::BasicBlock *falseBB); bool elseBlock(BasicBlock *falseBB);
void Return(); void Return();
void Return(bool ret); void Return(bool ret);
......
...@@ -19,7 +19,7 @@ namespace sw ...@@ -19,7 +19,7 @@ namespace sw
{ {
#define For(init, cond, inc) \ #define For(init, cond, inc) \
init; \ init; \
for(llvm::BasicBlock *loopBB__ = beginLoop(), \ for(BasicBlock *loopBB__ = beginLoop(), \
*bodyBB__ = Nucleus::createBasicBlock(), \ *bodyBB__ = Nucleus::createBasicBlock(), \
*endBB__ = Nucleus::createBasicBlock(), \ *endBB__ = Nucleus::createBasicBlock(), \
*onceBB__ = endBB__; \ *onceBB__ = endBB__; \
...@@ -30,18 +30,18 @@ namespace sw ...@@ -30,18 +30,18 @@ namespace sw
#define Do \ #define Do \
{ \ { \
llvm::BasicBlock *body = Nucleus::createBasicBlock(); \ BasicBlock *body = Nucleus::createBasicBlock(); \
Nucleus::createBr(body); \ Nucleus::createBr(body); \
Nucleus::setInsertBlock(body); Nucleus::setInsertBlock(body);
#define Until(cond) \ #define Until(cond) \
llvm::BasicBlock *end = Nucleus::createBasicBlock(); \ BasicBlock *end = Nucleus::createBasicBlock(); \
Nucleus::createCondBr((cond).value, end, body); \ Nucleus::createCondBr((cond).value, end, body); \
Nucleus::setInsertBlock(end); \ Nucleus::setInsertBlock(end); \
} }
#define If(cond) \ #define If(cond) \
for(llvm::BasicBlock *trueBB__ = Nucleus::createBasicBlock(), \ for(BasicBlock *trueBB__ = Nucleus::createBasicBlock(), \
*falseBB__ = Nucleus::createBasicBlock(), \ *falseBB__ = Nucleus::createBasicBlock(), \
*endBB__ = Nucleus::createBasicBlock(), \ *endBB__ = Nucleus::createBasicBlock(), \
*onceBB__ = endBB__; \ *onceBB__ = endBB__; \
...@@ -49,7 +49,7 @@ namespace sw ...@@ -49,7 +49,7 @@ namespace sw
onceBB__ = 0, Nucleus::createBr(endBB__), Nucleus::setInsertBlock(falseBB__), Nucleus::createBr(endBB__), Nucleus::setInsertBlock(endBB__)) onceBB__ = 0, Nucleus::createBr(endBB__), Nucleus::setInsertBlock(falseBB__), Nucleus::createBr(endBB__), Nucleus::setInsertBlock(endBB__))
#define Else \ #define Else \
for(llvm::BasicBlock *endBB__ = Nucleus::getInsertBlock(), \ for(BasicBlock *endBB__ = Nucleus::getInsertBlock(), \
*falseBB__ = Nucleus::getPredecessor(endBB__), \ *falseBB__ = Nucleus::getPredecessor(endBB__), \
*onceBB__ = endBB__; \ *onceBB__ = endBB__; \
onceBB__ && elseBlock(falseBB__); \ onceBB__ && elseBlock(falseBB__); \
......
...@@ -1238,8 +1238,8 @@ namespace sw ...@@ -1238,8 +1238,8 @@ namespace sw
void PixelProgram::BREAK() void PixelProgram::BREAK()
{ {
llvm::BasicBlock *deadBlock = Nucleus::createBasicBlock(); BasicBlock *deadBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
if(breakDepth == 0) if(breakDepth == 0)
{ {
...@@ -1294,8 +1294,8 @@ namespace sw ...@@ -1294,8 +1294,8 @@ namespace sw
{ {
condition &= enableStack[enableIndex]; condition &= enableStack[enableIndex];
llvm::BasicBlock *continueBlock = Nucleus::createBasicBlock(); BasicBlock *continueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
enableBreak = enableBreak & ~condition; enableBreak = enableBreak & ~condition;
Bool allBreak = SignMask(enableBreak) == 0x0; Bool allBreak = SignMask(enableBreak) == 0x0;
...@@ -1414,8 +1414,8 @@ namespace sw ...@@ -1414,8 +1414,8 @@ namespace sw
{ {
ifDepth--; ifDepth--;
llvm::BasicBlock *falseBlock = ifFalseBlock[ifDepth]; BasicBlock *falseBlock = ifFalseBlock[ifDepth];
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
if(isConditionalIf[ifDepth]) if(isConditionalIf[ifDepth])
{ {
...@@ -1441,7 +1441,7 @@ namespace sw ...@@ -1441,7 +1441,7 @@ namespace sw
{ {
ifDepth--; ifDepth--;
llvm::BasicBlock *endBlock = ifFalseBlock[ifDepth]; BasicBlock *endBlock = ifFalseBlock[ifDepth];
Nucleus::createBr(endBlock); Nucleus::createBr(endBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1459,8 +1459,8 @@ namespace sw ...@@ -1459,8 +1459,8 @@ namespace sw
aL[loopDepth] = aL[loopDepth] + increment[loopDepth]; // FIXME: += aL[loopDepth] = aL[loopDepth] + increment[loopDepth]; // FIXME: +=
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1473,8 +1473,8 @@ namespace sw ...@@ -1473,8 +1473,8 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1487,8 +1487,8 @@ namespace sw ...@@ -1487,8 +1487,8 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1502,7 +1502,7 @@ namespace sw ...@@ -1502,7 +1502,7 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(loopRepEndBlock[loopRepDepth]); Nucleus::createBr(loopRepEndBlock[loopRepDepth]);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1539,8 +1539,8 @@ namespace sw ...@@ -1539,8 +1539,8 @@ namespace sw
condition = !condition; condition = !condition;
} }
llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock(); BasicBlock *trueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock(); BasicBlock *falseBlock = Nucleus::createBasicBlock();
branch(condition, trueBlock, falseBlock); branch(condition, trueBlock, falseBlock);
...@@ -1588,8 +1588,8 @@ namespace sw ...@@ -1588,8 +1588,8 @@ namespace sw
enableIndex++; enableIndex++;
enableStack[enableIndex] = condition; enableStack[enableIndex] = condition;
llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock(); BasicBlock *trueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock(); BasicBlock *falseBlock = Nucleus::createBasicBlock();
Bool notAllFalse = SignMask(condition) != 0; Bool notAllFalse = SignMask(condition) != 0;
...@@ -1626,9 +1626,9 @@ namespace sw ...@@ -1626,9 +1626,9 @@ namespace sw
// increment[loopDepth] = 1; // increment[loopDepth] = 1;
// } // }
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1653,9 +1653,9 @@ namespace sw ...@@ -1653,9 +1653,9 @@ namespace sw
iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData, ps.i[integerRegister.index][0])); iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData, ps.i[integerRegister.index][0]));
aL[loopDepth] = aL[loopDepth - 1]; aL[loopDepth] = aL[loopDepth - 1];
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1677,9 +1677,9 @@ namespace sw ...@@ -1677,9 +1677,9 @@ namespace sw
{ {
enableIndex++; enableIndex++;
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1715,7 +1715,7 @@ namespace sw ...@@ -1715,7 +1715,7 @@ namespace sw
enableIndex++; enableIndex++;
enableStack[enableIndex] = Int4(0xFFFFFFFF); enableStack[enableIndex] = Int4(0xFFFFFFFF);
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = nullptr; loopRepTestBlock[loopRepDepth] = nullptr;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1733,7 +1733,7 @@ namespace sw ...@@ -1733,7 +1733,7 @@ namespace sw
} }
else else
{ {
llvm::BasicBlock *unreachableBlock = Nucleus::createBasicBlock(); BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
if(callRetBlock[currentLabel].size() > 1) // Pop the return destination from the call stack if(callRetBlock[currentLabel].size() > 1) // Pop the return destination from the call stack
{ {
......
...@@ -156,13 +156,12 @@ namespace sw ...@@ -156,13 +156,12 @@ namespace sw
int currentLabel; int currentLabel;
bool whileTest; bool whileTest;
// FIXME: Get rid of llvm:: BasicBlock *ifFalseBlock[24 + 24];
llvm::BasicBlock *ifFalseBlock[24 + 24]; BasicBlock *loopRepTestBlock[4];
llvm::BasicBlock *loopRepTestBlock[4]; BasicBlock *loopRepEndBlock[4];
llvm::BasicBlock *loopRepEndBlock[4]; BasicBlock *labelBlock[2048];
llvm::BasicBlock *labelBlock[2048]; std::vector<BasicBlock*> callRetBlock[2048];
std::vector<llvm::BasicBlock*> callRetBlock[2048]; BasicBlock *returnBlock;
llvm::BasicBlock *returnBlock;
bool isConditionalIf[24 + 24]; bool isConditionalIf[24 + 24];
}; };
} }
......
...@@ -999,8 +999,8 @@ namespace sw ...@@ -999,8 +999,8 @@ namespace sw
void VertexProgram::BREAK() void VertexProgram::BREAK()
{ {
llvm::BasicBlock *deadBlock = Nucleus::createBasicBlock(); BasicBlock *deadBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
if(breakDepth == 0) if(breakDepth == 0)
{ {
...@@ -1055,8 +1055,8 @@ namespace sw ...@@ -1055,8 +1055,8 @@ namespace sw
{ {
condition &= enableStack[enableIndex]; condition &= enableStack[enableIndex];
llvm::BasicBlock *continueBlock = Nucleus::createBasicBlock(); BasicBlock *continueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
enableBreak = enableBreak & ~condition; enableBreak = enableBreak & ~condition;
Bool allBreak = SignMask(enableBreak) == 0x0; Bool allBreak = SignMask(enableBreak) == 0x0;
...@@ -1175,8 +1175,8 @@ namespace sw ...@@ -1175,8 +1175,8 @@ namespace sw
{ {
ifDepth--; ifDepth--;
llvm::BasicBlock *falseBlock = ifFalseBlock[ifDepth]; BasicBlock *falseBlock = ifFalseBlock[ifDepth];
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
if(isConditionalIf[ifDepth]) if(isConditionalIf[ifDepth])
{ {
...@@ -1202,7 +1202,7 @@ namespace sw ...@@ -1202,7 +1202,7 @@ namespace sw
{ {
ifDepth--; ifDepth--;
llvm::BasicBlock *endBlock = ifFalseBlock[ifDepth]; BasicBlock *endBlock = ifFalseBlock[ifDepth];
Nucleus::createBr(endBlock); Nucleus::createBr(endBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1220,8 +1220,8 @@ namespace sw ...@@ -1220,8 +1220,8 @@ namespace sw
aL[loopDepth] = aL[loopDepth] + increment[loopDepth]; // FIXME: += aL[loopDepth] = aL[loopDepth] + increment[loopDepth]; // FIXME: +=
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1234,8 +1234,8 @@ namespace sw ...@@ -1234,8 +1234,8 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1248,8 +1248,8 @@ namespace sw ...@@ -1248,8 +1248,8 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth]; BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(testBlock); Nucleus::createBr(testBlock);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1263,7 +1263,7 @@ namespace sw ...@@ -1263,7 +1263,7 @@ namespace sw
{ {
loopRepDepth--; loopRepDepth--;
llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth]; BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
Nucleus::createBr(loopRepEndBlock[loopRepDepth]); Nucleus::createBr(loopRepEndBlock[loopRepDepth]);
Nucleus::setInsertBlock(endBlock); Nucleus::setInsertBlock(endBlock);
...@@ -1300,8 +1300,8 @@ namespace sw ...@@ -1300,8 +1300,8 @@ namespace sw
condition = !condition; condition = !condition;
} }
llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock(); BasicBlock *trueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock(); BasicBlock *falseBlock = Nucleus::createBasicBlock();
branch(condition, trueBlock, falseBlock); branch(condition, trueBlock, falseBlock);
...@@ -1349,8 +1349,8 @@ namespace sw ...@@ -1349,8 +1349,8 @@ namespace sw
enableIndex++; enableIndex++;
enableStack[enableIndex] = condition; enableStack[enableIndex] = condition;
llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock(); BasicBlock *trueBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock(); BasicBlock *falseBlock = Nucleus::createBasicBlock();
Bool notAllFalse = SignMask(condition) != 0; Bool notAllFalse = SignMask(condition) != 0;
...@@ -1388,9 +1388,9 @@ namespace sw ...@@ -1388,9 +1388,9 @@ namespace sw
increment[loopDepth] = 1; increment[loopDepth] = 1;
} }
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1415,9 +1415,9 @@ namespace sw ...@@ -1415,9 +1415,9 @@ namespace sw
iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData,vs.i[integerRegister.index][0])); iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData,vs.i[integerRegister.index][0]));
aL[loopDepth] = aL[loopDepth - 1]; aL[loopDepth] = aL[loopDepth - 1];
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1439,9 +1439,9 @@ namespace sw ...@@ -1439,9 +1439,9 @@ namespace sw
{ {
enableIndex++; enableIndex++;
llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock(); BasicBlock *loopBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *testBlock = Nucleus::createBasicBlock(); BasicBlock *testBlock = Nucleus::createBasicBlock();
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = testBlock; loopRepTestBlock[loopRepDepth] = testBlock;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1477,7 +1477,7 @@ namespace sw ...@@ -1477,7 +1477,7 @@ namespace sw
enableIndex++; enableIndex++;
enableStack[enableIndex] = Int4(0xFFFFFFFF); enableStack[enableIndex] = Int4(0xFFFFFFFF);
llvm::BasicBlock *endBlock = Nucleus::createBasicBlock(); BasicBlock *endBlock = Nucleus::createBasicBlock();
loopRepTestBlock[loopRepDepth] = nullptr; loopRepTestBlock[loopRepDepth] = nullptr;
loopRepEndBlock[loopRepDepth] = endBlock; loopRepEndBlock[loopRepDepth] = endBlock;
...@@ -1495,7 +1495,7 @@ namespace sw ...@@ -1495,7 +1495,7 @@ namespace sw
} }
else else
{ {
llvm::BasicBlock *unreachableBlock = Nucleus::createBasicBlock(); BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
if(callRetBlock[currentLabel].size() > 1) // Pop the return destination from the call stack if(callRetBlock[currentLabel].size() > 1) // Pop the return destination from the call stack
{ {
......
...@@ -126,13 +126,12 @@ namespace sw ...@@ -126,13 +126,12 @@ namespace sw
int currentLabel; int currentLabel;
bool whileTest; bool whileTest;
// FIXME: Get rid of llvm:: BasicBlock *ifFalseBlock[24 + 24];
llvm::BasicBlock *ifFalseBlock[24 + 24]; BasicBlock *loopRepTestBlock[4];
llvm::BasicBlock *loopRepTestBlock[4]; BasicBlock *loopRepEndBlock[4];
llvm::BasicBlock *loopRepEndBlock[4]; BasicBlock *labelBlock[2048];
llvm::BasicBlock *labelBlock[2048]; std::vector<BasicBlock*> callRetBlock[2048];
std::vector<llvm::BasicBlock*> callRetBlock[2048]; BasicBlock *returnBlock;
llvm::BasicBlock *returnBlock;
bool isConditionalIf[24 + 24]; bool isConditionalIf[24 + 24];
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment