Use FxIndexSet instead of FxHashSet for asm_target_features query.
This commit is contained in:
parent
b0202d9c2c
commit
ee8bc5b0b2
10 changed files with 39 additions and 37 deletions
|
@ -1,6 +1,6 @@
|
|||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
|
@ -80,7 +80,7 @@ pub fn target_reserves_x18(target: &Target) -> bool {
|
|||
fn reserved_x18(
|
||||
_arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
_target_features: &FxHashSet<Symbol>,
|
||||
_target_features: &FxIndexSet<Symbol>,
|
||||
target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::{sym, Symbol};
|
||||
use std::fmt;
|
||||
|
@ -64,14 +64,14 @@ impl ArmInlineAsmRegClass {
|
|||
}
|
||||
|
||||
// This uses the same logic as useR7AsFramePointer in LLVM
|
||||
fn frame_pointer_is_r7(target_features: &FxHashSet<Symbol>, target: &Target) -> bool {
|
||||
fn frame_pointer_is_r7(target_features: &FxIndexSet<Symbol>, target: &Target) -> bool {
|
||||
target.is_like_osx || (!target.is_like_windows && target_features.contains(&sym::thumb_mode))
|
||||
}
|
||||
|
||||
fn frame_pointer_r11(
|
||||
arch: InlineAsmArch,
|
||||
reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
target: &Target,
|
||||
is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -87,7 +87,7 @@ fn frame_pointer_r11(
|
|||
fn frame_pointer_r7(
|
||||
_arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -101,7 +101,7 @@ fn frame_pointer_r7(
|
|||
fn not_thumb1(
|
||||
_arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -118,7 +118,7 @@ fn not_thumb1(
|
|||
fn reserved_r9(
|
||||
arch: InlineAsmArch,
|
||||
reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
target: &Target,
|
||||
is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use crate::spec::Target;
|
||||
use crate::{abi::Size, spec::RelocModel};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxIndexSet};
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
|
@ -37,13 +37,14 @@ macro_rules! def_reg_class {
|
|||
|
||||
pub(super) fn regclass_map() -> rustc_data_structures::fx::FxHashMap<
|
||||
super::InlineAsmRegClass,
|
||||
rustc_data_structures::fx::FxHashSet<super::InlineAsmReg>,
|
||||
rustc_data_structures::fx::FxIndexSet<super::InlineAsmReg>,
|
||||
> {
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use super::InlineAsmRegClass;
|
||||
let mut map = FxHashMap::default();
|
||||
$(
|
||||
map.insert(InlineAsmRegClass::$arch($arch_regclass::$class), FxHashSet::default());
|
||||
map.insert(InlineAsmRegClass::$arch($arch_regclass::$class), FxIndexSet::default());
|
||||
)*
|
||||
map
|
||||
}
|
||||
|
@ -94,7 +95,7 @@ macro_rules! def_regs {
|
|||
pub fn validate(self,
|
||||
_arch: super::InlineAsmArch,
|
||||
_reloc_model: crate::spec::RelocModel,
|
||||
_target_features: &rustc_data_structures::fx::FxHashSet<Symbol>,
|
||||
_target_features: &rustc_data_structures::fx::FxIndexSet<Symbol>,
|
||||
_target: &crate::spec::Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -118,11 +119,11 @@ macro_rules! def_regs {
|
|||
pub(super) fn fill_reg_map(
|
||||
_arch: super::InlineAsmArch,
|
||||
_reloc_model: crate::spec::RelocModel,
|
||||
_target_features: &rustc_data_structures::fx::FxHashSet<Symbol>,
|
||||
_target_features: &rustc_data_structures::fx::FxIndexSet<Symbol>,
|
||||
_target: &crate::spec::Target,
|
||||
_map: &mut rustc_data_structures::fx::FxHashMap<
|
||||
super::InlineAsmRegClass,
|
||||
rustc_data_structures::fx::FxHashSet<super::InlineAsmReg>,
|
||||
rustc_data_structures::fx::FxIndexSet<super::InlineAsmReg>,
|
||||
>,
|
||||
) {
|
||||
#[allow(unused_imports)]
|
||||
|
@ -334,7 +335,7 @@ impl InlineAsmReg {
|
|||
self,
|
||||
arch: InlineAsmArch,
|
||||
reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
target: &Target,
|
||||
is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -701,9 +702,9 @@ impl fmt::Display for InlineAsmType {
|
|||
pub fn allocatable_registers(
|
||||
arch: InlineAsmArch,
|
||||
reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
target: &crate::spec::Target,
|
||||
) -> FxHashMap<InlineAsmRegClass, FxHashSet<InlineAsmReg>> {
|
||||
) -> FxHashMap<InlineAsmRegClass, FxIndexSet<InlineAsmReg>> {
|
||||
match arch {
|
||||
InlineAsmArch::X86 | InlineAsmArch::X86_64 => {
|
||||
let mut map = x86::regclass_map();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::{sym, Symbol};
|
||||
use std::fmt;
|
||||
|
@ -55,7 +55,7 @@ impl RiscVInlineAsmRegClass {
|
|||
fn not_e(
|
||||
_arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
target_features: &FxHashSet<Symbol>,
|
||||
target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use super::{InlineAsmArch, InlineAsmType};
|
||||
use crate::spec::{RelocModel, Target};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_data_structures::fx::FxIndexSet;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
|
@ -147,7 +147,7 @@ impl X86InlineAsmRegClass {
|
|||
fn x86_64_only(
|
||||
arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
_target_features: &FxHashSet<Symbol>,
|
||||
_target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -161,7 +161,7 @@ fn x86_64_only(
|
|||
fn high_byte(
|
||||
arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
_target_features: &FxHashSet<Symbol>,
|
||||
_target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -174,7 +174,7 @@ fn high_byte(
|
|||
fn rbx_reserved(
|
||||
arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
_target_features: &FxHashSet<Symbol>,
|
||||
_target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
@ -190,7 +190,7 @@ fn rbx_reserved(
|
|||
fn esi_reserved(
|
||||
arch: InlineAsmArch,
|
||||
_reloc_model: RelocModel,
|
||||
_target_features: &FxHashSet<Symbol>,
|
||||
_target_features: &FxIndexSet<Symbol>,
|
||||
_target: &Target,
|
||||
_is_clobber: bool,
|
||||
) -> Result<(), &'static str> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue