[Libclc-dev] [bug-fix] add_sat cannot handle type larger than i8 correctly.

Peter Collingbourne peter at pcc.me.uk
Sun Aug 5 15:31:33 PDT 2012

On Sat, Jun 02, 2012 at 02:31:58PM +0800, Lei Mou wrote:
> Hi Peter,
> Thank you for your work, my work benefit a lot from libclc. During my
> attempt to implement sub_sat, I found a bug in function add_sat. It cannot
> handle arguments larger than char correctly. Here is an example founded in
> builtins.link.bc:
> define ptx_device i64 @_Z7add_satll(i64 %x, i64 %y) nounwind alwaysinline {
> entry:
>   %call = tail call ptx_device i8 bitcast (i64 (i64, i64)*
> @__clc_add_sat_s64 to i8 (i64, i64)*)(i64 %x, i64 %y) nounwind  <-- return
> type of i64 is explicitly converted to i8
>   %conv = sext i8 %call to i64
>   ret i64 %conv
> }
> The bug stems from the declarations in add_sat.cl, where the return type of
> all add_sat function is declared as "char". Here is a patch fixing this bug
> by simply changing the return type of each function declaration to the same
> type as their parameters. Patch for sub_sat will be sent in another mail.
> :-)

Hi Lei,

Sorry that this patch slipped through the cracks, but I've applied
it in r161311.


More information about the Libclc-dev mailing list