https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70321
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> --- or and xor have the same issue: [hjl@gnu-tools-1 bitwise-1]$ cat or.i extern long long x; void foo (long long ixi) { x = ixi | 14348907; } [hjl@gnu-tools-1 bitwise-1]$ make or.s /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -fno-asynchronous-unwind-tables -O2 -m32 -S -o or.s or.i [hjl@gnu-tools-1 bitwise-1]$ make or1.s /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -fno-asynchronous-unwind-tables -O2 -m32 -mno-stv -S -o or1.s or.i [hjl@gnu-tools-1 bitwise-1]$ cat or.s .file "or.i" .text .p2align 4,,15 .globl foo .type foo, @function foo: movl 4(%esp), %eax movl 8(%esp), %edx orl $14348907, %eax orb $0, %dh movl %eax, x movl %edx, x+4 ret .size foo, .-foo .ident "GCC: (GNU) 6.0.0 20160318 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tools-1 bitwise-1]$ cat or1.s .file "or.i" .text .p2align 4,,15 .globl foo .type foo, @function foo: movl 4(%esp), %eax orl $14348907, %eax movl %eax, x movl 8(%esp), %eax movl %eax, x+4 ret .size foo, .-foo .ident "GCC: (GNU) 6.0.0 20160318 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tools-1 bitwise-1]$