gallivm: obey clarified shift behavior
authorRoland Scheidegger <sroland@vmware.com>
Tue, 30 Jul 2013 19:26:27 +0000 (21:26 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 2 Aug 2013 01:49:57 +0000 (03:49 +0200)
commite7ed70a52e2d0efc11d1e9fe19938bc431f947c1
tree3e1a5cb36d282047bebd91807540812a47656191
parent7a72bef47e8731276ac4ca0b8c4d6d50366c1ec2
gallivm: obey clarified shift behavior

llvm shifts are undefined for shift counts exceeding (or matching) bit width,
so need to apply a mask for the tgsi shift instructions.

v2: only use mask for the tgsi shift instructions, not for the build shift
helpers. None of the internal callers need this behavior, and while llvm can
optimize away the masking for constants there are legitimate cases where it
might not be able to do so even if we know that shift count must be smaller
than type width (currently all such callers do not use the build shift
helpers).

Reviewed-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_bitarit.c
src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c