diff options
Diffstat (limited to 'src/mesa/pipe/llvm')
-rw-r--r-- | src/mesa/pipe/llvm/instructionssoa.cpp | 15 | ||||
-rw-r--r-- | src/mesa/pipe/llvm/instructionssoa.h | 7 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/mesa/pipe/llvm/instructionssoa.cpp b/src/mesa/pipe/llvm/instructionssoa.cpp index 0e501ab08d0..f1c174a26e5 100644 --- a/src/mesa/pipe/llvm/instructionssoa.cpp +++ b/src/mesa/pipe/llvm/instructionssoa.cpp @@ -2,7 +2,8 @@ InstructionsSoa::InstructionsSoa(llvm::Module *mod, llvm::Function *func, llvm::BasicBlock *block, StorageSoa *storage) - : m_builder(block) + : m_builder(block), + m_idx(0) { } @@ -19,6 +20,11 @@ std::vector<llvm::Value*> InstructionsSoa::mul(const std::vector<llvm::Value*> i { std::vector<llvm::Value*> res(4); + res[0] = m_builder.CreateMul(in1[0], in2[0], name("mul")); + res[1] = m_builder.CreateMul(in1[1], in2[1], name("mul")); + res[2] = m_builder.CreateMul(in1[2], in2[2], name("mul")); + res[3] = m_builder.CreateMul(in1[3], in2[3], name("mul")); + return res; } @@ -26,3 +32,10 @@ void InstructionsSoa::end() { m_builder.CreateRetVoid(); } + +const char * InstructionsSoa::name(const char *prefix) const +{ + ++m_idx; + snprintf(m_name, 32, "%s%d", prefix, m_idx); + return m_name; +} diff --git a/src/mesa/pipe/llvm/instructionssoa.h b/src/mesa/pipe/llvm/instructionssoa.h index 233d363b906..01955015844 100644 --- a/src/mesa/pipe/llvm/instructionssoa.h +++ b/src/mesa/pipe/llvm/instructionssoa.h @@ -51,8 +51,15 @@ public: std::vector<llvm::Value*> mul(const std::vector<llvm::Value*> in1, const std::vector<llvm::Value*> in2); void end(); + +private: + const char * name(const char *prefix) const; private: llvm::LLVMFoldingBuilder m_builder; + +private: + mutable int m_idx; + mutable char m_name[32]; }; |