diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -2764,8 +2764,8 @@ amt = llvm::ConstantFP::get(VMContext, llvm::APFloat(static_cast(amount))); else { - // Remaining types are Half, LongDouble, __ibm128 or __float128. Convert - // from float. + // Remaining types are Half, Bfloat16, LongDouble, __ibm128 or __float128. + // Convert from float. llvm::APFloat F(static_cast(amount)); bool ignored; const llvm::fltSemantics *FS; @@ -2775,6 +2775,8 @@ FS = &CGF.getTarget().getFloat128Format(); else if (value->getType()->isHalfTy()) FS = &CGF.getTarget().getHalfFormat(); + else if (value->getType()->isBFloatTy()) + FS = &CGF.getTarget().getBFloat16Format(); else if (value->getType()->isPPC_FP128Ty()) FS = &CGF.getTarget().getIbm128Format(); else diff --git a/clang/test/Sema/arm-bfloat.cpp b/clang/test/Sema/arm-bfloat.cpp --- a/clang/test/Sema/arm-bfloat.cpp +++ b/clang/test/Sema/arm-bfloat.cpp @@ -19,6 +19,8 @@ bf16 - bf16; bf16 * bf16; bf16 / bf16; + ++bf16; + --bf16; __fp16 fp16;