mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 23:12:02 +00:00
rustc_mir: always run the deaggregator.
This commit is contained in:
parent
e598bdfaa0
commit
6e5dacbd5e
@ -39,11 +39,6 @@ impl MirPass for Deaggregator {
|
||||
}
|
||||
}
|
||||
|
||||
// We only run when the MIR optimization level is > 2.
|
||||
if tcx.sess.opts.debugging_opts.mir_opt_level <= 2 {
|
||||
return;
|
||||
}
|
||||
|
||||
let can_deaggregate = |statement: &Statement| {
|
||||
if let StatementKind::Assign(_, ref rhs) = statement.kind {
|
||||
if let Rvalue::Aggregate(..) = *rhs {
|
||||
|
@ -258,6 +258,11 @@ fn optimized_mir<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx
|
||||
|
||||
// Optimizations begin.
|
||||
inline::Inline,
|
||||
|
||||
// Lowering generator control-flow and variables
|
||||
// has to happen before we do anything else to them.
|
||||
generator::StateTransform,
|
||||
|
||||
instcombine::InstCombine,
|
||||
deaggregator::Deaggregator,
|
||||
copy_prop::CopyPropagation,
|
||||
@ -265,7 +270,6 @@ fn optimized_mir<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx
|
||||
simplify::SimplifyCfg::new("final"),
|
||||
simplify::SimplifyLocals,
|
||||
|
||||
generator::StateTransform,
|
||||
add_call_guards::CriticalCallEdges,
|
||||
dump_mir::Marker("PreTrans"),
|
||||
];
|
||||
|
@ -28,14 +28,14 @@ pub fn test() {
|
||||
// CHECK: [[S_b:%[0-9]+]] = bitcast %"core::option::Option<i32>"** %b to i8*
|
||||
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S_b]])
|
||||
|
||||
// CHECK: [[S__5:%[0-9]+]] = bitcast %"core::option::Option<i32>"* %_5 to i8*
|
||||
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S__5]])
|
||||
// CHECK: [[S__4:%[0-9]+]] = bitcast %"core::option::Option<i32>"* %_4 to i8*
|
||||
// CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S__4]])
|
||||
|
||||
// CHECK: [[E_b:%[0-9]+]] = bitcast %"core::option::Option<i32>"** %b to i8*
|
||||
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E_b]])
|
||||
|
||||
// CHECK: [[E__5:%[0-9]+]] = bitcast %"core::option::Option<i32>"* %_5 to i8*
|
||||
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E__5]])
|
||||
// CHECK: [[E__4:%[0-9]+]] = bitcast %"core::option::Option<i32>"* %_4 to i8*
|
||||
// CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E__4]])
|
||||
}
|
||||
|
||||
let c = 1;
|
||||
|
@ -19,7 +19,7 @@ pub enum E {
|
||||
|
||||
// CHECK-LABEL: @exhaustive_match
|
||||
#[no_mangle]
|
||||
pub fn exhaustive_match(e: E) {
|
||||
pub fn exhaustive_match(e: E, unit: ()) {
|
||||
// CHECK: switch{{.*}}, label %[[OTHERWISE:[a-zA-Z0-9_]+]] [
|
||||
// CHECK-NEXT: i[[TY:[0-9]+]] [[DISCR:[0-9]+]], label %[[A:[a-zA-Z0-9_]+]]
|
||||
// CHECK-NEXT: i[[TY:[0-9]+]] [[DISCR:[0-9]+]], label %[[B:[a-zA-Z0-9_]+]]
|
||||
@ -31,7 +31,7 @@ pub fn exhaustive_match(e: E) {
|
||||
// CHECK: [[OTHERWISE]]:
|
||||
// CHECK-NEXT: unreachable
|
||||
match e {
|
||||
E::A => (),
|
||||
E::B => (),
|
||||
E::A => unit,
|
||||
E::B => unit,
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ pub fn change_parameter_pattern() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, MirValidated, MirOptimized, TypeckTables")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, MirValidated, TypeckTables")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_parameter_pattern() {
|
||||
let _ = |&x: &u32| x;
|
||||
|
@ -18,7 +18,7 @@
|
||||
#![feature(rustc_attrs)]
|
||||
|
||||
|
||||
#![rustc_partition_translated(module="issue_38222-mod1", cfg="rpass2")]
|
||||
#![rustc_partition_reused(module="issue_38222-mod1", cfg="rpass2")]
|
||||
|
||||
// If trans had added a dependency edge to the Krate dep-node, nothing would
|
||||
// be re-used, so checking that this module was re-used is sufficient.
|
||||
|
@ -72,7 +72,7 @@ pub fn f1<T:Copy>(x: T) {
|
||||
fn start(_: isize, _: *const *const u8) -> isize {
|
||||
let _b: Pair<u8> = Pair::new(0, 0);
|
||||
let _s: Pair<SevenBytes> = Pair::new(SevenBytes::new(), SevenBytes::new());
|
||||
let _z: ZeroSized = ZeroSized;
|
||||
let ref _z: ZeroSized = ZeroSized;
|
||||
f1::<SevenBytes>(SevenBytes::new());
|
||||
0
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user