2626use core:: prelude:: * ;
2727
2828use back:: link:: { mangle_exported_name} ;
29- use back:: { link, abi, upcall } ;
29+ use back:: { link, abi} ;
3030use driver:: session;
3131use driver:: session:: Session ;
3232use lib:: llvm:: { ContextRef , ModuleRef , ValueRef , TypeRef , BasicBlockRef } ;
33- use lib:: llvm:: { True , False } ;
34- use lib:: llvm:: { llvm, mk_target_data, mk_type_names} ;
33+ use lib:: llvm:: { llvm, True , False } ;
3534use lib;
3635use metadata:: common:: LinkMeta ;
3736use metadata:: { csearch, cstore, encoder} ;
@@ -65,7 +64,7 @@ use util::common::indenter;
6564use util:: ppaux:: { Repr , ty_to_str} ;
6665
6766use core:: hash;
68- use core:: hashmap:: { HashMap , HashSet } ;
67+ use core:: hashmap:: { HashMap } ;
6968use core:: int;
7069use core:: io;
7170use core:: libc:: c_uint;
@@ -86,6 +85,8 @@ use syntax::visit;
8685use syntax:: { ast, ast_util, codemap, ast_map} ;
8786use syntax:: abi:: { X86 , X86_64 , Arm , Mips } ;
8887
88+ pub use middle:: trans:: context:: task_llcx;
89+
8990pub struct icx_popper {
9091 ccx : @CrateContext ,
9192}
@@ -3037,152 +3038,52 @@ pub fn trans_crate(sess: session::Session,
30373038 // such as a function name in the module.
30383039 // 1. http://llvm.org/bugs/show_bug.cgi?id=11479
30393040 let llmod_id = link_meta.name.to_owned() + " . rc";
3041+ let ccx = @CrateContext::new(sess, llmod_id, tcx, emap2, maps,
3042+ symbol_hasher, link_meta, reachable);
3043+ // FIXME(#6511): get LLVM building with --enable-threads so this
3044+ // function can be called
3045+ // if !llvm::LLVMRustStartMultithreading() {
3046+ // sess.bug(" couldn' t enable multi-threaded LLVM ");
3047+ // }
30403048
3041- unsafe {
3042- // FIXME(#6511): get LLVM building with --enable-threads so this
3043- // function can be called
3044- // if !llvm::LLVMRustStartMultithreading() {
3045- // sess.bug(" couldn' t enable multi-threaded LLVM ");
3046- // }
3047- let llcx = llvm::LLVMContextCreate();
3048- set_task_llcx(llcx);
3049- let llmod = str::as_c_str(llmod_id, |buf| {
3050- llvm::LLVMModuleCreateWithNameInContext(buf, llcx)
3051- });
3052- let data_layout: &str = sess.targ_cfg.target_strs.data_layout;
3053- let targ_triple: &str = sess.targ_cfg.target_strs.target_triple;
3054- let _: () =
3055- str::as_c_str(data_layout,
3056- |buf| llvm::LLVMSetDataLayout(llmod, buf));
3057- let _: () =
3058- str::as_c_str(targ_triple,
3059- |buf| llvm::LLVMSetTarget(llmod, buf));
3060- let targ_cfg = sess.targ_cfg;
3061- let td = mk_target_data(sess.targ_cfg.target_strs.data_layout);
3062- let tn = mk_type_names();
3063- let mut intrinsics = declare_intrinsics(llmod);
3064- if sess.opts.extra_debuginfo {
3065- declare_dbg_intrinsics(llmod, &mut intrinsics);
3066- }
3067- let int_type = T_int(targ_cfg);
3068- let float_type = T_float(targ_cfg);
3069- let tydesc_type = T_tydesc(targ_cfg);
3070- lib::llvm::associate_type(tn, @" tydesc", tydesc_type);
3071- let crate_map = decl_crate_map(sess, link_meta, llmod);
3072- let dbg_cx = if sess.opts.debuginfo {
3073- Some(debuginfo::mk_ctxt(copy llmod_id))
3074- } else {
3075- None
3076- };
3077-
3078- let ccx = @CrateContext {
3079- sess: sess,
3080- llmod: llmod,
3081- llcx: llcx,
3082- td: td,
3083- tn: tn,
3084- externs: @mut HashMap::new(),
3085- intrinsics: intrinsics,
3086- item_vals: @mut HashMap::new(),
3087- exp_map2: emap2,
3088- reachable: reachable,
3089- item_symbols: @mut HashMap::new(),
3090- link_meta: link_meta,
3091- enum_sizes: @mut HashMap::new(),
3092- discrims: @mut HashMap::new(),
3093- discrim_symbols: @mut HashMap::new(),
3094- tydescs: @mut HashMap::new(),
3095- finished_tydescs: @mut false,
3096- external: @mut HashMap::new(),
3097- monomorphized: @mut HashMap::new(),
3098- monomorphizing: @mut HashMap::new(),
3099- type_use_cache: @mut HashMap::new(),
3100- vtables: @mut HashMap::new(),
3101- const_cstr_cache: @mut HashMap::new(),
3102- const_globals: @mut HashMap::new(),
3103- const_values: @mut HashMap::new(),
3104- extern_const_values: @mut HashMap::new(),
3105- impl_method_cache: @mut HashMap::new(),
3106- module_data: @mut HashMap::new(),
3107- lltypes: @mut HashMap::new(),
3108- llsizingtypes: @mut HashMap::new(),
3109- adt_reprs: @mut HashMap::new(),
3110- names: new_namegen(),
3111- next_addrspace: new_addrspace_gen(),
3112- symbol_hasher: symbol_hasher,
3113- type_hashcodes: @mut HashMap::new(),
3114- type_short_names: @mut HashMap::new(),
3115- all_llvm_symbols: @mut HashSet::new(),
3116- tcx: tcx,
3117- maps: maps,
3118- stats: @mut Stats {
3119- n_static_tydescs: 0u,
3120- n_glues_created: 0u,
3121- n_null_glues: 0u,
3122- n_real_glues: 0u,
3123- n_fns: 0u,
3124- n_monos: 0u,
3125- n_inlines: 0u,
3126- n_closures: 0u,
3127- llvm_insn_ctxt: @mut ~[],
3128- llvm_insns: @mut HashMap::new(),
3129- fn_times: @mut ~[]
3130- },
3131- upcalls: upcall::declare_upcalls(targ_cfg, llmod),
3132- tydesc_type: tydesc_type,
3133- int_type: int_type,
3134- float_type: float_type,
3135- opaque_vec_type: T_opaque_vec(targ_cfg),
3136- builder: BuilderRef_res(unsafe {
3137- llvm::LLVMCreateBuilderInContext(llcx)
3138- }),
3139- shape_cx: mk_ctxt(llmod),
3140- crate_map: crate_map,
3141- uses_gc: @mut false,
3142- dbg_cx: dbg_cx,
3143- do_not_commit_warning_issued: @mut false
3144- };
3145-
3146- {
3147- let _icx = ccx.insn_ctxt(" data");
3148- trans_constants(ccx, crate);
3149- }
3150-
3151- {
3152- let _icx = ccx.insn_ctxt(" text");
3153- trans_mod(ccx, &crate.node.module);
3154- }
3155-
3156- decl_gc_metadata(ccx, llmod_id);
3157- fill_crate_map(ccx, crate_map);
3158- glue::emit_tydescs(ccx);
3159- write_abi_version(ccx);
3160-
3161- // Translate the metadata.
3162- write_metadata(ccx, crate);
3163- if ccx.sess.trans_stats() {
3164- io::println(" --- trans stats ---");
3165- io::println(fmt!(" n_static_tydescs: %u",
3166- ccx.stats.n_static_tydescs));
3167- io::println(fmt!(" n_glues_created: %u",
3168- ccx.stats.n_glues_created));
3169- io::println(fmt!(" n_null_glues: %u", ccx.stats.n_null_glues));
3170- io::println(fmt!(" n_real_glues: %u", ccx.stats.n_real_glues));
3171-
3172- io::println(fmt!(" n_fns: %u", ccx.stats.n_fns));
3173- io::println(fmt!(" n_monos: %u", ccx.stats.n_monos));
3174- io::println(fmt!(" n_inlines: %u", ccx.stats.n_inlines));
3175- io::println(fmt!(" n_closures: %u", ccx.stats.n_closures));
3176- }
3049+ {
3050+ let _icx = ccx.insn_ctxt(" data");
3051+ trans_constants(ccx, crate);
3052+ }
31773053
3178- if ccx.sess.count_llvm_insns() {
3179- for ccx.stats.llvm_insns.each |&k, &v| {
3180- io::println(fmt!(" %-7 u %s", v, k));
3181- }
3054+ {
3055+ let _icx = ccx.insn_ctxt(" text");
3056+ trans_mod(ccx, &crate.node.module);
3057+ }
3058+
3059+ decl_gc_metadata(ccx, llmod_id);
3060+ fill_crate_map(ccx, ccx.crate_map);
3061+ glue::emit_tydescs(ccx);
3062+ write_abi_version(ccx);
3063+
3064+ // Translate the metadata.
3065+ write_metadata(ccx, crate);
3066+ if ccx.sess.trans_stats() {
3067+ io::println(" --- trans stats ---");
3068+ io::println(fmt!(" n_static_tydescs: %u",
3069+ ccx.stats.n_static_tydescs));
3070+ io::println(fmt!(" n_glues_created: %u",
3071+ ccx.stats.n_glues_created));
3072+ io::println(fmt!(" n_null_glues: %u", ccx.stats.n_null_glues));
3073+ io::println(fmt!(" n_real_glues: %u", ccx.stats.n_real_glues));
3074+
3075+ io::println(fmt!(" n_fns: %u", ccx.stats.n_fns));
3076+ io::println(fmt!(" n_monos: %u", ccx.stats.n_monos));
3077+ io::println(fmt!(" n_inlines: %u", ccx.stats.n_inlines));
3078+ io::println(fmt!(" n_closures: %u", ccx.stats.n_closures));
3079+ }
3080+
3081+ if ccx.sess.count_llvm_insns() {
3082+ for ccx.stats.llvm_insns.each |&k, &v| {
3083+ io::println(fmt!(" %-7 u %s", v, k));
31823084 }
3183- unset_task_llcx();
3184- return (llcx, llmod, link_meta);
31853085 }
3086+ return (llmod, link_meta);
31863087}
31873088
31883089fn task_local_llcx_key(_v: @ContextRef) {}
0 commit comments