[LLVMdev] Embedding cpu and feature strings into IR and enabling switching subtarget on a per function basis

Akira Hatanaka ahatanak at gmail.com
Tue Jan 27 10:52:27 PST 2015


Yes, I believe float ABI will be discussed later. I'm choosing a few
options at a time from the list (see the file attached to PR21471) and
trying to understand what changes are necessary to pass down the options to
the backend for LTO and also enable compiling function with different
options.

On Tue, Jan 27, 2015 at 12:11 AM, Alex Rosenberg <alexr at leftfield.org>
wrote:

> The chosen float ABI is also critical to pass down.
>
> Alex
>
> On Jan 27, 2015, at 12:28 AM, Akira Hatanaka <ahatanak at gmail.com> wrote:
>
> I've been investigating what is needed to ensure command line options are
> passed to the backend codegen passes during LTO and enable compiling
> different functions in a module with different command line options (see
> the links below for previous discussions).
>
> http://thread.gmane.org/gmane.comp.compilers.llvm.devel/78855
> http://thread.gmane.org/gmane.comp.compilers.llvm.devel/80456
>
> The command line options I'm currently looking into are "-target-cpu" and
> "-target-feature" and I would like to get feedback about the approach I've
> taken (patches attached).
>
> The attached patches make the following changes:
>
> - In TargetMachine::getSubtarget(const Function*) and MachineFunction's
> constructor, use per-function subtarget object instead of TargetMachine's
> (module-level) subtarget object. This allows passes like selection dag to
> switch the target on a per-function basis.
>
> - Define class TargetOptions::Option, which records whether an option has
> appeared on the command line along with the option's value. Long term, this
> might not be the best solution and I expect it will be modified or replaced
> when the new command line infrastructure becomes available.
>
> - Fix X86's subtarget lookup to override the function attributes if the
> corresponding options were specified on the command line.
>
> - FIx clang to embed "-target-cpu" and "-target-feature" attributes in the
> IR.
>
> I've tested the changes I made and confirmed that target options such as
> "-mavx2" don't get dropped during LTO and are honored by backend codegen
> passes.
>
> This is my plan for the remaining tasks:
>
> 1. FIx other in-tree targets and other code-gen passes that are still
> using TargetMachine's subtarget where the per-function subtarget should be
> used.
>
> 2. Fix TargetTransformInfo to compute the various code-gen costs
> accurately when subtarget is switched on a per-function basis. One way to
> do this is to make the pointer or reference to the Function object
> available to the various subclasses of TargetTransformInfo by defining the
> necessary functions in FunctionTargetTransformInfo (similar to the changes
> made in r218004). However, passes like Inliner that are not function passes
> cannot access FunctionTargetTransformInfo, so it has to be done in a
> different way.
>
> 3. Forbid inlining functions that have incompatible cpu and feature
> attributes. It seems the simplest approach is to allow inlining only if the
> cpu and feature attributes match exactly, but it's also possible to relax
> this restriction.
>
> <cpufs_llvm1.patch>
>
> <cpufs_clang1.patch>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150127/e191d7bc/attachment.html>


More information about the llvm-dev mailing list