Don't make use of roundps in MSan builds
Don't make use of roundps in MSan builds

MemorySanitizer's instrumentation currently does not handle the roundps
intrinsic/instruction. It falls back to checking the source operand for
any uninitialized data. In shaders we can have conditional code which
causes only some SIMD lanes to be initialized, and only those lanes are
logically used in further computations. So it's valid in these cases to
do operations that use roundps on a partially initialized vector, but
MSan will report it as an error.

This can be worked around by avoiding the use of roundps and instead
relying on lowerRound() and lowerTrunc(), which translate into the
target-agnostic round and trunc intrinsics. MemorySanitizer handles
these in the maybeHandleSimpleNomemIntrinsic() method, which copies the
shadow of the source vector to the destination vector (i.e. it
propagates it without checking it).

Note that roundps does not follow the same code path as round and trunc
because it has an immediate operand to select the rounding mode. We
could handle it explicitly by doing the same shadow propagation.

Bug: b/172238865
Change-Id: Ib14bf4fd240b4e56462fb70429b442763f077d1e
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/65628
Reviewed-by: Alexis Hétu <1c7141772178a7e80858c3db5052b328076f08f4@google.com>
Kokoro-Result: kokoro <2ac7b1f3fa578934c95181d4272be0d3bca00121@google.com>
Tested-by: Nicolas Capens <51edc787c30f24c4904e8ffbb5523c3a9f7a451d@google.com>

google/swiftshader,google/swiftshader,google/swiftshader