about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-07-03 14:28:53 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2021-07-03 14:28:53 +0200
commit6a31385363f26f5324b2e125a96541efec88f60c (patch)
treeb7acb12865bc6e1fec9445c1a8d5e987f85e55a6
parent55e077970891c33122ed34f7f8a061709ba01dc3 (diff)
downloadrust-6a31385363f26f5324b2e125a96541efec88f60c.tar.gz
rust-6a31385363f26f5324b2e125a96541efec88f60c.zip
Misc target related improvements
-rw-r--r--src/base.rs19
-rw-r--r--src/driver/aot.rs4
-rw-r--r--src/driver/jit.rs2
-rw-r--r--src/optimize/mod.rs5
-rw-r--r--src/pretty_clif.rs9
5 files changed, 27 insertions, 12 deletions
diff --git a/src/base.rs b/src/base.rs
index f44ab276590..3d78eed77b9 100644
--- a/src/base.rs
+++ b/src/base.rs
@@ -109,7 +109,14 @@ pub(crate) fn codegen_fn<'tcx>(
     let context = &mut cx.cached_context;
     context.func = func;
 
-    crate::pretty_clif::write_clif_file(tcx, "unopt", None, instance, &context, &clif_comments);
+    crate::pretty_clif::write_clif_file(
+        tcx,
+        "unopt",
+        module.isa(),
+        instance,
+        &context,
+        &clif_comments,
+    );
 
     // Verify function
     verify_func(tcx, &clif_comments, &context.func);
@@ -126,7 +133,13 @@ pub(crate) fn codegen_fn<'tcx>(
 
     // Perform rust specific optimizations
     tcx.sess.time("optimize clif ir", || {
-        crate::optimize::optimize_function(tcx, instance, context, &mut clif_comments);
+        crate::optimize::optimize_function(
+            tcx,
+            module.isa(),
+            instance,
+            context,
+            &mut clif_comments,
+        );
     });
 
     // Define function
@@ -141,7 +154,7 @@ pub(crate) fn codegen_fn<'tcx>(
     crate::pretty_clif::write_clif_file(
         tcx,
         "opt",
-        Some(module.isa()),
+        module.isa(),
         instance,
         &context,
         &clif_comments,
diff --git a/src/driver/aot.rs b/src/driver/aot.rs
index 6676d88602c..5d2c79e3e87 100644
--- a/src/driver/aot.rs
+++ b/src/driver/aot.rs
@@ -290,13 +290,15 @@ pub(crate) fn run_aot(
         None
     };
 
+    // FIXME handle `-Ctarget-cpu=native`
+    let target_cpu = tcx.sess.opts.cg.target_cpu.as_ref().unwrap_or(&tcx.sess.target.cpu).to_owned();
     Box::new((
         CodegenResults {
             modules,
             allocator_module,
             metadata_module,
             metadata,
-            linker_info: LinkerInfo::new(tcx, crate::target_triple(tcx.sess).to_string()),
+            linker_info: LinkerInfo::new(tcx, target_cpu),
             crate_info: CrateInfo::new(tcx),
         },
         work_products,
diff --git a/src/driver/jit.rs b/src/driver/jit.rs
index 39a39e764cb..f454d0efab8 100644
--- a/src/driver/jit.rs
+++ b/src/driver/jit.rs
@@ -159,7 +159,7 @@ pub(crate) fn run_jit(tcx: TyCtxt<'_>, backend_config: BackendConfig) -> ! {
             AbiParam::new(jit_module.target_config().pointer_type()),
         ],
         returns: vec![AbiParam::new(jit_module.target_config().pointer_type() /*isize*/)],
-        call_conv: CallConv::triple_default(&crate::target_triple(tcx.sess)),
+        call_conv: jit_module.target_config().default_call_conv,
     };
     let start_func_id = jit_module.declare_function("main", Linkage::Import, &start_sig).unwrap();
     let finalized_start: *const u8 = jit_module.get_finalized_function(start_func_id);
diff --git a/src/optimize/mod.rs b/src/optimize/mod.rs
index 137fb5f7731..61033d85a12 100644
--- a/src/optimize/mod.rs
+++ b/src/optimize/mod.rs
@@ -1,17 +1,20 @@
 //! Various optimizations specific to cg_clif
 
+use cranelift_codegen::isa::TargetIsa;
+
 use crate::prelude::*;
 
 pub(crate) mod peephole;
 
 pub(crate) fn optimize_function<'tcx>(
     tcx: TyCtxt<'tcx>,
+    isa: &dyn TargetIsa,
     instance: Instance<'tcx>,
     ctx: &mut Context,
     clif_comments: &mut crate::pretty_clif::CommentWriter,
 ) {
     // FIXME classify optimizations over opt levels once we have more
 
-    crate::pretty_clif::write_clif_file(tcx, "preopt", None, instance, &ctx, &*clif_comments);
+    crate::pretty_clif::write_clif_file(tcx, "preopt", isa, instance, &ctx, &*clif_comments);
     crate::base::verify_func(tcx, &*clif_comments, &ctx.func);
 }
diff --git a/src/pretty_clif.rs b/src/pretty_clif.rs
index cd8c5b51608..2f278134d5b 100644
--- a/src/pretty_clif.rs
+++ b/src/pretty_clif.rs
@@ -233,7 +233,7 @@ pub(crate) fn write_ir_file(
 pub(crate) fn write_clif_file<'tcx>(
     tcx: TyCtxt<'tcx>,
     postfix: &str,
-    isa: Option<&dyn cranelift_codegen::isa::TargetIsa>,
+    isa: &dyn cranelift_codegen::isa::TargetIsa,
     instance: Instance<'tcx>,
     context: &cranelift_codegen::Context,
     mut clif_comments: &CommentWriter,
@@ -242,22 +242,19 @@ pub(crate) fn write_clif_file<'tcx>(
         tcx,
         || format!("{}.{}.clif", tcx.symbol_name(instance).name, postfix),
         |file| {
-            let value_ranges = isa
-                .map(|isa| context.build_value_labels_ranges(isa).expect("value location ranges"));
-
             let mut clif = String::new();
             cranelift_codegen::write::decorate_function(
                 &mut clif_comments,
                 &mut clif,
                 &context.func,
-                &DisplayFunctionAnnotations { isa, value_ranges: value_ranges.as_ref() },
+                &DisplayFunctionAnnotations { isa: Some(isa), value_ranges: None },
             )
             .unwrap();
 
             writeln!(file, "test compile")?;
             writeln!(file, "set is_pic")?;
             writeln!(file, "set enable_simd")?;
-            writeln!(file, "target {} haswell", crate::target_triple(tcx.sess))?;
+            writeln!(file, "target {} nehalem", crate::target_triple(tcx.sess))?;
             writeln!(file)?;
             file.write_all(clif.as_bytes())?;
             Ok(())