From d108a913c79660ab375aff33ea9caa2885ba3051 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Mon, 26 Nov 2018 18:36:58 +0100 Subject: Move get_static from CodegenCx to Builder --- src/librustc_codegen_llvm/builder.rs | 7 +++++ src/librustc_codegen_llvm/consts.rs | 56 +++++++++++++++++----------------- src/librustc_codegen_llvm/intrinsic.rs | 2 +- 3 files changed, 36 insertions(+), 29 deletions(-) (limited to 'src/librustc_codegen_llvm') diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs index 91c650f1b53..a95ddefc869 100644 --- a/src/librustc_codegen_llvm/builder.rs +++ b/src/librustc_codegen_llvm/builder.rs @@ -20,6 +20,7 @@ use value::Value; use libc::{c_uint, c_char}; use rustc::ty::{self, Ty, TyCtxt}; use rustc::ty::layout::{self, Align, Size, TyLayout}; +use rustc::hir::def_id::DefId; use rustc::session::config; use rustc_data_structures::small_c_str::SmallCStr; use rustc_codegen_ssa::traits::*; @@ -1486,6 +1487,12 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { } } +impl StaticBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> { + fn get_static(&self, def_id: DefId) -> &'ll Value { + self.cx().get_static(def_id) + } +} + impl Builder<'a, 'll, 'tcx> { fn call_lifetime_intrinsic(&mut self, intrinsic: &str, ptr: &'ll Value, size: Size) { if self.cx.sess().opts.optimize == config::OptLevel::No { diff --git a/src/librustc_codegen_llvm/consts.rs b/src/librustc_codegen_llvm/consts.rs index 576a49a13dd..5311a6a3730 100644 --- a/src/librustc_codegen_llvm/consts.rs +++ b/src/librustc_codegen_llvm/consts.rs @@ -203,35 +203,8 @@ impl CodegenCx<'ll, 'tcx> { gv } } -} - -impl StaticMethods for CodegenCx<'ll, 'tcx> { - fn static_addr_of( - &self, - cv: &'ll Value, - align: Align, - kind: Option<&str>, - ) -> &'ll Value { - if let Some(&gv) = self.const_globals.borrow().get(&cv) { - unsafe { - // Upgrade the alignment in cases where the same constant is used with different - // alignment requirements - let llalign = align.bytes() as u32; - if llalign > llvm::LLVMGetAlignment(gv) { - llvm::LLVMSetAlignment(gv, llalign); - } - } - return gv; - } - let gv = self.static_addr_of_mut(cv, align, kind); - unsafe { - llvm::LLVMSetGlobalConstant(gv, True); - } - self.const_globals.borrow_mut().insert(cv, gv); - gv - } - fn get_static(&self, def_id: DefId) -> &'ll Value { + crate fn get_static(&self, def_id: DefId) -> &'ll Value { let instance = Instance::mono(self.tcx, def_id); if let Some(&g) = self.instances.borrow().get(&instance) { return g; @@ -351,6 +324,33 @@ impl StaticMethods for CodegenCx<'ll, 'tcx> { self.instances.borrow_mut().insert(instance, g); g } +} + +impl StaticMethods for CodegenCx<'ll, 'tcx> { + fn static_addr_of( + &self, + cv: &'ll Value, + align: Align, + kind: Option<&str>, + ) -> &'ll Value { + if let Some(&gv) = self.const_globals.borrow().get(&cv) { + unsafe { + // Upgrade the alignment in cases where the same constant is used with different + // alignment requirements + let llalign = align.bytes() as u32; + if llalign > llvm::LLVMGetAlignment(gv) { + llvm::LLVMSetAlignment(gv, llalign); + } + } + return gv; + } + let gv = self.static_addr_of_mut(cv, align, kind); + unsafe { + llvm::LLVMSetGlobalConstant(gv, True); + } + self.const_globals.borrow_mut().insert(cv, gv); + gv + } fn codegen_static( &self, diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs index 92c6d56a3d5..285147adb16 100644 --- a/src/librustc_codegen_llvm/intrinsic.rs +++ b/src/librustc_codegen_llvm/intrinsic.rs @@ -915,7 +915,7 @@ fn codegen_msvc_try( catchswitch.add_handler(cs, catchpad.llbb()); let tydesc = match bx.tcx().lang_items().msvc_try_filter() { - Some(did) => bx.cx().get_static(did), + Some(did) => bx.get_static(did), None => bug!("msvc_try_filter not defined"), }; let funclet = catchpad.catch_pad(cs, &[tydesc, bx.const_i32(0), slot]); -- cgit 1.4.1-3-g733a5