[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-12-22 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm closed this revision.
arsenm added a comment.

4086ea331cad827d74542e52a86b7d7933376e7b


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-12-21 Thread Yaxun Liu via Phabricator via cfe-commits
yaxunl accepted this revision.
yaxunl added a comment.
This revision is now accepted and ready to land.

LGTM. Thanks.

It seems gcc assumes the argument to nan is nonnull 
(https://godbolt.org/z/xzb8T6Gon), so we can assume that too.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-12-19 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm requested review of this revision.
arsenm added a comment.

ping


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-12-14 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm updated this revision to Diff 482839.
arsenm added a comment.

Don't handle null and add nonnull attributes


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

Files:
  clang/lib/Headers/__clang_hip_math.h
  clang/test/Headers/__clang_hip_math.hip

Index: clang/test/Headers/__clang_hip_math.hip
===
--- clang/test/Headers/__clang_hip_math.hip
+++ clang/test/Headers/__clang_hip_math.hip
@@ -26,18 +26,18 @@
 // CHECK:   while.cond.i:
 // CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
 // CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
-// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[__TAGP_ADDR_0_I]], null
-// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
-// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA3:![0-9]+]]
+// CHECK-NEXT:[[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
+// CHECK-NEXT:br i1 [[CMP_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
+// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP1:%.*]] = and i8 [[TMP0]], -8
 // CHECK-NEXT:[[TMP2:%.*]] = icmp eq i8 [[TMP1]], 48
 // CHECK-NEXT:br i1 [[TMP2]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
 // CHECK:   if.then.i:
 // CHECK-NEXT:[[MUL_I:%.*]] = shl i64 [[__R_0_I]], 3
-// CHECK-NEXT:[[CONV3_I:%.*]] = sext i8 [[TMP0]] to i64
+// CHECK-NEXT:[[CONV5_I:%.*]] = sext i8 [[TMP0]] to i64
 // CHECK-NEXT:[[ADD_I:%.*]] = add i64 [[MUL_I]], -48
-// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV3_I]]
+// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
 // CHECK-NEXT:[[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
 // CHECK-NEXT:br label [[CLEANUP_I]]
 // CHECK:   cleanup.i:
@@ -58,18 +58,18 @@
 // CHECK:   while.cond.i:
 // CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
 // CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
-// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[__TAGP_ADDR_0_I]], null
-// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
-// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA3]]
+// CHECK-NEXT:[[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
+// CHECK-NEXT:br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
+// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP1:%.*]] = add i8 [[TMP0]], -48
 // CHECK-NEXT:[[TMP2:%.*]] = icmp ult i8 [[TMP1]], 10
 // CHECK-NEXT:br i1 [[TMP2]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
 // CHECK:   if.then.i:
 // CHECK-NEXT:[[MUL_I:%.*]] = mul i64 [[__R_0_I]], 10
-// CHECK-NEXT:[[CONV3_I:%.*]] = sext i8 [[TMP0]] to i64
+// CHECK-NEXT:[[CONV5_I:%.*]] = sext i8 [[TMP0]] to i64
 // CHECK-NEXT:[[ADD_I:%.*]] = add i64 [[MUL_I]], -48
-// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV3_I]]
+// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
 // CHECK-NEXT:[[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
 // CHECK-NEXT:br label [[CLEANUP_I]]
 // CHECK:   cleanup.i:
@@ -84,39 +84,40 @@
   return __make_mantissa_base10(p);
 }
 
+//
 // CHECK-LABEL: @test___make_mantissa_base16(
 // CHECK-NEXT:  entry:
 // CHECK-NEXT:br label [[WHILE_COND_I:%.*]]
 // CHECK:   while.cond.i:
 // CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
 // CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_2_I:%.*]], [[CLEANUP_I]] ]
-// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[__TAGP_ADDR_0_I]], null
-// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
-// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA3]]
+// CHECK-NEXT:[[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
+// CHECK-NEXT:br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
+// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP1:%.*]] = add i8 [[TMP0]], -48
 // CHECK-NEXT:[[TMP2:%.*]] = icmp ult i8 [[TMP1]], 10
-// CHECK-NEXT:br i1 [[TMP2]], label [[IF_END29_I:%.*]], label [[IF_ELSE_I:%.*]]
+// CHECK-NEXT:br i1 [[TMP2]], label [[IF_END31_I:%.*]], label [[IF_ELSE_I:%.*]]
 // CHECK:   if.else.i:
 // CHECK-NEXT:[[TMP3:%.*]] = 

[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-11-28 Thread Jon Chesterfield via Phabricator via cfe-commits
JonChesterfield accepted this revision.
JonChesterfield added a comment.
This revision is now accepted and ready to land.

Patch is obviously fine. Given these are internal functions, perhaps we should 
annotate them with the non-null attribute and delete the early exit.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-11-28 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm added a comment.

ping


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138392/new/

https://reviews.llvm.org/D138392

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions

2022-11-20 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm created this revision.
arsenm added reviewers: yaxunl, JonChesterfield, saiislam, scchan, AlexVlx, 
b-sumner.
Herald added a project: All.
arsenm requested review of this revision.
Herald added a subscriber: wdng.

The optimizer was folding the entire function to return 0. This
meant to be checking the character content of the pointer is the
string terminator, not null.

  

Not sure if the null checks are necessary. I'm not sure what
the spec is for these, or why these would even be exposed.


https://reviews.llvm.org/D138392

Files:
  clang/lib/Headers/__clang_hip_math.h
  clang/test/Headers/__clang_hip_math.hip

Index: clang/test/Headers/__clang_hip_math.hip
===
--- clang/test/Headers/__clang_hip_math.hip
+++ clang/test/Headers/__clang_hip_math.hip
@@ -22,31 +22,32 @@
 
 // CHECK-LABEL: @test___make_mantissa_base8(
 // CHECK-NEXT:  entry:
-// CHECK-NEXT:br label [[WHILE_COND_I:%.*]]
+// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[P:%.*]], null
+// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_COND_I:%.*]]
 // CHECK:   while.cond.i:
-// CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
-// CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
-// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[__TAGP_ADDR_0_I]], null
-// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
-// CHECK:   while.body.i:
+// CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ], [ [[P]], [[ENTRY:%.*]] ]
+// CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ [[__R_1_I:%.*]], [[CLEANUP_I]] ], [ 0, [[ENTRY]] ]
 // CHECK-NEXT:[[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA3:![0-9]+]]
+// CHECK-NEXT:[[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
+// CHECK-NEXT:br i1 [[CMP_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT]], label [[WHILE_BODY_I:%.*]]
+// CHECK:   while.body.i:
 // CHECK-NEXT:[[TMP1:%.*]] = and i8 [[TMP0]], -8
 // CHECK-NEXT:[[TMP2:%.*]] = icmp eq i8 [[TMP1]], 48
-// CHECK-NEXT:br i1 [[TMP2]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
-// CHECK:   if.then.i:
+// CHECK-NEXT:br i1 [[TMP2]], label [[IF_THEN5_I:%.*]], label [[CLEANUP_I]]
+// CHECK:   if.then5.i:
 // CHECK-NEXT:[[MUL_I:%.*]] = shl i64 [[__R_0_I]], 3
-// CHECK-NEXT:[[CONV3_I:%.*]] = sext i8 [[TMP0]] to i64
+// CHECK-NEXT:[[CONV6_I:%.*]] = sext i8 [[TMP0]] to i64
 // CHECK-NEXT:[[ADD_I:%.*]] = add i64 [[MUL_I]], -48
-// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV3_I]]
+// CHECK-NEXT:[[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV6_I]]
 // CHECK-NEXT:[[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
 // CHECK-NEXT:br label [[CLEANUP_I]]
 // CHECK:   cleanup.i:
-// CHECK-NEXT:[[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
-// CHECK-NEXT:[[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
+// CHECK-NEXT:[[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN5_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
+// CHECK-NEXT:[[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN5_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
 // CHECK-NEXT:br i1 [[TMP2]], label [[WHILE_COND_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT]], !llvm.loop [[LOOP6:![0-9]+]]
 // CHECK:   _ZL21__make_mantissa_base8PKc.exit:
-// CHECK-NEXT:[[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
-// CHECK-NEXT:ret i64 [[RETVAL_2_I]]
+// CHECK-NEXT:[[RETVAL_3_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
+// CHECK-NEXT:ret i64 [[RETVAL_3_I]]
 //
 extern "C" __device__ uint64_t test___make_mantissa_base8(const char *p) {
   return __make_mantissa_base8(p);
@@ -54,31 +55,32 @@
 
 // CHECK-LABEL: @test___make_mantissa_base10(
 // CHECK-NEXT:  entry:
-// CHECK-NEXT:br label [[WHILE_COND_I:%.*]]
+// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[P:%.*]], null
+// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_COND_I:%.*]]
 // CHECK:   while.cond.i:
-// CHECK-NEXT:[[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
-// CHECK-NEXT:[[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
-// CHECK-NEXT:[[TOBOOL_NOT_I:%.*]] = icmp eq ptr [[__TAGP_ADDR_0_I]], null
-// CHECK-NEXT:br i1 [[TOBOOL_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
-// CHECK:   while.body.i:
+// CHECK-NEXT: