diff --git a/test/LLVMC/dash-x.cpp b/test/LLVMC/C++/dash-x.cpp
similarity index 67%
rename from test/LLVMC/dash-x.cpp
rename to test/LLVMC/C++/dash-x.cpp
index eb2883d699e..faf8b3072a2 100644
--- a/test/LLVMC/dash-x.cpp
+++ b/test/LLVMC/C++/dash-x.cpp
@@ -1,5 +1,5 @@
 // Test that we can compile .c files as C++ and vice versa
-// RUN: llvmc -x c++ %s -x c %p/test_data/false.cpp -x lisp -x whatnot -x none %p/test_data/false2.cpp -o %t
+// RUN: llvmc -x c++ %s -x c %p/../test_data/false.cpp -x lisp -x whatnot -x none %p/../test_data/false2.cpp -o %t
 // RUN: ./%t | grep hello
 
 #include <iostream>
diff --git a/test/LLVMC/C++/dg.exp b/test/LLVMC/C++/dg.exp
new file mode 100644
index 00000000000..fc852e30acf
--- /dev/null
+++ b/test/LLVMC/C++/dg.exp
@@ -0,0 +1,5 @@
+load_lib llvm.exp
+
+if [ llvm_gcc_supports c++ ] then {
+  RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]
+}
diff --git a/test/LLVMC/hello.cpp b/test/LLVMC/C++/hello.cpp
similarity index 100%
rename from test/LLVMC/hello.cpp
rename to test/LLVMC/C++/hello.cpp
diff --git a/test/LLVMC/together.cpp b/test/LLVMC/C++/together.cpp
similarity index 73%
rename from test/LLVMC/together.cpp
rename to test/LLVMC/C++/together.cpp
index b07250e9d0b..f1320ca6d03 100644
--- a/test/LLVMC/together.cpp
+++ b/test/LLVMC/C++/together.cpp
@@ -1,5 +1,5 @@
 // Check that we can compile files of different types together.
-// RUN: llvmc %s %p/test_data/together.c -o %t
+// RUN: llvmc %s %p/../test_data/together.c -o %t
 // RUN: ./%t | grep hello
 
 extern "C" void test();
diff --git a/test/LLVMC/C/dg.exp b/test/LLVMC/C/dg.exp
new file mode 100644
index 00000000000..a9be28a63cf
--- /dev/null
+++ b/test/LLVMC/C/dg.exp
@@ -0,0 +1,5 @@
+load_lib llvm.exp
+
+if [ llvm_gcc_supports c ] then {
+  RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]
+}
diff --git a/test/LLVMC/emit-llvm.c b/test/LLVMC/C/emit-llvm.c
similarity index 100%
rename from test/LLVMC/emit-llvm.c
rename to test/LLVMC/C/emit-llvm.c
diff --git a/test/LLVMC/hello.c b/test/LLVMC/C/hello.c
similarity index 100%
rename from test/LLVMC/hello.c
rename to test/LLVMC/C/hello.c
diff --git a/test/LLVMC/include.c b/test/LLVMC/C/include.c
similarity index 100%
rename from test/LLVMC/include.c
rename to test/LLVMC/C/include.c
diff --git a/test/LLVMC/opt-test.c b/test/LLVMC/C/opt-test.c
similarity index 100%
rename from test/LLVMC/opt-test.c
rename to test/LLVMC/C/opt-test.c
diff --git a/test/LLVMC/sink.c b/test/LLVMC/C/sink.c
similarity index 100%
rename from test/LLVMC/sink.c
rename to test/LLVMC/C/sink.c
diff --git a/test/LLVMC/wall.c b/test/LLVMC/C/wall.c
similarity index 100%
rename from test/LLVMC/wall.c
rename to test/LLVMC/C/wall.c
diff --git a/test/LLVMC/ObjC++/dg.exp b/test/LLVMC/ObjC++/dg.exp
new file mode 100644
index 00000000000..41c3db2af09
--- /dev/null
+++ b/test/LLVMC/ObjC++/dg.exp
@@ -0,0 +1,5 @@
+load_lib llvm.exp
+
+if [ llvm_gcc_supports obj-c++ ] then {
+    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{mm}]]
+}
diff --git a/test/LLVMC/hello.mm b/test/LLVMC/ObjC++/hello.mm
similarity index 100%
rename from test/LLVMC/hello.mm
rename to test/LLVMC/ObjC++/hello.mm
diff --git a/test/LLVMC/ObjC/dg.exp b/test/LLVMC/ObjC/dg.exp
new file mode 100644
index 00000000000..18f73a79787
--- /dev/null
+++ b/test/LLVMC/ObjC/dg.exp
@@ -0,0 +1,5 @@
+load_lib llvm.exp
+
+if [ llvm_gcc_supports objc ] then {
+    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{m}]]
+}
diff --git a/test/LLVMC/hello.m b/test/LLVMC/ObjC/hello.m
similarity index 100%
rename from test/LLVMC/hello.m
rename to test/LLVMC/ObjC/hello.m
diff --git a/test/LLVMC/dg.exp b/test/LLVMC/dg.exp
new file mode 100644
index 00000000000..f7d275ad8cb
--- /dev/null
+++ b/test/LLVMC/dg.exp
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{td}]]
diff --git a/test/LLVMC/llvmc.exp b/test/LLVMC/llvmc.exp
deleted file mode 100644
index f33e24381d1..00000000000
--- a/test/LLVMC/llvmc.exp
+++ /dev/null
@@ -1,19 +0,0 @@
-load_lib llvm.exp
-
-if [ llvm_gcc_supports c ] then {
-    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{c}]]
-}
-
-if [ llvm_gcc_supports c++ ] then {
-    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{cpp}]]
-}
-
-if [ llvm_gcc_supports objc ] then {
-    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{m}]]
-}
-
-if [ llvm_gcc_supports obj-c++ ] then {
-    RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{mm}]]
-}
-
-RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{td}]]