mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
Implement else ops.
This commit is contained in:
parent
731352f03e
commit
7073ef9682
3 changed files with 18 additions and 2 deletions
|
|
@ -956,7 +956,7 @@ Function* makeLitFunction(Module *mod) {
|
|||
void Instructions::ifop(llvm::Value *in)
|
||||
{
|
||||
BasicBlock *ifthen = new BasicBlock(name("ifthen"), m_func,0);
|
||||
BasicBlock *ifend = new BasicBlock(name("ifend"), m_func,0);
|
||||
BasicBlock *ifend = new BasicBlock(name("ifthenend"), m_func,0);
|
||||
|
||||
//BasicBlock *yblock = new BasicBlock(name("yblock"), m_func,0);
|
||||
//BasicBlock *zblock = new BasicBlock(name("zblock"), m_func,0);
|
||||
|
|
@ -981,6 +981,17 @@ llvm::BasicBlock * Instructions::currentBlock() const
|
|||
return m_block;
|
||||
}
|
||||
|
||||
void Instructions::elseop()
|
||||
{
|
||||
assert(!m_ifStack.empty());
|
||||
BasicBlock *ifend = new BasicBlock(name("ifend"), m_func,0);
|
||||
new BranchInst(ifend, m_block);
|
||||
m_block = m_ifStack.top();
|
||||
m_block->setName(name("ifelse"));
|
||||
m_ifStack.pop();
|
||||
m_ifStack.push(ifend);
|
||||
}
|
||||
|
||||
void Instructions::endif()
|
||||
{
|
||||
assert(!m_ifStack.empty());
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ public:
|
|||
llvm::Value *dph(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *dst(llvm::Value *in1, llvm::Value *in2);
|
||||
void endif();
|
||||
void elseop();
|
||||
llvm::Value *ex2(llvm::Value *in);
|
||||
llvm::Value *floor(llvm::Value *in);
|
||||
llvm::Value *frc(llvm::Value *in);
|
||||
|
|
|
|||
|
|
@ -459,7 +459,11 @@ translate_instruction(llvm::Module *module,
|
|||
break;
|
||||
case TGSI_OPCODE_REP:
|
||||
break;
|
||||
case TGSI_OPCODE_ELSE:
|
||||
case TGSI_OPCODE_ELSE: {
|
||||
instr->elseop();
|
||||
storage->setCurrentBlock(instr->currentBlock());
|
||||
return; //only state update
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_ENDIF: {
|
||||
instr->endif();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue