[clang] [AMDGPU][Clang] Support bfloat16 arithmetic for GFX950 and GFX1250. (PR #147541)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 8 07:47:59 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Ivan Kosarev (kosarev)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/147541.diff
2 Files Affected:
- (modified) clang/lib/Basic/Targets/AMDGPU.h (+2)
- (added) clang/test/CodeGen/AMDGPU/full-bf16.c (+23)
``````````diff
diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h
index 509128f3cf070..006c2fe475a94 100644
--- a/clang/lib/Basic/Targets/AMDGPU.h
+++ b/clang/lib/Basic/Targets/AMDGPU.h
@@ -451,6 +451,8 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo {
CUMode = false;
else if (F == "+image-insts")
HasImage = true;
+ else if (F == "+gfx950-insts" || F == "+gfx1250-insts")
+ HasFullBFloat16 = true;
bool IsOn = F.front() == '+';
StringRef Name = StringRef(F).drop_front();
if (!llvm::is_contained(TargetIDFeatures, Name))
diff --git a/clang/test/CodeGen/AMDGPU/full-bf16.c b/clang/test/CodeGen/AMDGPU/full-bf16.c
new file mode 100644
index 0000000000000..7770d02c59df1
--- /dev/null
+++ b/clang/test/CodeGen/AMDGPU/full-bf16.c
@@ -0,0 +1,23 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa-gnu -target-cpu gfx950 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa-gnu -target-cpu gfx1250 -emit-llvm -o - %s | FileCheck %s
+
+// CHECK-LABEL: define dso_local bfloat @div(
+// CHECK-SAME: bfloat noundef [[A:%.*]], bfloat noundef [[B:%.*]]) #[[ATTR0:[0-9]+]] {
+// CHECK-NEXT: [[ENTRY:.*:]]
+// CHECK-NEXT: [[RETVAL:%.*]] = alloca bfloat, align 2, addrspace(5)
+// CHECK-NEXT: [[A_ADDR:%.*]] = alloca bfloat, align 2, addrspace(5)
+// CHECK-NEXT: [[B_ADDR:%.*]] = alloca bfloat, align 2, addrspace(5)
+// CHECK-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr
+// CHECK-NEXT: [[A_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[A_ADDR]] to ptr
+// CHECK-NEXT: [[B_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[B_ADDR]] to ptr
+// CHECK-NEXT: store bfloat [[A]], ptr [[A_ADDR_ASCAST]], align 2
+// CHECK-NEXT: store bfloat [[B]], ptr [[B_ADDR_ASCAST]], align 2
+// CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[A_ADDR_ASCAST]], align 2
+// CHECK-NEXT: [[TMP1:%.*]] = load bfloat, ptr [[B_ADDR_ASCAST]], align 2
+// CHECK-NEXT: [[DIV:%.*]] = fdiv bfloat [[TMP0]], [[TMP1]]
+// CHECK-NEXT: ret bfloat [[DIV]]
+//
+__bf16 div(__bf16 a, __bf16 b) {
+ return a / b;
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/147541
More information about the cfe-commits
mailing list