https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102162
--- Comment #3 from deller at gmx dot de --- Hi Arnd, I think the problem with your testcase is, that the compiler doesn't know the alignment of the parameter "p" in your f_unaligned() function. So it will generate byte-accesses. If you modify your testcase by adding this and compiling with -O1 (or higher) you see the problem: int evil; int f_unaligned2(void) { return get_unaligned(&evil); } 00000000 <f_unaligned2>: 0: 2b 60 00 00 addil L%0,dp,r1 4: 34 21 00 00 ldo 0(r1),r1 8: e8 40 c0 00 bv r0(rp) c: 0c 20 10 9c ldw 0(r1),ret0