pengfei added a comment.

> if we define the `__bfloat16` type as the built-in `__bf16` type, then the 
> front end can apply whatever rules it has for that type, including adding 
> whatever ABI handling is needed for BF16 values.

I don't agree. Unlike `__fp16`, `__bf16` is simple an ARM specific type. I 
don't see why we need to define with it. 
https://clang.llvm.org/docs/LanguageExtensions.html#half-precision-floating-point
 . Besides, the doc says it "is only available when supported in hardware". 
Since we only have vector instructions, I don't think we support the scalar 
type here.

> If that ends up being the same as the rules for unsigned short, that's no 
> problem. The front end can implement it that way.

Doesn't it mean front end still generate `i16` in IR for it?

> The point is, by telling the front end that this is a BF16 value, we allow 
> the front end to control the semantics for it.

If you are saying we support a separate `__bfloat16` type in front end and 
generate `i16` in IR just for doing diagnose, I'm fine with it. The problem is 
we can't reuse the `__bf16` 's representation `BFloat16Ty`. Instead, we have to 
follow the way we are using for fp16, e.g., `HalfTy` for `__fp16` (no ABI) and 
`Float16Ty` for `_Float16` (has ABI). But it doesn't worth the effort to me.

> Also, you say we can't assume what registers will be used (in the eventual 
> ABI?) but we are assuming exactly that. If the ABI is ever defined 
> differently than what clang and gcc are currently doing, they will both be 
> wrong.

No new IR types, no ABI issues. The declaration of double underscore type are 
free without ABI. `__fp16` is a good example: https://godbolt.org/z/6qKqGc6Gj

> I don't see why we would treat BF16 values as unsigned short and i16 
> throughout the compiler just to make the backend implementation easier when 
> we already have types available for BF16.

So, it is not a problem of easy or difficult. It's a wrong direction we can't 
go with it (introducing new IR type without clear ABI declarations). We made 
such mistake with the `half` type. https://godbolt.org/z/K55s5zqPG We shouldn't 
make it again.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120395/new/

https://reviews.llvm.org/D120395

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to