diff --git a/test/CodeGenCXX/copy-constructor-elim-2.cpp b/test/CodeGenCXX/copy-constructor-elim-2.cpp
index 9480cbf..8ae984d 100644
--- a/test/CodeGenCXX/copy-constructor-elim-2.cpp
+++ b/test/CodeGenCXX/copy-constructor-elim-2.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM
 
 struct A { int x; A(int); ~A(); };
 A f() { return A(0); }
@@ -65,12 +67,17 @@ namespace PR12139 {
 
   // CHECK: define i32 @_ZN7PR121394testEv
   int test() {
-    // CHECK: call void @_ZN7PR121391A5makeAEv
-    // CHECK-NEXT: call void @_ZN7PR121391AC1ERKS0_i
+    // CHECK-X86: call void @_ZN7PR121391A5makeAEv
+    // CHECK-X86-NEXT: call void @_ZN7PR121391AC1ERKS0_i
+    // CHECK-ARM: call void @_ZN7PR121391A5makeAEv
+    // CHECK-ARM-NEXT: call %"struct.PR12139::A"* @_ZN7PR121391AC1ERKS0_i
     A a(A::makeA(), 3);
-    // CHECK-NEXT: getelementptr inbounds
-    // CHECK-NEXT: load
-    // CHECK-NEXT: ret i32
+    // CHECK-X86-NEXT: getelementptr inbounds
+    // CHECK-X86-NEXT: load
+    // CHECK-X86-NEXT: ret i32
+    // CHECK-ARM-NEXT: getelementptr inbounds
+    // CHECK-ARM-NEXT: load
+    // CHECK-ARM-NEXT: ret i32
     return a.value;
   }
 }
diff --git a/test/CodeGenCXX/cxx0x-initializer-constructors.cpp b/test/CodeGenCXX/cxx0x-initializer-constructors.cpp
index 48fbe85..c958a57 100644
--- a/test/CodeGenCXX/cxx0x-initializer-constructors.cpp
+++ b/test/CodeGenCXX/cxx0x-initializer-constructors.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -S -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -S -triple x86_64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM
 
 struct S {
   S(int x) { }
@@ -9,29 +11,36 @@ void fn1() {
   // CHECK: define void @_Z3fn1v
   S s { 1 };
   // CHECK: alloca %struct.S, align 1
-  // CHECK: call void @_ZN1SC1Ei(%struct.S* %s, i32 1)
+  // CHECK-X86: call void @_ZN1SC1Ei(%struct.S* %s, i32 1)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Ei(%struct.S* %s, i32 1)
 }
 
 void fn2() {
   // CHECK: define void @_Z3fn2v
   S s { 1, 2.0, 3.0 };
   // CHECK: alloca %struct.S, align 1
-  // CHECK: call void @_ZN1SC1Eidd(%struct.S* %s, i32 1, double 2.000000e+00, double 3.000000e+00)
+  // CHECK-X86: call void @_ZN1SC1Eidd(%struct.S* %s, i32 1, double 2.000000e+00, double 3.000000e+00)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Eidd(%struct.S* %s, i32 1, double 2.000000e+00, double 3.000000e+00)
 }
 
 void fn3() {
   // CHECK: define void @_Z3fn3v
   S sa[] { { 1 }, { 2 }, { 3 } };
   // CHECK: alloca [3 x %struct.S], align 1
-  // CHECK: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 1)
-  // CHECK: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 2)
-  // CHECK: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 3)
+  // CHECK-X86: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 1)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 1)
+  // CHECK-X86: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 2)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 2)
+  // CHECK-X86: call void @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 3)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Ei(%struct.S* %{{.+}}, i32 3)
 }
 
 void fn4() {
   // CHECK: define void @_Z3fn4v
   S sa[] { { 1, 2.0, 3.0 }, { 4, 5.0, 6.0 } };
   // CHECK: alloca [2 x %struct.S], align 1
-  // CHECK: call void @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 1, double 2.000000e+00, double 3.000000e+00)
-  // CHECK: call void @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 4, double 5.000000e+00, double 6.000000e+00)
+  // CHECK-X86: call void @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 1, double 2.000000e+00, double 3.000000e+00)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 1, double 2.000000e+00, double 3.000000e+00)
+  // CHECK-X86: call void @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 4, double 5.000000e+00, double 6.000000e+00)
+  // CHECK-ARM: call %struct.S* @_ZN1SC1Eidd(%struct.S* %{{.+}}, i32 4, double 5.000000e+00, double 6.000000e+00)
 }
diff --git a/test/CodeGenCXX/cxx0x-initializer-references.cpp b/test/CodeGenCXX/cxx0x-initializer-references.cpp
index 660b018..84422f0 100644
--- a/test/CodeGenCXX/cxx0x-initializer-references.cpp
+++ b/test/CodeGenCXX/cxx0x-initializer-references.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -S -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -S -triple x86_64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s  --check-prefix=ARM
 
 namespace reference {
   struct A {
@@ -64,10 +66,13 @@ namespace reference {
   {
     // Ensure lifetime extension.
 
-    // CHECK: call void @_ZN9reference1BC1Ev
-    // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
+    // CHECK-X86: call void @_ZN9reference1BC1Ev
+    // CHECK-X86-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
+    // CHECK-ARM: call %"struct.reference::B"* @_ZN9reference1BC1Ev
+    // CHECK-ARM-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
     const B &rb{ B() };
-    // CHECK: call void @_ZN9reference1BD1Ev
+    // CHECK-X86: call void @_ZN9reference1BD1Ev
+    // CHECK-ARM: call %"struct.reference::B"* @_ZN9reference1BD1Ev
   }
 
 }
diff --git a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist-startend.cpp b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist-startend.cpp
index c533e45..5866cea 100644
--- a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist-startend.cpp
+++ b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist-startend.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -S -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -S -triple x86_64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM
 
 namespace std {
   typedef decltype(sizeof(int)) size_t;
@@ -70,9 +72,11 @@ void fn2() {
   void target(std::initializer_list<destroyme1>);
   // objects should be destroyed before dm2, after call returns
   target({ destroyme1(), destroyme1() });
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 void fn3() {
@@ -80,6 +84,8 @@ void fn3() {
   // objects should be destroyed after dm2
   auto list = { destroyme1(), destroyme1() };
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
 }
diff --git a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
index 81ce559..60f862c 100644
--- a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
+++ b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -std=c++11 -S -emit-llvm -o - %s | FileCheck %s
-
+// RUN: %clang_cc1 -std=c++11 -S -triple x86_64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s --check-prefix=ARM
 namespace std {
   typedef decltype(sizeof(int)) size_t;
 
@@ -52,14 +53,21 @@ struct wantslist1 {
 std::initializer_list<int> globalInitList1 = {1, 2, 3};
 
 // CHECK: @_ZL25globalInitList2__initlist = internal global [2 x %{{[^ ]*}}] zeroinitializer
-// CHECK: @globalInitList2 = global %{{[^ ]+}} { %[[WITHARG:[^ *]+]]* getelementptr inbounds ([2 x
-// CHECK: appending global
-// CHECK: define internal void
-// CHECK: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 0
-// CHECK: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 1
+// CHECK-X86: @globalInitList2 = global %{{[^ ]+}} { %[[WITHARG:[^ *]+]]* getelementptr inbounds ([2 x
+// CHECK-ARM: @globalInitList2 = global %{{[^ ]+}} { %[[WITHARG:[^ *]+]]* getelementptr inbounds ([2 x
+// CHECK-X86: appending global
+// CHECK-X86: define internal void
+// CHECK-ARM: appending global
+// CHECK-ARM: define internal void
+// CHECK-X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 0
+// CHECK-X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 1
+// CHECK-ARM: call %struct.witharg1* @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 0
+// CHECK-ARM: call %struct.witharg1* @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]]* @_ZL25globalInitList2__initlist, i{{32|64}} 0, i{{32|64}} 1
 // CHECK: __cxa_atexit
-// CHECK: call void @_ZN10destroyme1D1Ev
-// CHECK: call void @_ZN10destroyme1D1Ev
+// CHECK-X86: call void @_ZN10destroyme1D1Ev
+// CHECK-X86: call void @_ZN10destroyme1D1Ev
+// CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
+// CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
 std::initializer_list<witharg1> globalInitList2 = {
   witharg1(destroyme1()), witharg1(destroyme1())
 };
@@ -90,9 +98,11 @@ void fn2() {
   // objects should be destroyed before dm2, after call returns
   // CHECK: call void @_Z6targetSt16initializer_listI10destroyme1E
   target({ destroyme1(), destroyme1() });
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 void fn3() {
@@ -100,58 +110,76 @@ void fn3() {
   // objects should be destroyed after dm2
   auto list = { destroyme1(), destroyme1() };
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
 }
 
 void fn4() {
   // CHECK: define void @_Z3fn4v
   void target(std::initializer_list<witharg1>);
   // objects should be destroyed before dm2, after call returns
-  // CHECK: call void @_ZN8witharg1C1ERK10destroyme1
+  // CHECK-X86: call void @_ZN8witharg1C1ERK10destroyme1
+  // CHECK-ARM: call %struct.witharg1* @_ZN8witharg1C1ERK10destroyme1
   // CHECK: call void @_Z6targetSt16initializer_listI8witharg1E
   target({ witharg1(destroyme1()), witharg1(destroyme1()) });
-  // CHECK: call void @_ZN8witharg1D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN8witharg1D1Ev
+  // CHECK-ARM: call %struct.witharg1* @_ZN8witharg1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 void fn5() {
   // CHECK: define void @_Z3fn5v
   // temps should be destroyed before dm2
   // objects should be destroyed after dm2
-  // CHECK: call void @_ZN8witharg1C1ERK10destroyme1
+  // CHECK-X86: call void @_ZN8witharg1C1ERK10destroyme1
+  // CHECK-ARM: call %struct.witharg1* @_ZN8witharg1C1ERK10destroyme1
   auto list = { witharg1(destroyme1()), witharg1(destroyme1()) };
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN8witharg1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN8witharg1D1Ev
+  // CHECK-ARM: call %struct.witharg1* @_ZN8witharg1D1Ev
 }
 
 void fn6() {
   // CHECK: define void @_Z3fn6v
   void target(const wantslist1&);
   // objects should be destroyed before dm2, after call returns
-  // CHECK: call void @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
+  // CHECK-X86: call void @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
+  // CHECK-ARM: call %struct.wantslist1* @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
   // CHECK: call void @_Z6targetRK10wantslist1
   target({ destroyme1(), destroyme1() });
-  // CHECK: call void @_ZN10wantslist1D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10wantslist1D1Ev
+  // CHECK-ARM: call %struct.wantslist1* @_ZN10wantslist1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 void fn7() {
   // CHECK: define void @_Z3fn7v
   // temps should be destroyed before dm2
   // object should be destroyed after dm2
-  // CHECK: call void @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
+  // CHECK-X86: call void @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
+  // CHECK-ARM: call %struct.wantslist1* @_ZN10wantslist1C1ESt16initializer_listI10destroyme1E
   wantslist1 wl = { destroyme1(), destroyme1() };
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN10wantslist1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10wantslist1D1Ev
+  // CHECK-ARM: call %struct.wantslist1* @_ZN10wantslist1D1Ev
 }
 
 void fn8() {
@@ -161,11 +189,14 @@ void fn8() {
   // CHECK: call void @_Z6targetSt16initializer_listIS_I10destroyme1EE
   std::initializer_list<destroyme1> inner;
   target({ inner, { destroyme1() } });
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   // Only one destroy loop, since only one inner init list is directly inited.
-  // CHECK-NOT: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86-NOT: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM-NOT: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 void fn9() {
@@ -175,10 +206,13 @@ void fn9() {
   std::initializer_list<std::initializer_list<destroyme1>> list =
       { inner, { destroyme1() } };
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   // Only one destroy loop, since only one inner init list is directly inited.
-  // CHECK-NOT: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86-NOT: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM-NOT: call %struct.haslist1* @_ZN10destroyme1D1Ev
   // CHECK: ret void
 }
 
@@ -187,7 +221,8 @@ struct haslist1 {
   haslist1();
 };
 
-// CHECK: define void @_ZN8haslist1C2Ev
+// CHECK-X86: define void @_ZN8haslist1C2Ev
+// CHECK-ARM: define %struct.haslist1* @_ZN8haslist1C2Ev
 haslist1::haslist1()
 // CHECK: alloca [3 x i32]
 // CHECK: store i32 1
@@ -204,13 +239,16 @@ struct haslist2 {
   haslist2();
 };
 
-// CHECK: define void @_ZN8haslist2C2Ev
+// CHECK-X86: define void @_ZN8haslist2C2Ev
+// CHECK-ARM: define %struct.haslist2* @_ZN8haslist2C2Ev
 haslist2::haslist2()
   : il{destroyme1(), destroyme1()}
 {
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
 }
 
 void fn10() {
@@ -228,9 +266,11 @@ void fn10() {
 void fn11() {
   // CHECK: define void @_Z4fn11v
   (void) new std::initializer_list<destroyme1> {destroyme1(), destroyme1()};
-  // CHECK: call void @_ZN10destroyme1D1Ev
+  // CHECK-X86: call void @_ZN10destroyme1D1Ev
+  // CHECK-ARM: call %struct.destroyme1* @_ZN10destroyme1D1Ev
   destroyme2 dm2;
-  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK-X86: call void @_ZN10destroyme2D1Ev
+  // CHECK-ARM: call %struct.destroyme2* @_ZN10destroyme2D1Ev
 }
 
 namespace PR12178 {
diff --git a/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp b/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
index 7ef4864..7a412a9 100644
--- a/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
+++ b/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple x86_64-none-linux-gnu -emit-llvm -o - | FileCheck %s --check-prefix=X86
+// RUN: %clang_cc1 %s -triple armv7-none-eabi -emit-llvm -o - | FileCheck %s --check-prefix=ARM
 
 struct A {
   virtual void f();
@@ -66,7 +68,8 @@ namespace test2 {
 
   void f(bar *b) {
     // CHECK: call void @_ZN5test23foo1fEv
-    // CHECK: call void @_ZN5test23fooD1Ev
+    // CHECK-X86: call void @_ZN5test23fooD1Ev
+    // CHECK-ARM: call %"struct.test2::foo"* @_ZN5test23fooD1Ev
     b->foo::f();
     b->foo::~foo();
   }
diff --git a/test/CodeGenCXX/throw-expression-cleanup.cpp b/test/CodeGenCXX/throw-expression-cleanup.cpp
index 0c41bc6..7d0ea4a 100644
--- a/test/CodeGenCXX/throw-expression-cleanup.cpp
+++ b/test/CodeGenCXX/throw-expression-cleanup.cpp
@@ -1,4 +1,6 @@
 // RUN: %clang_cc1 %s -emit-llvm -fcxx-exceptions -fexceptions -std=c++11 -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple x86_64-none-linux-gnu -emit-llvm -fcxx-exceptions -fexceptions -std=c++11 -o - | FileCheck %s  --check-prefix=X86
+// RUN: %clang_cc1 %s -triple armv7-none-eabi -emit-llvm -fcxx-exceptions -fexceptions -std=c++11 -o - | FileCheck %s --check-prefix=ARM
 // PR13359
 
 struct X {
@@ -15,8 +17,10 @@ void f() {
 }
 
 // CHECK: define void @_Z1fv
-// CHECK: call void @_ZN5ErrorC1ERK1X
+// CHECK-X86: call void @_ZN5ErrorC1ERK1X
+// CHECK-ARM: call %struct.Error* @_ZN5ErrorC1ERK1X
 // CHECK: invoke void @__cxa_throw
 // CHECK: landingpad
-// CHECK: call void @_ZN1XD1Ev
+// CHECK-X86: call void @_ZN1XD1Ev
+// CHECK-ARM: call %struct.X* @_ZN1XD1Ev
 // CHECK-NOT: __cxa_free_exception
