[PATCH] fold-const: Don't access bit fields with too big mode (PR71310)
Jeff Law
law@redhat.com
Fri Jun 10 19:14:00 GMT 2016
On 06/10/2016 12:48 PM, Segher Boessenkool wrote:
> Currently, optimize_bit_field_compare reads the bitfield in word_mode
> if it can. If the bit field is normally accessed in a smaller mode,
> this might be a violation of the memory model, although the "extra"
> part of the read is not used. But also, previous stores to the bit
> field will have been done in the smaller mode, and then bigger loads
> from it cause a LHS problem.
>
> Bootstrapped and regchecked on powerpc64-linux. Is this okay for
> trunk?
>
>
> Segher
>
>
> 2016-06-10 Segher Boessenkool <segher@kernel.crashing.org>
>
> PR middle-end/71310
> * fold-const.c (optimize_bit_field_compare): Don't try to use
> word_mode unconditionally for reading the bit field, look at
> DECL_BIT_FIELD_REPRESENTATIVE instead.
Testcase? It would seem to me that you could make a ppc testcase
without major difficulties from either of the tests in the BZ.
The change itself is fine, and it's approved with a testcase or at least
an explanation of why you can't turn either of the tests from the BZ
into a testcase in our framework.
I do note there's two more calls to get_best_mode that unconditionally
uses word_mode in fold_truth_andor_1. I think in that case we're
looking to try and loads of adjacent fields that are being compared. I
haven't thought much about whether or not it's safe WRT the C++11 memory
model.
Jeff
More information about the Gcc-patches
mailing list