26
26
use core:: prelude:: * ;
27
27
28
28
use back:: link:: { mangle_exported_name} ;
29
- use back:: { link, abi, upcall } ;
29
+ use back:: { link, abi} ;
30
30
use driver:: session;
31
31
use driver:: session:: Session ;
32
32
use 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 } ;
35
34
use lib;
36
35
use metadata:: common:: LinkMeta ;
37
36
use metadata:: { csearch, cstore, encoder} ;
@@ -65,7 +64,7 @@ use util::common::indenter;
65
64
use util:: ppaux:: { Repr , ty_to_str} ;
66
65
67
66
use core:: hash;
68
- use core:: hashmap:: { HashMap , HashSet } ;
67
+ use core:: hashmap:: { HashMap } ;
69
68
use core:: int;
70
69
use core:: io;
71
70
use core:: libc:: c_uint;
@@ -86,6 +85,8 @@ use syntax::visit;
86
85
use syntax:: { ast, ast_util, codemap, ast_map} ;
87
86
use syntax:: abi:: { X86 , X86_64 , Arm , Mips } ;
88
87
88
+ pub use middle:: trans:: context:: task_llcx;
89
+
89
90
pub struct icx_popper {
90
91
ccx : @CrateContext ,
91
92
}
@@ -3037,152 +3038,52 @@ pub fn trans_crate(sess: session::Session,
3037
3038
// such as a function name in the module.
3038
3039
// 1. http://llvm.org/bugs/show_bug.cgi?id=11479
3039
3040
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
+ // }
3040
3048
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
+ }
3177
3053
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));
3182
3084
}
3183
- unset_task_llcx();
3184
- return (llcx, llmod, link_meta);
3185
3085
}
3086
+ return (llmod, link_meta);
3186
3087
}
3187
3088
3188
3089
fn task_local_llcx_key(_v: @ContextRef) {}
0 commit comments