Skip to content

Commit

Permalink
Fix convertBFloatAPFloatToAPInt for NaN/Inf values
Browse files Browse the repository at this point in the history
Bfloat type has an 8-bit exponent so the exponent of NaN/Inf numbers
must be 0xff instead of 0x1f. This is probably a copy-paste mistake
from the half float type.

Reviewed By: lattner

Differential Revision: https://reviews.llvm.org/D81302
  • Loading branch information
dcaballe committed Jun 6, 2020
1 parent f39e12a commit a258894
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions llvm/lib/Support/APFloat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3278,11 +3278,11 @@ APInt IEEEFloat::convertBFloatAPFloatToAPInt() const {
myexponent = 0;
mysignificand = 0;
} else if (category == fcInfinity) {
myexponent = 0x1f;
myexponent = 0xff;
mysignificand = 0;
} else {
assert(category == fcNaN && "Unknown category!");
myexponent = 0x1f;
myexponent = 0xff;
mysignificand = (uint32_t)*significandParts();
}

Expand Down
24 changes: 24 additions & 0 deletions llvm/test/Assembler/bfloat.ll
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,27 @@ define float @check_bfloat_convert() {
; OPT: 0x4191A00000000000
ret float %tmp
}

; ASSEM-DISASS-LABEL @snan_bfloat
define bfloat @snan_bfloat() {
; ASSEM-DISASS: ret bfloat 0xR7F81
ret bfloat 0xR7F81
}

; ASSEM-DISASS-LABEL @qnan_bfloat
define bfloat @qnan_bfloat() {
; ASSEM-DISASS: ret bfloat 0xR7FC0
ret bfloat 0xR7FC0
}

; ASSEM-DISASS-LABEL @pos_inf_bfloat
define bfloat @pos_inf_bfloat() {
; ASSEM-DISASS: ret bfloat 0xR7F80
ret bfloat 0xR7F80
}

; ASSEM-DISASS-LABEL @neg_inf_bfloat
define bfloat @neg_inf_bfloat() {
; ASSEM-DISASS: ret bfloat 0xRFF80
ret bfloat 0xRFF80
}

0 comments on commit a258894

Please sign in to comment.