From 92e485874e668fdc21855e0a288f526161576070 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Tue, 8 Mar 2016 14:23:23 +0200 Subject: [PATCH] mir: Load FatPtr constants instead of keeping them indirect. --- src/librustc_trans/trans/mir/constant.rs | 14 +++++++++++++- src/librustc_trans/trans/mir/operand.rs | 10 ---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/librustc_trans/trans/mir/constant.rs b/src/librustc_trans/trans/mir/constant.rs index ba737bae4459..06eef5d30052 100644 --- a/src/librustc_trans/trans/mir/constant.rs +++ b/src/librustc_trans/trans/mir/constant.rs @@ -17,6 +17,7 @@ use trans::abi; use trans::common::{self, BlockAndBuilder, C_bool, C_bytes, C_floating_f64, C_integral, C_str_slice, C_undef}; use trans::consts; +use trans::datum; use trans::expr; use trans::inline; use trans::type_of; @@ -122,7 +123,18 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> { let d = bcx.with_block(|bcx| { expr::trans(bcx, expr) }); - OperandRef::from_rvalue_datum(d.datum.to_rvalue_datum(d.bcx, "").datum) + + let datum = d.datum.to_rvalue_datum(d.bcx, "").datum; + + match datum.kind.mode { + datum::RvalueMode::ByValue => { + OperandRef { + ty: datum.ty, + val: OperandValue::Immediate(datum.val) + } + } + datum::RvalueMode::ByRef => self.trans_load(bcx, datum.val, datum.ty) + } } mir::Literal::Value { ref value } => { self.trans_constval(bcx, value, ty) diff --git a/src/librustc_trans/trans/mir/operand.rs b/src/librustc_trans/trans/mir/operand.rs index 0871b2e394e0..d1b2025fd4c4 100644 --- a/src/librustc_trans/trans/mir/operand.rs +++ b/src/librustc_trans/trans/mir/operand.rs @@ -81,16 +81,6 @@ impl<'tcx> OperandRef<'tcx> { _ => unreachable!() } } - - pub fn from_rvalue_datum(datum: datum::Datum<'tcx, datum::Rvalue>) -> OperandRef { - OperandRef { - ty: datum.ty, - val: match datum.kind.mode { - datum::RvalueMode::ByRef => OperandValue::Ref(datum.val), - datum::RvalueMode::ByValue => OperandValue::Immediate(datum.val), - } - } - } } impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {