Lines Matching full:builder
32 static Value * minIntScalar(IRBuilder<> &builder, Value * in1, Value * in2)
34 Value * cmp = builder.CreateICmpSLT(in1, in2);
35 return builder.CreateSelect(cmp, in1, in2);
38 static Value * maxIntScalar(IRBuilder<> &builder, Value * in1, Value * in2)
40 Value * cmp = builder.CreateICmpSGT(in1, in2);
41 return builder.CreateSelect(cmp, in1, in2);
44 static Constant * constFloat(IRBuilder<> & builder, float x)
46 return ConstantFP::get(builder.getContext(), APFloat(x));
49 static VectorType * intVecType(IRBuilder<> & builder)
51 return VectorType::get(Type::getInt32Ty(builder.getContext()), 4);
54 static VectorType * floatVecType(IRBuilder<> & builder)
56 return VectorType::get(Type::getFloatTy(builder.getContext()), 4);
59 static Value * constIntVec(IRBuilder<> & builder, int x, int y, int z, int w)
62 vec[0] = builder.getInt32(x);
63 vec[1] = builder.getInt32(y);
64 vec[2] = builder.getInt32(z);
65 vec[3] = builder.getInt32(w);
71 static Value * intVec(IRBuilder<> & builder, Value * x, Value * y, Value * z, Value * w)
73 Value * res = Constant::getNullValue(intVecType(builder));
74 res = builder.CreateInsertElement(res, x, builder.getInt32(0), name("vecx"));
75 res = builder.CreateInsertElement(res, y, builder.getInt32(1), name("vecy"));
76 res = builder.CreateInsertElement(res, z, builder.getInt32(2), name("vecz"));
78 res = builder.CreateInsertElement(res, w, builder.getInt32(3), name("vecw"));
82 static Value * constFloatVec(IRBuilder<> & builder, float x, float y, float z, float w)
85 vec[0] = constFloat(builder, x);
86 vec[1] = constFloat(builder, y);
87 vec[2] = constFloat(builder, z);
88 vec[3] = constFloat(builder, w);
94 static std::vector<Value *> extractVector(IRBuilder<> & builder, Value *vec)
100 elems[i] = builder.CreateExtractElement(vec, builder.getInt32(i), name("xtract"));
104 static Value * intVecMax(IRBuilder<> & builder, Value * in1, Value * in2)
106 std::vector<Value *> vec1 = extractVector(builder, in1);
107 std::vector<Value *> vec2 = extractVector(builder, in2);
109 Value * cmp = builder.CreateICmpSGT(vec1[i], vec2[i], name("iVecSelCmp"));
110 vec1[i] = builder.CreateSelect(cmp, vec1[i], vec2[i], name("iVecSel"));
112 return intVec(builder, vec1[0], vec1[1], vec1[2], vec1[3]);
115 static Value * intVecMin(IRBuilder<> & builder, Value * in1, Value * in2)
117 std::vector<Value *> vec1 = extractVector(builder, in1);
118 std::vector<Value *> vec2 = extractVector(builder, in2);
120 Value * cmp = builder.CreateICmpSLT(vec1[i], vec2[i], name("iVecSelCmp"));
121 vec1[i] = builder.CreateSelect(cmp, vec1[i], vec2[i], name("iVecSel"));
123 return intVec(builder, vec1[0], vec1[1], vec1[2], vec1[3]);
127 static Value * intColorVecToFloatColorVec(IRBuilder<> & builder, Value * vec)
129 vec = builder.CreateUIToFP(vec, floatVecType(builder));
130 return builder.CreateFMul(vec, constFloatVec(builder, 1 / 255.0f, 1 / 255.0f,
148 CondBranch(IRBuilder<> & builder) : m_builder(builder) {}