[Bug rtl-optimization/78932] [ARM] -O2 generates wrong code

2017-01-04 Thread xqr4n54r1 at hotmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78932

--- Comment #2 from xqr4n54r1 at hotmail dot com ---
Created attachment 40457
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40457=edit
memcpy instead of get_unaligned_be


* I wrote memcpy instead of get_unaligned_be{16|32} and I saw that solved the
problem. I think that the basic block reordering does not work correctly.

Attachment has following :

- filter_O2.{c|s} :  Indicates that the problem has occurred.
- filter_memcpy.{c|s} : Indicates solution that compile memcpy instead
get_unaligned_be{16|32} I mentioned above.

[Bug rtl-optimization/78932] [ARM] -O2 generates wrong code

2017-01-03 Thread xqr4n54r1 at hotmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78932

--- Comment #1 from xqr4n54r1 at hotmail dot com ---
Created attachment 40444
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40444=edit
filter_with_O2.c.201r.bbro :  Indicates that the problem has occurred.  -
filter_without_inline.c.201r.bbro :  Indicates solution that compile without
inline keyword, I mentioned

Attachment has following :

filter_with_O2.c.201r.bbro :  Indicates that the problem has occurred.  -
filter_without_inline.c.201r.bbro :  Indicates solution that compile without
inline keyword, I mentioned

[Bug rtl-optimization/78932] New: [ARM] -O2 generates wrong code

2016-12-27 Thread xqr4n54r1 at hotmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78932

Bug ID: 78932
   Summary: [ARM] -O2 generates wrong code
   Product: gcc
   Version: 4.5.3
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: rtl-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: xqr4n54r1 at hotmail dot com
  Target Milestone: ---
  Host: arm-linux
Target: arm-linux-uclibcgnueabi
 Build: x86_64-pc-linux-gnu

Created attachment 40414
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40414=edit
Attachment has following :   - filter_with_O2.{c|i|s} :  Indicates that the
problem has occurred.  - filter_without_bbro.{c|i|s} : Indicates solution that
compile without bbro  I mentioned above as 1.

I compiled the linux-2.6.27
(https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tag/?h=v2.6.37)
for broadcom arm. I noticed that the chksum of some TCP packages was broken. I
found the function (sk_run_filter:filter.c) that was the problem, and I made
the following changes on it to fix the problem.

1. unsigned int __attribute__((optimize("-fno-reorder-blocks")))
sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)

2. unsigned int __attribute__((optimize("-Os"))) sk_run_filter(struct sk_buff
*skb, struct sock_filter *filter, int flen)

3. unsigned int __attribute__((optimize("-O1"))) sk_run_filter(struct sk_buff
*skb, struct sock_filter *filter, int flen)

4. static void *load_pointer(struct sk_buff *skb, int k, unsigned int size,
void *buffer)  -> the inline function used is removed inline keyword.

--> These above results brought me to a bug of optimize gcc.

Compile options:

arm-linux-gcc -Wp,-MD,net/core/.filter.o.d  -nostdinc -isystem
/usr/lib/arm-linux-uclibcgnueabi/4.5.3/include
-I/kernel/linux-2_6.37/arch/arm/include -Iinclude  -include
include/generated/autoconf.h -D__KERNEL__ -mlittle-endian
-Iarch/arm/mach-brcm-hnd/include -Iarch/arm/plat-brcm/include -Wall -Wundef
-Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
-Werror-implicit-function-declaration -Wno-format-security
-fno-delete-null-pointer-checks -fwrapv -Dlinux -DHNDCTF -DCTFPOOL -DCTFMAP
-DPKTC -DCTF_IPV6 -O2 -marm -ffreestanding -fno-dwarf2-cfi-asm
-mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -D__LINUX_ARM_ARCH__=7
-march=armv7-a -msoft-float -Uarm -ggdb -Wframe-larger-than=2048
-fno-stack-protector -fomit-frame-pointer -Wdeclaration-after-statement
-Wno-pointer-sign -fno-strict-overflow -fconserve-stack   
-D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(filter)" 
-D"KBUILD_MODNAME=KBUILD_STR(filter)"  -c -o net/core/.tmp_filter.o
net/core/filter.c

--

Attachment has following :

 - filter_with_O2.{c|i|s} :  Indicates that the problem has occurred.
 - filter_without_bbro.{c|i|s} : Indicates solution that compile without bbro 
I mentioned above as 1.
 - filter_without_inline.{c|i|s} : Indicates solution that compile without
inline I mentioned above as 4.