[clang] [clang][CodeGen] fix UB in aarch64 bfloat16 scalar conversion (PR #89062)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 17 20:37:55 PDT 2024
https://github.com/nihui updated https://github.com/llvm/llvm-project/pull/89062
>From 05461899522816d2569fdab73b9eeda525524cc8 Mon Sep 17 00:00:00 2001
From: nihui <shuizhuyuanluo at 126.com>
Date: Wed, 17 Apr 2024 20:04:00 +0800
Subject: [PATCH 1/2] fix UB in bfloat16 scalar conversion
---
clang/include/clang/Basic/arm_neon.td | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/include/clang/Basic/arm_neon.td b/clang/include/clang/Basic/arm_neon.td
index 6d655c39360d3b..6390ba3f9fe5e5 100644
--- a/clang/include/clang/Basic/arm_neon.td
+++ b/clang/include/clang/Basic/arm_neon.td
@@ -275,7 +275,7 @@ def OP_VCVT_BF16_F32_HI_A32
(call "vget_low", $p0))>;
def OP_CVT_F32_BF16
- : Op<(bitcast "R", (op "<<", (bitcast "int32_t", $p0),
+ : Op<(bitcast "R", (op "<<", (cast "int32_t", (bitcast "int16_t", $p0)),
(literal "int32_t", "16")))>;
//===----------------------------------------------------------------------===//
>From aade75c3de9edeebfbb8aa5d0c939eaae13fc5a5 Mon Sep 17 00:00:00 2001
From: nihui <shuizhuyuanluo at 126.com>
Date: Thu, 18 Apr 2024 11:37:47 +0800
Subject: [PATCH 2/2] update test
---
clang/test/CodeGen/arm-bf16-convert-intrinsics.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/clang/test/CodeGen/arm-bf16-convert-intrinsics.c b/clang/test/CodeGen/arm-bf16-convert-intrinsics.c
index f50eaf371028cd..0f2c5b2546fa35 100644
--- a/clang/test/CodeGen/arm-bf16-convert-intrinsics.c
+++ b/clang/test/CodeGen/arm-bf16-convert-intrinsics.c
@@ -426,11 +426,12 @@ bfloat16_t test_vcvth_bf16_f32(float32_t a) {
// CHECK-NEXT: [[__REINT_I:%.*]] = alloca bfloat, align 2
// CHECK-NEXT: [[__REINT1_I:%.*]] = alloca i32, align 4
// CHECK-NEXT: store bfloat [[A:%.*]], ptr [[__REINT_I]], align 2
-// CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[__REINT_I]], align 2
-// CHECK-NEXT: [[SHL_I:%.*]] = shl i32 [[TMP1]], 16
+// CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[__REINT_I]], align 2
+// CHECK-NEXT: [[CONV_I:%.*]] = sext i16 [[TMP0]] to i32
+// CHECK-NEXT: [[SHL_I:%.*]] = shl i32 [[CONV_I]], 16
// CHECK-NEXT: store i32 [[SHL_I]], ptr [[__REINT1_I]], align 4
-// CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[__REINT1_I]], align 4
-// CHECK-NEXT: ret float [[TMP3]]
+// CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[__REINT1_I]], align 4
+// CHECK-NEXT: ret float [[TMP1]]
//
float32_t test_vcvtah_f32_bf16(bfloat16_t a) {
return vcvtah_f32_bf16(a);
More information about the cfe-commits
mailing list