Skip to content

Commit 27fff01

Browse files
smanna12steffenlarsenfrasercrmckagainullsarnex
authored
[SYCL] Fix Ambiguity in Overloaded Unary Minus Operator for bfloat16 (#15393)
This commit resolves an overload resolution ambiguity on Windows self-builds in downstream pulldown when using the unary minus operator with bfloat16. The operator now takes a const-qualified argument, enabling its use with both lvalues and rvalues and fixing the reported build error. --------- Signed-off-by: Larsen, Steffen <[email protected]> Signed-off-by: Sarnie, Nick <[email protected]> Signed-off-by: Soumi Manna <[email protected]> Co-authored-by: Steffen Larsen <[email protected]> Co-authored-by: Fraser Cormack <[email protected]> Co-authored-by: Artur Gainullin <[email protected]> Co-authored-by: Nick Sarnie <[email protected]> Co-authored-by: Kenneth Benzie (Benie) <[email protected]> Co-authored-by: Chris Perkins <[email protected]> Co-authored-by: Michael Toguchi <[email protected]>
1 parent 0f64638 commit 27fff01

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

sycl/include/sycl/ext/oneapi/bfloat16.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class bfloat16 {
182182
explicit operator bool() { return to_float(value) != 0.0f; }
183183

184184
// Unary minus operator overloading
185-
friend bfloat16 operator-(bfloat16 &lhs) {
185+
friend bfloat16 operator-(const bfloat16 &lhs) {
186186
#if defined(__SYCL_DEVICE_ONLY__) && defined(__NVPTX__) && \
187187
(__SYCL_CUDA_ARCH__ >= 800)
188188
detail::Bfloat16StorageT res;

sycl/test/check_device_code/vector/vector_math_ops.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,26 +341,26 @@ SYCL_EXTERNAL auto TestNegation(vec<ext::oneapi::bfloat16, 3> a) { return !a; }
341341
// CHECK-NEXT: [[REF_TMP_I:%.*]] = alloca float, align 4
342342
// CHECK-NEXT: [[A_ASCAST:%.*]] = addrspacecast ptr [[A]] to ptr addrspace(4)
343343
// CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])
344-
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[REF_TMP_I]])
345-
// CHECK-NEXT: [[REF_TMP_ASCAST_I:%.*]] = addrspacecast ptr [[REF_TMP_I]] to ptr addrspace(4)
346344
// CHECK-NEXT: tail call void @llvm.memset.p4.i64(ptr addrspace(4) noundef align 32 dereferenceable(32) [[AGG_RESULT]], i8 0, i64 32, i1 false), !alias.scope [[META100]]
345+
// CHECK-NEXT: [[REF_TMP_ASCAST_I:%.*]] = addrspacecast ptr [[REF_TMP_I]] to ptr addrspace(4)
347346
// CHECK-NEXT: br label [[FOR_COND_I:%.*]]
348347
// CHECK: for.cond.i:
349348
// CHECK-NEXT: [[I_0_I:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC_I:%.*]], [[FOR_BODY_I:%.*]] ]
350349
// CHECK-NEXT: [[CMP_I:%.*]] = icmp ult i64 [[I_0_I]], 16
351350
// CHECK-NEXT: br i1 [[CMP_I]], label [[FOR_BODY_I]], label [[_ZN4SYCL3_V16DETAILNGERKNS0_3VECINS0_3EXT6ONEAPI8BFLOAT16ELI16EEE_EXIT:%.*]]
352351
// CHECK: for.body.i:
353352
// CHECK-NEXT: [[ARRAYIDX_I_I_I_I:%.*]] = getelementptr inbounds [16 x %"class.sycl::_V1::ext::oneapi::bfloat16"], ptr addrspace(4) [[A_ASCAST]], i64 0, i64 [[I_0_I]]
354-
// CHECK-NEXT: [[CALL_I_I_I:%.*]] = call spir_func noundef float @__devicelib_ConvertBF16ToFINTEL(ptr addrspace(4) noundef align 2 dereferenceable(2) [[ARRAYIDX_I_I_I_I]]) #[[ATTR8]], !noalias [[META100]]
353+
// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 4, ptr nonnull [[REF_TMP_I]])
354+
// CHECK-NEXT: [[CALL_I_I_I:%.*]] = call spir_func float @__devicelib_ConvertBF16ToFINTEL(ptr addrspace(4) noundef align 2 dereferenceable(2) [[ARRAYIDX_I_I_I_I]]) #[[ATTR8]], !noalias [[META103:![0-9]+]]
355355
// CHECK-NEXT: [[FNEG_I:%.*]] = fneg float [[CALL_I_I_I]]
356-
// CHECK-NEXT: store float [[FNEG_I]], ptr [[REF_TMP_I]], align 4, !tbaa [[TBAA47]], !noalias [[META100]]
356+
// CHECK-NEXT: store float [[FNEG_I]], ptr [[REF_TMP_I]], align 4, !tbaa [[TBAA47]], !noalias [[META103]]
357+
// CHECK-NEXT: [[CALL_I_I10_I:%.*]] = call spir_func noundef zeroext i16 @__devicelib_ConvertFToBF16INTEL(ptr addrspace(4) noundef align 4 dereferenceable(4) [[REF_TMP_ASCAST_I]]) #[[ATTR8]], !noalias [[META103]]
358+
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[REF_TMP_I]])
357359
// CHECK-NEXT: [[ARRAYIDX_I_I_I9_I:%.*]] = getelementptr inbounds [16 x %"class.sycl::_V1::ext::oneapi::bfloat16"], ptr addrspace(4) [[AGG_RESULT]], i64 0, i64 [[I_0_I]]
358-
// CHECK-NEXT: [[CALL_I_I10_I:%.*]] = call spir_func noundef zeroext i16 @__devicelib_ConvertFToBF16INTEL(ptr addrspace(4) noundef align 4 dereferenceable(4) [[REF_TMP_ASCAST_I]]) #[[ATTR8]], !noalias [[META100]]
359360
// CHECK-NEXT: store i16 [[CALL_I_I10_I]], ptr addrspace(4) [[ARRAYIDX_I_I_I9_I]], align 2, !tbaa [[TBAA103:![0-9]+]], !alias.scope [[META100]]
360361
// CHECK-NEXT: [[INC_I]] = add nuw nsw i64 [[I_0_I]], 1
361362
// CHECK-NEXT: br label [[FOR_COND_I]], !llvm.loop [[LOOP105:![0-9]+]]
362363
// CHECK: _ZN4sycl3_V16detailngERKNS0_3vecINS0_3ext6oneapi8bfloat16ELi16EEE.exit:
363-
// CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 4, ptr nonnull [[REF_TMP_I]])
364364
// CHECK-NEXT: ret void
365365
//
366366
SYCL_EXTERNAL auto TestMinus(vec<ext::oneapi::bfloat16, 16> a) { return -a; }

0 commit comments

Comments
 (0)