[llvm-dev] [cfe-dev] When to use '-mcpu' versus '-march'

Martin J. O'Riordan via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 20 13:18:14 PDT 2018


Thanks Eric,

 

After the original reply to my query I had a good look at the GCC documentation for these options, and what I discovered is that “there is no consensus” in GCC.  Basically, saying do what GCC does was a non-answer as it clarified nothing.

 

X86 has deprecated ‘-mcpu’ in favour of ‘-mtune’, and it uses ‘-mtune’ to mean that the scheduling, etc. should be biased in favour of more performant code for the processor identified by ‘-mtune’, but that the code is still 100% functional on all other processors in the family identified by ‘-march’.

 

MIPS and ARM seem to have a very different notion of what they mean, and at the end of my examination of these options, I came to the conclusion that there is no common convention for usage and it all seems very haphazard.

 

With the processor that I am targeting, the notion of tuning schedules for a particular variant is meaningless, because the schedule is critical in the absence of interlocked instruction execution (and VLIW).  This effectively means that ‘-mtune’ is not appropriate to my platform and leaves me with the toss-up of ‘-mcpu’ versus ‘-march’, and to tell you the truth, I can see little reason to choose one over the other.

 

Most of the time, I want to differentiate based on ISA versions.  That is, the code should be generated for one version of the ISA or another, though for the same basic architecture (ISA can vary a lot from version to version).  ARM seems to use ‘-march’ and ‘-mcpu’ more or less interchangeably, and uses ‘+’ to add features to the value specified.

 

The majority of GCC target only use ‘-mcpu’, so I think that in the absence of any real and meaningful best practice, that I will just stick with the triples and ‘-mcpu’.

 

All the best,

 

            MartinO

 

From: cfe-dev [mailto:cfe-dev-bounces at lists.llvm.org] On Behalf Of Eric Christopher via cfe-dev
Sent: 20 March 2018 17:50
To: Richard Hadsell <hadsell at blueskystudios.com>
Cc: Clang Dev <cfe-dev at lists.llvm.org>
Subject: Re: [cfe-dev] When to use '-mcpu' versus '-march'

 

Hi Richard,

On Tue, Mar 20, 2018 at 9:33 AM Richard Hadsell <hadsell at blueskystudios.com <mailto:hadsell at blueskystudios.com> > wrote:

Does clang differ from g++ in this respect?

 

It shouldn't, we strive for compatibility here.

 

This is from the man page for g++ 4.8.5 for Intel x86 and x86-64 processors:

 

This is because this is for the in-tree x86 target. ARM is different. Mips is more like what I said. mn10300 is more like what I said. Power is different again, and in a different way.

 

However, Martin was asking about a non-specific out of tree target and the advice there should still hold.

 

-eric

 

        -march=cpu-type
            Generate instructions for the machine type cpu-type.  In contrast to -mtune=cpu-type, which merely tunes the generated code
            for the specified cpu-type, -march=cpu-type allows GCC to generate code that may not run at all on processors other than the
            one indicated.  Specifying -march=cpu-type implies -mtune=cpu-type.
...
        -mtune=cpu-type
            Tune to cpu-type everything applicable about the generated code, except for the ABI and the set of available instructions.
            While picking a specific cpu-type schedules things appropriately for that particular chip, the compiler does not generate any
            code that cannot run on the default machine type unless you use a -march=cpu-type option.  ...
...
        -mcpu=cpu-type
            A deprecated synonym for -mtune.



On 03/20/2018 12:40 AM, Eric Christopher via cfe-dev wrote:
> Hi Martin,
>
> Sorry about the delay here, but I've got some advice even though a lot of things aren't solid anywhere.
>
> a) Does this match an out of tree target for gcc? If so, I'd match that.
> b) Typically -march/-mtune (though the latter isn't supported in llvm at the moment, see an earlier post from me to llvm-dev on how to support that) are what I'd use for new ports. We used it in a number of new/out of tree ports in gcc as well.
> c) -mcpu is occastionally used for "-march+-mtune" when -march by itself is generally "this architecture, but generic tuning".
>

--

Dick Hadsell                    203-992-6320 <tel:(203)%20992-6320>   Fax: 203-992-6001 <tel:(203)%20992-6001> 
Reply-to:                       hadsell at blueskystudios.com <mailto:hadsell at blueskystudios.com> 
Blue Sky Studioshttp://www.blueskystudios.com <http://www.blueskystudios.com> 
1 American Lane, Greenwich, CT 06831-2560

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180320/1506ec36/attachment.html>


More information about the llvm-dev mailing list