forked from OSchip/llvm-project
Whack a bunch of tests in CodeGenCXX to work on ARM (using ARM ABI). Batch 2 of 3.
llvm-svn: 133011
This commit is contained in:
parent
627e780902
commit
50ed150632
|
@ -48,7 +48,7 @@ struct B {
|
|||
|
||||
void f() {
|
||||
// Verify that we don't mark the copy constructor in this expression as elidable.
|
||||
// CHECK: call void @_ZN6PR86831AC1ERKS0_
|
||||
// CHECK: call {{.*}} @_ZN6PR86831AC1ERKS0_
|
||||
A a = (B().a);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,4 +5,4 @@ struct A { A(int x = 2); };
|
|||
struct B : public A {};
|
||||
B x;
|
||||
|
||||
// CHECK: call void @_ZN1AC2Ei
|
||||
// CHECK: call {{.*}} @_ZN1AC2Ei
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace test7 {
|
|||
X(U*, typename int_c<(meta<T>::value + meta<U>::value)>::type *) { }
|
||||
};
|
||||
|
||||
// CHECK: define weak_odr void @_ZN5test71XIiEC1IdEEPT_PNS_5int_cIXplL_ZNS_4metaIiE5valueEEsrNS6_IS3_EE5valueEE4typeE(%"class.test1::T"* %this, double*, float*) unnamed_addr
|
||||
// CHECK: define weak_odr {{.*}} @_ZN5test71XIiEC1IdEEPT_PNS_5int_cIXplL_ZNS_4metaIiE5valueEEsrNS6_IS3_EE5valueEE4typeE(%"class.test1::T"* %this, double*, float*) unnamed_addr
|
||||
template X<int>::X(double*, float*);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ struct Foo {
|
|||
Foo::Foo(unsigned arg) : file_id(arg = 42)
|
||||
{ }
|
||||
|
||||
// CHECK: define void @_ZN3FooC2Ej(%struct.Foo* %this, i32 %arg) unnamed_addr
|
||||
// CHECK: define {{.*}} @_ZN3FooC2Ej(%struct.Foo* %this, i32 %arg) unnamed_addr
|
||||
// CHECK: [[ARG:%.*]] = alloca i32
|
||||
// CHECK: store i32 42, i32* [[ARG]]
|
||||
// CHECK: store i32 42, i32* %{{.*}}
|
||||
|
|
|
@ -7,7 +7,7 @@ struct S {
|
|||
|
||||
S s;
|
||||
|
||||
// CHECK: define{{.*}} void @_ZN1SC2Ev(
|
||||
// CHECK: define {{.*}} @_ZN1SC2Ev(
|
||||
// CHECK-NOT }
|
||||
// CHECK: call {{.*}} @_Z1bv()
|
||||
// CHECK-NOT }
|
||||
|
|
|
@ -13,10 +13,10 @@ public:
|
|||
// CHECK-EH: define void @_Z5test0v
|
||||
X test0() {
|
||||
X x;
|
||||
// CHECK: call void @_ZN1XC1Ev
|
||||
// CHECK: call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// CHECK-EH: call void @_ZN1XC1Ev
|
||||
// CHECK-EH: call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-EH-NEXT: ret void
|
||||
return x;
|
||||
}
|
||||
|
@ -24,13 +24,13 @@ X test0() {
|
|||
// CHECK: define void @_Z5test1b(
|
||||
// CHECK-EH: define void @_Z5test1b(
|
||||
X test1(bool B) {
|
||||
// CHECK: tail call void @_ZN1XC1Ev
|
||||
// CHECK: tail call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-NEXT: ret void
|
||||
X x;
|
||||
if (B)
|
||||
return (x);
|
||||
return x;
|
||||
// CHECK-EH: tail call void @_ZN1XC1Ev
|
||||
// CHECK-EH: tail call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-EH-NEXT: ret void
|
||||
}
|
||||
|
||||
|
@ -45,18 +45,18 @@ X test2(bool B) {
|
|||
return y;
|
||||
return x;
|
||||
|
||||
// CHECK: call void @_ZN1XC1Ev
|
||||
// CHECK-NEXT: call void @_ZN1XC1Ev
|
||||
// CHECK: call void @_ZN1XC1ERKS_
|
||||
// CHECK: call void @_ZN1XC1ERKS_
|
||||
// CHECK: call void @_ZN1XD1Ev
|
||||
// CHECK: call void @_ZN1XD1Ev
|
||||
// CHECK: call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK: call {{.*}} @_ZN1XC1ERKS_
|
||||
// CHECK: call {{.*}} @_ZN1XC1ERKS_
|
||||
// CHECK: call {{.*}} @_ZN1XD1Ev
|
||||
// CHECK: call {{.*}} @_ZN1XD1Ev
|
||||
// CHECK: ret void
|
||||
|
||||
// The block ordering in the -fexceptions IR is unfortunate.
|
||||
|
||||
// CHECK-EH: call void @_ZN1XC1Ev
|
||||
// CHECK-EH-NEXT: invoke void @_ZN1XC1Ev
|
||||
// CHECK-EH: call {{.*}} @_ZN1XC1Ev
|
||||
// CHECK-EH-NEXT: invoke {{.*}} @_ZN1XC1Ev
|
||||
// -> %invoke.cont, %lpad
|
||||
|
||||
// %invoke.cont:
|
||||
|
@ -64,7 +64,7 @@ X test2(bool B) {
|
|||
// -> %if.then, %if.end
|
||||
|
||||
// %if.then: returning 'x'
|
||||
// CHECK-EH: invoke void @_ZN1XC1ERKS_
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XC1ERKS_
|
||||
// -> %cleanup, %lpad1
|
||||
|
||||
// %lpad: landing pad for ctor of 'y', dtor of 'y'
|
||||
|
@ -74,23 +74,23 @@ X test2(bool B) {
|
|||
// -> %eh.cleanup
|
||||
|
||||
// %lpad1: landing pad for return copy ctors, EH cleanup for 'y'
|
||||
// CHECK-EH: invoke void @_ZN1XD1Ev
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XD1Ev
|
||||
// -> %eh.cleanup, %terminate.lpad
|
||||
|
||||
// %if.end: returning 'y'
|
||||
// CHECK-EH: invoke void @_ZN1XC1ERKS_
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XC1ERKS_
|
||||
// -> %cleanup, %lpad1
|
||||
|
||||
// %cleanup: normal cleanup for 'y'
|
||||
// CHECK-EH: invoke void @_ZN1XD1Ev
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XD1Ev
|
||||
// -> %invoke.cont11, %lpad
|
||||
|
||||
// %invoke.cont11: normal cleanup for 'x'
|
||||
// CHECK-EH: call void @_ZN1XD1Ev
|
||||
// CHECK-EH: call {{.*}} @_ZN1XD1Ev
|
||||
// CHECK-EH-NEXT: ret void
|
||||
|
||||
// %eh.cleanup: EH cleanup for 'x'
|
||||
// CHECK-EH: invoke void @_ZN1XD1Ev
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XD1Ev
|
||||
// -> %invoke.cont17, %terminate.lpad
|
||||
|
||||
// %invoke.cont17: rethrow block for %eh.cleanup.
|
||||
|
@ -121,13 +121,13 @@ extern "C" void exit(int) throw();
|
|||
// CHECK: define void @_Z5test4b
|
||||
X test4(bool B) {
|
||||
{
|
||||
// CHECK: tail call void @_ZN1XC1Ev
|
||||
// CHECK: tail call {{.*}} @_ZN1XC1Ev
|
||||
X x;
|
||||
// CHECK: br i1
|
||||
if (B)
|
||||
return x;
|
||||
}
|
||||
// CHECK: tail call void @_ZN1XD1Ev
|
||||
// CHECK: tail call {{.*}} @_ZN1XD1Ev
|
||||
// CHECK: tail call void @exit(i32 1)
|
||||
exit(1);
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ X test5() {
|
|||
try {
|
||||
may_throw();
|
||||
} catch (X x) {
|
||||
// CHECK-EH: invoke void @_ZN1XC1ERKS_
|
||||
// CHECK-EH: invoke {{.*}} @_ZN1XC1ERKS_
|
||||
// CHECK-EH: call void @__cxa_end_catch()
|
||||
// CHECK-EH: ret void
|
||||
return x;
|
||||
|
|
|
@ -7,6 +7,6 @@ struct X
|
|||
|
||||
X<int> x;
|
||||
// CHECK: define internal void @__cxx_global_var_init()
|
||||
// CHECK: call void @_ZN1XIiEC1Ev
|
||||
// CHECK: define linkonce_odr void @_ZN1XIiEC1Ev
|
||||
// CHECK: define linkonce_odr void @_ZN1XIiEC2Ev
|
||||
// CHECK: call {{.*}} @_ZN1XIiEC1Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC1Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN1XIiEC2Ev
|
||||
|
|
|
@ -46,11 +46,11 @@ void foo3()
|
|||
|
||||
void foo4()
|
||||
{
|
||||
// CHECK: call void @_ZN1AC1Ei
|
||||
// CHECK: call void @_ZN1AC1ERKS_
|
||||
// CHECK: call void @_ZN1AD1Ev
|
||||
// CHECK: call void @_ZN1BC1ERK1A
|
||||
// CHECK: call void @_ZN1AD1Ev
|
||||
// CHECK: call {{.*}} @_ZN1AC1Ei
|
||||
// CHECK: call {{.*}} @_ZN1AC1ERKS_
|
||||
// CHECK: call {{.*}} @_ZN1AD1Ev
|
||||
// CHECK: call {{.*}} @_ZN1BC1ERK1A
|
||||
// CHECK: call {{.*}} @_ZN1AD1Ev
|
||||
const B &b = ({ A a(1); a; });
|
||||
if (b.i != 1)
|
||||
abort();
|
||||
|
|
|
@ -18,34 +18,34 @@ int main() {
|
|||
|
||||
// basic_iostream's complete dtor calls its base dtor, then its
|
||||
// virtual base's dtor.
|
||||
// CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED1Ev(%struct.basic_iostream* %this) unnamed_addr
|
||||
// CHECK: call void @_ZN14basic_iostreamIcED2Ev
|
||||
// CHECK: call void @_ZN9basic_iosD2Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN14basic_iostreamIcED1Ev(%struct.basic_iostream* %this) unnamed_addr
|
||||
// CHECK: call {{.*}} @_ZN14basic_iostreamIcED2Ev
|
||||
// CHECK: call {{.*}} @_ZN9basic_iosD2Ev
|
||||
|
||||
// basic_iostream's base dtor calls its non-virtual base dtor.
|
||||
// CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED2Ev(%struct.basic_iostream* %this, i8** %vtt) unnamed_addr
|
||||
// CHECK: call void @_ZN13basic_istreamIcED2Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN14basic_iostreamIcED2Ev(%struct.basic_iostream* %this, i8** %vtt) unnamed_addr
|
||||
// CHECK: call {{.*}} @_ZN13basic_istreamIcED2Ev
|
||||
// CHECK: }
|
||||
|
||||
// basic_iostream's deleting dtor calls its complete dtor, then
|
||||
// operator delete().
|
||||
// CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED0Ev(%struct.basic_iostream* %this) unnamed_addr
|
||||
// CHECK: call void @_ZN14basic_iostreamIcED1Ev
|
||||
// CHECK: call void @_ZdlPv
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN14basic_iostreamIcED0Ev(%struct.basic_iostream* %this) unnamed_addr
|
||||
// CHECK: call {{.*}} @_ZN14basic_iostreamIcED1Ev
|
||||
// CHECK: call {{.*}} @_ZdlPv
|
||||
|
||||
// basic_istream's complete dtor calls the base dtor,
|
||||
// then its virtual base's base dtor.
|
||||
// CHECK: define linkonce_odr void @_ZN13basic_istreamIcED1Ev(%struct.basic_istream* %this) unnamed_addr
|
||||
// CHECK: call void @_ZN13basic_istreamIcED2Ev
|
||||
// CHECK: call void @_ZN9basic_iosD2Ev
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN13basic_istreamIcED1Ev(%struct.basic_istream* %this) unnamed_addr
|
||||
// CHECK: call {{.*}} @_ZN13basic_istreamIcED2Ev
|
||||
// CHECK: call {{.*}} @_ZN9basic_iosD2Ev
|
||||
|
||||
// basic_istream's deleting dtor calls the complete dtor, then
|
||||
// operator delete().
|
||||
// CHECK: define linkonce_odr void @_ZN13basic_istreamIcED0Ev(%struct.basic_istream* %this) unnamed_addr
|
||||
// CHECK: call void @_ZN13basic_istreamIcED1Ev
|
||||
// CHECK: call void @_ZdlPv
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN13basic_istreamIcED0Ev(%struct.basic_istream* %this) unnamed_addr
|
||||
// CHECK: call {{.*}} @_ZN13basic_istreamIcED1Ev
|
||||
// CHECK: call {{.*}} @_ZdlPv
|
||||
|
||||
// basic_istream's base dtor is a no-op.
|
||||
// CHECK: define linkonce_odr void @_ZN13basic_istreamIcED2Ev(%struct.basic_istream* %this, i8** %vtt) unnamed_addr
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN13basic_istreamIcED2Ev(%struct.basic_istream* %this, i8** %vtt) unnamed_addr
|
||||
// CHECK-NOT: call
|
||||
// CHECK: }
|
||||
|
|
|
@ -5,6 +5,10 @@ struct A {
|
|||
};
|
||||
|
||||
void f(A *a) {
|
||||
// CHECK: call void %
|
||||
// CHECK: define {{.*}} @_Z1fP1A
|
||||
// CHECK: load
|
||||
// CHECK: load
|
||||
// CHECK: [[CALLEE:%[a-zA-Z0-9.]*]] = load
|
||||
// CHECK: call {{.*}} [[CALLEE]](
|
||||
a->~A();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue