public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "rguenth at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/52080] Stores to bitfields introduce a store-data-race on adjacent data Date: Wed, 01 Feb 2012 11:13:00 -0000 [thread overview] Message-ID: <bug-52080-4-Cd4w8LFuCE@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-52080-4@http.gcc.gnu.org/bugzilla/> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52080 --- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-01 11:12:41 UTC --- Btw, offset = bitnum / unit; bitpos = bitnum % unit; byte_offset = (bitnum % BITS_PER_WORD) / BITS_PER_UNIT + (offset * UNITS_PER_WORD); byte_offset is bollocks (or has a really poor name). On SPARC64 I see (gdb) p unit $11 = 8 (gdb) p offset $12 = 12 (gdb) p bitpos $13 = 0 (gdb) p byte_offset $14 = 100 Other than that we are falling into the generic store_fixed_bit_field routine which at the top does unsigned int total_bits = BITS_PER_WORD; and mode = GET_MODE (op0); if (GET_MODE_BITSIZE (mode) == 0 || GET_MODE_BITSIZE (mode) > GET_MODE_BITSIZE (word_mode)) mode = word_mode; (now, why we use a BLKmode mem here and not a QImode mem may be surprising) get_best_mode still returns DImode because that's the largest mode the given alignment supports. After that we're lost. So it seems that to fix this case we'd need to figure out some other largest mode we can pass to get_best_mode. The only hint would be from providing a different mode for the initial MEM we create, like with Index: gcc/expr.c =================================================================== --- gcc/expr.c (revision 183791) +++ gcc/expr.c (working copy) @@ -4705,6 +4705,12 @@ expand_assignment (tree to, tree from, b to_rtx = adjust_address (to_rtx, mode1, 0); else if (GET_MODE (to_rtx) == VOIDmode) to_rtx = adjust_address (to_rtx, BLKmode, 0); + else if (TREE_CODE (to) == COMPONENT_REF + && DECL_BIT_FIELD (TREE_OPERAND (to, 1)) + && DECL_MODE (TREE_OPERAND (to, 1)) != BLKmode) + to_rtx = adjust_address (to_rtx, + TYPE_MODE (DECL_BIT_FIELD_TYPE + (TREE_OPERAND (to, 1))), 0); } if (offset != 0) That avoids the use of QImode we have on the field-decl but also adjusts MEM_SIZE ...
next prev parent reply other threads:[~2012-02-01 11:13 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-02-01 10:07 [Bug target/52080] New: " rguenth at gcc dot gnu.org 2012-02-01 10:23 ` [Bug target/52080] " rguenth at gcc dot gnu.org 2012-02-01 10:25 ` rguenth at gcc dot gnu.org 2012-02-01 10:39 ` rguenth at gcc dot gnu.org 2012-02-01 11:13 ` rguenth at gcc dot gnu.org [this message] 2012-02-01 17:12 ` ebotcazou at gcc dot gnu.org 2012-02-01 17:45 ` ebotcazou at gcc dot gnu.org 2012-02-01 17:50 ` matz at gcc dot gnu.org 2012-02-01 18:53 ` bergner at gcc dot gnu.org 2012-02-02 11:01 ` gcc-bugs at tesarici dot cz 2012-02-02 11:11 ` rguenth at gcc dot gnu.org 2012-02-02 12:40 ` gcc-bugs at tesarici dot cz 2012-02-21 12:04 ` rguenth at gcc dot gnu.org 2012-03-14 11:00 ` rguenth at gcc dot gnu.org 2012-03-14 11:01 ` rguenth at gcc dot gnu.org 2012-06-04 8:44 ` rguenth at gcc dot gnu.org 2013-02-19 20:37 ` LpSolit at netscape dot net 2014-02-16 13:17 ` jackie.rosen at hushmail dot com
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-52080-4-Cd4w8LFuCE@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).