intel/fs/bank_conflicts: Use posix_memalign() instead of overaligned new to obtain...
authorFrancisco Jerez <currojerez@riseup.net>
Sun, 17 Dec 2017 21:05:55 +0000 (13:05 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Thu, 21 Dec 2017 23:19:59 +0000 (15:19 -0800)
commit1aa79d5ed5fbc9d3ee3c4d279892c49e8393fd3b
treec947f12f027881259564882361a41bc425ffa31e
parent7665383a33f9ce9256aa121cbe4d3bd948dff145
intel/fs/bank_conflicts: Use posix_memalign() instead of overaligned new to obtain vector storage.

The weight_vector_type constructor was inadvertently assuming C++17
semantics of the new operator applied on a type with alignment
requirement greater than the largest fundamental alignment.
Unfortunately on earlier C++ dialects the implementation was allowed
to raise an allocation failure when the alignment requirement of the
allocated type was unsupported, in an implementation-defined fashion.
It's expected that a C++ implementation recent enough to implement
P0035R4 would have honored allocation requests for such over-aligned
types even if the C++17 dialect wasn't active, which is likely the
reason why this problem wasn't caught by our CI system.

A more elegant fix would involve wrapping the __SSE2__ block in a
'__cpp_aligned_new >= 201606' preprocessor conditional and continue
taking advantage of the language feature, but that would yield lower
compile-time performance on old compilers not implementing it
(e.g. GCC versions older than 7.0).

Fixes: af2c320190f3c731 "intel/fs: Implement GRF bank conflict mitigation pass."
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104226
Reported-by: Józef Kucia <joseph.kucia@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/intel/compiler/brw_fs_bank_conflicts.cpp