[cfe-dev] Behavior of -mcpu

David Greene via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 1 08:27:43 PST 2019


Kristof Beyls <Kristof.Beyls at arm.com> writes:

> Hi David, 
>
> I thought that mtune just wasn’t supported for any target in clang,
> but I may be wrong.
> FWIW, the following thread discusses what would be needed to implement
> support for mtune:
> http://lists.llvm.org/pipermail/llvm-dev/2017-October/118344.html
> AFAIK, so far nobody has worked on implementing that proposal.

Now I'm (more) confused.  If -mtune doesn't work and -mcpu isn't
supported for x86-64 (I get a warning about an unused option) how do
users compile for a target like skylake-avx512 and have the optimizer
tune for it?

                            -David

>     On 28 Feb 2019, at 21:42, David Greene via cfe-dev
>     <cfe-dev at lists.llvm.org> wrote:
>
>     
>     
>     Stefan Teleman <stefan.teleman at gmail.com> writes:
>     
>         On Thu, Feb 28, 2019 at 2:09 PM David Greene via cfe-dev
>         <cfe-dev at lists.llvm.org> wrote:
>         
>         
>             Interesting. I am observing different behavior between -
>             mcpu= and
>             -march= -mtune= with aarch64-unknown-linux-gnu:
>
>         We never supported -mtune=thunderx2t99.
>         
>         -mcpu=thunderx2t99
>         -march=armv8.1-a+lse
>
>     This is problematic for users. If clang interprets command-line
>     flags
>     differently based on subtarget, how are users to know what to pass
>     to
>     clang to get, say, the best performance, or best code size, or
>     whatever?
>     
>     Users don't expect to have to set up their build systems to pass
>     different -mcpu/-march/-mtune flags based on what they are
>     targeting.
>     They want to do something like this and be done with it:
>     
>     TARGET=$(call get_triple)
>     ARCH=$(call get_arch)
>     TUNE=$(call get_tune)
>     
>     CFLAGS += --target ${TARGET} -march=${ARCH) -mtune=${TUNE}
>     
>     They could, but probably won't be happy to, do:
>     
>     ifeq (TARGET,aarch64-unknown-linux-gnu)
>     ifeq (TUNE,thunderx2t99)
>     # -mtune unsupported
>     CFLAGS += -mcpu=${TUNE}
>     else ifeq (TUNE,anothertarget)
>     # -mcpu unsupported
>     CFLAGS += -march=${ARCH} -mtune=${TUNE}
>     else ifeq (TUNE,thirdtarget)
>     CFLAGS += -mtune=${TUNE}
>     endif
>     else ifeq(TARGET,x86_64-unknown-linux-gnu)
>     ifeq (TUNE,skylake-avx512)
>     # -mtune unsupported
>     CFLAGS += -mcpu=${TUNE}
>     else ifeq (TUNE,broadwell)
>     # -mcpu unsupported
>     CFLAGS += -march=${ARCH} -mtune=${TUNE}
>     endif
>     else ifeq(TARGET,third-target-triple)
>     # -mcpu and -mtune unsupported
>     CFLAGS += -march=${ARCH}
>     endif
>     
>     It's hard enough for users to support building for multiple
>     subtargets
>     without having to deal with basic compiler behavior differences
>     per
>     subtarget.
>     
>     Perhaps there is some capability of clang I'm not understanding.
>     What's
>     the expected/canonical way to tune compilation for a subtarget?
>     
>     -David
>     _______________________________________________
>     cfe-dev mailing list
>     cfe-dev at lists.llvm.org
>     https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>     


More information about the cfe-dev mailing list