diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp --- a/clang/lib/Basic/Targets/RISCV.cpp +++ b/clang/lib/Basic/Targets/RISCV.cpp @@ -349,6 +349,11 @@ ISAInfo = std::move(*ParseResult); } + // Turn on native half type support by set half type to legal. + if (ISAInfo->hasExtension("zfh")){ + HasLegalHalfType = true; + } + if (ABI.empty()) ABI = ISAInfo->computeDefaultABI().str(); diff --git a/clang/test/CodeGen/RISCV/_Float16-add.c b/clang/test/CodeGen/RISCV/_Float16-add.c new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/RISCV/_Float16-add.c @@ -0,0 +1,19 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// RUN: %clang_cc1 -triple riscv64 -target-feature +zfh -emit-llvm %s -o - \ +// RUN: | FileCheck %s + +_Float16 x; +_Float16 y; +_Float16 z; +// CHECK-LABEL: @func( +// CHECK-NEXT: entry: +// CHECK-NEXT: [[TMP0:%.*]] = load half, ptr @y, align 2 +// CHECK-NEXT: [[TMP1:%.*]] = load half, ptr @z, align 2 +// CHECK-NEXT: [[ADD:%.*]] = fadd half [[TMP0]], [[TMP1]] +// CHECK-NEXT: store half [[ADD]], ptr @x, align 2 +// CHECK-NEXT: ret void +// +void func() +{ + x = y + z; +}