Menooker commented on a change in pull request #5601:
URL: https://github.com/apache/incubator-tvm/pull/5601#discussion_r429024767
##########
File path: src/target/llvm/codegen_llvm.cc
##########
@@ -555,12 +558,48 @@ void CodeGenLLVM::CreateSerialFor(llvm::Value* begin,
llvm::Value* end, llvm::Va
builder_->SetInsertPoint(for_end);
}
+static llvm::Value* GetInt32VectorOrScalar(
+ llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>*
builder, uint32_t v,
+ int lanes) {
+ if (lanes == 1) {
+ return builder->getInt32(v);
+ } else {
+ std::vector<llvm::Constant*> consts;
+ for (int i = 0; i < lanes; i++) {
+ consts.emplace_back(builder->getInt32(v));
+ }
+ return llvm::ConstantVector::get(consts);
+ }
+}
+
// cast operatpr
llvm::Value* CodeGenLLVM::CreateCast(DataType from, DataType to, llvm::Value*
value) {
llvm::Type* target = DTypeToLLVMType(to);
if (value->getType() == target) return value;
if (to.is_handle()) {
return builder_->CreateBitCast(value, target);
+ } else if (to.is_float() && from.is_bfloat()) {
+ CHECK_EQ(from.bits(), 16);
Review comment:
and I think the way processing “custom data type” that you mentioned
does not fit this pr well. Actually I have already notice this feature before I
wrote this bf16 feature. But it needs function calls to do lowering, which is
not friendly to the codegen backend to do auto vectorization and so on. Of
course you can say we can implement this cast function as an intrinsic. Yes,
but more complexity is brought.
I think letting bf16 dtype live until codegen is a good idea, it makes
legalization, impl of casting easier
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]