diff --git a/miri/fn_call.rs b/miri/fn_call.rs
index d64b254e7e..5285d02b4f 100644
--- a/miri/fn_call.rs
+++ b/miri/fn_call.rs
@@ -340,7 +340,7 @@ impl<'a, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'tcx, super::Evaluator>
                         Err(_) => -1,
                     }
                 } else {
-                    info!("Ignored output to FD {}", fd);
+                    warn!("Ignored output to FD {}", fd);
                     n as isize // pretend it all went well
                 }; // now result is the value we return back to the program
                 self.write_primval(
@@ -456,7 +456,7 @@ impl<'a, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'tcx, super::Evaluator>
 
             // Stub out all the other pthread calls to just return 0
             link_name if link_name.starts_with("pthread_") => {
-                warn!("ignoring C ABI call: {}", link_name);
+                info!("ignoring C ABI call: {}", link_name);
                 self.write_null(dest, dest_ty)?;
             }
 
@@ -616,7 +616,7 @@ impl<'a, 'tcx> EvalContextExt<'tcx> for EvalContext<'a, 'tcx, super::Evaluator>
             // A Rust function is missing, which means we are running with MIR missing for libstd (or other dependencies).
             // Still, we can make many things mostly work by "emulating" or ignoring some functions.
             "std::io::_print" => {
-                trace!(
+                warn!(
                     "Ignoring output.  To run programs that print, make sure you have a libstd with full MIR."
                 );
             }
diff --git a/tests/compiletest.rs b/tests/compiletest.rs
index f9352efbbd..b87fd7d243 100644
--- a/tests/compiletest.rs
+++ b/tests/compiletest.rs
@@ -5,6 +5,7 @@ extern crate compiletest_rs as compiletest;
 use std::slice::SliceConcatExt;
 use std::path::{PathBuf, Path};
 use std::io::Write;
+use std::env;
 
 macro_rules! eprintln {
     ($($arg:tt)*) => {
@@ -90,7 +91,7 @@ fn miri_pass(path: &str, target: &str, host: &str, fullmir: bool, opt: bool) {
         opt_str
     );
     let mut config = compiletest::Config::default().tempdir();
-    config.mode = "mir-opt".parse().expect("Invalid mode");
+    config.mode = "ui".parse().expect("Invalid mode");
     config.src_base = PathBuf::from(path);
     config.target = target.to_owned();
     config.host = host.to_owned();
@@ -100,6 +101,9 @@ fn miri_pass(path: &str, target: &str, host: &str, fullmir: bool, opt: bool) {
         config.compile_lib_path = rustc_lib_path();
     }
     let mut flags = Vec::new();
+    // Control miri logging. This is okay despite concurrent test execution as all tests
+    // will set this env var to the same value.
+    env::set_var("MIRI_LOG", "warn");
     // if we are building as part of the rustc test suite, we already have fullmir for everything
     if fullmir && rustc_test_suite().is_none() {
         if host != target {
@@ -122,9 +126,6 @@ fn miri_pass(path: &str, target: &str, host: &str, fullmir: bool, opt: bool) {
         flags.push("--miri_host_target".to_owned());
     }
     config.target_rustcflags = Some(flags.join(" "));
-    // don't actually execute the final binary, it might be for other targets and we only care
-    // about running miri, not the binary.
-    config.runtool = Some("echo \"\" || ".to_owned());
     compiletest::run_tests(&config);
 }
 
diff --git a/tests/run-pass-fullmir/catch.rs b/tests/run-pass-fullmir/catch.rs
index 439edc82dd..efcfee68ee 100644
--- a/tests/run-pass-fullmir/catch.rs
+++ b/tests/run-pass-fullmir/catch.rs
@@ -3,7 +3,5 @@ use std::panic::{catch_unwind, AssertUnwindSafe};
 fn main() {
     let mut i = 3;
     let _ = catch_unwind(AssertUnwindSafe(|| {i -= 2;} ));
-    for _ in 0..i {
-        println!("I");
-    }
+    println!("{}", i);
 }
diff --git a/tests/run-pass-fullmir/catch.stdout b/tests/run-pass-fullmir/catch.stdout
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/tests/run-pass-fullmir/catch.stdout
@@ -0,0 +1 @@
+1
diff --git a/tests/run-pass/format.rs b/tests/run-pass-fullmir/format.rs
similarity index 100%
rename from tests/run-pass/format.rs
rename to tests/run-pass-fullmir/format.rs
diff --git a/tests/run-pass-fullmir/format.stdout b/tests/run-pass-fullmir/format.stdout
new file mode 100644
index 0000000000..e193b8ae89
--- /dev/null
+++ b/tests/run-pass-fullmir/format.stdout
@@ -0,0 +1 @@
+Hello 13
diff --git a/tests/run-pass/hello.rs b/tests/run-pass-fullmir/hello.rs
similarity index 100%
rename from tests/run-pass/hello.rs
rename to tests/run-pass-fullmir/hello.rs
diff --git a/tests/run-pass-fullmir/hello.stdout b/tests/run-pass-fullmir/hello.stdout
new file mode 100644
index 0000000000..af5626b4a1
--- /dev/null
+++ b/tests/run-pass-fullmir/hello.stdout
@@ -0,0 +1 @@
+Hello, world!
diff --git a/tests/run-pass/issue-3794.rs b/tests/run-pass-fullmir/issue-3794.rs
similarity index 100%
rename from tests/run-pass/issue-3794.rs
rename to tests/run-pass-fullmir/issue-3794.rs
diff --git a/tests/run-pass-fullmir/issue-3794.stdout b/tests/run-pass-fullmir/issue-3794.stdout
new file mode 100644
index 0000000000..e4afe6fa55
--- /dev/null
+++ b/tests/run-pass-fullmir/issue-3794.stdout
@@ -0,0 +1,2 @@
+S { s: 5 }
+S { s: 5 }