On 03/09/15 16:26, Tom Stellard wrote:
On Thu, Sep 03, 2015 at 06:15:26PM +0300, Oded Gabbay wrote:
round(val*dscale) produces a double result, as val and dscale are double.
However, LLVMConstInt receives unsigned long long, so there is an
implicit conversion from double to unsigned long long.
This is an undefined behavior. Therefore, we need to first explicitly
convert the round result to long long, and then let the compiler handle
conversion from that to unsigned long long.

This bug manifests itself in POWER, where all IMM values of -1 are being
converted to 0 implicitly, causing a wrong LLVM IR output.


Signed-off-by: Oded Gabbay <oded.gab...@gmail.com>
CC: "10.6" <mesa-sta...@lists.freedesktop.org>
---

You should add 11.0 to the CC too.

This patch is:
Reviewed-by: Tom Stellard <thomas.stell...@amd.com>

But I wonder why this function is being used for an integer value in the
first place.

This is used when representing constants like 1.0 with unorms/snorms. The caller says, give me the unorm8 equivalent of 1.0, and this function will return 255.

In short, the input is the intended value, the output is the actual representation.

Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to