https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61267

            Bug ID: 61267
           Summary: [MIPS] -march=mips32 does not always disable the use
                    of branch likely instructions
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: joel.porquet at gmail dot com

The symptom of this bug is that even when specifying "-march=mips32", which is
normally supposed to disable the use of branch likely instructions (according
to the man page), branch likely instructions can still be generated by gcc. It
occurs when specifying "-Os" optimization option.

---

My crosscompilation toolchain was generated with the following options:

Configured with: /home/joel/work/crosstool-test/_build/src/gcc-4.8.2/configure
--build=x86_64-build_unknown-linux-gnu --host=x86_64-build_unknown-linux-gnu
--target=mipsel-tsar-linux-uclibc
--prefix=/home/joel/work/crosstool-test/x-tools/mipsel-tsar-linux-uclibc
--with-sysroot=/home/joel/work/crosstool-test/x-tools/mipsel-tsar-linux-uclibc/mipsel-tsar-linux-uclibc/sysroot
--enable-languages=c --with-arch=mips32 --with-abi=32 --with-tune=mips32
--with-float=soft --with-pkgversion='crosstool-NG hg+default-000000000000'
--enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp
--disable-libquadmath --disable-libquadmath-support
--with-gmp=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-mpfr=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-mpc=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-isl=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-cloog=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-libelf=/home/joel/work/crosstool-test/_build/mipsel-tsar-linux-uclibc/buildtools
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--enable-threads=posix --disable-nls --disable-multilib
--with-local-prefix=/home/joel/work/crosstool-test/x-tools/mipsel-tsar-linux-uclibc/mipsel-tsar-linux-uclibc/sysroot
--enable-c99 --enable-long-long

---

When running gcc -v -Q --help=target, the output (I only selected what seemed
to be the relevant parts) says:

  -mabi=ABI                             32
  -mabicalls                            [enabled]
  -march=ISA                            mips32
  -mbranch-likely                       [disabled]
  -msoft-float                          [enabled]
  -mtune=PROCESSOR                      mips32
  -muclibc                              [enabled]

But now, if I try to compile a program with the "-Os" option, -mbranch-likely
option is enabled by default, even if -march=mips32 is explicitely set as well:

$ gcc -march=mips32 -v -Q -Os -c -o test.o test.c

options enabled: ...
-mbranch-likely
...

---

Once again, according to the man page, branch likely instructions are supposed
to be avoided when compiling for mips32:

"An exception is for the MIPS32 and MIPS64 architectures and processors that
implement those architectures; for those, Branch Likely instructions are not be
generated by default because the MIPS32 and MIPS64 architectures specifically
deprecate their use."

So, is it normal behavior? Shouldn't "-mbranch-likely" not be specified when
compiling for MIPS32 even with "-Os"?

Thanks.

Reply via email to