diff --git a/llvm/lib/Target/AArch64/AArch64CallingConvention.cpp b/llvm/lib/Target/AArch64/AArch64CallingConvention.cpp index 991d710c979b9..787a1a83613c9 100644 --- a/llvm/lib/Target/AArch64/AArch64CallingConvention.cpp +++ b/llvm/lib/Target/AArch64/AArch64CallingConvention.cpp @@ -142,7 +142,7 @@ static bool CC_AArch64_Custom_Block(unsigned &ValNo, MVT &ValVT, MVT &LocVT, ArrayRef RegList; if (LocVT.SimpleTy == MVT::i64 || (IsDarwinILP32 && LocVT.SimpleTy == MVT::i32)) RegList = XRegList; - else if (LocVT.SimpleTy == MVT::f16) + else if (LocVT.SimpleTy == MVT::f16 || LocVT.SimpleTy == MVT::bf16) RegList = HRegList; else if (LocVT.SimpleTy == MVT::f32 || LocVT.is32BitVector()) RegList = SRegList; diff --git a/llvm/test/CodeGen/AArch64/argument-blocks.ll b/llvm/test/CodeGen/AArch64/argument-blocks.ll index b5374ca8ced53..8cef28a38970d 100644 --- a/llvm/test/CodeGen/AArch64/argument-blocks.ll +++ b/llvm/test/CodeGen/AArch64/argument-blocks.ll @@ -195,3 +195,10 @@ define half @test_f16_blocked([7 x double], [2 x half] %in) { %val = extractvalue [2 x half] %in, 0 ret half %val } + +define bfloat @test_bf16_blocked([7 x double], [2 x bfloat] %in) { +; CHECK-LABEL: test_bf16_blocked: +; CHECK: ldr h0, [sp] + %val = extractvalue [2 x bfloat] %in, 0 + ret bfloat %val +}