[PATCH] D138392: clang/HIP: Fix broken implementations of __make_mantissa* functions
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
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
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
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
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
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
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: