From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14807 invoked by alias); 1 Aug 2013 11:36:58 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 14574 invoked by uid 48); 1 Aug 2013 11:36:55 -0000 From: "mikpe at it dot uu.se" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/58041] Unaligned access to arrays in packed structure Date: Thu, 01 Aug 2013 11:36:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Version: 4.9.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: mikpe at it dot uu.se X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2013-08/txt/msg00019.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58041 Mikael Pettersson changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |wschmidt at gcc dot gnu.org --- Comment #4 from Mikael Pettersson --- Started with Bill Schmidt's PR46556 patch in r190037. (Author CC:d.) Comparing the generated code between 190036 and 190037 clearly shows how the misaligned accesses were wrongly replaced by aligned accesses: --- pr58041.s-r190036 2013-08-01 13:30:59.264514025 +0200 +++ pr58041.s-r190037 2013-08-01 13:27:38.874840851 +0200 @@ -18,37 +18,11 @@ @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. - stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, fp} add ip, r0, r1, asl #3 - ldrb r7, [ip, #2] @ zero_extendqisi2 - ldrb r6, [ip, #6] @ zero_extendqisi2 - ldrb r0, [ip, #1] @ zero_extendqisi2 - ldrb r1, [ip, #5] @ zero_extendqisi2 - ldrb r5, [ip, #3] @ zero_extendqisi2 - ldrb r4, [ip, #7] @ zero_extendqisi2 - orr r0, r0, r7, asl #8 - orr r1, r1, r6, asl #8 - ldrb r10, [ip, #4] @ zero_extendqisi2 - ldrb r6, [ip, #8] @ zero_extendqisi2 - mov fp, r2, lsr #8 - orr r0, r0, r5, asl #16 - mov r9, r2, lsr #16 - mov r8, r2, lsr #24 - mov r7, r3, lsr #8 - orr r1, r1, r4, asl #16 - mov r5, r3, lsr #16 - mov r4, r3, lsr #24 - strb fp, [ip, #2] - strb r2, [ip, #1] - strb r9, [ip, #3] - strb r8, [ip, #4] - strb r7, [ip, #6] - strb r3, [ip, #5] - strb r5, [ip, #7] - strb r4, [ip, #8] - orr r0, r0, r10, asl #24 - orr r1, r1, r6, asl #24 - ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, fp} + ldr r0, [ip, #1] + ldr r1, [ip, #5] + str r2, [ip, #1] + str r3, [ip, #5] bx lr .size foo, .-foo .section .text.startup,"ax",%progbits