mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 03:28:09 +02:00
Cleanup constant vector handling a bit.
This commit is contained in:
parent
75a9018fb9
commit
a94251d081
3 changed files with 22 additions and 32 deletions
|
|
@ -466,12 +466,8 @@ llvm::Value * Instructions::lg2(llvm::Value *in)
|
|||
ExtractElementInst *w = new ExtractElementInst(in, unsigned(3),
|
||||
name("extractw"),
|
||||
m_block);
|
||||
llvm::Value *const_vec = vectorFromVals(
|
||||
ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
|
||||
ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
|
||||
ConstantFP::get(Type::FloatTy, APFloat(1.442695f)),
|
||||
ConstantFP::get(Type::FloatTy, APFloat(1.442695f))
|
||||
);
|
||||
llvm::Value *const_vec = constVector(1.442695f, 1.442695f,
|
||||
1.442695f, 1.442695f);
|
||||
return mul(vectorFromVals(callFLog(x), callFLog(y),
|
||||
callFLog(z), callFLog(w)), const_vec);
|
||||
}
|
||||
|
|
@ -1016,14 +1012,7 @@ llvm::Value * Instructions::lerp(llvm::Value *in1, llvm::Value *in2,
|
|||
llvm::Value *in3)
|
||||
{
|
||||
llvm::Value *m = mul(in1, in2);
|
||||
llvm::Value *vec1 = vectorFromVals(ConstantFP::get(Type::FloatTy,
|
||||
APFloat(1.f)),
|
||||
ConstantFP::get(Type::FloatTy,
|
||||
APFloat(1.f)),
|
||||
ConstantFP::get(Type::FloatTy,
|
||||
APFloat(1.f)),
|
||||
ConstantFP::get(Type::FloatTy,
|
||||
APFloat(1.f)));
|
||||
llvm::Value *vec1 = constVector(1.f, 1.f, 1.f, 1.f);
|
||||
llvm::Value *s = sub(vec1, in1);
|
||||
return add(m, mul(s, in3));
|
||||
}
|
||||
|
|
@ -1170,4 +1159,15 @@ llvm::Function * Instructions::findFunction(int label)
|
|||
return func;
|
||||
}
|
||||
|
||||
llvm::Value * Instructions::constVector(float x, float y, float z, float w)
|
||||
{
|
||||
std::vector<Constant*> vec(4);
|
||||
vec[0] = ConstantFP::get(Type::FloatTy, APFloat(x));
|
||||
vec[1] = ConstantFP::get(Type::FloatTy, APFloat(y));
|
||||
vec[2] = ConstantFP::get(Type::FloatTy, APFloat(z));
|
||||
vec[3] = ConstantFP::get(Type::FloatTy, APFloat(w));
|
||||
return ConstantVector::get(m_floatVecType, vec);
|
||||
}
|
||||
|
||||
#endif //MESA_LLVM
|
||||
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ private:
|
|||
llvm::Value *vectorFromVals(llvm::Value *x, llvm::Value *y,
|
||||
llvm::Value *z, llvm::Value *w=0);
|
||||
|
||||
llvm::Value *constVector(float x, float y, float z, float w);
|
||||
|
||||
llvm::Function *declarePrintf();
|
||||
llvm::Function *declareFunc(int label);
|
||||
|
||||
|
|
|
|||
|
|
@ -68,24 +68,12 @@ Storage::Storage(llvm::BasicBlock *block, llvm::Value *out,
|
|||
llvm::Constant *Storage::shuffleMask(int vec)
|
||||
{
|
||||
if (!m_extSwizzleVec) {
|
||||
Constant *const_vec = Constant::getNullValue(m_floatVecType);
|
||||
InsertElementInst *res = new InsertElementInst(const_vec,
|
||||
ConstantFP::get(Type::FloatTy, APFloat(0.f)),
|
||||
unsigned(0),
|
||||
name("extswx"), m_block);
|
||||
res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(1.f)),
|
||||
unsigned(1),
|
||||
name("extswy"),
|
||||
m_block);
|
||||
res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(0.f)),
|
||||
unsigned(2),
|
||||
name("extswz"),
|
||||
m_block);
|
||||
res = new InsertElementInst(res, ConstantFP::get(Type::FloatTy, APFloat(1.f)),
|
||||
unsigned(3),
|
||||
name("extsww"),
|
||||
m_block);
|
||||
m_extSwizzleVec = res;
|
||||
std::vector<Constant*> elems;
|
||||
elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(0.f)));
|
||||
elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(1.f)));
|
||||
elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(0.f)));
|
||||
elems.push_back(ConstantFP::get(Type::FloatTy, APFloat(1.f)));
|
||||
m_extSwizzleVec = ConstantVector::get(m_floatVecType, elems);
|
||||
}
|
||||
|
||||
if (m_intVecs.find(vec) != m_intVecs.end()) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue