Skip to content

Commit 843b6e0

Browse files
compiler: Directly use rustc_abi in mir_transform
1 parent 236fe33 commit 843b6e0

19 files changed

+45
-44
lines changed

compiler/rustc_mir_transform/src/abort_unwinding_calls.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
use rustc_abi::ExternAbi;
12
use rustc_ast::InlineAsmOptions;
23
use rustc_middle::mir::*;
34
use rustc_middle::span_bug;
45
use rustc_middle::ty::{self, TyCtxt, layout};
56
use rustc_target::spec::PanicStrategy;
6-
use rustc_target::spec::abi::Abi;
77

88
/// A pass that runs which is targeted at ensuring that codegen guarantees about
99
/// unwinding are upheld for compilations of panic=abort programs.
@@ -38,9 +38,9 @@ impl<'tcx> crate::MirPass<'tcx> for AbortUnwindingCalls {
3838
let body_ty = tcx.type_of(def_id).skip_binder();
3939
let body_abi = match body_ty.kind() {
4040
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
41-
ty::Closure(..) => Abi::RustCall,
42-
ty::CoroutineClosure(..) => Abi::RustCall,
43-
ty::Coroutine(..) => Abi::Rust,
41+
ty::Closure(..) => ExternAbi::RustCall,
42+
ty::CoroutineClosure(..) => ExternAbi::RustCall,
43+
ty::Coroutine(..) => ExternAbi::Rust,
4444
ty::Error(_) => return,
4545
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
4646
};
@@ -79,10 +79,10 @@ impl<'tcx> crate::MirPass<'tcx> for AbortUnwindingCalls {
7979
}
8080
TerminatorKind::Drop { .. } => {
8181
tcx.sess.opts.unstable_opts.panic_in_drop == PanicStrategy::Unwind
82-
&& layout::fn_can_unwind(tcx, None, Abi::Rust)
82+
&& layout::fn_can_unwind(tcx, None, ExternAbi::Rust)
8383
}
8484
TerminatorKind::Assert { .. } | TerminatorKind::FalseUnwind { .. } => {
85-
layout::fn_can_unwind(tcx, None, Abi::Rust)
85+
layout::fn_can_unwind(tcx, None, ExternAbi::Rust)
8686
}
8787
TerminatorKind::InlineAsm { options, .. } => {
8888
options.contains(InlineAsmOptions::MAY_UNWIND)

compiler/rustc_mir_transform/src/coroutine.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ mod by_move_body;
5454
use std::{iter, ops};
5555

5656
pub(super) use by_move_body::coroutine_by_move_body_def_id;
57+
use rustc_abi::{FieldIdx, VariantIdx};
5758
use rustc_data_structures::fx::FxHashSet;
5859
use rustc_errors::pluralize;
5960
use rustc_hir as hir;
@@ -75,7 +76,6 @@ use rustc_mir_dataflow::storage::always_storage_live_locals;
7576
use rustc_span::Span;
7677
use rustc_span::def_id::{DefId, LocalDefId};
7778
use rustc_span::symbol::sym;
78-
use rustc_target::abi::{FieldIdx, VariantIdx};
7979
use rustc_target::spec::PanicStrategy;
8080
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
8181
use rustc_trait_selection::infer::TyCtxtInferExt as _;

compiler/rustc_mir_transform/src/coroutine/by_move_body.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
//! in case precise captures (edition 2021 closure capture rules) caused the inner coroutine
7070
//! to split one field capture into two.
7171
72+
use rustc_abi::{FieldIdx, VariantIdx};
7273
use rustc_data_structures::steal::Steal;
7374
use rustc_data_structures::unord::UnordMap;
7475
use rustc_hir as hir;
@@ -80,7 +81,6 @@ use rustc_middle::mir::visit::MutVisitor;
8081
use rustc_middle::mir::{self, dump_mir};
8182
use rustc_middle::ty::{self, InstanceKind, Ty, TyCtxt, TypeVisitableExt};
8283
use rustc_span::symbol::kw;
83-
use rustc_target::abi::{FieldIdx, VariantIdx};
8484

8585
pub(crate) fn coroutine_by_move_body_def_id<'tcx>(
8686
tcx: TyCtxt<'tcx>,

compiler/rustc_mir_transform/src/dataflow_const_prop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
662662
// Exactly one side is known, attempt some algebraic simplifications.
663663
(FlatSet::Elem(const_arg), _) | (_, FlatSet::Elem(const_arg)) => {
664664
let layout = const_arg.layout;
665-
if !matches!(layout.backend_repr, rustc_target::abi::BackendRepr::Scalar(..)) {
665+
if !matches!(layout.backend_repr, rustc_abi::BackendRepr::Scalar(..)) {
666666
return (FlatSet::Top, FlatSet::Top);
667667
}
668668

compiler/rustc_mir_transform/src/elaborate_box_derefs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
//!
33
//! Box is not actually a pointer so it is incorrect to dereference it directly.
44
5+
use rustc_abi::FieldIdx;
56
use rustc_hir::def_id::DefId;
67
use rustc_middle::mir::patch::MirPatch;
78
use rustc_middle::mir::visit::MutVisitor;
89
use rustc_middle::mir::*;
910
use rustc_middle::span_bug;
1011
use rustc_middle::ty::{Ty, TyCtxt};
11-
use rustc_target::abi::FieldIdx;
1212

1313
/// Constructs the types used when accessing a Box's pointer
1414
fn build_ptr_tys<'tcx>(

compiler/rustc_mir_transform/src/elaborate_drops.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::fmt;
22

3+
use rustc_abi::{FieldIdx, VariantIdx};
34
use rustc_index::IndexVec;
45
use rustc_index::bit_set::BitSet;
56
use rustc_middle::mir::patch::MirPatch;
@@ -14,7 +15,6 @@ use rustc_mir_dataflow::{
1415
Analysis, MoveDataParamEnv, ResultsCursor, on_all_children_bits, on_lookup_result_bits,
1516
};
1617
use rustc_span::Span;
17-
use rustc_target::abi::{FieldIdx, VariantIdx};
1818
use tracing::{debug, instrument};
1919

2020
use crate::deref_separator::deref_finder;

compiler/rustc_mir_transform/src/ffi_unwind_calls.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
use rustc_abi::ExternAbi;
12
use rustc_hir::def_id::{LOCAL_CRATE, LocalDefId};
23
use rustc_middle::mir::*;
34
use rustc_middle::query::{LocalCrate, Providers};
45
use rustc_middle::ty::{self, TyCtxt, layout};
56
use rustc_middle::{bug, span_bug};
67
use rustc_session::lint::builtin::FFI_UNWIND_CALLS;
78
use rustc_target::spec::PanicStrategy;
8-
use rustc_target::spec::abi::Abi;
99
use tracing::debug;
1010

1111
use crate::errors;
@@ -26,9 +26,9 @@ fn has_ffi_unwind_calls(tcx: TyCtxt<'_>, local_def_id: LocalDefId) -> bool {
2626
let body_ty = tcx.type_of(def_id).skip_binder();
2727
let body_abi = match body_ty.kind() {
2828
ty::FnDef(..) => body_ty.fn_sig(tcx).abi(),
29-
ty::Closure(..) => Abi::RustCall,
30-
ty::CoroutineClosure(..) => Abi::RustCall,
31-
ty::Coroutine(..) => Abi::Rust,
29+
ty::Closure(..) => ExternAbi::RustCall,
30+
ty::CoroutineClosure(..) => ExternAbi::RustCall,
31+
ty::Coroutine(..) => ExternAbi::Rust,
3232
ty::Error(_) => return false,
3333
_ => span_bug!(body.span, "unexpected body ty: {:?}", body_ty),
3434
};
@@ -53,7 +53,11 @@ fn has_ffi_unwind_calls(tcx: TyCtxt<'_>, local_def_id: LocalDefId) -> bool {
5353

5454
// Rust calls cannot themselves create foreign unwinds.
5555
// We assume this is true for intrinsics as well.
56-
if let Abi::RustIntrinsic | Abi::Rust | Abi::RustCall | Abi::RustCold = sig.abi() {
56+
if let ExternAbi::RustIntrinsic
57+
| ExternAbi::Rust
58+
| ExternAbi::RustCall
59+
| ExternAbi::RustCold = sig.abi()
60+
{
5761
continue;
5862
};
5963

compiler/rustc_mir_transform/src/function_item_references.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use itertools::Itertools;
2+
use rustc_abi::ExternAbi;
23
use rustc_hir::def_id::DefId;
34
use rustc_middle::mir::visit::Visitor;
45
use rustc_middle::mir::*;
@@ -7,7 +8,6 @@ use rustc_session::lint::builtin::FUNCTION_ITEM_REFERENCES;
78
use rustc_span::Span;
89
use rustc_span::source_map::Spanned;
910
use rustc_span::symbol::sym;
10-
use rustc_target::spec::abi::Abi;
1111

1212
use crate::errors;
1313

@@ -161,7 +161,7 @@ impl<'tcx> FunctionItemRefChecker<'_, 'tcx> {
161161
let fn_sig = self.tcx.fn_sig(fn_id).instantiate(self.tcx, fn_args);
162162
let unsafety = fn_sig.safety().prefix_str();
163163
let abi = match fn_sig.abi() {
164-
Abi::Rust => String::from(""),
164+
ExternAbi::Rust => String::from(""),
165165
other_abi => {
166166
let mut s = String::from("extern \"");
167167
s.push_str(other_abi.name());

compiler/rustc_mir_transform/src/inline.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use std::iter;
44
use std::ops::{Range, RangeFrom};
55

6+
use rustc_abi::{ExternAbi, FieldIdx};
67
use rustc_attr::InlineAttr;
78
use rustc_hir::def::DefKind;
89
use rustc_hir::def_id::DefId;
@@ -18,8 +19,6 @@ use rustc_middle::ty::{
1819
use rustc_session::config::{DebugInfo, OptLevel};
1920
use rustc_span::source_map::Spanned;
2021
use rustc_span::sym;
21-
use rustc_target::abi::FieldIdx;
22-
use rustc_target::spec::abi::Abi;
2322
use tracing::{debug, instrument, trace, trace_span};
2423

2524
use crate::cost_checker::CostChecker;
@@ -254,7 +253,7 @@ impl<'tcx> Inliner<'tcx> {
254253
trace!(?output_type, ?destination_ty);
255254
return Err("failed to normalize return type");
256255
}
257-
if callsite.fn_sig.abi() == Abi::RustCall {
256+
if callsite.fn_sig.abi() == ExternAbi::RustCall {
258257
// FIXME: Don't inline user-written `extern "rust-call"` functions,
259258
// since this is generally perf-negative on rustc, and we hope that
260259
// LLVM will inline these functions instead.
@@ -808,7 +807,7 @@ impl<'tcx> Inliner<'tcx> {
808807
// tmp2 = tuple_tmp.2
809808
//
810809
// and the vector is `[closure_ref, tmp0, tmp1, tmp2]`.
811-
if callsite.fn_sig.abi() == Abi::RustCall && callee_body.spread_arg.is_none() {
810+
if callsite.fn_sig.abi() == ExternAbi::RustCall && callee_body.spread_arg.is_none() {
812811
// FIXME(edition_2024): switch back to a normal method call.
813812
let mut args = <_>::into_iter(args);
814813
let self_ = self.create_temp_if_necessary(

compiler/rustc_mir_transform/src/instsimplify.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Performs various peephole optimizations.
22
3+
use rustc_abi::ExternAbi;
34
use rustc_ast::attr;
45
use rustc_hir::LangItem;
56
use rustc_middle::bug;
@@ -8,7 +9,6 @@ use rustc_middle::ty::layout::ValidityRequirement;
89
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, layout};
910
use rustc_span::sym;
1011
use rustc_span::symbol::Symbol;
11-
use rustc_target::spec::abi::Abi;
1212

1313
use crate::simplify::simplify_duplicate_switch_targets;
1414
use crate::take_array;
@@ -321,8 +321,8 @@ impl<'tcx> InstSimplifyContext<'_, 'tcx> {
321321
let body_ty = self.tcx.type_of(def_id).skip_binder();
322322
let body_abi = match body_ty.kind() {
323323
ty::FnDef(..) => body_ty.fn_sig(self.tcx).abi(),
324-
ty::Closure(..) => Abi::RustCall,
325-
ty::Coroutine(..) => Abi::Rust,
324+
ty::Closure(..) => ExternAbi::RustCall,
325+
ty::Coroutine(..) => ExternAbi::Rust,
326326
_ => bug!("unexpected body ty: {:?}", body_ty),
327327
};
328328

compiler/rustc_mir_transform/src/jump_threading.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
//! Likewise, applying the optimisation can create a lot of new MIR, so we bound the instruction
3636
//! cost by `MAX_COST`.
3737
38+
use rustc_abi::{TagEncoding, Variants};
3839
use rustc_arena::DroplessArena;
3940
use rustc_const_eval::const_eval::DummyMachine;
4041
use rustc_const_eval::interpret::{ImmTy, Immediate, InterpCx, OpTy, Projectable};
@@ -50,7 +51,6 @@ use rustc_middle::ty::{self, ScalarInt, TyCtxt};
5051
use rustc_mir_dataflow::lattice::HasBottom;
5152
use rustc_mir_dataflow::value_analysis::{Map, PlaceIndex, State, TrackElem};
5253
use rustc_span::DUMMY_SP;
53-
use rustc_target::abi::{TagEncoding, Variants};
5454
use tracing::{debug, instrument, trace};
5555

5656
use crate::cost_checker::CostChecker;

compiler/rustc_mir_transform/src/large_enums.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
use rustc_abi::{HasDataLayout, Size, TagEncoding, Variants};
12
use rustc_data_structures::fx::FxHashMap;
23
use rustc_middle::mir::interpret::AllocId;
34
use rustc_middle::mir::*;
45
use rustc_middle::ty::util::IntTypeExt;
56
use rustc_middle::ty::{self, AdtDef, ParamEnv, Ty, TyCtxt};
67
use rustc_session::Session;
7-
use rustc_target::abi::{HasDataLayout, Size, TagEncoding, Variants};
88

99
/// A pass that seeks to optimize unnecessary moves of large enum types, if there is a large
1010
/// enough discrepancy between them.
@@ -249,8 +249,8 @@ impl EnumSizeOpt {
249249
macro_rules! encode_store {
250250
($curr_idx: expr, $endian: expr, $bytes: expr) => {
251251
let bytes = match $endian {
252-
rustc_target::abi::Endian::Little => $bytes.to_le_bytes(),
253-
rustc_target::abi::Endian::Big => $bytes.to_be_bytes(),
252+
rustc_abi::Endian::Little => $bytes.to_le_bytes(),
253+
rustc_abi::Endian::Big => $bytes.to_be_bytes(),
254254
};
255255
for (i, b) in bytes.into_iter().enumerate() {
256256
data[$curr_idx + i] = b;
@@ -263,10 +263,10 @@ impl EnumSizeOpt {
263263
target_bytes * adt_def.discriminant_for_variant(tcx, var_idx).val as usize;
264264
let sz = layout.size;
265265
match ptr_sized_int {
266-
rustc_target::abi::Integer::I32 => {
266+
rustc_abi::Integer::I32 => {
267267
encode_store!(curr_idx, data_layout.endian, sz.bytes() as u32);
268268
}
269-
rustc_target::abi::Integer::I64 => {
269+
rustc_abi::Integer::I64 => {
270270
encode_store!(curr_idx, data_layout.endian, sz.bytes());
271271
}
272272
_ => unreachable!(),

compiler/rustc_mir_transform/src/match_branches.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use std::iter;
22

3+
use rustc_abi::Integer;
34
use rustc_index::IndexSlice;
45
use rustc_middle::mir::patch::MirPatch;
56
use rustc_middle::mir::*;
67
use rustc_middle::ty::layout::{IntegerExt, TyAndLayout};
78
use rustc_middle::ty::{ParamEnv, ScalarInt, Ty, TyCtxt};
8-
use rustc_target::abi::Integer;
99
use rustc_type_ir::TyKind::*;
1010

1111
use super::simplify::simplify_cfg;

compiler/rustc_mir_transform/src/remove_uninit_drops.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
use rustc_abi::FieldIdx;
12
use rustc_index::bit_set::ChunkedBitSet;
23
use rustc_middle::mir::{Body, TerminatorKind};
34
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, VariantDef};
45
use rustc_mir_dataflow::impls::MaybeInitializedPlaces;
56
use rustc_mir_dataflow::move_paths::{LookupResult, MoveData, MovePathIndex};
67
use rustc_mir_dataflow::{Analysis, MaybeReachable, move_path_children_matching};
7-
use rustc_target::abi::FieldIdx;
88

99
/// Removes `Drop` terminators whose target is known to be uninitialized at
1010
/// that point.

compiler/rustc_mir_transform/src/shim.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::assert_matches::assert_matches;
22
use std::{fmt, iter};
33

4+
use rustc_abi::{ExternAbi, FIRST_VARIANT, FieldIdx, VariantIdx};
45
use rustc_hir as hir;
56
use rustc_hir::def_id::DefId;
67
use rustc_hir::lang_items::LangItem;
@@ -15,8 +16,6 @@ use rustc_middle::{bug, span_bug};
1516
use rustc_mir_dataflow::elaborate_drops::{self, DropElaborator, DropFlagMode, DropStyle};
1617
use rustc_span::source_map::Spanned;
1718
use rustc_span::{DUMMY_SP, Span};
18-
use rustc_target::abi::{FIRST_VARIANT, FieldIdx, VariantIdx};
19-
use rustc_target::spec::abi::Abi;
2019
use tracing::{debug, instrument};
2120

2221
use crate::{
@@ -905,7 +904,7 @@ fn build_call_shim<'tcx>(
905904
let mut body =
906905
new_body(MirSource::from_instance(instance), blocks, local_decls, sig.inputs().len(), span);
907906

908-
if let Abi::RustCall = sig.abi {
907+
if let ExternAbi::RustCall = sig.abi {
909908
body.spread_arg = Some(Local::new(sig.inputs().len()));
910909
}
911910

compiler/rustc_mir_transform/src/shim/async_destructor_ctor.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::iter;
22

33
use itertools::Itertools;
4+
use rustc_abi::{FieldIdx, VariantIdx};
45
use rustc_ast::Mutability;
56
use rustc_const_eval::interpret;
67
use rustc_hir::def_id::DefId;
@@ -18,7 +19,6 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
1819
use rustc_middle::{bug, span_bug};
1920
use rustc_span::source_map::respan;
2021
use rustc_span::{Span, Symbol};
21-
use rustc_target::abi::{FieldIdx, VariantIdx};
2222
use rustc_target::spec::PanicStrategy;
2323
use tracing::debug;
2424

compiler/rustc_mir_transform/src/sroa.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use rustc_abi::{FIRST_VARIANT, FieldIdx};
12
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
23
use rustc_hir::LangItem;
34
use rustc_index::IndexVec;
@@ -8,7 +9,6 @@ use rustc_middle::mir::visit::*;
89
use rustc_middle::mir::*;
910
use rustc_middle::ty::{self, Ty, TyCtxt};
1011
use rustc_mir_dataflow::value_analysis::{excluded_locals, iter_fields};
11-
use rustc_target::abi::{FIRST_VARIANT, FieldIdx};
1212
use tracing::{debug, instrument};
1313

1414
pub(super) struct ScalarReplacementOfAggregates;

compiler/rustc_mir_transform/src/unreachable_prop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
//! when all of their successors are unreachable. This is achieved through a
33
//! post-order traversal of the blocks.
44
5+
use rustc_abi::Size;
56
use rustc_data_structures::fx::FxHashSet;
67
use rustc_middle::bug;
78
use rustc_middle::mir::interpret::Scalar;
89
use rustc_middle::mir::patch::MirPatch;
910
use rustc_middle::mir::*;
1011
use rustc_middle::ty::{self, TyCtxt};
11-
use rustc_target::abi::Size;
1212

1313
pub(super) struct UnreachablePropagation;
1414

0 commit comments

Comments
 (0)