Index: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp =================================================================== --- llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -12073,6 +12073,11 @@ SDLoc DL(N); EVT VT = N->getValueType(0); EVT PtrTy = N->getOperand(3).getValueType(); + const bool hasBF16 = + static_cast(DAG.getSubtarget()).hasBF16(); + + assert((VT != MVT::nxv8bf16 || hasBF16) && + "Unsupported type (BF16)"); EVT LoadVT = VT; if (VT.isFloatingPoint()) Index: llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td =================================================================== --- llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td +++ llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td @@ -1522,7 +1522,10 @@ defm : pred_load; defm : pred_load; defm : pred_load; - defm : pred_load; + + let Predicates = [HasBF16] in { + defm : pred_load; + } // 16-element contiguous loads defm : pred_load; @@ -1709,7 +1712,10 @@ defm : ld1; defm : ld1; defm : ld1; - defm : ld1; + + let Predicates = [HasBF16] in { + defm : ld1; + } // 16-element contiguous loads defm : ld1; @@ -1749,7 +1755,10 @@ defm : ldnf1; defm : ldnf1; defm : ldnf1; - defm : ldnf1; + + let Predicates = [HasBF16] in { + defm : ldnf1; + } // 16-element contiguous non-faulting loads defm : ldnf1; @@ -1790,7 +1799,10 @@ defm : ldff1; defm : ldff1; defm : ldff1; - defm : ldff1; + + let Predicates = [HasBF16] in { + defm : ldff1; + } // 16-element contiguous first faulting loads defm : ldff1; Index: llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-imm.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-imm.ll +++ llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-imm.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s ; ; LD1B Index: llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-reg.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-reg.ll +++ llvm/test/CodeGen/AArch64/sve-intrinsics-ld1-addressing-mode-reg-reg.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s ; ; LD1B Index: llvm/test/CodeGen/AArch64/sve-intrinsics-ld1.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-intrinsics-ld1.ll +++ llvm/test/CodeGen/AArch64/sve-intrinsics-ld1.ll @@ -1,5 +1,5 @@ -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s -; RUN: llc -O0 -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s +; RUN: llc -O0 -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s ; ; LD1B Index: llvm/test/CodeGen/AArch64/sve-intrinsics-loads-ff.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-intrinsics-loads-ff.ll +++ llvm/test/CodeGen/AArch64/sve-intrinsics-loads-ff.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s ; ; LDFF1B Index: llvm/test/CodeGen/AArch64/sve-intrinsics-loads-nf.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-intrinsics-loads-nf.ll +++ llvm/test/CodeGen/AArch64/sve-intrinsics-loads-nf.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s ; Range testing for the immediate in the reg+imm(mulvl) addressing ; mode is done only for one instruction. The rest of the instrucions Index: llvm/test/CodeGen/AArch64/sve-masked-ldst-nonext.ll =================================================================== --- llvm/test/CodeGen/AArch64/sve-masked-ldst-nonext.ll +++ llvm/test/CodeGen/AArch64/sve-masked-ldst-nonext.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve -asm-verbose=0 < %s 2>%t | FileCheck %s +; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve,+bf16 -asm-verbose=0 < %s 2>%t | FileCheck %s ; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t ; WARN-NOT: warning