llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-risc-v Author: Brandon Wu (4vtomat) <details> <summary>Changes</summary> - [RISCV][llvm] Support Zvfbfa codegen and vsetvli insertion - [RISCV][clang] Support Zvfbfa C intrinsics --- Patch is 5.69 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/161158.diff 222 Files Affected: - (modified) clang/include/clang/Basic/riscv_vector.td (+68-15) - (modified) clang/include/clang/Basic/riscv_vector_common.td (+62-4) - (modified) clang/lib/Sema/SemaRISCV.cpp (+2-1) - (modified) clang/lib/Support/RISCVVIntrinsicUtils.cpp (+5) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfclass-bf16.c (+134) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmacc-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmax-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmerge-bf16.c (+69) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmin-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsac-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmul-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmv-bf16.c (+189) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfncvt-bf16.c (+724) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfncvt_rod-bf16.c (+113) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfncvt_rtz-bf16.c (+267) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmacc-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsac-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfrec7-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfrsqrt7-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfrsub-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfsgnj-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfsgnjn-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfsgnjx-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfslide1down-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfslide1up-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwadd-bf16.c (+899) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwcvt-bf16.c (+366) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwmacc-bf16.c (+486) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwmsac-bf16.c (+486) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwmul-bf16.c (+455) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwnmacc-bf16.c (+494) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwnmsac-bf16.c (+494) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfwsub-bf16.c (+899) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmfeq-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmfge-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmfgt-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmfle-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmflt-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmfne-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfclass-bf16.c (+134) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmacc-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmax-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmerge-bf16.c (+69) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmin-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsac-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmul-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmv-bf16.c (+69) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfncvt-bf16.c (+724) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfncvt_rod-bf16.c (+113) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfncvt_rtz-bf16.c (+267) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmacc-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmadd-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsac-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfrec7-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfrsqrt7-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfrsub-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfsgnj-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfsgnjn-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfsgnjx-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfslide1down-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfslide1up-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwadd-bf16.c (+893) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwcvt-bf16.c (+366) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwmacc-bf16.c (+474) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwmsac-bf16.c (+474) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwmul-bf16.c (+451) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwnmacc-bf16.c (+480) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwnmsac-bf16.c (+480) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfwsub-bf16.c (+893) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmfeq-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmfge-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmfgt-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmfle-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmflt-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmfne-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfclass-bf16.c (+272) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmacc-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmax-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmerge-bf16.c (+69) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmin-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsac-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmul-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmv-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfncvt-bf16.c (+1577) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfncvt_rod-bf16.c (+233) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfncvt_rtz-bf16.c (+572) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmacc-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsac-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfrec7-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfrsqrt7-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfrsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnj-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjn-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjx-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfslide1down-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfslide1up-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwadd-bf16.c (+2007) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwcvt-bf16.c (+765) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwmacc-bf16.c (+1017) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwmsac-bf16.c (+1017) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwmul-bf16.c (+1015) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwnmacc-bf16.c (+1034) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwnmsac-bf16.c () - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwsub-bf16.c (+2007) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfeq-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfge-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfgt-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfle-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmflt-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfne-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfclass-bf16.c (+272) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmacc-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmax-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmerge-bf16.c (+69) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmin-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsac-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmul-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmv-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfncvt-bf16.c (+1539) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfncvt_rod-bf16.c (+233) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfncvt_rtz-bf16.c (+572) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmacc-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmadd-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsac-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfrec7-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfrsqrt7-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfrsub-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnj-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjn-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjx-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfslide1down-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfslide1up-bf16.c (+249) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsub-bf16.c (+489) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwadd-bf16.c (+1932) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwcvt-bf16.c (+765) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwmacc-bf16.c (+977) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwmsac-bf16.c (+977) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwmul-bf16.c (+975) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwnmacc-bf16.c (+994) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwnmsac-bf16.c (+994) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwsub-bf16.c (+1932) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfeq-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfge-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfgt-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfle-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmflt-bf16.c (+129) - (added) clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfne-bf16.c (+129) - (modified) llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h (+11) - (modified) llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp (+24-7) - (modified) llvm/lib/Target/RISCV/RISCVInstrFormats.td (+6) - (modified) llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td (+14-10) - (modified) llvm/lib/Target/RISCV/RISCVInstrInfoZvfbf.td (+676) - (modified) llvm/lib/Target/RISCV/RISCVSubtarget.h (+2-1) - (added) llvm/test/CodeGen/RISCV/rvv/mixed-float-bf16-arith.ll (+186) - (added) llvm/test/CodeGen/RISCV/rvv/vfadd-bf.ll (+607) - (added) llvm/test/CodeGen/RISCV/rvv/vfclass-bf.ll (+294) - (added) llvm/test/CodeGen/RISCV/rvv/vfmacc-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfmadd-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfmax-bf.ll (+571) - (added) llvm/test/CodeGen/RISCV/rvv/vfmerge-bf.ll (+258) - (added) llvm/test/CodeGen/RISCV/rvv/vfmin-bf.ll (+571) - (added) llvm/test/CodeGen/RISCV/rvv/vfmsac-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfmsub-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfmul-bf.ll (+607) - (added) llvm/test/CodeGen/RISCV/rvv/vfmv-bf-s.ll (+88) - (added) llvm/test/CodeGen/RISCV/rvv/vfmv-s-bf.ll (+161) - (added) llvm/test/CodeGen/RISCV/rvv/vfmv-v-bf.ll (+216) - (added) llvm/test/CodeGen/RISCV/rvv/vfncvt-rod-bf-f.ll (+226) - (added) llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-x-bf.ll (+270) - (added) llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-xu-bf.ll (+270) - (added) llvm/test/CodeGen/RISCV/rvv/vfncvt-x-bf.ll (+288) - (added) llvm/test/CodeGen/RISCV/rvv/vfncvt-xu-bf.ll (+288) - (added) llvm/test/CodeGen/RISCV/rvv/vfnmacc-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfnmadd-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfnmsac-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfnmsub-bf.ll (+506) - (added) llvm/test/CodeGen/RISCV/rvv/vfrec7-bf.ll (+282) - (added) llvm/test/CodeGen/RISCV/rvv/vfrsqrt7-bf16.ll (+264) - (added) llvm/test/CodeGen/RISCV/rvv/vfrsub-bf.ll (+282) - (added) llvm/test/CodeGen/RISCV/rvv/vfsgnj-bf.ll (+571) - (added) llvm/test/CodeGen/RISCV/rvv/vfsgnjn-bf.ll (+571) - (added) llvm/test/CodeGen/RISCV/rvv/vfsgnjx-bf.ll (+571) - (added) llvm/test/CodeGen/RISCV/rvv/vfslide1down-bf.ll (+288) - (added) llvm/test/CodeGen/RISCV/rvv/vfslide1up-bf.ll (+294) - (added) llvm/test/CodeGen/RISCV/rvv/vfsub-bf.ll (+559) - (added) llvm/test/CodeGen/RISCV/rvv/vfwadd-bf.ll (+519) - (added) llvm/test/CodeGen/RISCV/rvv/vfwadd-w-bf.ll (+773) ``````````diff diff --git a/clang/include/clang/Basic/riscv_vector.td b/clang/include/clang/Basic/riscv_vector.td index 07a8724b6f33d..96d8300a0faf3 100644 --- a/clang/include/clang/Basic/riscv_vector.td +++ b/clang/include/clang/Basic/riscv_vector.td @@ -1013,9 +1013,9 @@ let ManualCodegen = [{ }] in { let HasFRMRoundModeOp = true in { // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions - defm vfadd : RVVFloatingBinBuiltinSetRoundingMode; - defm vfsub : RVVFloatingBinBuiltinSetRoundingMode; - defm vfrsub : RVVFloatingBinVFBuiltinSetRoundingMode; + defm vfadd : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1>; + defm vfsub : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1>; + defm vfrsub : RVVFloatingBinVFBuiltinSetRoundingMode<HasBF=1>; // 13.3. Vector Widening Floating-Point Add/Subtract Instructions // Widening FP add/subtract, 2*SEW = 2*SEW +/- SEW @@ -1023,14 +1023,14 @@ let ManualCodegen = [{ defm vfwsub : RVVFloatingWidenOp0BinBuiltinSetRoundingMode; // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions - defm vfmul : RVVFloatingBinBuiltinSetRoundingMode; + defm vfmul : RVVFloatingBinBuiltinSetRoundingMode<HasBF=1>; defm vfdiv : RVVFloatingBinBuiltinSetRoundingMode; defm vfrdiv : RVVFloatingBinVFBuiltinSetRoundingMode; } // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions - defm vfadd : RVVFloatingBinBuiltinSet; - defm vfsub : RVVFloatingBinBuiltinSet; - defm vfrsub : RVVFloatingBinVFBuiltinSet; + defm vfadd : RVVFloatingBinBuiltinSet<HasBF=1>; + defm vfsub : RVVFloatingBinBuiltinSet<HasBF=1>; + defm vfrsub : RVVFloatingBinVFBuiltinSet<HasBF=1>; // 13.3. Vector Widening Floating-Point Add/Subtract Instructions // Widening FP add/subtract, 2*SEW = 2*SEW +/- SEW @@ -1038,7 +1038,7 @@ let ManualCodegen = [{ defm vfwsub : RVVFloatingWidenOp0BinBuiltinSet; // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions - defm vfmul : RVVFloatingBinBuiltinSet; + defm vfmul : RVVFloatingBinBuiltinSet<HasBF=1>; defm vfdiv : RVVFloatingBinBuiltinSet; defm vfrdiv : RVVFloatingBinVFBuiltinSet; } @@ -1065,6 +1065,10 @@ let ManualCodegen = [{ defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "x", [["vv", "w", "wvvu"], ["vf", "w", "wveu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "y", + [["vv", "vw", "wvvu"], + ["vf", "vw", "wveu"]]>; } } // 13.3. Vector Widening Floating-Point Add/Subtract Instructions @@ -1081,6 +1085,10 @@ let ManualCodegen = [{ defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "x", [["vv", "w", "wvv"], ["vf", "w", "wve"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfwmul : RVVOutOp0Op1BuiltinSet<"vfwmul", "y", + [["vv", "vw", "wvv"], + ["vf", "vw", "wve"]]>; } } } @@ -1170,6 +1178,8 @@ let ManualCodegen = [{ defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "fd", [["v", "v", "vvu"]]>; let RequiredFeatures = ["zvfh"] in defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "x", [["v", "v", "vvu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "y", [["v", "v", "vvu"]]>; } // 13.8. Vector Floating-Point Square-Root Instruction defm vfsqrt : RVVOutBuiltinSet<"vfsqrt", "fd", [["v", "v", "vv"]]>; @@ -1180,21 +1190,26 @@ let ManualCodegen = [{ defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "fd", [["v", "v", "vv"]]>; let RequiredFeatures = ["zvfh"] in defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "x", [["v", "v", "vv"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfrec7 : RVVOutBuiltinSet<"vfrec7", "y", [["v", "v", "vv"]]>; } // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "fd", [["v", "v", "vv"]]>; let RequiredFeatures = ["zvfh"] in defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "x", [["v", "v", "vv"]]>; +let RequiredFeatures = ["zvfbfa"] in + defm vfrsqrt7 : RVVOutBuiltinSet<"vfrsqrt7", "y", [["v", "v", "vv"]]>; + // 13.11. Vector Floating-Point MIN/MAX Instructions -defm vfmin : RVVFloatingBinBuiltinSet; -defm vfmax : RVVFloatingBinBuiltinSet; +defm vfmin : RVVFloatingBinBuiltinSet<HasBF=1>; +defm vfmax : RVVFloatingBinBuiltinSet<HasBF=1>; // 13.12. Vector Floating-Point Sign-Injection Instructions -defm vfsgnj : RVVFloatingBinBuiltinSet; -defm vfsgnjn : RVVFloatingBinBuiltinSet; -defm vfsgnjx : RVVFloatingBinBuiltinSet; +defm vfsgnj : RVVFloatingBinBuiltinSet<HasBF=1>; +defm vfsgnjn : RVVFloatingBinBuiltinSet<HasBF=1>; +defm vfsgnjx : RVVFloatingBinBuiltinSet<HasBF=1>; } defm vfneg_v : RVVPseudoVFUnaryBuiltin<"vfsgnjn", "fd">; let RequiredFeatures = ["zvfh"] in @@ -1219,6 +1234,8 @@ let UnMaskedPolicyScheme = HasPassthruOperand in { defm vfclass : RVVOp0BuiltinSet<"vfclass", "fd", [["v", "Uv", "Uvv"]]>; let RequiredFeatures = ["zvfh"] in defm vfclass : RVVOp0BuiltinSet<"vfclass", "x", [["v", "Uv", "Uvv"]]>; +let RequiredFeatures = ["zvfbfa"] in + defm vfclass : RVVOp0BuiltinSet<"vfclass", "y", [["v", "vUv", "Uvv"]]>; } // 13.15. Vector Floating-Point Merge Instruction @@ -1239,6 +1256,9 @@ let HasMasked = false, let RequiredFeatures = ["zvfh"] in defm vfmerge : RVVOutOp1BuiltinSet<"vfmerge", "x", [["vfm", "v", "vvem"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfmerge : RVVOutOp1BuiltinSet<"vfmerge", "y", + [["vfm", "v", "vvem"]]>; } // 13.16. Vector Floating-Point Move Instruction @@ -1252,6 +1272,9 @@ let HasMasked = false, let RequiredFeatures = ["zvfh"] in defm vfmv_v : RVVOutBuiltinSet<"vfmv_v_f", "x", [["f", "v", "ve"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfmv_v : RVVOutBuiltinSet<"vfmv_v_f", "y", + [["f", "v", "ve"]]>; } // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions @@ -1287,10 +1310,16 @@ let Log2LMUL = [-3, -2, -1, 0, 1, 2] in { defm : RVVConvBuiltinSet<"vfwcvt_f_x_v", "c", [["Fw", "Fwv"]]>; } } + let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfwcvt_f_bf16" in { + defm : RVVConvBuiltinSet<"vfwcvt_f_xu_v", "c", [["Yw", "YwUv"]]>; + defm : RVVConvBuiltinSet<"vfwcvt_f_x_v", "c", [["Yw", "Ywv"]]>; + } let OverloadedName = "vfwcvt_f" in { defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "f", [["w", "wv"]]>; let RequiredFeatures = ["zvfhmin"] in defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "x", [["w", "wv"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfwcvt_f_f_v", "y", [["vw", "wv"]]>; } } @@ -1300,17 +1329,23 @@ let Log2LMUL = [-3, -2, -1, 0, 1, 2] in { defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "si", [["Uv", "UvFw"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "c", [["Uv", "UvFw"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_rtz_xu_f_w", "c", [["YwUv", "UvYw"]]>; } let OverloadedName = "vfncvt_rtz_x" in { defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "si", [["Iv", "IvFw"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "c", [["Iv", "IvFw"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_rtz_x_f_w", "c", [["YwIv", "IvYw"]]>; } let OverloadedName = "vfncvt_rod_f" in { defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "f", [["v", "vw"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "x", [["v", "vw"]]>; } + let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_rod_f_bf16" in + defm : RVVConvBuiltinSet<"vfncvt_rod_f_f_w", "y", [["v", "vw"]]>; } // Zvfbfmin - Vector convert BF16 to FP32 @@ -1363,11 +1398,15 @@ let ManualCodegen = [{ defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "si", [["Iv", "IvFwu"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["Iv", "IvFwu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["YwIv", "IvYwu"]]>; } let OverloadedName = "vfncvt_xu" in { defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "si", [["Uv", "UvFwu"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["Uv", "UvFwu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["YwUv", "UvYwu"]]>; } let OverloadedName = "vfncvt_f" in { defm : RVVConvBuiltinSet<"vfncvt_f_x_w", "f", [["v", "vIwu"]]>; @@ -1382,6 +1421,8 @@ let ManualCodegen = [{ let RequiredFeatures = ["zvfhmin"] in defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "x", [["v", "vwu"]]>; } + let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_f_bf16" in + defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "y", [["v", "vwu"]]>; } // Zvfbfmin - Vector convert FP32 to BF16 @@ -1430,11 +1471,15 @@ let ManualCodegen = [{ defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "si", [["Iv", "IvFw"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["Iv", "IvFw"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_x_f_w", "c", [["YwIv", "IvYw"]]>; } let OverloadedName = "vfncvt_xu" in { defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "si", [["Uv", "UvFw"]]>; let RequiredFeatures = ["zvfh"] in defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["Uv", "UvFw"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm : RVVConvBuiltinSet<"vfncvt_xu_f_w", "c", [["YwUv", "UvYw"]]>; } let OverloadedName = "vfncvt_f" in { defm : RVVConvBuiltinSet<"vfncvt_f_x_w", "f", [["v", "vIw"]]>; @@ -1449,6 +1494,8 @@ let ManualCodegen = [{ let RequiredFeatures = ["zvfhmin"] in defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "x", [["v", "vw"]]>; } + let RequiredFeatures = ["zvfbfa"], OverloadedName = "vfncvt_f_bf16" in + defm : RVVConvBuiltinSet<"vfncvt_f_f_w", "y", [["v", "vw"]]>; } // Zvfbfmin - Vector convert FP32 to BF16 @@ -1578,6 +1625,9 @@ let HasMasked = false, MaskedPolicyScheme = NonePolicy in { let RequiredFeatures = ["zvfh"] in defm vfmv_f : RVVOp0BuiltinSet<"vfmv_f_s", "x", [["s", "ve", "ev"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfmv_f : RVVOp0BuiltinSet<"vfmv_f_s", "y", + [["s", "ve", "ev"]]>; } let OverloadedName = "vfmv_s", UnMaskedPolicyScheme = HasPassthruOperand, @@ -1589,6 +1639,9 @@ let HasMasked = false, MaskedPolicyScheme = NonePolicy in { defm vfmv_s : RVVOutBuiltinSet<"vfmv_s_f", "x", [["f", "v", "ve"], ["x", "Uv", "UvUe"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm vfmv_s : RVVOutBuiltinSet<"vfmv_s_f", "y", + [["f", "v", "ve"]]>; } } @@ -1601,11 +1654,11 @@ defm vslidedown : RVVSlideDownBuiltinSet; // 16.3.3. Vector Slide1up Instructions let UnMaskedPolicyScheme = HasPassthruOperand in { defm vslide1up : RVVSlideOneBuiltinSet; -defm vfslide1up : RVVFloatingBinVFBuiltinSet; +defm vfslide1up : RVVFloatingBinVFBuiltinSet<HasBF=1>; // 16.3.4. Vector Slide1down Instruction defm vslide1down : RVVSlideOneBuiltinSet; -defm vfslide1down : RVVFloatingBinVFBuiltinSet; +defm vfslide1down : RVVFloatingBinVFBuiltinSet<HasBF=1>; // 16.4. Vector Register Gather Instructions // signed and floating type diff --git a/clang/include/clang/Basic/riscv_vector_common.td b/clang/include/clang/Basic/riscv_vector_common.td index 767bcee7b1596..2a2a04998366a 100644 --- a/clang/include/clang/Basic/riscv_vector_common.td +++ b/clang/include/clang/Basic/riscv_vector_common.td @@ -470,6 +470,10 @@ let HasMaskedOffOperand = false in { defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vv", "v", "vvvv"], ["vf", "v", "vvev"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vv", "v", "vvvv"], + ["vf", "v", "vvev"]]>; } multiclass RVVFloatingTerBuiltinSetRoundingMode { defm "" : RVVOutOp1BuiltinSet<NAME, "fd", @@ -479,6 +483,10 @@ let HasMaskedOffOperand = false in { defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vv", "v", "vvvvu"], ["vf", "v", "vvevu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vv", "v", "vvvvu"], + ["vf", "v", "vvevu"]]>; } } @@ -491,6 +499,10 @@ let HasMaskedOffOperand = false, Log2LMUL = [-2, -1, 0, 1, 2] in { defm "" : RVVOutOp1Op2BuiltinSet<NAME, "x", [["vv", "w", "wwvv"], ["vf", "w", "wwev"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1Op2BuiltinSet<NAME, "y", + [["vv", "vw", "wwvv"], + ["vf", "vw", "wwev"]]>; } multiclass RVVFloatingWidenTerBuiltinSetRoundingMode { defm "" : RVVOutOp1Op2BuiltinSet<NAME, "f", @@ -500,10 +512,14 @@ let HasMaskedOffOperand = false, Log2LMUL = [-2, -1, 0, 1, 2] in { defm "" : RVVOutOp1Op2BuiltinSet<NAME, "x", [["vv", "w", "wwvvu"], ["vf", "w", "wwevu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1Op2BuiltinSet<NAME, "y", + [["vv", "vw", "wwvvu"], + ["vf", "vw", "wwevu"]]>; } } -multiclass RVVFloatingBinBuiltinSet { +multiclass RVVFloatingBinBuiltinSet<bit HasBF = 0> { defm "" : RVVOutOp1BuiltinSet<NAME, "fd", [["vv", "v", "vvv"], ["vf", "v", "vve"]]>; @@ -511,9 +527,15 @@ multiclass RVVFloatingBinBuiltinSet { defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vv", "v", "vvv"], ["vf", "v", "vve"]]>; + if HasBF then { + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vv", "v", "vvv"], + ["vf", "v", "vve"]]>; + } } -multiclass RVVFloatingBinBuiltinSetRoundingMode { +multiclass RVVFloatingBinBuiltinSetRoundingMode<bit HasBF = 0> { defm "" : RVVOutOp1BuiltinSet<NAME, "fd", [["vv", "v", "vvvu"], ["vf", "v", "vveu"]]>; @@ -521,22 +543,38 @@ multiclass RVVFloatingBinBuiltinSetRoundingMode { defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vv", "v", "vvvu"], ["vf", "v", "vveu"]]>; + if HasBF then { + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vv", "v", "vvvu"], + ["vf", "v", "vveu"]]>; + } } -multiclass RVVFloatingBinVFBuiltinSet { +multiclass RVVFloatingBinVFBuiltinSet<bit HasBF = 0> { defm "" : RVVOutOp1BuiltinSet<NAME, "fd", [["vf", "v", "vve"]]>; let RequiredFeatures = ["zvfh"] in defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vf", "v", "vve"]]>; + if HasBF then { + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vf", "v", "vve"]]>; + } } -multiclass RVVFloatingBinVFBuiltinSetRoundingMode { +multiclass RVVFloatingBinVFBuiltinSetRoundingMode<bit HasBF = 0> { defm "" : RVVOutOp1BuiltinSet<NAME, "fd", [["vf", "v", "vveu"]]>; let RequiredFeatures = ["zvfh"] in defm "" : RVVOutOp1BuiltinSet<NAME, "x", [["vf", "v", "vveu"]]>; + if HasBF then { + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOutOp1BuiltinSet<NAME, "y", + [["vf", "v", "vveu"]]>; + } } multiclass RVVFloatingMaskOutBuiltinSet { @@ -547,6 +585,10 @@ multiclass RVVFloatingMaskOutBuiltinSet { defm "" : RVVOp0Op1BuiltinSet<NAME, "x", [["vv", "vm", "mvv"], ["vf", "vm", "mve"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVOp0Op1BuiltinSet<NAME, "y", + [["vv", "vm", "mvv"], + ["vf", "vm", "mve"]]>; } multiclass RVVFloatingMaskOutVFBuiltinSet @@ -748,6 +790,10 @@ multiclass RVVFloatingWidenBinBuiltinSet { defm "" : RVVWidenBuiltinSet<NAME, "x", [["vv", "w", "wvv"], ["vf", "w", "wve"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVWidenBuiltinSet<NAME, "y", + [["vv", "vw", "wvv"], + ["vf", "vw", "wve"]]>; } multiclass RVVFloatingWidenBinBuiltinSetRoundingMode { @@ -758,6 +804,10 @@ multiclass RVVFloatingWidenBinBuiltinSetRoundingMode { defm "" : RVVWidenBuiltinSet<NAME, "x", [["vv", "w", "wvvu"], ["vf", "w", "wveu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVWidenBuiltinSet<NAME, "y", + [["vv", "vw", "wvvu"], + ["vf", "vw", "wveu"]]>; } multiclass RVVFloatingWidenOp0BinBuiltinSet { @@ -768,6 +818,10 @@ multiclass RVVFloatingWidenOp0BinBuiltinSet { defm "" : RVVWidenWOp0BuiltinSet<NAME # "_w", "x", [["wv", "w", "wwv"], ["wf", "w", "wwe"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVWidenWOp0BuiltinSet<NAME # "_w", "y", + [["wv", "vw", "wwv"], + ["wf", "ew", "wwe"]]>; } multiclass RVVFloatingWidenOp0BinBuiltinSetRoundingMode { @@ -778,4 +832,8 @@ multiclass RVVFloatingWidenOp0BinBuiltinSetRoundingMode { defm "" : RVVWidenWOp0BuiltinSet<NAME # "_w", "x", [["wv", "w", "wwvu"], ["wf", "w", "wweu"]]>; + let RequiredFeatures = ["zvfbfa"] in + defm "" : RVVWidenWOp0BuiltinSet<NAME # "_w", "y", + [["wv", "vw", "wwvu"], + ["wf", "ew", "wweu"]]>; } diff --git a/clang/lib/Sema/SemaRISCV.cpp b/clang/lib/Sema/SemaRISCV.cpp index 3ba93ff98898b..c5ef0d535628d 100644 --- a/clang/lib/Sema/SemaRISCV.cpp +++ b/clang/lib/Sema/SemaRISCV.cpp @@ -1464,7 +1464,8 @@ void SemaRISCV::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, Decl *D, } else if (Info.ElementType->isBFloat16Type() && !FeatureMap.lookup("zvfbfmin") && - !FeatureMap.lookup("xandesvbfhcvt")) + !FeatureMap.lookup("xandesvbfhcvt") && + !FeatureMap.lookup("experimental-zvfbfa")) if (DeclareAndesVectorBuiltins) { Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << "zvfbfmin or xandesvbfhcvt"; diff --git a/clang/lib/Support/RISCVVIntrinsicUtils.cpp b/clang/lib/Support/RISCVVIntrinsicUtils.cpp index 5a4e805d4a9d1..dad3d0dae423a 100644 --- a/clang/lib/Support/RISCVVIntrinsicUtils.cpp +++ b/clang/lib... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/161158 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
