Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adjust -Ctarget-cpu=native handling in cg_llvm #83084

Merged
merged 1 commit into from
Mar 17, 2021

Commits on Mar 16, 2021

  1. Adjust -Ctarget-cpu=native handling in cg_llvm

    When cg_llvm encounters the `-Ctarget-cpu=native` it computes an
    explciit set of features that applies to the target in order to
    correctly compile code for the host CPU (because e.g. `skylake` alone is
    not sufficient to tell if some of the instructions are available or
    not).
    
    However there were a couple of issues with how we did this. Firstly, the
    order in which features were overriden wasn't quite right – conceptually
    you'd expect `-Ctarget-cpu=native` option to override the features that
    are implicitly set by the target definition. However due to how other
    `-Ctarget-cpu` values are handled we must adopt the following order
    of priority:
    
    * Features from -Ctarget-cpu=*; are overriden by
    * Features implied by --target; are overriden by
    * Features from -Ctarget-feature; are overriden by
    * function specific features.
    
    Another problem was in that the function level `target-features`
    attribute would overwrite the entire set of the globally enabled
    features, rather than just the features the
    `#[target_feature(enable/disable)]` specified. With something like
    `-Ctarget-cpu=native` we'd end up in a situation wherein a function
    without `#[target_feature(enable)]` annotation would have a broader
    set of features compared to a function with one such attribute. This
    turned out to be a cause of heavy run-time regressions in some code
    using these function-level attributes in conjunction with
    `-Ctarget-cpu=native`, for example.
    
    With this PR rustc is more careful about specifying the entire set of
    features for functions that use `#[target_feature(enable/disable)]` or
    `#[instruction_set]` attributes.
    
    Sadly testing the original reproducer for this behaviour is quite
    impossible – we cannot rely on `-Ctarget-cpu=native` to be anything in
    particular on developer or CI machines.
    nagisa committed Mar 16, 2021
    Configuration menu
    Copy the full SHA
    72fb437 View commit details
    Browse the repository at this point in the history