Gallivm: reorder the functions alphabetically so I can work on it.

This commit is contained in:
Stephane Marchesin 2008-10-07 23:43:21 +02:00
parent 8463ddb740
commit a0809c5271
1 changed files with 119 additions and 121 deletions

View File

@ -90,68 +90,11 @@ llvm::Value * InstructionsSoa::vectorFromVals(llvm::Value *x, llvm::Value *y,
return res;
}
std::vector<llvm::Value*> InstructionsSoa::arl(const std::vector<llvm::Value*> in)
{
std::vector<llvm::Value*> res(4);
//Extract x's
llvm::Value *x1 = m_builder.CreateExtractElement(in[0],
m_storage->constantInt(0),
name("extractX"));
//cast it to an unsigned int
x1 = m_builder.CreateFPToUI(x1, IntegerType::get(32), name("x1IntCast"));
res[0] = x1;//vectorFromVals(x1, x2, x3, x4);
//only x is valid. the others shouldn't be necessary
/*
res[1] = Constant::getNullValue(m_floatVecType);
res[2] = Constant::getNullValue(m_floatVecType);
res[3] = Constant::getNullValue(m_floatVecType);
*/
return res;
}
std::vector<llvm::Value*> InstructionsSoa::add(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateAdd(in1[0], in2[0], name("addx"));
res[1] = m_builder.CreateAdd(in1[1], in2[1], name("addy"));
res[2] = m_builder.CreateAdd(in1[2], in2[2], name("addz"));
res[3] = m_builder.CreateAdd(in1[3], in2[3], name("addw"));
return res;
}
std::vector<llvm::Value*> InstructionsSoa::mul(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateMul(in1[0], in2[0], name("mulx"));
res[1] = m_builder.CreateMul(in1[1], in2[1], name("muly"));
res[2] = m_builder.CreateMul(in1[2], in2[2], name("mulz"));
res[3] = m_builder.CreateMul(in1[3], in2[3], name("mulw"));
return res;
}
void InstructionsSoa::end()
{
m_builder.CreateRetVoid();
}
std::vector<llvm::Value*> InstructionsSoa::madd(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2,
const std::vector<llvm::Value*> in3)
{
std::vector<llvm::Value*> res = mul(in1, in2);
return add(res, in3);
}
std::vector<llvm::Value*> InstructionsSoa::extractVector(llvm::Value *vector)
{
std::vector<llvm::Value*> res(4);
@ -279,6 +222,41 @@ std::vector<llvm::Value*> InstructionsSoa::abs(const std::vector<llvm::Value*> i
return callBuiltin(func, in1);
}
std::vector<llvm::Value*> InstructionsSoa::add(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateAdd(in1[0], in2[0], name("addx"));
res[1] = m_builder.CreateAdd(in1[1], in2[1], name("addy"));
res[2] = m_builder.CreateAdd(in1[2], in2[2], name("addz"));
res[3] = m_builder.CreateAdd(in1[3], in2[3], name("addw"));
return res;
}
std::vector<llvm::Value*> InstructionsSoa::arl(const std::vector<llvm::Value*> in)
{
std::vector<llvm::Value*> res(4);
//Extract x's
llvm::Value *x1 = m_builder.CreateExtractElement(in[0],
m_storage->constantInt(0),
name("extractX"));
//cast it to an unsigned int
x1 = m_builder.CreateFPToUI(x1, IntegerType::get(32), name("x1IntCast"));
res[0] = x1;//vectorFromVals(x1, x2, x3, x4);
//only x is valid. the others shouldn't be necessary
/*
res[1] = Constant::getNullValue(m_floatVecType);
res[2] = Constant::getNullValue(m_floatVecType);
res[3] = Constant::getNullValue(m_floatVecType);
*/
return res;
}
std::vector<llvm::Value*> InstructionsSoa::dp3(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
@ -286,6 +264,59 @@ std::vector<llvm::Value*> InstructionsSoa::dp3(const std::vector<llvm::Value*> i
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::lit(const std::vector<llvm::Value*> in)
{
llvm::Function *func = function(TGSI_OPCODE_LIT);
return callBuiltin(func, in);
}
std::vector<llvm::Value*> InstructionsSoa::madd(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2,
const std::vector<llvm::Value*> in3)
{
std::vector<llvm::Value*> res = mul(in1, in2);
return add(res, in3);
}
std::vector<llvm::Value*> InstructionsSoa::max(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_MAX);
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::min(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_MIN);
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::mul(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateMul(in1[0], in2[0], name("mulx"));
res[1] = m_builder.CreateMul(in1[1], in2[1], name("muly"));
res[2] = m_builder.CreateMul(in1[2], in2[2], name("mulz"));
res[3] = m_builder.CreateMul(in1[3], in2[3], name("mulw"));
return res;
}
std::vector<llvm::Value*> InstructionsSoa::pow(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_POWER);
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::rsq(const std::vector<llvm::Value*> in)
{
llvm::Function *func = function(TGSI_OPCODE_RSQ);
return callBuiltin(func, in);
}
std::vector<llvm::Value*> InstructionsSoa::slt(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
@ -294,6 +325,37 @@ std::vector<llvm::Value*> InstructionsSoa::slt(const std::vector<llvm::Value*> i
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::sub(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateSub(in1[0], in2[0], name("subx"));
res[1] = m_builder.CreateSub(in1[1], in2[1], name("suby"));
res[2] = m_builder.CreateSub(in1[2], in2[2], name("subz"));
res[3] = m_builder.CreateSub(in1[3], in2[3], name("subw"));
return res;
}
void checkFunction(Function *func)
{
for (Function::const_iterator BI = func->begin(), BE = func->end();
BI != BE; ++BI) {
const BasicBlock &BB = *BI;
for (BasicBlock::const_iterator II = BB.begin(), IE = BB.end();
II != IE; ++II) {
const Instruction &I = *II;
std::cout<< "Instr = "<<I;
for (unsigned op = 0, E = I.getNumOperands(); op != E; ++op) {
const Value *Op = I.getOperand(op);
std::cout<< "\top = "<<Op<<"("<<op<<")"<<std::endl;
//I->setOperand(op, V);
}
}
}
}
llvm::Value * InstructionsSoa::allocaTemp()
{
VectorType *vector = VectorType::get(Type::FloatTy, 4);
@ -413,46 +475,6 @@ std::vector<Value*> InstructionsSoa::callBuiltin(llvm::Function *func, const std
return allocaToResult(allocaPtr);
}
std::vector<llvm::Value*> InstructionsSoa::pow(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_POWER);
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::min(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_MIN);
return callBuiltin(func, in1, in2);
}
std::vector<llvm::Value*> InstructionsSoa::max(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
llvm::Function *func = function(TGSI_OPCODE_MAX);
return callBuiltin(func, in1, in2);
}
void checkFunction(Function *func)
{
for (Function::const_iterator BI = func->begin(), BE = func->end();
BI != BE; ++BI) {
const BasicBlock &BB = *BI;
for (BasicBlock::const_iterator II = BB.begin(), IE = BB.end();
II != IE; ++II) {
const Instruction &I = *II;
std::cout<< "Instr = "<<I;
for (unsigned op = 0, E = I.getNumOperands(); op != E; ++op) {
const Value *Op = I.getOperand(op);
std::cout<< "\top = "<<Op<<"("<<op<<")"<<std::endl;
//I->setOperand(op, V);
}
}
}
}
void InstructionsSoa::injectFunction(llvm::Function *originalFunc, int op)
{
assert(originalFunc);
@ -497,28 +519,4 @@ void InstructionsSoa::injectFunction(llvm::Function *originalFunc, int op)
}
}
std::vector<llvm::Value*> InstructionsSoa::sub(const std::vector<llvm::Value*> in1,
const std::vector<llvm::Value*> in2)
{
std::vector<llvm::Value*> res(4);
res[0] = m_builder.CreateSub(in1[0], in2[0], name("subx"));
res[1] = m_builder.CreateSub(in1[1], in2[1], name("suby"));
res[2] = m_builder.CreateSub(in1[2], in2[2], name("subz"));
res[3] = m_builder.CreateSub(in1[3], in2[3], name("subw"));
return res;
}
std::vector<llvm::Value*> InstructionsSoa::lit(const std::vector<llvm::Value*> in)
{
llvm::Function *func = function(TGSI_OPCODE_LIT);
return callBuiltin(func, in);
}
std::vector<llvm::Value*> InstructionsSoa::rsq(const std::vector<llvm::Value*> in)
{
llvm::Function *func = function(TGSI_OPCODE_RSQ);
return callBuiltin(func, in);
}