forked from OSchip/llvm-project
[CodeGenCXX] Treat 'this' as noalias in constructors
This is currently a clang extension and a resolution of the defect report in the C++ Standard. Differential Revision: https://reviews.llvm.org/D46441 llvm-svn: 344150
This commit is contained in:
parent
9efbfa88c3
commit
cc7e74753a
|
@ -2041,6 +2041,22 @@ void CodeGenModule::ConstructAttributeList(
|
|||
Attrs.addAttribute(llvm::Attribute::Nest);
|
||||
else if (AI.getInReg())
|
||||
Attrs.addAttribute(llvm::Attribute::InReg);
|
||||
if (ArgNo == 0 && TargetDecl && isa<CXXConstructorDecl>(TargetDecl)) {
|
||||
// C++ [class.ctor]p14:
|
||||
// During the construction of an object, if the value of the object
|
||||
// or any of its subobjects is accessed through a glvalue that is not
|
||||
// obtained, directly or indirectly, from the constructor’s this
|
||||
// pointer, the value of the object or subobject thus obtained is
|
||||
// unspecified.
|
||||
//
|
||||
// We intentionally treat this behaviour as undefined by marking 'this'
|
||||
// with noalias attribute and have recommended the Standard to be
|
||||
// changed accordingly.
|
||||
unsigned ThisIRArg, NumIRArgs;
|
||||
std::tie(ThisIRArg, NumIRArgs) = IRFunctionArgs.getIRArgs(ArgNo);
|
||||
assert((NumIRArgs == 1) && "unexpected IR mapping for 'this' argument");
|
||||
Attrs.addAttribute(llvm::Attribute::NoAlias);
|
||||
}
|
||||
break;
|
||||
|
||||
case ABIArgInfo::Indirect: {
|
||||
|
|
|
@ -26,12 +26,12 @@ struct X4 {
|
|||
struct X5 : X0, X4 { };
|
||||
|
||||
void test(X2 x2, X3 x3, X5 x5) {
|
||||
// CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2* %this, %struct.X2* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2* noalias %this, %struct.X2* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: call void @_ZN2X2C2ERKS_({{.*}}) [[NUW:#[0-9]+]]
|
||||
// CHECK-NEXT: ret void
|
||||
// CHECK-NEXT: }
|
||||
X2 x2a(x2);
|
||||
// CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3* %this, %struct.X3* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3* noalias %this, %struct.X3* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: call void @_ZN2X3C2ERKS_({{.*}}) [[NUW]]
|
||||
// CHECK-NEXT: ret void
|
||||
// CHECK-NEXT: }
|
||||
|
@ -55,22 +55,22 @@ struct X8 : X6 { };
|
|||
struct X9 : X6, X7 { };
|
||||
|
||||
void test() {
|
||||
// CHECK: define linkonce_odr void @_ZN2X8C1Ev(%struct.X8* %this) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X8C1Ev(%struct.X8* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN2X8C2Ev({{.*}}) [[NUW]]
|
||||
// CHECK-NEXT: ret void
|
||||
X8();
|
||||
|
||||
// CHECK: define linkonce_odr void @_ZN2X9C1Ev(%struct.X9* %this) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X9C1Ev(%struct.X9* noalias %this) unnamed_addr
|
||||
// FIXME: check that this is the end of the line here:
|
||||
// CHECK: call void @_ZN2X9C2Ev({{.*}})
|
||||
// CHECK-NEXT: ret void
|
||||
X9();
|
||||
|
||||
// CHECK: define linkonce_odr void @_ZN2X8C2Ev(%struct.X8* %this) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X8C2Ev(%struct.X8* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN2X6C2Ev({{.*}}) [[NUW]]
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// CHECK: define linkonce_odr void @_ZN2X9C2Ev(%struct.X9* %this) unnamed_addr
|
||||
// CHECK: define linkonce_odr void @_ZN2X9C2Ev(%struct.X9* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN2X6C2Ev({{.*}}) [[NUW]]
|
||||
// FIXME: and here:
|
||||
// CHECK-NEXT: bitcast
|
||||
|
|
|
@ -22,12 +22,12 @@ T Baz();
|
|||
void Test1() {
|
||||
// CHECK-DTOR-LABEL: Test1
|
||||
// CHECK-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR:[0-9]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-DTOR: call void @_ZN1AD1Ev(%struct.A* nonnull %[[VAR]])
|
||||
// CHECK-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR]])
|
||||
// CHECK-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR:[0-9]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-DTOR: call void @_ZN1AD1Ev(%struct.A* nonnull %[[VAR]])
|
||||
// CHECK-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR]])
|
||||
|
@ -35,11 +35,11 @@ void Test1() {
|
|||
|
||||
// CHECK-NO-DTOR-LABEL: Test1
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR:[0-9]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR]])
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR:[0-9]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR]])
|
||||
// CHECK-NO-DTOR: }
|
||||
|
@ -56,10 +56,10 @@ void Test1() {
|
|||
void Test2() {
|
||||
// CHECK-DTOR-LABEL: Test2
|
||||
// CHECK-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR1:[0-9]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR1:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR1:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR2:[0-9]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR2:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR2:[^ ]+]])
|
||||
// CHECK-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-DTOR: call void @_ZN1AD1Ev(%struct.A* nonnull %[[VAR2]])
|
||||
// CHECK-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR2]])
|
||||
|
@ -69,10 +69,10 @@ void Test2() {
|
|||
|
||||
// CHECK-NO-DTOR-LABEL: Test2
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR1:[0-9]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR1:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR1:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.start.p0i8(i64 1024, i8* nonnull %[[ADDR2:[0-9]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* nonnull %[[VAR2:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_ZN1AC1Ev(%struct.A* noalias nonnull %[[VAR2:[^ ]+]])
|
||||
// CHECK-NO-DTOR: call void @_Z3FooIRK1AEvOT_
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR2]])
|
||||
// CHECK-NO-DTOR: call void @llvm.lifetime.end.p0i8(i64 1024, i8* nonnull %[[ADDR1]])
|
||||
|
|
|
@ -173,41 +173,41 @@ __device__ void df() {
|
|||
T t;
|
||||
// CHECK-NOT: call
|
||||
EC ec;
|
||||
// CHECK: call void @_ZN2ECC1Ev(%struct.EC* %[[ec]])
|
||||
// CHECK: call void @_ZN2ECC1Ev(%struct.EC* noalias %[[ec]])
|
||||
ED ed;
|
||||
// CHECK-NOT: call
|
||||
ECD ecd;
|
||||
// CHECK: call void @_ZN3ECDC1Ev(%struct.ECD* %[[ecd]])
|
||||
// CHECK: call void @_ZN3ECDC1Ev(%struct.ECD* noalias %[[ecd]])
|
||||
ETC etc;
|
||||
// CHECK: call void @_ZN3ETCC1IJEEEDpT_(%struct.ETC* %[[etc]])
|
||||
// CHECK: call void @_ZN3ETCC1IJEEEDpT_(%struct.ETC* noalias %[[etc]])
|
||||
UC uc;
|
||||
// undefined constructor -- not allowed
|
||||
// CHECK: call void @_ZN2UCC1Ev(%struct.UC* %[[uc]])
|
||||
// CHECK: call void @_ZN2UCC1Ev(%struct.UC* noalias %[[uc]])
|
||||
UD ud;
|
||||
// undefined destructor -- not allowed
|
||||
// CHECK-NOT: call
|
||||
ECI eci;
|
||||
// empty constructor w/ initializer list -- not allowed
|
||||
// CHECK: call void @_ZN3ECIC1Ev(%struct.ECI* %[[eci]])
|
||||
// CHECK: call void @_ZN3ECIC1Ev(%struct.ECI* noalias %[[eci]])
|
||||
NEC nec;
|
||||
// non-empty constructor -- not allowed
|
||||
// CHECK: call void @_ZN3NECC1Ev(%struct.NEC* %[[nec]])
|
||||
// CHECK: call void @_ZN3NECC1Ev(%struct.NEC* noalias %[[nec]])
|
||||
// non-empty destructor -- not allowed
|
||||
NED ned;
|
||||
// no-constructor, virtual method -- not allowed
|
||||
// CHECK: call void @_ZN3NCVC1Ev(%struct.NCV* %[[ncv]])
|
||||
// CHECK: call void @_ZN3NCVC1Ev(%struct.NCV* noalias %[[ncv]])
|
||||
NCV ncv;
|
||||
// CHECK-NOT: call
|
||||
VD vd;
|
||||
// CHECK: call void @_ZN2VDC1Ev(%struct.VD* %[[vd]])
|
||||
// CHECK: call void @_ZN2VDC1Ev(%struct.VD* noalias %[[vd]])
|
||||
NCF ncf;
|
||||
// CHECK: call void @_ZN3NCFC1Ev(%struct.NCF* %[[ncf]])
|
||||
// CHECK: call void @_ZN3NCFC1Ev(%struct.NCF* noalias %[[ncf]])
|
||||
NCFS ncfs;
|
||||
// CHECK: call void @_ZN4NCFSC1Ev(%struct.NCFS* %[[ncfs]])
|
||||
// CHECK: call void @_ZN4NCFSC1Ev(%struct.NCFS* noalias %[[ncfs]])
|
||||
UTC utc;
|
||||
// CHECK: call void @_ZN3UTCC1IJEEEDpT_(%struct.UTC* %[[utc]])
|
||||
// CHECK: call void @_ZN3UTCC1IJEEEDpT_(%struct.UTC* noalias %[[utc]])
|
||||
NETC netc;
|
||||
// CHECK: call void @_ZN4NETCC1IJEEEDpT_(%struct.NETC* %[[netc]])
|
||||
// CHECK: call void @_ZN4NETCC1IJEEEDpT_(%struct.NETC* noalias %[[netc]])
|
||||
T_B_T t_b_t;
|
||||
// CHECK-NOT: call
|
||||
T_F_T t_f_t;
|
||||
|
@ -215,17 +215,17 @@ __device__ void df() {
|
|||
T_FA_T t_fa_t;
|
||||
// CHECK-NOT: call
|
||||
EC_I_EC ec_i_ec;
|
||||
// CHECK: call void @_ZN7EC_I_ECC1Ev(%struct.EC_I_EC* %[[ec_i_ec]])
|
||||
// CHECK: call void @_ZN7EC_I_ECC1Ev(%struct.EC_I_EC* noalias %[[ec_i_ec]])
|
||||
EC_I_EC1 ec_i_ec1;
|
||||
// CHECK: call void @_ZN8EC_I_EC1C1Ev(%struct.EC_I_EC1* %[[ec_i_ec1]])
|
||||
// CHECK: call void @_ZN8EC_I_EC1C1Ev(%struct.EC_I_EC1* noalias %[[ec_i_ec1]])
|
||||
T_V_T t_v_t;
|
||||
// CHECK: call void @_ZN5T_V_TC1Ev(%struct.T_V_T* %[[t_v_t]])
|
||||
// CHECK: call void @_ZN5T_V_TC1Ev(%struct.T_V_T* noalias %[[t_v_t]])
|
||||
T_B_NEC t_b_nec;
|
||||
// CHECK: call void @_ZN7T_B_NECC1Ev(%struct.T_B_NEC* %[[t_b_nec]])
|
||||
// CHECK: call void @_ZN7T_B_NECC1Ev(%struct.T_B_NEC* noalias %[[t_b_nec]])
|
||||
T_F_NEC t_f_nec;
|
||||
// CHECK: call void @_ZN7T_F_NECC1Ev(%struct.T_F_NEC* %[[t_f_nec]])
|
||||
// CHECK: call void @_ZN7T_F_NECC1Ev(%struct.T_F_NEC* noalias %[[t_f_nec]])
|
||||
T_FA_NEC t_fa_nec;
|
||||
// CHECK: call void @_ZN8T_FA_NECC1Ev(%struct.T_FA_NEC* %[[t_fa_nec]])
|
||||
// CHECK: call void @_ZN8T_FA_NECC1Ev(%struct.T_FA_NEC* noalias %[[t_fa_nec]])
|
||||
T_B_NED t_b_ned;
|
||||
// CHECK-NOT: call
|
||||
T_F_NED t_f_ned;
|
||||
|
|
|
@ -19,8 +19,8 @@ struct S {
|
|||
};
|
||||
|
||||
// CHECK: store i32 0, i32* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 0, i32 0)
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 0, i32 1), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i32 0, i32 0))
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* noalias getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 0, i32 1), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i32 0, i32 0))
|
||||
// CHECK: store i32 1, i32* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 1, i32 0)
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 1, i32 1), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0))
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* noalias getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 1, i32 1), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i32 0, i32 0))
|
||||
// CHECK: store i32 2, i32* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 2, i32 0)
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 2, i32 1), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i32 0, i32 0))
|
||||
// CHECK: call void @_ZN1AC1EPKc(%struct.A* noalias getelementptr inbounds ([3 x %struct.S], [3 x %struct.S]* @arr, i64 0, i64 2, i32 1), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i32 0, i32 0))
|
||||
|
|
|
@ -67,7 +67,7 @@ public:
|
|||
void func3() {
|
||||
// CHECK: %[[a:.*]] = alloca %class.A, align 4, addrspace(5)
|
||||
// CHECK: %[[r0:.*]] = addrspacecast %class.A addrspace(5)* %[[a]] to %class.A*
|
||||
// CHECK: call void @_ZN1AC1Ev(%class.A* %[[r0]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%class.A* noalias %[[r0]])
|
||||
// CHECK: call void @_ZN1AD1Ev(%class.A* %[[r0]])
|
||||
A a;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ void func_with_indirect_arg(A a) {
|
|||
// CHECK: %[[r0:.+]] = addrspacecast %class.A addrspace(5)* %a to %class.A*
|
||||
// CHECK: %agg.tmp = alloca %class.A, align 4, addrspace(5)
|
||||
// CHECK: %[[r1:.+]] = addrspacecast %class.A addrspace(5)* %agg.tmp to %class.A*
|
||||
// CHECK: call void @_ZN1AC1Ev(%class.A* %[[r0]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%class.A* noalias %[[r0]])
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
|
||||
// CHECK: %[[r4:.+]] = addrspacecast %class.A* %[[r1]] to %class.A addrspace(5)*
|
||||
// CHECK: call void @_Z22func_with_indirect_arg1A(%class.A addrspace(5)* %[[r4]])
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace test0 {
|
|||
A a;
|
||||
}
|
||||
// CHECK: define internal void [[CTOR0_:@.*]]()
|
||||
// CHECK: call void @_ZN5test01AC1Ev([[A]]* @_ZN5test01aE)
|
||||
// CHECK: call void @_ZN5test01AC1Ev([[A]]* noalias @_ZN5test01aE)
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// CHECK: define internal void [[CTOR0]]()
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace test1 {
|
|||
// CHECK-LABEL: define void @_ZN5test14testEv()
|
||||
void test() {
|
||||
// CHECK: [[AV:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK: call [[A]]* @_ZN5test11AC1Ei([[A]]* [[AV]], i32 10)
|
||||
// CHECK: call [[A]]* @_ZN5test11AC1Ei([[A]]* noalias [[AV]], i32 10)
|
||||
// CHECK: invoke void @_ZN5test11A3barEv([[A]]* [[AV]])
|
||||
// CHECK: call [[A]]* @_ZN5test11AD1Ev([[A]]* [[AV]])
|
||||
// CHECK: ret void
|
||||
|
@ -54,7 +54,7 @@ namespace test1 {
|
|||
a.bar();
|
||||
}
|
||||
|
||||
// CHECK: define linkonce_odr [[A]]* @_ZN5test11AC1Ei([[A]]* returned %this, i32 %i) unnamed_addr
|
||||
// CHECK: define linkonce_odr [[A]]* @_ZN5test11AC1Ei([[A]]* noalias returned %this, i32 %i) unnamed_addr
|
||||
// CHECK: [[THIS:%.*]] = alloca [[A]]*, align 4
|
||||
// CHECK: store [[A]]* {{.*}}, [[A]]** [[THIS]]
|
||||
// CHECK: [[THIS1:%.*]] = load [[A]]*, [[A]]** [[THIS]]
|
||||
|
@ -340,7 +340,7 @@ namespace test8 {
|
|||
// CHECK-NEXT: [[T4:%.*]] = icmp ne i32 [[T3]], 0
|
||||
// CHECK-NEXT: br i1 [[T4]]
|
||||
// -> fallthrough, end
|
||||
// CHECK: [[INIT:%.*]] = invoke [[TEST8A]]* @_ZN5test81AC1Ev([[TEST8A]]* @_ZZN5test84testEvE1x)
|
||||
// CHECK: [[INIT:%.*]] = invoke [[TEST8A]]* @_ZN5test81AC1Ev([[TEST8A]]* noalias @_ZZN5test84testEvE1x)
|
||||
|
||||
// FIXME: Here we register a global destructor that
|
||||
// unconditionally calls the destructor. That's what we've always
|
||||
|
|
|
@ -10,9 +10,9 @@ S::S() {
|
|||
iField = 1;
|
||||
};
|
||||
|
||||
// CHECK: %struct.S* @_ZN1SC2Ev(%struct.S* returned %this)
|
||||
// CHECK: %struct.S* @_ZN1SC2Ev(%struct.S* noalias returned %this)
|
||||
|
||||
// CHECK: %struct.S* @_ZN1SC1Ev(%struct.S* returned %this)
|
||||
// CHECK: %struct.S* @_ZN1SC1Ev(%struct.S* noalias returned %this)
|
||||
// CHECK: [[THISADDR:%[a-zA-Z0-9.]+]] = alloca %struct.S*
|
||||
// CHECK: store %struct.S* %this, %struct.S** [[THISADDR]]
|
||||
// CHECK: [[THIS1:%.*]] = load %struct.S*, %struct.S** [[THISADDR]]
|
||||
|
|
|
@ -17,11 +17,11 @@ void g() {
|
|||
// CHECK: br label %[[LOOP:.*]]
|
||||
|
||||
// [[LOOP]]:
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[TEMPORARY:.*]])
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[SA:.*]]* noalias [[TEMP:.*]])
|
||||
// CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]]
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A({{.*}}, [[TEMPORARY]])
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A([[SB:.*]]* noalias %{{.*}}, [[SA]]* [[TEMP]])
|
||||
// CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]]
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[TEMPORARY]])
|
||||
// CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[SA]]* [[TEMP]])
|
||||
// CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD]]
|
||||
// CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1
|
||||
// CHECK: icmp eq
|
||||
|
|
|
@ -65,15 +65,15 @@ namespace PR18097 {
|
|||
};
|
||||
|
||||
// CHECK-LABEL: define {{.*}} @__cxx_global_var_init
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* nonnull @_ZN7PR180977dynamic1aE, i32 1)
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* noalias nonnull @_ZN7PR180977dynamic1aE, i32 1)
|
||||
_Atomic(X) a = X(1);
|
||||
|
||||
// CHECK-LABEL: define {{.*}} @__cxx_global_var_init
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* nonnull @_ZN7PR180977dynamic1bE, i32 2)
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* noalias nonnull @_ZN7PR180977dynamic1bE, i32 2)
|
||||
_Atomic(X) b(X(2));
|
||||
|
||||
// CHECK-LABEL: define {{.*}} @__cxx_global_var_init
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* nonnull @_ZN7PR180977dynamic1cE, i32 3)
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* noalias nonnull @_ZN7PR180977dynamic1cE, i32 3)
|
||||
_Atomic(X) c{X(3)};
|
||||
|
||||
struct Y {
|
||||
|
@ -81,7 +81,7 @@ namespace PR18097 {
|
|||
_Atomic(int) b;
|
||||
};
|
||||
// CHECK-LABEL: define {{.*}} @__cxx_global_var_init
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* getelementptr inbounds ({{.*}}, {{.*}}* @_ZN7PR180977dynamic1yE, i32 0, i32 0), i32 4)
|
||||
// CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* noalias getelementptr inbounds ({{.*}}, {{.*}}* @_ZN7PR180977dynamic1yE, i32 0, i32 0), i32 4)
|
||||
// CHECK: store i32 5, i32* getelementptr inbounds ({{.*}}, {{.*}}* @_ZN7PR180977dynamic1yE, i32 0, i32 1)
|
||||
Y y = { X(4), 5 };
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ namespace test_block_in_lambda {
|
|||
// CHECK: [[TO_DESTROY:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[LAMBDA_T]], [[LAMBDA_T]]* [[THIS]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* [[T0]], {{.*}}* dereferenceable({{[0-9]+}}) [[T1]])
|
||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* noalias [[T0]], {{.*}}* dereferenceable({{[0-9]+}}) [[T1]])
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda9takeBlockEU13block_pointerFvvE(void ()* [[T0]])
|
||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AD1Ev({{.*}}* [[TO_DESTROY]])
|
||||
|
|
|
@ -127,7 +127,7 @@ namespace test4 {
|
|||
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK-NEXT: store i8* [[BLOCKDESC:%.*]], i8** {{.*}}, align 8
|
||||
// CHECK-NEXT: bitcast i8* [[BLOCKDESC]] to <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]* }>*
|
||||
// CHECK: call void @_ZN5test41AC1Ev([[A]]* [[TMP]])
|
||||
// CHECK: call void @_ZN5test41AC1Ev([[A]]* noalias [[TMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test43fooENS_1AE([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test41AD1Ev([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
@ -158,7 +158,7 @@ namespace test5 {
|
|||
// CHECK-NEXT: [[CLEANUP_ACTIVE:%.*]] = alloca i1
|
||||
// CHECK-NEXT: [[T0:%.*]] = zext i1
|
||||
// CHECK-NEXT: store i8 [[T0]], i8* [[COND]], align 1
|
||||
// CHECK-NEXT: call void @_ZN5test51AC1Ev([[A]]* [[X]])
|
||||
// CHECK-NEXT: call void @_ZN5test51AC1Ev([[A]]* noalias [[X]])
|
||||
// CHECK-NEXT: [[CLEANUP_ADDR:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i8, i8* [[COND]], align 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = trunc i8 [[T0]] to i1
|
||||
|
@ -167,7 +167,7 @@ namespace test5 {
|
|||
|
||||
// CHECK-NOT: br
|
||||
// CHECK: [[CAPTURE:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]* [[CAPTURE]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]* noalias [[CAPTURE]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK-NEXT: store i1 true, i1* [[CLEANUP_ACTIVE]]
|
||||
// CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
||||
// CHECK-NEXT: br label
|
||||
|
@ -202,7 +202,7 @@ namespace test6 {
|
|||
|
||||
// CHECK-LABEL: define void @_ZN5test64testEv()
|
||||
// CHECK: [[TEMP:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* [[TEMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* noalias [[TEMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test63fooERKNS_1AEU13block_pointerFvvE(
|
||||
// CHECK-NEXT: call void @_ZN5test61AD1Ev([[A]]* [[TEMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test63barEv()
|
||||
|
|
|
@ -83,9 +83,9 @@ namespace test3 {
|
|||
// CHECK-NEXT: [[T0:%.*]] = load [[B]]*, [[B]]** [[X]]
|
||||
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[T0]])
|
||||
// CHECK-NEXT: br i1 [[BOOL]]
|
||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[T0]])
|
||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* noalias [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[T0]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* noalias [[RESULT]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: ret void
|
||||
return x ?: B();
|
||||
|
@ -97,9 +97,9 @@ namespace test3 {
|
|||
// CHECK-NEXT: call void @_ZN5test312test1_helperEv([[B]]* sret [[TEMP]])
|
||||
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[TEMP]])
|
||||
// CHECK-NEXT: br i1 [[BOOL]]
|
||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* noalias [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* noalias [[RESULT]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31BD1Ev([[B]]* [[TEMP]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
@ -117,7 +117,7 @@ namespace test3 {
|
|||
// CHECK-NEXT: br i1 [[BOOL]]
|
||||
// CHECK: call void @_ZN5test31BcvNS_1AEEv([[A:%.*]]* sret [[RESULT:%.*]], [[B]]* [[T0]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31AC1Ev([[A]]* [[RESULT]])
|
||||
// CHECK: call void @_ZN5test31AC1Ev([[A]]* noalias [[RESULT]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: ret void
|
||||
return x ?: A();
|
||||
|
@ -131,7 +131,7 @@ namespace test3 {
|
|||
// CHECK-NEXT: br i1 [[BOOL]]
|
||||
// CHECK: call void @_ZN5test31BcvNS_1AEEv([[A]]* sret [[RESULT:%.*]], [[B]]* [[TEMP]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31AC1Ev([[A]]* [[RESULT]])
|
||||
// CHECK: call void @_ZN5test31AC1Ev([[A]]* noalias [[RESULT]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN5test31BD1Ev([[B]]* [[TEMP]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -30,22 +30,22 @@ private:
|
|||
B::B(int *i) : i_(i) { }
|
||||
B::~B() { }
|
||||
|
||||
// CHECKGEN-LABEL: define void @_ZN1BC2EPi(%class.B* %this, i32* %i)
|
||||
// CHECKGEN-LABEL: define void @_ZN1BC1EPi(%class.B* %this, i32* %i)
|
||||
// CHECKGEN-LABEL: define void @_ZN1BC2EPi(%class.B* noalias %this, i32* %i)
|
||||
// CHECKGEN-LABEL: define void @_ZN1BC1EPi(%class.B* noalias %this, i32* %i)
|
||||
// CHECKGEN-LABEL: define void @_ZN1BD2Ev(%class.B* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZN1BD1Ev(%class.B* %this)
|
||||
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BC2EPi(%class.B* returned %this, i32* %i)
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BC1EPi(%class.B* returned %this, i32* %i)
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BC2EPi(%class.B* noalias returned %this, i32* %i)
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BC1EPi(%class.B* noalias returned %this, i32* %i)
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BD2Ev(%class.B* returned %this)
|
||||
// CHECKARM-LABEL: define %class.B* @_ZN1BD1Ev(%class.B* returned %this)
|
||||
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BC2EPi(%class.B* %this, i32* %i)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BC1EPi(%class.B* %this, i32* %i)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BC2EPi(%class.B* noalias %this, i32* %i)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BC1EPi(%class.B* noalias %this, i32* %i)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BD2Ev(%class.B* %this)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BD1Ev(%class.B* %this)
|
||||
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.B* @"??0B@@QAE@PAH@Z"(%class.B* returned %this, i32* %i)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.B* @"??0B@@QAE@PAH@Z"(%class.B* noalias returned %this, i32* %i)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"??1B@@UAE@XZ"(%class.B* %this)
|
||||
|
||||
class C : public A, public B {
|
||||
|
@ -59,31 +59,31 @@ private:
|
|||
C::C(int *i, char *c) : B(i), c_(c) { }
|
||||
C::~C() { }
|
||||
|
||||
// CHECKGEN-LABEL: define void @_ZN1CC2EPiPc(%class.C* %this, i32* %i, i8* %c)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CC1EPiPc(%class.C* %this, i32* %i, i8* %c)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CC2EPiPc(%class.C* noalias %this, i32* %i, i8* %c)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CC1EPiPc(%class.C* noalias %this, i32* %i, i8* %c)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CD2Ev(%class.C* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CD1Ev(%class.C* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZThn8_N1CD1Ev(%class.C* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZN1CD0Ev(%class.C* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZThn8_N1CD0Ev(%class.C* %this)
|
||||
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CC2EPiPc(%class.C* returned %this, i32* %i, i8* %c)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CC1EPiPc(%class.C* returned %this, i32* %i, i8* %c)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CC2EPiPc(%class.C* noalias returned %this, i32* %i, i8* %c)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CC1EPiPc(%class.C* noalias returned %this, i32* %i, i8* %c)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CD2Ev(%class.C* returned %this)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZN1CD1Ev(%class.C* returned %this)
|
||||
// CHECKARM-LABEL: define %class.C* @_ZThn8_N1CD1Ev(%class.C* %this)
|
||||
// CHECKARM-LABEL: define void @_ZN1CD0Ev(%class.C* %this)
|
||||
// CHECKARM-LABEL: define void @_ZThn8_N1CD0Ev(%class.C* %this)
|
||||
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CC2EPiPc(%class.C* %this, i32* %i, i8* %c)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CC1EPiPc(%class.C* %this, i32* %i, i8* %c)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CC2EPiPc(%class.C* noalias %this, i32* %i, i8* %c)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CC1EPiPc(%class.C* noalias %this, i32* %i, i8* %c)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CD2Ev(%class.C* %this)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZN1CD1Ev(%class.C* %this)
|
||||
// CHECKIOS5-LABEL: define %class.C* @_ZThn8_N1CD1Ev(%class.C* %this)
|
||||
// CHECKIOS5-LABEL: define void @_ZN1CD0Ev(%class.C* %this)
|
||||
// CHECKIOS5-LABEL: define void @_ZThn8_N1CD0Ev(%class.C* %this)
|
||||
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.C* @"??0C@@QAE@PAHPAD@Z"(%class.C* returned %this, i32* %i, i8* %c)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.C* @"??0C@@QAE@PAHPAD@Z"(%class.C* noalias returned %this, i32* %i, i8* %c)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"??1C@@UAE@XZ"(%class.C* %this)
|
||||
|
||||
class D : public virtual A {
|
||||
|
@ -95,22 +95,22 @@ public:
|
|||
D::D() { }
|
||||
D::~D() { }
|
||||
|
||||
// CHECKGEN-LABEL: define void @_ZN1DC2Ev(%class.D* %this, i8** %vtt)
|
||||
// CHECKGEN-LABEL: define void @_ZN1DC1Ev(%class.D* %this)
|
||||
// CHECKGEN-LABEL: define void @_ZN1DC2Ev(%class.D* noalias %this, i8** %vtt)
|
||||
// CHECKGEN-LABEL: define void @_ZN1DC1Ev(%class.D* noalias %this)
|
||||
// CHECKGEN-LABEL: define void @_ZN1DD2Ev(%class.D* %this, i8** %vtt)
|
||||
// CHECKGEN-LABEL: define void @_ZN1DD1Ev(%class.D* %this)
|
||||
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DC2Ev(%class.D* returned %this, i8** %vtt)
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DC1Ev(%class.D* returned %this)
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DC2Ev(%class.D* noalias returned %this, i8** %vtt)
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DC1Ev(%class.D* noalias returned %this)
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DD2Ev(%class.D* returned %this, i8** %vtt)
|
||||
// CHECKARM-LABEL: define %class.D* @_ZN1DD1Ev(%class.D* returned %this)
|
||||
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DC2Ev(%class.D* %this, i8** %vtt)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DC1Ev(%class.D* %this)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DC2Ev(%class.D* noalias %this, i8** %vtt)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DC1Ev(%class.D* noalias %this)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DD2Ev(%class.D* %this, i8** %vtt)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DD1Ev(%class.D* %this)
|
||||
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.D* @"??0D@@QAE@XZ"(%class.D* returned %this, i32 %is_most_derived)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.D* @"??0D@@QAE@XZ"(%class.D* noalias returned %this, i32 %is_most_derived)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"??1D@@UAE@XZ"(%class.D* %this)
|
||||
|
||||
class E {
|
||||
|
|
|
@ -22,10 +22,10 @@ public:
|
|||
|
||||
void f2() {
|
||||
// CHECK: %var = alloca %class.Test2, align 4
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test2C1Ev(%class.Test2* %var)
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test2C1Ev(%class.Test2* noalias %var)
|
||||
Test2 var;
|
||||
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test2C1Ev(%class.Test2* %var)
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test2C1Ev(%class.Test2* noalias %var)
|
||||
var.Test2::Test2();
|
||||
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %{{.*}}, i8* align 4 %{{.*}}, i32 8, i1 false)
|
||||
|
@ -45,15 +45,15 @@ public:
|
|||
};
|
||||
|
||||
void f3() {
|
||||
// CHECK: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* %var)
|
||||
// CHECK: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* noalias %var)
|
||||
Test3 var;
|
||||
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* %var2)
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* noalias %var2)
|
||||
Test3 var2;
|
||||
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* %var)
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* noalias %var)
|
||||
var.Test3::Test3();
|
||||
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1ERKS_(%class.Test3* %var, %class.Test3* dereferenceable({{[0-9]+}}) %var2)
|
||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1ERKS_(%class.Test3* noalias %var, %class.Test3* dereferenceable({{[0-9]+}}) %var2)
|
||||
var.Test3::Test3(var2);
|
||||
}
|
||||
|
|
|
@ -93,22 +93,22 @@ namespace InitVTable {
|
|||
B(int);
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN10InitVTable1BC2Ev(%"struct.InitVTable::B"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN10InitVTable1BC2Ev(%"struct.InitVTable::B"* noalias %this) unnamed_addr
|
||||
// CHECK: [[T0:%.*]] = bitcast [[B:%.*]]* [[THIS:%.*]] to i32 (...)***
|
||||
// CHECK-NEXT: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN10InitVTable1BE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** [[T0]]
|
||||
// CHECK: [[VTBL:%.*]] = load i32 ([[B]]*)**, i32 ([[B]]*)*** {{%.*}}
|
||||
// CHECK-NEXT: [[FNP:%.*]] = getelementptr inbounds i32 ([[B]]*)*, i32 ([[B]]*)** [[VTBL]], i64 0
|
||||
// CHECK-NEXT: [[FN:%.*]] = load i32 ([[B]]*)*, i32 ([[B]]*)** [[FNP]]
|
||||
// CHECK-NEXT: [[ARG:%.*]] = call i32 [[FN]]([[B]]* [[THIS]])
|
||||
// CHECK-NEXT: call void @_ZN10InitVTable1AC2Ei({{.*}}* {{%.*}}, i32 [[ARG]])
|
||||
// CHECK-NEXT: call void @_ZN10InitVTable1AC2Ei({{.*}}* noalias {{%.*}}, i32 [[ARG]])
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[B]]* [[THIS]] to i32 (...)***
|
||||
// CHECK-NEXT: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN10InitVTable1BE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** [[T0]]
|
||||
// CHECK-NEXT: ret void
|
||||
B::B() : A(foo()) {}
|
||||
|
||||
// CHECK-LABEL: define void @_ZN10InitVTable1BC2Ei(%"struct.InitVTable::B"* %this, i32 %x) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN10InitVTable1BC2Ei(%"struct.InitVTable::B"* noalias %this, i32 %x) unnamed_addr
|
||||
// CHECK: [[ARG:%.*]] = add nsw i32 {{%.*}}, 5
|
||||
// CHECK-NEXT: call void @_ZN10InitVTable1AC2Ei({{.*}}* {{%.*}}, i32 [[ARG]])
|
||||
// CHECK-NEXT: call void @_ZN10InitVTable1AC2Ei({{.*}}* noalias {{%.*}}, i32 [[ARG]])
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[B]]* {{%.*}} to i32 (...)***
|
||||
// CHECK-NEXT: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN10InitVTable1BE, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** [[T0]]
|
||||
// CHECK-NEXT: ret void
|
||||
|
@ -163,7 +163,7 @@ template<typename T> struct X;
|
|||
|
||||
// Make sure that the instantiated constructor initializes start and
|
||||
// end properly.
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIiEC2ERKS0_(%struct.X* %this, %struct.X* dereferenceable({{[0-9]+}}) %other) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIiEC2ERKS0_(%struct.X* noalias %this, %struct.X* dereferenceable({{[0-9]+}}) %other) unnamed_addr
|
||||
// CHECK: {{store.*null}}
|
||||
// CHECK: {{store.*null}}
|
||||
// CHECK: ret
|
||||
|
|
|
@ -22,20 +22,20 @@ struct A {
|
|||
A::A(struct Undeclared &ref) : mem(0) {}
|
||||
|
||||
// Check that delegation works.
|
||||
// NULL-INVALID-LABEL: define void @_ZN1AC2ER10Undeclared(%struct.A* %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1AC2ER10Undeclared(%struct.A* %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// NULL-INVALID-LABEL: define void @_ZN1AC2ER10Undeclared(%struct.A* noalias %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1AC2ER10Undeclared(%struct.A* noalias %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
||||
// NULL-INVALID-LABEL: define void @_ZN1AC1ER10Undeclared(%struct.A* %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1AC1ER10Undeclared(%struct.A* %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// NULL-INVALID-LABEL: define void @_ZN1AC1ER10Undeclared(%struct.A* noalias %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1AC1ER10Undeclared(%struct.A* noalias %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// CHECK: call void @_ZN1AC2ER10Undeclared(
|
||||
|
||||
A::A(ValueClass v) : mem(v.y - v.x) {}
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1AC2E10ValueClass(%struct.A* %this, i64 %v.coerce) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1AC2E10ValueClass(%struct.A* noalias %this, i64 %v.coerce) unnamed_addr
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1AC1E10ValueClass(%struct.A* %this, i64 %v.coerce) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1AC1E10ValueClass(%struct.A* noalias %this, i64 %v.coerce) unnamed_addr
|
||||
// CHECK: call void @_ZN1AC2E10ValueClass(
|
||||
|
||||
/* Test that things work for inheritance. */
|
||||
|
@ -46,13 +46,13 @@ struct B : A {
|
|||
|
||||
B::B(struct Undeclared &ref) : A(ref), mem(1) {}
|
||||
|
||||
// NULL-INVALID-LABEL: define void @_ZN1BC2ER10Undeclared(%struct.B* %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1BC2ER10Undeclared(%struct.B* %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// NULL-INVALID-LABEL: define void @_ZN1BC2ER10Undeclared(%struct.B* noalias %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1BC2ER10Undeclared(%struct.B* noalias %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// CHECK: call void @_ZN1AC2ER10Undeclared(
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
||||
// NULL-INVALID-LABEL: define void @_ZN1BC1ER10Undeclared(%struct.B* %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1BC1ER10Undeclared(%struct.B* %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// NULL-INVALID-LABEL: define void @_ZN1BC1ER10Undeclared(%struct.B* noalias %this, %struct.Undeclared* nonnull %ref) unnamed_addr
|
||||
// NULL-VALID-LABEL: define void @_ZN1BC1ER10Undeclared(%struct.B* noalias %this, %struct.Undeclared* %ref) unnamed_addr
|
||||
// CHECK: call void @_ZN1BC2ER10Undeclared(
|
||||
|
||||
|
||||
|
@ -67,10 +67,10 @@ struct C : virtual A {
|
|||
};
|
||||
C::C(int x) : A(ValueClass(x, x+1)), mem(x * x) {}
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1CC2Ei(%struct.C* %this, i8** %vtt, i32 %x) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC2Ei(%struct.C* noalias %this, i8** %vtt, i32 %x) unnamed_addr
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1CC1Ei(%struct.C* %this, i32 %x) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC1Ei(%struct.C* noalias %this, i32 %x) unnamed_addr
|
||||
// CHECK: call void @_ZN10ValueClassC1Eii(
|
||||
// CHECK: call void @_ZN1AC2E10ValueClass(
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
@ -85,12 +85,12 @@ struct D : A {
|
|||
|
||||
D::D(int x, ...) : A(ValueClass(x, x+1)), mem(x*x) {}
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1DC2Eiz(%struct.D* %this, i32 %x, ...) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1DC2Eiz(%struct.D* noalias %this, i32 %x, ...) unnamed_addr
|
||||
// CHECK: call void @_ZN10ValueClassC1Eii(
|
||||
// CHECK: call void @_ZN1AC2E10ValueClass(
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1DC1Eiz(%struct.D* %this, i32 %x, ...) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1DC1Eiz(%struct.D* noalias %this, i32 %x, ...) unnamed_addr
|
||||
// CHECK: call void @_ZN10ValueClassC1Eii(
|
||||
// CHECK: call void @_ZN1AC2E10ValueClass(
|
||||
// CHECK: call void @_ZN6MemberC1Ei(
|
||||
|
@ -100,7 +100,7 @@ namespace test0 {
|
|||
struct A {};
|
||||
struct B : virtual A { int x; };
|
||||
struct C : B {};
|
||||
|
||||
|
||||
void test(C &in) {
|
||||
C tmp = in;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ namespace test1 {
|
|||
|
||||
// Ensure that we
|
||||
// a) emit the ABI-required but useless complete object and deleting destructor
|
||||
// symbols for an abstract class, and
|
||||
// symbols for an abstract class, and
|
||||
// b) do *not* emit references to virtual base destructors for an abstract class
|
||||
//
|
||||
// Our approach to this is to give these functions a body that simply traps.
|
||||
|
|
|
@ -8,7 +8,7 @@ A f() { return A(0); }
|
|||
|
||||
// Verify that we do not elide copies when constructing a base class.
|
||||
namespace no_elide_base {
|
||||
struct Base {
|
||||
struct Base {
|
||||
Base(const Base&);
|
||||
~Base();
|
||||
};
|
||||
|
@ -17,12 +17,12 @@ namespace no_elide_base {
|
|||
operator Base() const;
|
||||
};
|
||||
|
||||
struct Derived : public virtual Base {
|
||||
struct Derived : public virtual Base {
|
||||
Derived(const Other &O);
|
||||
};
|
||||
|
||||
// CHECK: define {{.*}} @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"* returned %this, %"struct.no_elide_base::Other"* dereferenceable({{[0-9]+}}) %O) unnamed_addr
|
||||
Derived::Derived(const Other &O)
|
||||
// CHECK: define {{.*}} @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"* noalias returned %this, %"struct.no_elide_base::Other"* dereferenceable({{[0-9]+}}) %O) unnamed_addr
|
||||
Derived::Derived(const Other &O)
|
||||
// CHECK: call {{.*}} @_ZNK13no_elide_base5OthercvNS_4BaseEEv
|
||||
// CHECK: call {{.*}} @_ZN13no_elide_base4BaseC2ERKS0_
|
||||
// CHECK: call {{.*}} @_ZN13no_elide_base4BaseD1Ev
|
||||
|
|
|
@ -23,5 +23,5 @@ void pr23373_g(PR23373 &a, PR23373 &b) { a = b; }
|
|||
struct A { virtual void a(); };
|
||||
A x(A& y) { return y; }
|
||||
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A* {{.*}}%this, %struct.A* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A* noalias {{.*}}%this, %struct.A* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1A, i32 0, inrange i32 0, i32 2) to i32 (...)**)
|
||||
|
|
|
@ -21,7 +21,7 @@ struct P {
|
|||
};
|
||||
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X* %this, %struct.X* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X* noalias %this, %struct.X* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
struct X : M, N, P { // ...
|
||||
X() : f1(1.0), d1(2.0), i1(3), name("HELLO"), bf1(0xff), bf2(0xabcd),
|
||||
au_i1(1234), au1_4("MASKED") {}
|
||||
|
@ -146,7 +146,7 @@ void f(B b1) {
|
|||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[T4]], i8* align 8 [[T5]], i64 8, i1 false)
|
||||
// CHECK-NEXT: ret [[A]]* [[THIS]]
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* %this, %"struct.PR6628::B"* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* noalias %this, %"struct.PR6628::B"* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: call void @_ZN6PR66281TC1Ev
|
||||
// CHECK: call void @_ZN6PR66281TC1Ev
|
||||
// CHECK: call void @_ZN6PR66281AC2ERKS0_RKNS_1TES5_
|
||||
|
|
|
@ -65,7 +65,7 @@ namespace PR12890 {
|
|||
};
|
||||
X::X(int) : X() {}
|
||||
}
|
||||
// CHECK: define {{.*}} @_ZN7PR128901XC1Ei(%"class.PR12890::X"* %this, i32)
|
||||
// CHECK: define {{.*}} @_ZN7PR128901XC1Ei(%"class.PR12890::X"* noalias %this, i32)
|
||||
// CHECK: call void @llvm.memset.p0i8.{{i32|i64}}(i8* align 4 {{.*}}, i8 0, {{i32|i64}} 4, i1 false)
|
||||
|
||||
namespace PR14588 {
|
||||
|
|
|
@ -9,31 +9,31 @@ void fn1() {
|
|||
// CHECK-LABEL: define void @_Z3fn1v
|
||||
S s { 1 };
|
||||
// CHECK: alloca %struct.S, align 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%struct.S* %s, i32 1)
|
||||
// CHECK: call void @_ZN1SC1Ei(%struct.S* noalias %s, i32 1)
|
||||
}
|
||||
|
||||
void fn2() {
|
||||
// CHECK-LABEL: 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: call void @_ZN1SC1Eidd(%struct.S* noalias %s, i32 1, double 2.000000e+00, double 3.000000e+00)
|
||||
}
|
||||
|
||||
void fn3() {
|
||||
// CHECK-LABEL: 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: call void @_ZN1SC1Ei(%struct.S* noalias %{{.+}}, i32 1)
|
||||
// CHECK: call void @_ZN1SC1Ei(%struct.S* noalias %{{.+}}, i32 2)
|
||||
// CHECK: call void @_ZN1SC1Ei(%struct.S* noalias %{{.+}}, i32 3)
|
||||
}
|
||||
|
||||
void fn4() {
|
||||
// CHECK-LABEL: 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: call void @_ZN1SC1Eidd(%struct.S* noalias %{{.+}}, i32 1, double 2.000000e+00, double 3.000000e+00)
|
||||
// CHECK: call void @_ZN1SC1Eidd(%struct.S* noalias %{{.+}}, i32 4, double 5.000000e+00, double 6.000000e+00)
|
||||
}
|
||||
|
||||
namespace TreeTransformBracedInit {
|
||||
|
|
|
@ -99,10 +99,10 @@ std::initializer_list<int> thread_local x = {1, 2, 3, 4};
|
|||
// X86: store i64 4, i64* getelementptr inbounds ({{.*}}, {{.*}}* @_ZN25thread_local_global_array1xE, i32 0, i32 1), align 8
|
||||
|
||||
// CHECK-LABEL: define internal void @__cxx_global_var_init
|
||||
// X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* @_ZGR15globalInitList2_, i{{32|64}} 0, i{{32|64}} 0
|
||||
// X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* @_ZGR15globalInitList2_, i{{32|64}} 0, i{{32|64}} 1
|
||||
// AMDGCN: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* addrspacecast ({{[^@]+}} @_ZGR15globalInitList2_ {{[^)]+}}), i{{32|64}} 0, i{{32|64}} 0
|
||||
// AMDGCN: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* addrspacecast ({{[^@]+}} @_ZGR15globalInitList2_ {{[^)]+}}), i{{32|64}} 0, i{{32|64}} 1
|
||||
// X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* noalias getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* @_ZGR15globalInitList2_, i{{32|64}} 0, i{{32|64}} 0
|
||||
// X86: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* noalias getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* @_ZGR15globalInitList2_, i{{32|64}} 0, i{{32|64}} 1
|
||||
// AMDGCN: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* noalias getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* addrspacecast ({{[^@]+}} @_ZGR15globalInitList2_ {{[^)]+}}), i{{32|64}} 0, i{{32|64}} 0
|
||||
// AMDGCN: call void @_ZN8witharg1C1ERK10destroyme1(%[[WITHARG]]* noalias getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* addrspacecast ({{[^@]+}} @_ZGR15globalInitList2_ {{[^)]+}}), i{{32|64}} 0, i{{32|64}} 1
|
||||
// CHECK: call i32 @__cxa_atexit
|
||||
// X86: store %[[WITHARG]]* getelementptr inbounds ([2 x %[[WITHARG]]], [2 x %[[WITHARG]]]* @_ZGR15globalInitList2_, i64 0, i64 0),
|
||||
// X86: %[[WITHARG]]** getelementptr inbounds (%{{.*}}, %{{.*}}* @globalInitList2, i32 0, i32 0), align 8
|
||||
|
|
|
@ -20,22 +20,22 @@ void *p = new S[2][3]{ { 1, 2, 3 }, { 4, 5, 6 } };
|
|||
// CHECK: %[[S_0:.*]] = bitcast %[[S]]* %[[START_AS_S]] to [3 x %[[S]]]*
|
||||
//
|
||||
// CHECK: %[[S_0_0:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_0]], i64 0, i64 0
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_0]], i32 1)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_0]], i32 1)
|
||||
// CHECK: %[[S_0_1:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_0_0]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_1]], i32 2)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_1]], i32 2)
|
||||
// CHECK: %[[S_0_2:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_0_1]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_2]], i32 3)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_2]], i32 3)
|
||||
//
|
||||
// { 4, 5, 6 }
|
||||
//
|
||||
// CHECK: %[[S_1:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_0]], i64 1
|
||||
//
|
||||
// CHECK: %[[S_1_0:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_1]], i64 0, i64 0
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_0]], i32 4)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_0]], i32 4)
|
||||
// CHECK: %[[S_1_1:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_1_0]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_1]], i32 5)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_1]], i32 5)
|
||||
// CHECK: %[[S_1_2:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_1_1]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_2]], i32 6)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_2]], i32 6)
|
||||
//
|
||||
// CHECK-NOT: br i1
|
||||
// CHECK-NOT: call
|
||||
|
@ -64,22 +64,22 @@ void *q = new S[n][3]{ { 1, 2, 3 }, { 4, 5, 6 } };
|
|||
// CHECK: %[[S_0:.*]] = bitcast %[[S]]* %[[START_AS_S]] to [3 x %[[S]]]*
|
||||
//
|
||||
// CHECK: %[[S_0_0:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_0]], i64 0, i64 0
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_0]], i32 1)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_0]], i32 1)
|
||||
// CHECK: %[[S_0_1:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_0_0]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_1]], i32 2)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_1]], i32 2)
|
||||
// CHECK: %[[S_0_2:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_0_1]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_0_2]], i32 3)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_0_2]], i32 3)
|
||||
//
|
||||
// { 4, 5, 6 }
|
||||
//
|
||||
// CHECK: %[[S_1:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_0]], i64 1
|
||||
//
|
||||
// CHECK: %[[S_1_0:.*]] = getelementptr inbounds [3 x %[[S]]], [3 x %[[S]]]* %[[S_1]], i64 0, i64 0
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_0]], i32 4)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_0]], i32 4)
|
||||
// CHECK: %[[S_1_1:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_1_0]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_1]], i32 5)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_1]], i32 5)
|
||||
// CHECK: %[[S_1_2:.*]] = getelementptr inbounds %[[S]], %[[S]]* %[[S_1_1]], i64 1
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* %[[S_1_2]], i32 6)
|
||||
// CHECK: call void @_ZN1SC1Ei(%[[S]]* noalias %[[S_1_2]], i32 6)
|
||||
//
|
||||
// And the rest.
|
||||
//
|
||||
|
@ -94,7 +94,7 @@ void *q = new S[n][3]{ { 1, 2, 3 }, { 4, 5, 6 } };
|
|||
// CHECK: br label
|
||||
//
|
||||
// CHECK: %[[CUR:.*]] = phi %[[S]]* [ %[[S_2_AS_S]], {{.*}} ], [ %[[NEXT:.*]], {{.*}} ]
|
||||
// CHECK: call void @_ZN1SC1Ev(%[[S]]* %[[CUR]])
|
||||
// CHECK: call void @_ZN1SC1Ev(%[[S]]* noalias %[[CUR]])
|
||||
// CHECK: %[[NEXT]] = getelementptr inbounds %[[S]], %[[S]]* %[[CUR]], i64 1
|
||||
// CHECK: icmp eq %[[S]]* %[[NEXT]], %[[END]]
|
||||
// CHECK: br i1
|
||||
|
|
|
@ -222,7 +222,7 @@ struct T { ~T(); };
|
|||
// CHECK-LABEL: define void @_Z8tls_dtorv()
|
||||
void tls_dtor() {
|
||||
// CHECK: load i8, i8* @_ZGVZ8tls_dtorvE1s
|
||||
// CHECK: call void @_ZN1SC1Ev(%struct.S* @_ZZ8tls_dtorvE1s)
|
||||
// CHECK: call void @_ZN1SC1Ev(%struct.S* noalias @_ZZ8tls_dtorvE1s)
|
||||
// LINUX: call i32 @__cxa_thread_atexit({{.*}}@_ZN1SD1Ev {{.*}} @_ZZ8tls_dtorvE1s{{.*}} @__dso_handle
|
||||
// DARWIN: call i32 @_tlv_atexit({{.*}}@_ZN1SD1Ev {{.*}} @_ZZ8tls_dtorvE1s{{.*}} @__dso_handle
|
||||
// CHECK: store i8 1, i8* @_ZGVZ8tls_dtorvE1s
|
||||
|
@ -236,7 +236,7 @@ void tls_dtor() {
|
|||
static thread_local T t;
|
||||
|
||||
// CHECK: load i8, i8* @_ZGVZ8tls_dtorvE1u
|
||||
// CHECK: call void @_ZN1SC1Ev(%struct.S* @_ZGRZ8tls_dtorvE1u_)
|
||||
// CHECK: call void @_ZN1SC1Ev(%struct.S* noalias @_ZGRZ8tls_dtorvE1u_)
|
||||
// LINUX: call i32 @__cxa_thread_atexit({{.*}}@_ZN1SD1Ev {{.*}} @_ZGRZ8tls_dtorvE1u_{{.*}} @__dso_handle
|
||||
// DARWIN: call i32 @_tlv_atexit({{.*}}@_ZN1SD1Ev {{.*}} @_ZGRZ8tls_dtorvE1u_{{.*}} @__dso_handle
|
||||
// CHECK: store i8 1, i8* @_ZGVZ8tls_dtorvE1u
|
||||
|
|
|
@ -50,7 +50,7 @@ auto [e1, e2] = make<E>();
|
|||
|
||||
// CHECK: @_Z4makeI1BERT_v()
|
||||
// CHECK: call i32 @_Z3getILi0EEDa1B()
|
||||
// CHECK: call void @_ZN1XC1E1Y({{.*}}* @_ZGR2b1_, i32
|
||||
// CHECK: call void @_ZN1XC1E1Y({{.*}}* noalias @_ZGR2b1_, i32
|
||||
// CHECK: call i32 @__cxa_atexit({{.*}}@_ZN1XD1Ev{{.*}}@_ZGR2b1_
|
||||
// CHECK: store {{.*}}* @_ZGR2b1_,
|
||||
//
|
||||
|
@ -93,7 +93,7 @@ int test_locals() {
|
|||
|
||||
// CHECK: @_Z4makeI1BERT_v()
|
||||
// CHECK: call i32 @_Z3getILi0EEDa1B()
|
||||
// CHECK: call void @_ZN1XC1E1Y({{.*}}* %[[b1:.*]], i32
|
||||
// CHECK: call void @_ZN1XC1E1Y({{.*}}* noalias %[[b1:.*]], i32
|
||||
//
|
||||
// CHECK: call double @_Z3getILi1EEDa1B()
|
||||
// CHECK: %[[cvt:.*]] = fptosi double %{{.*}} to i32
|
||||
|
|
|
@ -119,7 +119,7 @@ namespace Instantiated1 {
|
|||
template<int> B v({});
|
||||
template B v<0>;
|
||||
// CHECK-LABEL: define {{.*}}global_var_init{{.*}} comdat($_ZN13Instantiated11vILi0EEE) {
|
||||
// CHECK: call void @_ZN13Instantiated11BC1Ev(%{{.*}}* @_ZN13Instantiated11vILi0EEE)
|
||||
// CHECK: call void @_ZN13Instantiated11BC1Ev(%{{.*}}* noalias @_ZN13Instantiated11vILi0EEE)
|
||||
}
|
||||
|
||||
namespace Instantiated2 {
|
||||
|
|
|
@ -15,12 +15,12 @@ public:
|
|||
|
||||
// CHECK-LABEL: define void @_Z1gv()
|
||||
void g() {
|
||||
// CHECK: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
|
||||
// CHECK: call void @_ZN1TC1Ev([[T:%.*]]* noalias [[AGG1:%.*]])
|
||||
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG1]])
|
||||
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
|
||||
f();
|
||||
|
||||
// CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
|
||||
// CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* noalias [[AGG2:%.*]])
|
||||
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG2]])
|
||||
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
|
||||
f();
|
||||
|
@ -61,7 +61,7 @@ namespace test1 {
|
|||
C c;
|
||||
A a;
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5test11DC2Ev(%"struct.test1::D"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5test11DC2Ev(%"struct.test1::D"* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN5test11BC1Ev(
|
||||
// CHECK-NEXT: call void @_ZN5test11CC1ERKNS_1BE(
|
||||
// CHECK-NEXT: call void @_ZN5test11BD1Ev(
|
||||
|
|
|
@ -42,14 +42,14 @@ struct C {
|
|||
C();
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1CC2Ev(%struct.C* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC2Ev(%struct.C* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN2A1C1Ev(
|
||||
// CHECK: call void @_ZN2A2C1Ev(
|
||||
// CHECK: call void @_ZN1BC1ERK2A1RK2A2(
|
||||
// CHECK: call void @_ZN2A2D1Ev
|
||||
// CHECK: call void @_ZN2A1D1Ev
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1CC1Ev(%struct.C* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC1Ev(%struct.C* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN1CC2Ev(
|
||||
C::C() { }
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ void test0(X x) {
|
|||
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align
|
||||
// CHECK-NEXT: [[T0:%.*]] = call dereferenceable({{[0-9]+}}) [[B:%.*]]* @_ZN1XcvR1BEv(
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[B]]* [[T0]] to [[A]]*
|
||||
// CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* [[TMP]], [[A]]* dereferenceable({{[0-9]+}}) [[T1]])
|
||||
// CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* noalias [[TMP]], [[A]]* dereferenceable({{[0-9]+}}) [[T1]])
|
||||
// CHECK-NEXT: call void @_Z12test0_helper1A([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: call void @_ZN1AD1Ev([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -349,7 +349,7 @@ namespace test6 {
|
|||
};
|
||||
|
||||
C::C() { opaque(); }
|
||||
// CHECK5-LABEL: define void @_ZN5test61CC1Ev(%"struct.test6::C"* %this) unnamed_addr
|
||||
// CHECK5-LABEL: define void @_ZN5test61CC1Ev(%"struct.test6::C"* noalias %this) unnamed_addr
|
||||
// CHECK5: call void @_ZN5test61BILj2EEC2Ev
|
||||
// CHECK5: invoke void @_ZN5test61BILj3EEC2Ev
|
||||
// CHECK5: invoke void @_ZN5test61BILj0EEC2Ev
|
||||
|
@ -428,9 +428,9 @@ namespace test8 {
|
|||
// CHECK5-LABEL: define void @_ZN5test84testEv()
|
||||
// CHECK5: [[X:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK5-NEXT: [[Y:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK5: call void @_ZN5test81AC1Ev([[A]]* [[X]])
|
||||
// CHECK5: call void @_ZN5test81AC1Ev([[A]]* noalias [[X]])
|
||||
// CHECK5-NEXT: br label
|
||||
// CHECK5: invoke void @_ZN5test81AC1Ev([[A]]* [[Y]])
|
||||
// CHECK5: invoke void @_ZN5test81AC1Ev([[A]]* noalias [[Y]])
|
||||
// CHECK5v03: invoke void @_ZN5test81AD1Ev([[A]]* [[Y]])
|
||||
// CHECK5v11: call void @_ZN5test81AD1Ev([[A]]* [[Y]])
|
||||
// CHECK5-NOT: switch
|
||||
|
|
|
@ -9,7 +9,7 @@ struct CtorWithClosure {
|
|||
// CHECK: %[[this_addr:.*]] = alloca %struct.CtorWithClosure*, align 4
|
||||
// CHECK: store %struct.CtorWithClosure* %this, %struct.CtorWithClosure** %[[this_addr]], align 4
|
||||
// CHECK: %[[this:.*]] = load %struct.CtorWithClosure*, %struct.CtorWithClosure** %[[this_addr]]
|
||||
// CHECK: call %struct.CtorWithClosure* (%struct.CtorWithClosure*, ...) @"??0CtorWithClosure@@QAA@ZZ"(%struct.CtorWithClosure* %[[this]])
|
||||
// CHECK: call %struct.CtorWithClosure* (%struct.CtorWithClosure*, ...) @"??0CtorWithClosure@@QAA@ZZ"(%struct.CtorWithClosure* noalias %[[this]])
|
||||
// CHECK: ret void
|
||||
};
|
||||
|
||||
|
@ -32,7 +32,7 @@ struct __declspec(dllexport) ClassWithClosure {
|
|||
// CHECK: %[[this_addr:.*]] = alloca %struct.ClassWithClosure*, align 4
|
||||
// CHECK: store %struct.ClassWithClosure* %this, %struct.ClassWithClosure** %[[this_addr]], align 4
|
||||
// CHECK: %[[this:.*]] = load %struct.ClassWithClosure*, %struct.ClassWithClosure** %[[this_addr]]
|
||||
// CHECK: call %struct.ClassWithClosure* (%struct.ClassWithClosure*, ...) @"??0ClassWithClosure@@QAA@ZZ"(%struct.ClassWithClosure* %[[this]])
|
||||
// CHECK: call %struct.ClassWithClosure* (%struct.ClassWithClosure*, ...) @"??0ClassWithClosure@@QAA@ZZ"(%struct.ClassWithClosure* noalias %[[this]])
|
||||
// CHECK: ret void
|
||||
};
|
||||
|
||||
|
|
|
@ -280,12 +280,12 @@ constexpr int ExportMembers::Nested::ConstexprField;
|
|||
|
||||
// Export special member functions.
|
||||
struct ExportSpecials {
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* noalias returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* noalias returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* noalias %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* noalias %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* noalias %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* noalias %this)
|
||||
__declspec(dllexport) ExportSpecials();
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"??1ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* %this)
|
||||
|
@ -296,12 +296,12 @@ struct ExportSpecials {
|
|||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||
__declspec(dllexport) ~ExportSpecials();
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* noalias returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* noalias returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials(const ExportSpecials&);
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"??4ExportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
|
@ -310,12 +310,12 @@ struct ExportSpecials {
|
|||
// G64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials& operator=(const ExportSpecials&);
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* noalias returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* noalias returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* noalias %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials(ExportSpecials&&);
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
|
@ -334,7 +334,7 @@ ExportSpecials& ExportSpecials::operator=(ExportSpecials&&) { return *this; }
|
|||
|
||||
// Export class with inline special member functions.
|
||||
struct ExportInlineSpecials {
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"??0ExportInlineSpecials@@QAE@XZ"(%struct.ExportInlineSpecials* returned %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"??0ExportInlineSpecials@@QAE@XZ"(%struct.ExportInlineSpecials* noalias returned %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportInlineSpecials* @"??0ExportInlineSpecials@@QEAA@XZ"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
|
@ -384,12 +384,12 @@ struct ExportDefaultedDefs {
|
|||
__declspec(dllexport) ExportDefaultedDefs& operator=(ExportDefaultedDefs&&);
|
||||
};
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* noalias returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* noalias returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* noalias %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* noalias %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* noalias %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* noalias %this)
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs() = default;
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"??1ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* %this)
|
||||
|
@ -400,12 +400,12 @@ __declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs() = default;
|
|||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
ExportDefaultedDefs::~ExportDefaultedDefs() = default;
|
||||
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* noalias returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* noalias returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(const ExportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"??4ExportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
|
@ -414,12 +414,12 @@ __declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(const ExportDefau
|
|||
// G64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ExportDefaultedDefs& ExportDefaultedDefs::operator=(const ExportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* noalias returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* noalias returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* noalias %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(ExportDefaultedDefs&&) = default;
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
|
@ -444,10 +444,10 @@ struct ExportDefaultedInclassDefs {
|
|||
// M64VS2015-NOT: define weak_odr dso_local dllexport void @"??1ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
|
||||
__declspec(dllexport) ExportDefaultedInclassDefs(const ExportDefaultedInclassDefs&) = default;
|
||||
// M32VS2013-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2013-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2015-NOT: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2015-NOT: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2013-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* noalias returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2013-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* noalias returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2015-NOT: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* noalias returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2015-NOT: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* noalias returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
|
||||
__declspec(dllexport) ExportDefaultedInclassDefs& operator=(const ExportDefaultedInclassDefs&) = default;
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedInclassDefs* @"??4ExportDefaultedInclassDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
|
|
|
@ -408,10 +408,10 @@ USEMV(ImportMembers::Nested, ConstexprField)
|
|||
|
||||
// Import special member functions.
|
||||
struct ImportSpecials {
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@XZ"(%struct.ImportSpecials* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@XZ"(%struct.ImportSpecials* returned)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials*)
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@XZ"(%struct.ImportSpecials* noalias returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@XZ"(%struct.ImportSpecials* noalias returned)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials* noalias)
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1Ev(%struct.ImportSpecials* noalias)
|
||||
__declspec(dllimport) ImportSpecials();
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportSpecials@@QAE@XZ"(%struct.ImportSpecials*)
|
||||
|
@ -420,10 +420,10 @@ struct ImportSpecials {
|
|||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*)
|
||||
__declspec(dllimport) ~ImportSpecials();
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@ABU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@AEBU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@ABU0@@Z"(%struct.ImportSpecials* noalias returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@AEBU0@@Z"(%struct.ImportSpecials* noalias returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials* noalias, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials* noalias, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportSpecials(const ImportSpecials&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"??4ImportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
|
@ -432,10 +432,10 @@ struct ImportSpecials {
|
|||
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportSpecials& operator=(const ImportSpecials&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials* noalias returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials* noalias returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials* noalias, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials* noalias, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportSpecials(ImportSpecials&&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||
|
@ -449,10 +449,10 @@ USESPECIALS(ImportSpecials)
|
|||
|
||||
// Export inline special member functions.
|
||||
struct ImportInlineSpecials {
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials* returned)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials* noalias returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials* noalias returned)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* noalias %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* noalias %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@XZ"(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(
|
||||
__declspec(dllimport) ImportInlineSpecials() {}
|
||||
|
@ -465,10 +465,10 @@ struct ImportInlineSpecials {
|
|||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
||||
__declspec(dllimport) ~ImportInlineSpecials() {}
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* noalias returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* noalias returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* noalias %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* noalias %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@ABU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
||||
__declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&);
|
||||
|
@ -481,10 +481,10 @@ struct ImportInlineSpecials {
|
|||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(
|
||||
__declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* noalias returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* noalias returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* noalias %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* noalias %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
||||
__declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {}
|
||||
|
@ -504,12 +504,12 @@ USESPECIALS(ImportInlineSpecials)
|
|||
|
||||
// Import defaulted member functions.
|
||||
struct ImportDefaulted {
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted* returned)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned %this)
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* noalias returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted* noalias returned)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* noalias %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* noalias %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* noalias returned %this)
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* noalias %this)
|
||||
__declspec(dllimport) ImportDefaulted() = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"??1ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted*)
|
||||
|
@ -520,12 +520,12 @@ struct ImportDefaulted {
|
|||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
__declspec(dllimport) ~ImportDefaulted() = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* noalias returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* noalias returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* noalias returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
|
@ -536,12 +536,12 @@ struct ImportDefaulted {
|
|||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* noalias returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* noalias returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* noalias returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* noalias %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
|
@ -571,8 +571,8 @@ struct ImportDefaultedDefs {
|
|||
|
||||
#ifdef MSABI
|
||||
// For MinGW, the function will not be dllimport, and we cannot add the attribute now.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@XZ"(%struct.ImportDefaultedDefs* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@XZ"(%struct.ImportDefaultedDefs* returned)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@XZ"(%struct.ImportDefaultedDefs* noalias returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@XZ"(%struct.ImportDefaultedDefs* noalias returned)
|
||||
__declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default;
|
||||
#endif
|
||||
|
||||
|
@ -583,10 +583,10 @@ __declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default;
|
|||
__declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default;
|
||||
#endif
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* noalias returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* noalias returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
|
@ -595,12 +595,12 @@ inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = de
|
|||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* noalias returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ImportDefaultedDefs* @"??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* noalias returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* noalias %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored
|
||||
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
|
|
|
@ -369,7 +369,7 @@ USECLASS(ClassWithNonDllImportBase);
|
|||
struct ClassWithCtor { ClassWithCtor() {} };
|
||||
struct __declspec(dllimport) ClassWithNonDllImportFieldWithCtor { ClassWithCtor t; };
|
||||
USECLASS(ClassWithNonDllImportFieldWithCtor);
|
||||
// MO1-DAG: declare dllimport x86_thiscallcc %struct.ClassWithNonDllImportFieldWithCtor* @"??0ClassWithNonDllImportFieldWithCtor@@QAE@XZ"(%struct.ClassWithNonDllImportFieldWithCtor* returned)
|
||||
// MO1-DAG: declare dllimport x86_thiscallcc %struct.ClassWithNonDllImportFieldWithCtor* @"??0ClassWithNonDllImportFieldWithCtor@@QAE@XZ"(%struct.ClassWithNonDllImportFieldWithCtor* noalias returned)
|
||||
struct ClassWithImplicitDtor { __declspec(dllimport) ClassWithImplicitDtor(); ClassWithDtor member; };
|
||||
__declspec(dllimport) inline void ReferencingDtorThroughDefinition() { ClassWithImplicitDtor x; };
|
||||
USE(ReferencingDtorThroughDefinition)
|
||||
|
|
|
@ -34,7 +34,7 @@ void test2() {
|
|||
// CHECK-NEXT: [[SELECTORVAR:%.*]] = alloca i32
|
||||
// CHECK-NEXT: [[EXNOBJ:%.*]] = call i8* @__cxa_allocate_exception(i64 16)
|
||||
// CHECK-NEXT: [[EXN:%.*]] = bitcast i8* [[EXNOBJ]] to [[DSTAR:%[^*]*\*]]
|
||||
// CHECK-NEXT: invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] [[EXN]], [[DSTAR]] dereferenceable({{[0-9]+}}) @d2)
|
||||
// CHECK-NEXT: invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] noalias [[EXN]], [[DSTAR]] dereferenceable({{[0-9]+}}) @d2)
|
||||
// CHECK-NEXT: to label %[[CONT:.*]] unwind label %{{.*}}
|
||||
// : [[CONT]]: (can't check this in Release-Asserts builds)
|
||||
// CHECK: call void @__cxa_throw(i8* [[EXNOBJ]], i8* bitcast ({{.*}}* @_ZTI7test2_D to i8*), i8* null) [[NR]]
|
||||
|
@ -82,7 +82,7 @@ namespace test5 {
|
|||
// CHECK-LABEL: define void @_ZN5test54testEv()
|
||||
// CHECK: [[EXNOBJ:%.*]] = call i8* @__cxa_allocate_exception(i64 1)
|
||||
// CHECK: [[EXNCAST:%.*]] = bitcast i8* [[EXNOBJ]] to [[A:%[^*]*]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test51AC1Ev([[A]]* [[EXNCAST]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test51AC1Ev([[A]]* noalias [[EXNCAST]])
|
||||
// CHECK: invoke void @__cxa_throw(i8* [[EXNOBJ]], i8* bitcast ({{.*}}* @_ZTIN5test51AE to i8*), i8* bitcast (void ([[A]]*)* @_ZN5test51AD1Ev to i8*)) [[NR]]
|
||||
// CHECK-NEXT: to label {{%.*}} unwind label %[[HANDLER:[^ ]*]]
|
||||
// : [[HANDLER]]: (can't check this in Release-Asserts builds)
|
||||
|
@ -186,7 +186,7 @@ namespace test9 {
|
|||
struct A { A(); };
|
||||
|
||||
|
||||
// CHECK-LABEL: define void @_ZN5test91AC2Ev(%"struct.test9::A"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN5test91AC2Ev(%"struct.test9::A"* noalias %this) unnamed_addr
|
||||
// CHECK-SAME: personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
|
||||
A::A() try {
|
||||
// CHECK: invoke void @_ZN5test96opaqueEv()
|
||||
|
@ -199,7 +199,7 @@ namespace test9 {
|
|||
// CHECK: invoke void @_ZN5test96opaqueEv()
|
||||
// CHECK: invoke void @__cxa_rethrow()
|
||||
|
||||
// CHECK-LABEL: define void @_ZN5test91AC1Ev(%"struct.test9::A"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN5test91AC1Ev(%"struct.test9::A"* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN5test91AC2Ev
|
||||
// CHECK-NEXT: ret void
|
||||
opaque();
|
||||
|
@ -428,9 +428,9 @@ namespace test16 {
|
|||
// CHECK-NEXT: store i8* [[EXN]], i8** [[EXN_SAVE]]
|
||||
// CHECK-NEXT: store i1 true, i1* [[EXN_ACTIVE]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast i8* [[EXN]] to [[B:%.*]]*
|
||||
// CHECK-NEXT: invoke void @_ZN6test161AC1Ev([[A]]* [[TEMP]])
|
||||
// CHECK-NEXT: invoke void @_ZN6test161AC1Ev([[A]]* noalias [[TEMP]])
|
||||
// CHECK: store i1 true, i1* [[TEMP_ACTIVE]]
|
||||
// CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]* [[T0]], [[A]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||
// CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]* noalias [[T0]], [[A]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||
// CHECK: store i1 false, i1* [[EXN_ACTIVE]]
|
||||
// CHECK-NEXT: invoke void @__cxa_throw(i8* [[EXN]],
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ bool foo(Empty e) {
|
|||
|
||||
void caller(Empty &e) {
|
||||
// CHECK: @_Z6callerR5Empty(%struct.Empty* dereferenceable({{[0-9]+}}) %e)
|
||||
// CHECK: call {{.*}} @_ZN5EmptyC1ERKS_(%struct.Empty* [[NEWTMP:%.*]], %struct.Empty*
|
||||
// CHECK: call {{.*}} @_ZN5EmptyC1ERKS_(%struct.Empty* noalias [[NEWTMP:%.*]], %struct.Empty*
|
||||
// CHECK: call {{.*}} @_Z3foo5Empty(%struct.Empty* [[NEWTMP]])
|
||||
foo(e);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ extern "C" void use_cxx() {
|
|||
|
||||
// CXXEH-LABEL: define dso_local void @use_cxx()
|
||||
// CXXEH-SAME: personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*)
|
||||
// CXXEH: call %struct.HasCleanup* @"??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* %{{.*}})
|
||||
// CXXEH: call %struct.HasCleanup* @"??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* noalias %{{.*}})
|
||||
// CXXEH: invoke void @might_throw()
|
||||
// CXXEH: to label %[[cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -38,7 +38,7 @@ extern "C" void use_cxx() {
|
|||
|
||||
// NOCXX-LABEL: define dso_local void @use_cxx()
|
||||
// NOCXX-NOT: invoke
|
||||
// NOCXX: call %struct.HasCleanup* @"??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* %{{.*}})
|
||||
// NOCXX: call %struct.HasCleanup* @"??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* noalias %{{.*}})
|
||||
// NOCXX-NOT: invoke
|
||||
// NOCXX: call void @might_throw()
|
||||
// NOCXX-NOT: invoke
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace test1 {
|
|||
// CHECK: define [[A:%.*]]* @_ZN5test11aEv()
|
||||
// CHECK: [[NEW:%.*]] = call i8* @_Znwm(i64 8)
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 5)
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[CAST]], i32 5)
|
||||
// CHECK: ret [[A]]* [[CAST]]
|
||||
// CHECK: call void @_ZdlPv(i8* [[NEW]])
|
||||
return new A(5);
|
||||
|
@ -44,7 +44,7 @@ namespace test1 {
|
|||
// CHECK: [[NEW:%.*]] = call i8* @_Znwm(i64 8)
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: [[FOO:%.*]] = invoke i32 @_ZN5test13fooEv()
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[FOO]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[CAST]], i32 [[FOO]])
|
||||
// CHECK: ret [[A]]* [[CAST]]
|
||||
// CHECK: call void @_ZdlPv(i8* [[NEW]])
|
||||
extern int foo();
|
||||
|
@ -60,10 +60,10 @@ namespace test1 {
|
|||
// CHECK-NEXT: [[NEW:%.*]] = call i8* @_Znwm(i64 8)
|
||||
// CHECK-NEXT: store i1 true, i1* [[ACTIVE]]
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* [[T0:%.*]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* noalias [[T0:%.*]])
|
||||
// CHECK: [[T1:%.*]] = getelementptr inbounds [[B]], [[B]]* [[T0]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* [[T1]], align 4
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T2]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[CAST]], i32 [[T2]])
|
||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||
|
||||
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||
|
@ -89,9 +89,9 @@ namespace test1 {
|
|||
// CHECK-NEXT: [[NEW:%.*]] = call i8* @_Znwm(i64 8)
|
||||
// CHECK-NEXT: store i1 true, i1* [[ACTIVE]]
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* [[T0:%.*]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* noalias [[T0:%.*]])
|
||||
// CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T1]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[CAST]], i32 [[T1]])
|
||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||
|
||||
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||
|
@ -110,11 +110,11 @@ namespace test1 {
|
|||
// CHECK-NEXT: [[NEW:%.*]] = call i8* @_Znwm(i64 8)
|
||||
// CHECK-NEXT: store i1 true, i1* [[ACTIVE]]
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* [[T0:%.*]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test11BC1Ev([[B:%.*]]* noalias [[T0:%.*]])
|
||||
// CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]])
|
||||
// CHECK: invoke void @_ZN5test11BC1Ev([[B]]* [[T2:%.*]])
|
||||
// CHECK: invoke void @_ZN5test11BC1Ev([[B]]* noalias [[T2:%.*]])
|
||||
// CHECK: [[T3:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T2]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Eii([[A]]* [[CAST]], i32 [[T1]], i32 [[T3]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Eii([[A]]* noalias [[CAST]], i32 [[T1]], i32 [[T3]])
|
||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||
|
||||
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
||||
|
@ -148,7 +148,7 @@ namespace test1 {
|
|||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test15makeBEv([[B:%.*]]* sret [[T0:%.*]])
|
||||
// CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T1]])
|
||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[CAST]], i32 [[T1]])
|
||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||
// CHECK-NEXT: store [[A]]* [[CAST]], [[A]]** [[X]], align 8
|
||||
// CHECK: invoke void @_ZN5test15makeBEv([[B:%.*]]* sret [[T2:%.*]])
|
||||
|
@ -181,7 +181,7 @@ namespace test2 {
|
|||
// CHECK: define [[A:%.*]]* @_ZN5test21aEv()
|
||||
// CHECK: [[NEW:%.*]] = call i8* @_ZN5test21AnwEm(i64 8)
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* [[CAST]], i32 5)
|
||||
// CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* noalias [[CAST]], i32 5)
|
||||
// CHECK: ret [[A]]* [[CAST]]
|
||||
|
||||
// CHECK98: invoke void @_ZN5test21AdlEPvm(i8* [[NEW]], i64 8)
|
||||
|
@ -210,7 +210,7 @@ namespace test3 {
|
|||
// CHECK: [[BAR:%.*]] = call double @_ZN5test33barEv()
|
||||
// CHECK: [[NEW:%.*]] = call i8* @_ZN5test31AnwEmPvd(i64 8, i8* [[FOO]], double [[BAR]])
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* [[CAST]], i32 5)
|
||||
// CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* noalias [[CAST]], i32 5)
|
||||
// CHECK: ret [[A]]* [[CAST]]
|
||||
|
||||
// CHECK98: invoke void @_ZN5test31AdlEPvS1_d(i8* [[NEW]], i8* [[FOO]], double [[BAR]])
|
||||
|
@ -278,7 +278,7 @@ namespace test4 {
|
|||
// CHECK-NEXT: [[BAR:%.*]] = call i8* @_ZN5test43barEv()
|
||||
// CHECK-NEXT: [[NEW:%.*]] = call i8* @_ZN5test41AnwEmPvS1_(i64 8, i8* [[FOO]], i8* [[BAR]])
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||
// CHECK-NEXT: call void @_ZN5test41AC1Ei([[A]]* [[CAST]], i32 5)
|
||||
// CHECK-NEXT: call void @_ZN5test41AC1Ei([[A]]* noalias [[CAST]], i32 5)
|
||||
// CHECK-NEXT: ret [[A]]* [[CAST]]
|
||||
extern void *foo(), *bar();
|
||||
|
||||
|
@ -306,8 +306,8 @@ namespace test5 {
|
|||
// CHECK: [[EXN:%.*]] = load i8*, i8** [[EXNSLOT]]
|
||||
// CHECK-NEXT: [[ADJ:%.*]] = call i8* @__cxa_get_exception_ptr(i8* [[EXN]])
|
||||
// CHECK-NEXT: [[SRC:%.*]] = bitcast i8* [[ADJ]] to [[A_T]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test51TC1Ev([[T_T]]* [[T]])
|
||||
// CHECK: invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]* [[A]], [[A_T]]* dereferenceable({{[0-9]+}}) [[SRC]], [[T_T]]* dereferenceable({{[0-9]+}}) [[T]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test51TC1Ev([[T_T]]* noalias [[T]])
|
||||
// CHECK: invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]* noalias [[A]], [[A_T]]* dereferenceable({{[0-9]+}}) [[SRC]], [[T_T]]* dereferenceable({{[0-9]+}}) [[T]])
|
||||
|
||||
// CHECK98: invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
||||
// CHECK11: call void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
||||
|
@ -521,14 +521,14 @@ namespace test11 {
|
|||
// CHECK: [[THIS:%.*]] = load [[C:%.*]]*, [[C:%.*]]** {{%.*}}
|
||||
// Construct single.
|
||||
// CHECK-NEXT: [[SINGLE:%.*]] = getelementptr inbounds [[C]], [[C]]* [[THIS]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN6test111AC1Ev([[A:%.*]]* [[SINGLE]])
|
||||
// CHECK-NEXT: call void @_ZN6test111AC1Ev([[A:%.*]]* noalias [[SINGLE]])
|
||||
// Construct array.
|
||||
// CHECK-NEXT: [[ARRAY:%.*]] = getelementptr inbounds [[C]], [[C]]* [[THIS]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[ARRAYBEGIN:%.*]] = getelementptr inbounds [2 x [3 x [[A]]]], [2 x [3 x [[A]]]]* [[ARRAY]], i32 0, i32 0, i32 0
|
||||
// CHECK-NEXT: [[ARRAYEND:%.*]] = getelementptr inbounds [[A]], [[A]]* [[ARRAYBEGIN]], i64 6
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[ARRAYBEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: invoke void @_ZN6test111AC1Ev([[A:%.*]]* [[CUR]])
|
||||
// CHECK-NEXT: invoke void @_ZN6test111AC1Ev([[A:%.*]]* noalias [[CUR]])
|
||||
// CHECK: [[NEXT]] = getelementptr inbounds [[A]], [[A]]* [[CUR]], i64 1
|
||||
// CHECK-NEXT: [[DONE:%.*]] = icmp eq [[A]]* [[NEXT]], [[ARRAYEND]]
|
||||
// CHECK-NEXT: br i1 [[DONE]],
|
||||
|
@ -587,7 +587,7 @@ namespace test12 {
|
|||
// CHECK-LABEL: define {{.*}} @_ZN6test124testEPv(
|
||||
// CHECK: [[PTR:%.*]] = load i8*, i8*
|
||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[PTR]] to [[A:%.*]]*
|
||||
// CHECK-NEXT: invoke void @_ZN6test121AC1Ev([[A]]* [[CAST]])
|
||||
// CHECK-NEXT: invoke void @_ZN6test121AC1Ev([[A]]* noalias [[CAST]])
|
||||
// CHECK: ret [[A]]* [[CAST]]
|
||||
|
||||
// CHECK98: invoke void @_ZN6test121AdlEPvS1_(i8* [[PTR]], i8* [[PTR]])
|
||||
|
|
|
@ -89,7 +89,7 @@ int main(void) {
|
|||
// CHECK-DAG: @arr1f = global [10 x fp128]
|
||||
// CHECK-DAG: @arr2f = global [3 x fp128] [fp128 0xL3333333333333333BFFF333333333333, fp128 0xL0000000000000000C000800000000000, fp128 0xL0000000000000000C025176592E00000]
|
||||
// CHECK-DAG: declare fp128 @_Z6func1fU10__float128(fp128)
|
||||
// CHECK-DAG: define linkonce_odr void @_ZN2C1C2EU10__float128(%class.C1* %this, fp128 %arg)
|
||||
// CHECK-DAG: define linkonce_odr void @_ZN2C1C2EU10__float128(%class.C1* noalias %this, fp128 %arg)
|
||||
// CHECK-DAG: define linkonce_odr fp128 @_ZN2C16func2cEU10__float128(fp128 %arg)
|
||||
// CHECK-DAG: define linkonce_odr fp128 @_Z6func1tIU10__float128ET_S0_(fp128 %arg)
|
||||
// CHECK-DAG: @_ZZ4mainE2s1 = private unnamed_addr constant %struct.S1 { fp128 0xL00000000000000004006080000000000 }
|
||||
|
@ -111,7 +111,7 @@ int main(void) {
|
|||
// CHECK-X86-DAG: @arr1f = global [10 x fp128]
|
||||
// CHECK-X86-DAG: @arr2f = global [3 x fp128] [fp128 0xL3333333333333333BFFF333333333333, fp128 0xL0000000000000000C000800000000000, fp128 0xL0000000000000000C025176592E00000]
|
||||
// CHECK-X86-DAG: declare fp128 @_Z6func1fg(fp128)
|
||||
// CHECK-X86-DAG: define linkonce_odr void @_ZN2C1C2Eg(%class.C1* %this, fp128 %arg)
|
||||
// CHECK-X86-DAG: define linkonce_odr void @_ZN2C1C2Eg(%class.C1* noalias %this, fp128 %arg)
|
||||
// CHECK-X86-DAG: define linkonce_odr fp128 @_ZN2C16func2cEg(fp128 %arg)
|
||||
// CHECK-X86-DAG: define linkonce_odr fp128 @_Z6func1tIgET_S0_(fp128 %arg)
|
||||
// CHECK-X86-DAG: @_ZZ4mainE2s1 = private unnamed_addr constant %struct.S1 { fp128 0xL00000000000000004006080000000000 }
|
||||
|
@ -133,7 +133,7 @@ int main(void) {
|
|||
// CHECK-SYSZ-DAG: @arr1f = global [10 x fp128]
|
||||
// CHECK-SYSZ-DAG: @arr2f = global [3 x fp128] [fp128 0xL3333333333333333BFFF333333333333, fp128 0xL0000000000000000C000800000000000, fp128 0xL0000000000000000C025176592E00000]
|
||||
// CHECK-SYSZ-DAG: declare void @_Z6func1fU10__float128(fp128*
|
||||
// CHECK-SYSZ-DAG: define linkonce_odr void @_ZN2C1C2EU10__float128(%class.C1* %this, fp128*
|
||||
// CHECK-SYSZ-DAG: define linkonce_odr void @_ZN2C1C2EU10__float128(%class.C1* noalias %this, fp128*
|
||||
// CHECK-SYSZ-DAG: define linkonce_odr void @_ZN2C16func2cEU10__float128(fp128*
|
||||
// CHECK-SYSZ-DAG: define linkonce_odr void @_Z6func1tIU10__float128ET_S0_(fp128*
|
||||
// CHECK-SYSZ-DAG: @_ZZ4mainE2s1 = private unnamed_addr constant %struct.S1 { fp128 0xL00000000000000004006080000000000 }
|
||||
|
|
|
@ -103,7 +103,7 @@ int main(void) {
|
|||
|
||||
C1 c1(f1l);
|
||||
// CHECK-DAG: [[F1L:%[a-z0-9]+]] = load half, half* %{{.*}}, align 2
|
||||
// CHECK-DAG: call void @_ZN2C1C2EDF16_(%class.C1* %{{.*}}, half %{{.*}})
|
||||
// CHECK-DAG: call void @_ZN2C1C2EDF16_(%class.C1* noalias %{{.*}}, half %{{.*}})
|
||||
|
||||
S1<_Float16> s1 = { 132.f16 };
|
||||
// CHECK-DAG: @_ZZ4mainE2s1 = private unnamed_addr constant %struct.S1 { half 0xH5820 }, align 2
|
||||
|
|
|
@ -34,7 +34,7 @@ extern B array[5];
|
|||
|
||||
// CHECK-LABEL: define void @_Z9for_arrayv(
|
||||
void for_array() {
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* [[A:.*]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias [[A:.*]])
|
||||
A a;
|
||||
for (B b : array) {
|
||||
// CHECK-NOT: 5begin
|
||||
|
@ -63,7 +63,7 @@ void for_array() {
|
|||
|
||||
// CHECK-LABEL: define void @_Z9for_rangev(
|
||||
void for_range() {
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* [[A:.*]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias [[A:.*]])
|
||||
A a;
|
||||
for (B b : C()) {
|
||||
// CHECK: call void @_ZN1CC1Ev(
|
||||
|
@ -95,7 +95,7 @@ void for_range() {
|
|||
|
||||
// CHECK-LABEL: define void @_Z16for_member_rangev(
|
||||
void for_member_range() {
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* [[A:.*]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias [[A:.*]])
|
||||
A a;
|
||||
for (B b : D()) {
|
||||
// CHECK: call void @_ZN1DC1Ev(
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
// PR7097
|
||||
// RUN: %clang_cc1 -triple x86_64 %s -fno-use-cxa-atexit -mconstructor-aliases -emit-llvm -o - | FileCheck %s
|
||||
|
||||
// CHECK: call void @_ZN1AC1Ev([[A:%.*]]* @a)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A:%.*]]* noalias @a)
|
||||
// CHECK-NEXT: call i32 @atexit(void ()* @__dtor_a)
|
||||
// CHECK: define internal void @__dtor_a() [[NUW:#[0-9]+]]
|
||||
// CHECK: call void @_ZN1AD1Ev([[A]]* @a)
|
||||
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* @b)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* noalias @b)
|
||||
// CHECK-NEXT: call i32 @atexit(void ()* @__dtor_b)
|
||||
// CHECK: define internal void @__dtor_b() [[NUW]]
|
||||
// CHECK: call void @_ZN1AD1Ev([[A]]* @b)
|
||||
|
@ -24,12 +24,12 @@ A a, b;
|
|||
// PR9593
|
||||
// CHECK-LABEL: define void @_Z4funcv()
|
||||
// CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVZ4funcvE2a1)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* @_ZZ4funcvE2a1)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* noalias @_ZZ4funcvE2a1)
|
||||
// CHECK-NEXT: call i32 @atexit(void ()* @__dtor__ZZ4funcvE2a1)
|
||||
// CHECK-NEXT: call void @__cxa_guard_release(i64* @_ZGVZ4funcvE2a1)
|
||||
|
||||
// CHECK: call i32 @__cxa_guard_acquire(i64* @_ZGVZ4funcvE2a2)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* @_ZZ4funcvE2a2)
|
||||
// CHECK: call void @_ZN1AC1Ev([[A]]* noalias @_ZZ4funcvE2a2)
|
||||
// CHECK-NEXT: call i32 @atexit(void ()* @__dtor__ZZ4funcvE2a2)
|
||||
// CHECK-NEXT: call void @__cxa_guard_release(i64* @_ZGVZ4funcvE2a2)
|
||||
|
||||
|
|
|
@ -23,16 +23,16 @@ struct D { ~D(); };
|
|||
// CHECK: @_ZN6PR59741aE = global %"struct.PR5974::A"* getelementptr inbounds (%"struct.PR5974::C", %"struct.PR5974::C"* @_ZN6PR59741cE, i32 0, i32 0)
|
||||
// CHECK: @_ZN6PR59741bE = global %"struct.PR5974::B"* bitcast (i8* getelementptr (i8, i8* bitcast (%"struct.PR5974::C"* @_ZN6PR59741cE to i8*), i64 4) to %"struct.PR5974::B"*), align 8
|
||||
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* @a)
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias @a)
|
||||
// CHECK: call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.A*)* @_ZN1AD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.A, %struct.A* @a, i32 0, i32 0), i8* @__dso_handle)
|
||||
A a;
|
||||
|
||||
// CHECK: call void @_ZN1BC1Ev(%struct.B* @b)
|
||||
// CHECK: call void @_ZN1BC1Ev(%struct.B* noalias @b)
|
||||
// CHECK: call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.B*)* @_ZN1BD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.B, %struct.B* @b, i32 0, i32 0), i8* @__dso_handle)
|
||||
B b;
|
||||
|
||||
// PR6205: this should not require a global initializer
|
||||
// CHECK-NOT: call void @_ZN1CC1Ev(%struct.C* @c)
|
||||
// CHECK-NOT: call void @_ZN1CC1Ev(%struct.C* noalias @c)
|
||||
C c;
|
||||
|
||||
// CHECK: call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.D*)* @_ZN1DD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.D, %struct.D* @d, i32 0, i32 0), i8* @__dso_handle)
|
||||
|
|
|
@ -17,13 +17,13 @@ namespace test0 {
|
|||
// CHECK-NEXT: [[V:%.*]] = alloca [[V:%.*]]*,
|
||||
// CHECK-NEXT: [[TMP:%.*]] = alloca [[A]]
|
||||
// CHECK-NEXT: [[CLEANUPACTIVE:%.*]] = alloca i1
|
||||
// CHECK: call void @_ZN5test01AC1Ev([[A]]* [[Y]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[Z]])
|
||||
// CHECK: call void @_ZN5test01AC1Ev([[A]]* noalias [[Y]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* noalias [[Z]])
|
||||
// CHECK: [[NEW:%.*]] = invoke i8* @_Znwm(i64 1)
|
||||
// CHECK: store i1 true, i1* [[CLEANUPACTIVE]]
|
||||
// CHECK: [[NEWCAST:%.*]] = bitcast i8* [[NEW]] to [[V]]*
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
|
||||
// CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[TMP]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* noalias [[TMP]])
|
||||
// CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* noalias [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[TMP]])
|
||||
// CHECK: store i1 false, i1* [[CLEANUPACTIVE]]
|
||||
|
||||
// CHECK98-NEXT: invoke void @_ZN5test01AD1Ev([[A]]* [[TMP]])
|
||||
|
|
|
@ -40,7 +40,7 @@ void f(D d) {
|
|||
D d2(d);
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* noalias %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: call void @_ZN1AC1Ev
|
||||
// CHECK: call void @_ZN1CC2ERS_1A
|
||||
// CHECK: call void @_ZN1AD1Ev
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace noninline_nonvirt {
|
|||
struct B : Z, A { Z z; using A::A; };
|
||||
B b(1, 2, &b);
|
||||
// ITANIUM-LABEL: define {{.*}} @__cxx_global_var_init
|
||||
// ITANIUM: call void @_ZN1QC1Ei({{.*}} %[[TMP:.*]], i32 2)
|
||||
// ITANIUM: call void @_ZN1QC1Ei({{.*}} noalias %[[TMP:.*]], i32 2)
|
||||
// ITANIUM: call void @_ZN17noninline_nonvirt1BCI1NS_1AEEiO1QPvU17pass_object_size0({{.*}} @_ZN17noninline_nonvirt1bE, i32 1, {{.*}} %[[TMP]], i8* {{.*}} @_ZN17noninline_nonvirt1bE{{.*}}, i{{32|64}} 12)
|
||||
// ITANIUM: call void @_ZN1QD1Ev({{.*}} %[[TMP]])
|
||||
// ITANIUM: call i32 @__cxa_atexit(
|
||||
|
@ -95,7 +95,7 @@ namespace noninline_virt {
|
|||
// constructor, which takes no arguments other than the this pointer and VTT.
|
||||
// ITANIUM_LABEL: define linkonce_odr void @_ZN14noninline_virt1CCI1NS_1AEEiO1QPvU17pass_object_size0(
|
||||
// ITANIUM: call void @_ZN14noninline_virt1AC2EiO1QPvU17pass_object_size0({{.*}} %{{.*}}, i32 %{{.*}}, %{{.*}}* {{.*}}, i8* %{{.*}}, i{{32|64}} %{{.*}})
|
||||
// ITANIUM: call void @_ZN14noninline_virt1BCI2NS_1AEEiO1QPvU17pass_object_size0(%{{.*}}* %{{.*}}, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @_ZTTN14noninline_virt1CE, i64 0, i64 1))
|
||||
// ITANIUM: call void @_ZN14noninline_virt1BCI2NS_1AEEiO1QPvU17pass_object_size0(%{{.*}}* noalias %{{.*}}, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @_ZTTN14noninline_virt1CE, i64 0, i64 1))
|
||||
// ITANIUM: store {{.*}} @_ZTVN14noninline_virt1CE
|
||||
|
||||
// C constructor forwards to B constructor and A constructor. We pass the args
|
||||
|
@ -124,11 +124,11 @@ namespace inalloca_nonvirt {
|
|||
// WIN32: %[[TMP:.*]] = alloca
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: %[[ARGMEM:.*]] = alloca inalloca
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* %[[TMP]], i32 4)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
|
||||
// WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: store i32 2, i32* %[[ARG2]]
|
||||
|
@ -144,9 +144,9 @@ namespace inalloca_nonvirt {
|
|||
// WIN64: %[[TMP:.*]] = alloca
|
||||
// WIN64: %[[ARG3:.*]] = alloca
|
||||
// WIN64: %[[ARG1:.*]] = alloca
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
|
||||
// WIN64: call {{.*}} @"??0A@inalloca_nonvirt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
|
||||
// WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
|
||||
|
@ -160,11 +160,11 @@ namespace inalloca_nonvirt {
|
|||
// WIN32: %[[TMP:.*]] = alloca
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: %[[ARGMEM:.*]] = alloca inalloca
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* %[[TMP]], i32 4)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Z@@QAE@XZ"(
|
||||
// WIN32: %[[ARG2:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: store i32 2, i32* %[[ARG2]]
|
||||
|
@ -180,9 +180,9 @@ namespace inalloca_nonvirt {
|
|||
// WIN64: %[[TMP:.*]] = alloca
|
||||
// WIN64: %[[ARG3:.*]] = alloca
|
||||
// WIN64: %[[ARG1:.*]] = alloca
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
|
||||
// WIN64: call {{.*}} @"??0A@inalloca_nonvirt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
|
||||
// WIN64: call {{.*}} @"??0Z@@QEAA@XZ"(
|
||||
|
@ -200,11 +200,11 @@ namespace inalloca_virt {
|
|||
// WIN32: %[[TMP:.*]] = alloca
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: %[[ARGMEM:.*]] = alloca inalloca
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* %[[TMP]], i32 4)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// FIXME: It's dumb to round-trip this though memory and generate a branch.
|
||||
// WIN32: store i32 1, i32* %[[IS_MOST_DERIVED_ADDR:.*]]
|
||||
// WIN32: %[[IS_MOST_DERIVED:.*]] = load i32, i32* %[[IS_MOST_DERIVED_ADDR]]
|
||||
|
@ -231,9 +231,9 @@ namespace inalloca_virt {
|
|||
// WIN64: %[[TMP:.*]] = alloca
|
||||
// WIN64: %[[ARG3:.*]] = alloca
|
||||
// WIN64: %[[ARG1:.*]] = alloca
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN64: br i1
|
||||
// WIN64: call {{.*}} @"??0A@inalloca_virt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
|
||||
// WIN64: br
|
||||
|
@ -251,11 +251,11 @@ namespace inalloca_virt {
|
|||
// WIN32: %[[TMP:.*]] = alloca
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: %[[ARGMEM:.*]] = alloca inalloca
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* %[[TMP]], i32 4)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"(%{{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN32: %[[ARG3:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN32: %[[ARG1:.*]] = getelementptr {{.*}} %[[ARGMEM]]
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN32: call {{.*}} @"??0Q@@QAE@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN32: store i32 1, i32* %[[IS_MOST_DERIVED_ADDR:.*]]
|
||||
// WIN32: %[[IS_MOST_DERIVED:.*]] = load i32, i32* %[[IS_MOST_DERIVED_ADDR]]
|
||||
// WIN32: %[[IS_MOST_DERIVED_i1:.*]] = icmp ne i32 %[[IS_MOST_DERIVED]], 0
|
||||
|
@ -288,9 +288,9 @@ namespace inalloca_virt {
|
|||
// WIN64: %[[TMP:.*]] = alloca
|
||||
// WIN64: %[[ARG3:.*]] = alloca
|
||||
// WIN64: %[[ARG1:.*]] = alloca
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* %[[ARG1]], i32 1)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[TMP]], i32 4)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG3]], i32 3)
|
||||
// WIN64: call {{.*}} @"??0Q@@QEAA@H@Z"({{.*}}* noalias %[[ARG1]], i32 1)
|
||||
// WIN64: br i1
|
||||
// WIN64: store {{.*}} @"??_8C@inalloca_virt@@7B@"
|
||||
// WIN64: call {{.*}} @"??0A@inalloca_virt@@QEAA@UQ@@H0$$QEAU2@@Z"(%{{.*}}, %{{.*}}* %[[ARG1]], i32 2, %{{.*}}* %[[ARG3]], %{{.*}} %[[TMP]])
|
||||
|
@ -318,7 +318,7 @@ namespace inline_nonvirt {
|
|||
// ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS]]
|
||||
// ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} 4
|
||||
// ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* noalias %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: %[[Z_MEMBER:.*]] = getelementptr {{.*}} %[[THIS]], i32 0, i32 2
|
||||
// ITANIUM: call void @_ZN1ZC1Ev({{.*}} %[[Z_MEMBER]])
|
||||
// ITANIUM: call void @_ZN1QD1Ev(
|
||||
|
@ -337,7 +337,7 @@ namespace inline_nonvirt {
|
|||
// ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS]]
|
||||
// ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} 4
|
||||
// ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN14inline_nonvirt1AC2E1QiS1_OS1_z(%{{.*}}* noalias %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: %[[Z_MEMBER:.*]] = getelementptr {{.*}} %{{.*}}, i32 0, i32 2
|
||||
// ITANIUM: call void @_ZN1ZC1Ev({{.*}} %[[Z_MEMBER]])
|
||||
// ITANIUM: call void @_ZN1QD1Ev(
|
||||
|
@ -357,7 +357,7 @@ namespace inline_virt {
|
|||
// ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS:.*]]
|
||||
// ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} {{12|16}}
|
||||
// ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* noalias %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void @_ZN1ZC2Ev(
|
||||
// ITANIUM: call void @_ZN1ZC1Ev(
|
||||
// ITANIUM: call void @_ZN1QD1Ev(
|
||||
|
@ -376,7 +376,7 @@ namespace inline_virt {
|
|||
// ITANIUM: %[[B_CAST:.*]] = bitcast {{.*}} %[[THIS:.*]]
|
||||
// ITANIUM: %[[A_CAST:.*]] = getelementptr {{.*}} %[[B_CAST]], i{{32|64}} {{12|16}}
|
||||
// ITANIUM: %[[A:.*]] = bitcast {{.*}} %[[A_CAST]]
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void ({{.*}}, ...) @_ZN11inline_virt1AC2E1QiS1_OS1_z(%{{.*}}* noalias %[[A]], {{.*}}, i32 2, {{.*}}, {{.*}}, i32 5, i32 6)
|
||||
// ITANIUM: call void @_ZN11inline_virt1BCI2NS_1AEE1QiS1_OS1_z({{[^,]*}}, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @_ZTTN11inline_virt1CE, i64 0, i64 1))
|
||||
// ITANIUM: store {{.*}} @_ZTVN11inline_virt1CE
|
||||
// ITANIUM: call void @_ZN1QD1Ev(
|
||||
|
|
|
@ -41,13 +41,13 @@ void e() {
|
|||
static const A a = A();
|
||||
}
|
||||
|
||||
// CHECK: call void @_ZN1AC1Ev({{.*}}* nonnull @a)
|
||||
// CHECK: call void @_ZN1AC1Ev({{.*}}* noalias nonnull @a)
|
||||
// CHECK: call {{.*}}@llvm.invariant.start.p0i8(i64 4, i8* bitcast ({{.*}} @a to i8*))
|
||||
|
||||
// CHECK: call void @_ZN1BC1Ev({{.*}}* nonnull @b)
|
||||
// CHECK: call void @_ZN1BC1Ev({{.*}}* noalias nonnull @b)
|
||||
// CHECK-NOT: call {{.*}}@llvm.invariant.start.p0i8(i64 4, i8* bitcast ({{.*}} @b to i8*))
|
||||
|
||||
// CHECK: call void @_ZN1CC1Ev({{.*}}* nonnull @c)
|
||||
// CHECK: call void @_ZN1CC1Ev({{.*}}* noalias nonnull @c)
|
||||
// CHECK-NOT: call {{.*}}@llvm.invariant.start.p0i8(i64 4, i8* bitcast ({{.*}} @c to i8*))
|
||||
|
||||
// CHECK: call i32 @_Z1fv(
|
||||
|
@ -55,6 +55,6 @@ void e() {
|
|||
// CHECK: call {{.*}}@llvm.invariant.start.p0i8(i64 4, i8* bitcast ({{.*}} @d to i8*))
|
||||
|
||||
// CHECK-LABEL: define void @_Z1ev(
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* nonnull @_ZZ1evE1a)
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias nonnull @_ZZ1evE1a)
|
||||
// CHECK: call {{.*}}@llvm.invariant.start.p0i8(i64 4, i8* {{.*}}bitcast ({{.*}} @_ZZ1evE1a to i8*))
|
||||
// CHECK-NOT: llvm.invariant.end
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
// involve standard substitutions.
|
||||
|
||||
|
||||
// CHECK: @_ZTVSd = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTVSd = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTTSd = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTCSd0_Si = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTCSd0_Si = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTCSd16_So = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTVSi = linkonce_odr unnamed_addr constant
|
||||
// CHECK: @_ZTTSi = linkonce_odr unnamed_addr constant
|
||||
|
@ -15,9 +15,9 @@
|
|||
|
||||
namespace std {
|
||||
struct A { A(); };
|
||||
|
||||
// CHECK-LABEL: define void @_ZNSt1AC2Ev(%"struct.std::A"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZNSt1AC1Ev(%"struct.std::A"* %this) unnamed_addr
|
||||
|
||||
// CHECK-LABEL: define void @_ZNSt1AC2Ev(%"struct.std::A"* noalias %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZNSt1AC1Ev(%"struct.std::A"* noalias %this) unnamed_addr
|
||||
A::A() { }
|
||||
};
|
||||
|
||||
|
@ -37,7 +37,7 @@ void f(std::basic_string<char, char, int>) { }
|
|||
|
||||
namespace std {
|
||||
template<typename> struct char_traits { };
|
||||
|
||||
|
||||
typedef std::basic_string<char, std::char_traits<char>, std::allocator<char> > string;
|
||||
}
|
||||
|
||||
|
@ -45,26 +45,26 @@ namespace std {
|
|||
void f(std::string) { }
|
||||
|
||||
namespace std {
|
||||
template<typename, typename> struct basic_ios {
|
||||
template<typename, typename> struct basic_ios {
|
||||
basic_ios(int);
|
||||
virtual ~basic_ios();
|
||||
};
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_istream : virtual public basic_ios<charT, traits> {
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_istream : virtual public basic_ios<charT, traits> {
|
||||
basic_istream(int x) : basic_ios<charT, traits>(x), stored(x) { }
|
||||
|
||||
int stored;
|
||||
};
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_ostream : virtual public basic_ios<charT, traits> {
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_ostream : virtual public basic_ios<charT, traits> {
|
||||
basic_ostream(int x) : basic_ios<charT, traits>(x), stored(x) { }
|
||||
|
||||
float stored;
|
||||
};
|
||||
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_iostream : public basic_istream<charT, traits>,
|
||||
public basic_ostream<charT, traits> {
|
||||
template<typename charT, typename traits = char_traits<charT> >
|
||||
struct basic_iostream : public basic_istream<charT, traits>,
|
||||
public basic_ostream<charT, traits> {
|
||||
basic_iostream(int x) : basic_istream<charT, traits>(x),
|
||||
basic_ostream<charT, traits>(x),
|
||||
basic_ios<charT, traits>(x) { }
|
||||
|
@ -84,7 +84,7 @@ extern "C++" {
|
|||
namespace std
|
||||
{
|
||||
typedef void (*terminate_handler) ();
|
||||
|
||||
|
||||
// CHECK: _ZSt13set_terminatePFvvE
|
||||
terminate_handler set_terminate(terminate_handler) { return 0; }
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ void create_streams() {
|
|||
namespace N {
|
||||
namespace std {
|
||||
struct A { void f(); };
|
||||
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1N3std1A1fEv
|
||||
void A::f() { }
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ void scalarStaticVariableInMemberExpr(Struct *ptr, Struct &ref) {
|
|||
// CHECK: load %struct.Struct*, %struct.Struct** %{{.*}}, align 8
|
||||
// CHECK: call void @_Z3useiPKc(i32 4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @[[STR]], i32 0, i32 0))
|
||||
use(5, Struct(2).name);
|
||||
// CHECK: call void @_ZN6StructC1Ei(%struct.Struct* %{{.*}}, i32 2)
|
||||
// CHECK: call void @_ZN6StructC1Ei(%struct.Struct* noalias %{{.*}}, i32 2)
|
||||
// CHECK: call void @_Z3useiPKc(i32 5, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @[[STR]], i32 0, i32 0))
|
||||
use(6, getPtr()->name);
|
||||
// CHECK: call %struct.Struct* @_Z6getPtrv()
|
||||
|
@ -70,7 +70,7 @@ void complexStaticVariableInMemberExpr(Struct *ptr, Struct &ref) {
|
|||
// CHECK: %[[vector3:.*]] = load <2 x float>, <2 x float>* %[[cast3]], align 4
|
||||
// CHECK: call void @_Z3useiCf(i32 4, <2 x float> %[[vector3]])
|
||||
use(5, Struct(2).complexValue);
|
||||
// CHECK: call void @_ZN6StructC1Ei(%struct.Struct* %{{.*}}, i32 2)
|
||||
// CHECK: call void @_ZN6StructC1Ei(%struct.Struct* noalias %{{.*}}, i32 2)
|
||||
// CHECK: store float 4.200000e+01, float* %[[coerce4:.*]].{{.*}}, align 4
|
||||
// CHECK: store float 0.000000e+00, float* %[[coerce4]].{{.*}}, align 4
|
||||
// CHECK: %[[cast4:.*]] = bitcast { float, float }* %[[coerce4]] to <2 x float>*
|
||||
|
|
|
@ -10,7 +10,7 @@ struct Foo {
|
|||
Foo::Foo(unsigned arg) : file_id(arg = 42)
|
||||
{ }
|
||||
|
||||
// CHECK: define {{.*}} @_ZN3FooC2Ej(%struct.Foo* %this, i32 %arg) unnamed_addr
|
||||
// CHECK: define {{.*}} @_ZN3FooC2Ej(%struct.Foo* noalias %this, i32 %arg) unnamed_addr
|
||||
// CHECK: [[ARG:%.*]] = alloca i32
|
||||
// CHECK: store i32 42, i32* [[ARG]]
|
||||
// CHECK: store i32 42, i32* %{{.*}}
|
||||
|
|
|
@ -15,8 +15,8 @@ struct B {
|
|||
|
||||
template<typename T> B::B(T) {}
|
||||
|
||||
// CHECK-LABEL: define weak_odr void @_ZN1BC2IiEET_(%struct.B* %this, i32) unnamed_addr
|
||||
// CHECK-LABEL: define weak_odr void @_ZN1BC1IiEET_(%struct.B* %this, i32) unnamed_addr
|
||||
// CHECK-LABEL: define weak_odr void @_ZN1BC2IiEET_(%struct.B* noalias %this, i32) unnamed_addr
|
||||
// CHECK-LABEL: define weak_odr void @_ZN1BC1IiEET_(%struct.B* noalias %this, i32) unnamed_addr
|
||||
template B::B(int);
|
||||
|
||||
template<typename T>
|
||||
|
|
|
@ -42,11 +42,11 @@ void call_foo() {
|
|||
// X86: call i8* @llvm.stacksave()
|
||||
// X86: %[[argmem:[^ ]*]] = alloca inalloca [[argmem_ty]]
|
||||
// X86: %[[arg3:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 2
|
||||
// X86: call x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* %[[arg3]], i32 3)
|
||||
// X86: call x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* noalias %[[arg3]], i32 3)
|
||||
// X86: %[[arg2:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 1
|
||||
// X86: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* %[[arg2]], i32 2)
|
||||
// X86: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* noalias %[[arg2]], i32 2)
|
||||
// X86: %[[arg1:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 0
|
||||
// X86: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* %[[arg1]], i32 1)
|
||||
// X86: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@H@Z"(%struct.A* noalias %[[arg1]], i32 1)
|
||||
// X86: call void @"?foo@@YAXUA@@00@Z"([[argmem_ty]]* inalloca %[[argmem]])
|
||||
// X86: call void @llvm.stackrestore
|
||||
// X86: ret void
|
||||
|
@ -60,9 +60,9 @@ void call_foo() {
|
|||
// X86: call x86_thiscallcc void @"??1A@@QAE@XZ"(%struct.A* %[[arg3]])
|
||||
|
||||
// X64-LABEL: define dso_local void @"?call_foo@@YAXXZ"()
|
||||
// X64: call %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* %[[arg3:[^,]*]], i32 3)
|
||||
// X64: invoke %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* %[[arg2:[^,]*]], i32 2)
|
||||
// X64: invoke %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* %[[arg1:[^,]*]], i32 1)
|
||||
// X64: call %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* noalias %[[arg3:[^,]*]], i32 3)
|
||||
// X64: invoke %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* noalias %[[arg2:[^,]*]], i32 2)
|
||||
// X64: invoke %struct.A* @"??0A@@QEAA@H@Z"(%struct.A* noalias %[[arg1:[^,]*]], i32 1)
|
||||
// X64: call void @"?foo@@YAXUA@@00@Z"
|
||||
// X64: (%struct.A* %[[arg1]], %struct.A* %[[arg2]], %struct.A* %[[arg3]])
|
||||
// X64: ret void
|
||||
|
|
|
@ -45,7 +45,7 @@ int HasDeactivatedCleanups() {
|
|||
// WIN32: call x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"
|
||||
// WIN32: invoke void @"?TakeRef@@YAXABUA@@@Z"
|
||||
//
|
||||
// WIN32: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* %[[arg1]])
|
||||
// WIN32: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* noalias %[[arg1]])
|
||||
// WIN32: store i1 true, i1* %[[isactive]]
|
||||
//
|
||||
// WIN32: %[[arg0:.*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 0
|
||||
|
@ -76,9 +76,9 @@ int HasConditionalCleanup(bool cond) {
|
|||
// WIN32: store i1 false
|
||||
// WIN32: br i1
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: call x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* %{{.*}})
|
||||
// WIN32: call x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* noalias %{{.*}})
|
||||
// WIN32: store i1 true
|
||||
// WIN32: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* %{{.*}})
|
||||
// WIN32: invoke x86_thiscallcc %struct.A* @"??0A@@QAE@XZ"(%struct.A* noalias %{{.*}})
|
||||
// WIN32: call i32 @"?TakesTwo@@YAHUA@@0@Z"
|
||||
//
|
||||
// WIN32: call void @llvm.stackrestore
|
||||
|
@ -293,7 +293,7 @@ struct class_0 : class_1 {
|
|||
};
|
||||
|
||||
class_0::class_0() {
|
||||
// WIN32: define dso_local x86_thiscallcc %struct.class_0* @"??0class_0@@QAE@XZ"(%struct.class_0* returned %this, i32 %is_most_derived)
|
||||
// WIN32: define dso_local x86_thiscallcc %struct.class_0* @"??0class_0@@QAE@XZ"(%struct.class_0* noalias returned %this, i32 %is_most_derived)
|
||||
// WIN32: store i32 %is_most_derived, i32* %[[IS_MOST_DERIVED_VAR:.*]], align 4
|
||||
// WIN32: %[[IS_MOST_DERIVED_VAL:.*]] = load i32, i32* %[[IS_MOST_DERIVED_VAR]]
|
||||
// WIN32: %[[SHOULD_CALL_VBASE_CTORS:.*]] = icmp ne i32 %[[IS_MOST_DERIVED_VAL]], 0
|
||||
|
@ -304,7 +304,7 @@ class_0::class_0() {
|
|||
// ehcleanup:
|
||||
// WIN32: %[[CLEANUPPAD:.*]] = cleanuppad within none []
|
||||
// WIN32-NEXT: bitcast %{{.*}}* %{{.*}} to i8*
|
||||
// WIN32-NEXT: getelementptr inbounds i8, i8* %{{.*}}, i{{.*}} {{.}}
|
||||
// WIN32-NEXT: getelementptr inbounds i8, i8* %{{.*}}, i{{.*}} {{.}}
|
||||
// WIN32-NEXT: bitcast i8* %{{.*}} to %{{.*}}*
|
||||
// WIN32-NEXT: %[[SHOULD_CALL_VBASE_DTOR:.*]] = icmp ne i32 %[[IS_MOST_DERIVED_VAL]], 0
|
||||
// WIN32-NEXT: br i1 %[[SHOULD_CALL_VBASE_DTOR]], label %[[DTOR_VBASE:.*]], label %[[SKIP_VBASE:.*]]
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
// CHECK-SAME: ] }, comdat
|
||||
|
||||
// CHECK-LABEL: define dso_local %struct.Foo* @"?f@@YAPEAU?$Foo@H@@XZ"()
|
||||
// CHECK: call %struct.Foo* @"??0?$Foo@H@@QEAA@XZ"(%struct.Foo* %{{.*}})
|
||||
// CHECK: call %struct.Foo* @"??0?$Foo@H@@QEAA@XZ"(%struct.Foo* noalias %{{.*}})
|
||||
|
||||
// CHECK: define available_externally dso_local %struct.Foo* @"??0?$Foo@H@@QEAA@XZ"(%struct.Foo* returned %this)
|
||||
// CHECK: define available_externally dso_local %struct.Foo* @"??0?$Foo@H@@QEAA@XZ"(%struct.Foo* noalias returned %this)
|
||||
// CHECK: store {{.*}} @"??_7?$Foo@H@@6B@"
|
||||
|
||||
// CHECK: define linkonce_odr dso_local i8* @"??_G?$Foo@H@@UEAAPEAXI@Z"(%struct.Foo* %this, i32 %should_call_delete)
|
||||
|
|
|
@ -204,7 +204,7 @@ struct AsymmetricChild : LeftWithNonVirtualDtor, Right {
|
|||
void call_asymmetric_child_complete_dtor() {
|
||||
// CHECK-LABEL: define dso_local void @"?call_asymmetric_child_complete_dtor@@YAXXZ"
|
||||
AsymmetricChild obj;
|
||||
// CHECK: call x86_thiscallcc %struct.AsymmetricChild* @"??0AsymmetricChild@@QAE@XZ"(%struct.AsymmetricChild* %[[OBJ:.*]])
|
||||
// CHECK: call x86_thiscallcc %struct.AsymmetricChild* @"??0AsymmetricChild@@QAE@XZ"(%struct.AsymmetricChild* noalias %[[OBJ:.*]])
|
||||
// CHECK-NOT: getelementptr
|
||||
// CHECK: call x86_thiscallcc void @"??1AsymmetricChild@@UAE@XZ"(%struct.AsymmetricChild* %[[OBJ]])
|
||||
// CHECK: ret
|
||||
|
|
|
@ -151,7 +151,7 @@ inline S &getS() {
|
|||
// init:
|
||||
// CHECK: or i32 {{.*}}, 1
|
||||
// CHECK: store i32 {{.*}}, i32* @"??_B?1??getS@@YAAAUS@@XZ@51"
|
||||
// CHECK: call x86_thiscallcc %struct.S* @"??0S@@QAE@XZ"(%struct.S* @"?TheS@?1??getS@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK: call x86_thiscallcc %struct.S* @"??0S@@QAE@XZ"(%struct.S* noalias @"?TheS@?1??getS@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK: call i32 @atexit(void ()* @"??__FTheS@?1??getS@@YAAAUS@@XZ@YAXXZ")
|
||||
// CHECK: br label
|
||||
// init.end:
|
||||
|
|
|
@ -20,7 +20,7 @@ class A {
|
|||
void no_constructor_destructor_infinite_recursion() {
|
||||
A a;
|
||||
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc %"class.basic::A"* @"??0A@basic@@QAE@XZ"(%"class.basic::A"* returned %this) {{.*}} comdat {{.*}} {
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc %"class.basic::A"* @"??0A@basic@@QAE@XZ"(%"class.basic::A"* noalias returned %this) {{.*}} comdat {{.*}} {
|
||||
// CHECK: [[THIS_ADDR:%[.0-9A-Z_a-z]+]] = alloca %"class.basic::A"*, align 4
|
||||
// CHECK-NEXT: store %"class.basic::A"* %this, %"class.basic::A"** [[THIS_ADDR]], align 4
|
||||
// CHECK-NEXT: [[T1:%[.0-9A-Z_a-z]+]] = load %"class.basic::A"*, %"class.basic::A"** [[THIS_ADDR]]
|
||||
|
@ -41,7 +41,7 @@ struct B {
|
|||
|
||||
// Tests that we can define constructors outside the class (PR12784).
|
||||
B::B() {
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.basic::B"* @"??0B@basic@@QAE@XZ"(%"struct.basic::B"* returned %this)
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.basic::B"* @"??0B@basic@@QAE@XZ"(%"struct.basic::B"* noalias returned %this)
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -228,8 +228,8 @@ struct B : A {
|
|||
};
|
||||
|
||||
B::B() {
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::B"* @"??0B@constructors@@QAE@XZ"(%"struct.constructors::B"* returned %this)
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* %{{.*}})
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::B"* @"??0B@constructors@@QAE@XZ"(%"struct.constructors::B"* noalias returned %this)
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* noalias %{{.*}})
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -238,7 +238,7 @@ struct C : virtual A {
|
|||
};
|
||||
|
||||
C::C() {
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* returned %this, i32 %is_most_derived)
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* noalias returned %this, i32 %is_most_derived)
|
||||
// TODO: make sure this works in the Release build too;
|
||||
// CHECK: store i32 %is_most_derived, i32* %[[IS_MOST_DERIVED_VAR:.*]], align 4
|
||||
// CHECK: %[[IS_MOST_DERIVED_VAL:.*]] = load i32, i32* %[[IS_MOST_DERIVED_VAR]]
|
||||
|
@ -253,7 +253,7 @@ C::C() {
|
|||
// CHECK-NEXT: bitcast %"struct.constructors::C"* %{{.*}} to i8*
|
||||
// CHECK-NEXT: getelementptr inbounds i8, i8* %{{.*}}, i32 4
|
||||
// CHECK-NEXT: bitcast i8* %{{.*}} to %"struct.constructors::A"*
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* %{{.*}})
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* noalias %{{.*}})
|
||||
// CHECK-NEXT: br label %[[SKIP_VBASES]]
|
||||
//
|
||||
// CHECK: [[SKIP_VBASES]]
|
||||
|
@ -265,7 +265,7 @@ C::C() {
|
|||
void create_C() {
|
||||
C c;
|
||||
// CHECK: define dso_local void @"?create_C@constructors@@YAXXZ"()
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* %c, i32 1)
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* noalias %c, i32 1)
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -274,7 +274,7 @@ struct D : C {
|
|||
};
|
||||
|
||||
D::D() {
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::D"* @"??0D@constructors@@QAE@XZ"(%"struct.constructors::D"* returned %this, i32 %is_most_derived) unnamed_addr
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::D"* @"??0D@constructors@@QAE@XZ"(%"struct.constructors::D"* noalias returned %this, i32 %is_most_derived) unnamed_addr
|
||||
// CHECK: store i32 %is_most_derived, i32* %[[IS_MOST_DERIVED_VAR:.*]], align 4
|
||||
// CHECK: %[[IS_MOST_DERIVED_VAL:.*]] = load i32, i32* %[[IS_MOST_DERIVED_VAR]]
|
||||
// CHECK: %[[SHOULD_CALL_VBASE_CTORS:.*]] = icmp ne i32 %[[IS_MOST_DERIVED_VAL]], 0
|
||||
|
@ -288,11 +288,11 @@ D::D() {
|
|||
// CHECK-NEXT: bitcast %"struct.constructors::D"* %{{.*}} to i8*
|
||||
// CHECK-NEXT: getelementptr inbounds i8, i8* %{{.*}}, i32 4
|
||||
// CHECK-NEXT: bitcast i8* %{{.*}} to %"struct.constructors::A"*
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* %{{.*}})
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* noalias %{{.*}})
|
||||
// CHECK-NEXT: br label %[[SKIP_VBASES]]
|
||||
//
|
||||
// CHECK: [[SKIP_VBASES]]
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* %{{.*}}, i32 0)
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* noalias %{{.*}}, i32 0)
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -301,7 +301,7 @@ struct E : virtual C {
|
|||
};
|
||||
|
||||
E::E() {
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::E"* @"??0E@constructors@@QAE@XZ"(%"struct.constructors::E"* returned %this, i32 %is_most_derived) unnamed_addr
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.constructors::E"* @"??0E@constructors@@QAE@XZ"(%"struct.constructors::E"* noalias returned %this, i32 %is_most_derived) unnamed_addr
|
||||
// CHECK: store i32 %is_most_derived, i32* %[[IS_MOST_DERIVED_VAR:.*]], align 4
|
||||
// CHECK: %[[IS_MOST_DERIVED_VAL:.*]] = load i32, i32* %[[IS_MOST_DERIVED_VAR]]
|
||||
// CHECK: %[[SHOULD_CALL_VBASE_CTORS:.*]] = icmp ne i32 %[[IS_MOST_DERIVED_VAL]], 0
|
||||
|
@ -318,8 +318,8 @@ E::E() {
|
|||
// CHECK-NEXT: bitcast %"struct.constructors::E"* %{{.*}} to i8*
|
||||
// CHECK-NEXT: getelementptr inbounds i8, i8* %{{.*}}, i32 4
|
||||
// CHECK-NEXT: bitcast i8* %{{.*}} to %"struct.constructors::A"*
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* %{{.*}})
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* %{{.*}}, i32 0)
|
||||
// CHECK-NEXT: call x86_thiscallcc %"struct.constructors::A"* @"??0A@constructors@@QAE@XZ"(%"struct.constructors::A"* noalias %{{.*}})
|
||||
// CHECK: call x86_thiscallcc %"struct.constructors::C"* @"??0C@constructors@@QAE@XZ"(%"struct.constructors::C"* noalias %{{.*}}, i32 0)
|
||||
// CHECK-NEXT: br label %[[SKIP_VBASES]]
|
||||
//
|
||||
// CHECK: [[SKIP_VBASES]]
|
||||
|
@ -405,11 +405,11 @@ B::B(int *a) {}
|
|||
B::B(const char *a, ...) {}
|
||||
B::B(short *a) {}
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.test1::B"* @"??0B@test1@@QAE@PAH@Z"
|
||||
// CHECK: (%"struct.test1::B"* returned %this, i32* %a, i32 %is_most_derived)
|
||||
// CHECK: (%"struct.test1::B"* noalias returned %this, i32* %a, i32 %is_most_derived)
|
||||
// CHECK: define dso_local %"struct.test1::B"* @"??0B@test1@@QAA@PBDZZ"
|
||||
// CHECK: (%"struct.test1::B"* returned %this, i32 %is_most_derived, i8* %a, ...)
|
||||
// CHECK: (%"struct.test1::B"* noalias returned %this, i32 %is_most_derived, i8* %a, ...)
|
||||
// CHECK: define dso_local x86_thiscallcc %"struct.test1::B"* @"??0B@test1@@QAE@PAF@Z"
|
||||
// CHECK: (%"struct.test1::B"* returned %this, i16* %a, i32 %is_most_derived)
|
||||
// CHECK: (%"struct.test1::B"* noalias returned %this, i16* %a, i32 %is_most_derived)
|
||||
|
||||
void construct_b() {
|
||||
int a;
|
||||
|
|
|
@ -30,7 +30,7 @@ extern inline S &f() {
|
|||
// CHECK: [[init]]:
|
||||
// CHECK-NEXT: %[[or:.*]] = or i32 %[[guard]], 1
|
||||
// CHECK-NEXT: store i32 %[[or]], i32* @"??__J?1??f@@YAAAUS@@XZ@51"
|
||||
// CHECK-NEXT: invoke {{.*}} @"??0S@@QAE@XZ"(%struct.S* @"?s@?1??f@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK-NEXT: invoke {{.*}} @"??0S@@QAE@XZ"(%struct.S* noalias @"?s@?1??f@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK-NEXT: to label %[[invoke_cont:.*]] unwind label %[[lpad:.*]]
|
||||
//
|
||||
// CHECK: [[invoke_cont]]:
|
||||
|
@ -65,7 +65,7 @@ extern inline S &g() {
|
|||
// CHECK-NEXT: br i1 %[[cmp2]], label %[[init:.*]], label %[[init_end:.*]]
|
||||
//
|
||||
// CHECK: [[init]]:
|
||||
// CHECK-NEXT: invoke {{.*}} @"??0S@@QAE@XZ"(%struct.S* @"?s@?1??g@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK-NEXT: invoke {{.*}} @"??0S@@QAE@XZ"(%struct.S* noalias @"?s@?1??g@@YAAAUS@@XZ@4U2@A")
|
||||
// CHECK-NEXT: to label %[[invoke_cont:.*]] unwind label %[[lpad:.*]]
|
||||
//
|
||||
// CHECK: [[invoke_cont]]:
|
||||
|
|
|
@ -35,7 +35,7 @@ struct Y : Z, W, virtual V {};
|
|||
|
||||
void f(const Y &y) {
|
||||
// CHECK-LABEL: @"?f@@YAXABUY@@@Z"
|
||||
// CHECK: call x86_thiscallcc %struct.Y* @"??0Y@@QAE@ABU0@@Z"(%struct.Y* %[[mem:.*]], %struct.Y*
|
||||
// CHECK: call x86_thiscallcc %struct.Y* @"??0Y@@QAE@ABU0@@Z"(%struct.Y* noalias %[[mem:.*]], %struct.Y*
|
||||
// CHECK: %[[cast:.*]] = bitcast %struct.Y* %[[mem]] to i8*
|
||||
// CHECK: call void @_CxxThrowException(i8* %[[cast]], %eh.ThrowInfo* @"_TI5?AUY@@")
|
||||
throw y;
|
||||
|
|
|
@ -218,7 +218,7 @@ void delete_B(B *obj) {
|
|||
void call_complete_dtor() {
|
||||
// CHECK-LABEL: define dso_local void @"?call_complete_dtor@@YAXXZ"
|
||||
B b;
|
||||
// CHECK: call x86_thiscallcc %struct.B* @"??0B@@QAE@XZ"(%struct.B* %[[B:.*]], i32 1)
|
||||
// CHECK: call x86_thiscallcc %struct.B* @"??0B@@QAE@XZ"(%struct.B* noalias %[[B:.*]], i32 1)
|
||||
// CHECK-NOT: getelementptr
|
||||
// CHECK: call x86_thiscallcc void @"??_DB@@QAEXXZ"(%struct.B* %[[B]])
|
||||
// CHECK: ret
|
||||
|
@ -335,19 +335,19 @@ struct C : B, A { C() {} };
|
|||
void callC() { C x; }
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc %"struct.test2::C"* @"??0C@test2@@QAE@XZ"
|
||||
// CHECK: (%"struct.test2::C"* returned %this, i32 %is_most_derived)
|
||||
// CHECK: (%"struct.test2::C"* noalias returned %this, i32 %is_most_derived)
|
||||
// CHECK: br i1
|
||||
// Virtual bases
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* %{{.*}})
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* noalias %{{.*}})
|
||||
// CHECK: br label
|
||||
// Non-virtual bases
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::B"* @"??0B@test2@@QAE@XZ"(%"struct.test2::B"* %{{.*}}, i32 0)
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* %{{.*}})
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::B"* @"??0B@test2@@QAE@XZ"(%"struct.test2::B"* noalias %{{.*}}, i32 0)
|
||||
// CHECK: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* noalias %{{.*}})
|
||||
// CHECK: ret
|
||||
|
||||
// CHECK2-LABEL: define linkonce_odr dso_local x86_thiscallcc %"struct.test2::B"* @"??0B@test2@@QAE@XZ"
|
||||
// CHECK2: (%"struct.test2::B"* returned %this, i32 %is_most_derived)
|
||||
// CHECK2: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* %{{.*}})
|
||||
// CHECK2: (%"struct.test2::B"* noalias returned %this, i32 %is_most_derived)
|
||||
// CHECK2: call x86_thiscallcc %"struct.test2::A"* @"??0A@test2@@QAE@XZ"(%"struct.test2::A"* noalias %{{.*}})
|
||||
// CHECK2: ret
|
||||
|
||||
}
|
||||
|
|
|
@ -20,20 +20,20 @@ int fn() {
|
|||
// CHECK: @_ZTV1S = linkonce_odr dso_local unnamed_addr constant { [3 x i8*] } { [3 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1S to i8*), i8* bitcast (i32 (%struct.S*)* @_ZN1S4testEv to i8*)] }
|
||||
|
||||
// CHECK-LABEL: define dso_local i32 @_Z2fnv()
|
||||
// CHECK: call x86_thiscallcc void @_ZN1SC1Ev(%struct.S* %s)
|
||||
// CHECK: call x86_thiscallcc void @_ZN1SC1Ev(%struct.S* noalias %s)
|
||||
// CHECK: %{{[.0-9A-Z_a-z]+}} = call x86_thiscallcc i32 @_ZN1S4testEv(%struct.S* %s)
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1SC1Ev(%struct.S* %this)
|
||||
// CHECK: call x86_thiscallcc void @_ZN1SC2Ev(%struct.S* %{{[.0-9A-Z_a-z]+}})
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1SC1Ev(%struct.S* noalias %this)
|
||||
// CHECK: call x86_thiscallcc void @_ZN1SC2Ev(%struct.S* noalias %{{[.0-9A-Z_a-z]+}})
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc i32 @_ZN1S4testEv(%struct.S* %this)
|
||||
// CHECK: %{{[.0-9A-Z_a-z]+}} = call x86_thiscallcc i32 @_ZN1I4testEv(%__interface.I* %{{[.0-9A-Z_a-z]+}})
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1SC2Ev(%struct.S* %this)
|
||||
// CHECK: call x86_thiscallcc void @_ZN1IC2Ev(%__interface.I* %{{[.0-9A-Z_a-z]+}})
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1SC2Ev(%struct.S* noalias %this)
|
||||
// CHECK: call x86_thiscallcc void @_ZN1IC2Ev(%__interface.I* noalias %{{[.0-9A-Z_a-z]+}})
|
||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1S, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %{{[.0-9A-Z_a-z]+}}
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1IC2Ev(%__interface.I* %this)
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @_ZN1IC2Ev(%__interface.I* noalias %this)
|
||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1I, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %{{[.0-9A-Z_a-z]+}}
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc i32 @_ZN1I4testEv(%__interface.I* %this)
|
||||
|
|
|
@ -27,7 +27,7 @@ struct ATTR Derived : Base {
|
|||
// CHECK: define void @_ZN7DerivedC2Ev
|
||||
// CHECK: [[SELF:%.*]] = load [[DERIVED]]*
|
||||
// CHECK: [[T0:%.*]] = bitcast [[DERIVED]]* [[SELF]] to [[BASE]]*
|
||||
// CHECK: call void @_ZN4BaseC2Ev([[BASE]]* [[T0]], i8**
|
||||
// CHECK: call void @_ZN4BaseC2Ev([[BASE]]* noalias [[T0]], i8**
|
||||
// CHECK: [[T0:%.*]] = getelementptr inbounds {{.*}} [[SELF]], i32 0, i32 1
|
||||
// CHECK: store i32 20, i32* [[T0]],
|
||||
Derived::Derived() : value(20) {}
|
||||
|
|
|
@ -200,7 +200,7 @@ namespace test15 {
|
|||
// CHECK-NOT: icmp eq i8* [[P]], null
|
||||
// CHECK-NOT: br i1
|
||||
// CHECK: [[T0:%.*]] = bitcast i8* [[P]] to [[A:%.*]]*
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* [[T0]])
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* noalias [[T0]])
|
||||
void test0a(void *p) {
|
||||
new (p) A();
|
||||
}
|
||||
|
@ -211,7 +211,7 @@ namespace test15 {
|
|||
// CHECK-NEXT: icmp eq i8* [[P]], null
|
||||
// CHECK-NEXT: br i1
|
||||
// CHECK: [[T0:%.*]] = bitcast i8* [[P]] to [[A:%.*]]*
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* [[T0]])
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* noalias [[T0]])
|
||||
void test0b(void *p) {
|
||||
new (p, true) A();
|
||||
}
|
||||
|
@ -224,7 +224,7 @@ namespace test15 {
|
|||
// CHECK-NEXT: [[END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[BEGIN]], i64 5
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[BEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* [[CUR]])
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* noalias [[CUR]])
|
||||
// CHECK-NEXT: [[NEXT]] = getelementptr inbounds [[A]], [[A]]* [[CUR]], i64 1
|
||||
// CHECK-NEXT: [[DONE:%.*]] = icmp eq [[A]]* [[NEXT]], [[END]]
|
||||
// CHECK-NEXT: br i1 [[DONE]]
|
||||
|
@ -242,7 +242,7 @@ namespace test15 {
|
|||
// CHECK-NEXT: [[END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[BEGIN]], i64 5
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[BEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* [[CUR]])
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* noalias [[CUR]])
|
||||
// CHECK-NEXT: [[NEXT]] = getelementptr inbounds [[A]], [[A]]* [[CUR]], i64 1
|
||||
// CHECK-NEXT: [[DONE:%.*]] = icmp eq [[A]]* [[NEXT]], [[END]]
|
||||
// CHECK-NEXT: br i1 [[DONE]]
|
||||
|
@ -262,7 +262,7 @@ namespace test15 {
|
|||
// CHECK: [[END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[BEGIN]], i64 [[T0]]
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[BEGIN]],
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* [[CUR]])
|
||||
// CHECK-NEXT: call void @_ZN6test151AC1Ev([[A]]* noalias [[CUR]])
|
||||
void test2(void *p, int n) {
|
||||
new (p) A[n];
|
||||
}
|
||||
|
@ -296,7 +296,7 @@ namespace PR11757 {
|
|||
// CHECK: define {{.*}} @_ZN7PR117571aEPNS_1XE
|
||||
// CHECK: [[CALL:%.*]] = call i8* @_Znwm
|
||||
// CHECK-NEXT: [[CASTED:%.*]] = bitcast i8* [[CALL]] to
|
||||
// CHECK-NEXT: call void @_ZN7PR117571XC1Ev({{.*}}* [[CASTED]])
|
||||
// CHECK-NEXT: call void @_ZN7PR117571XC1Ev({{.*}}* noalias [[CASTED]])
|
||||
// CHECK-NEXT: ret {{.*}} [[CASTED]]
|
||||
}
|
||||
|
||||
|
|
|
@ -183,8 +183,8 @@ X test6() {
|
|||
// CHECK: [[A:%.*]] = alloca [[X:%.*]], align 8
|
||||
// CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds %class.X, %class.X* [[A]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[PTR]])
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* nonnull [[A]])
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]* nonnull dereferenceable({{[0-9]+}}) [[A]])
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* noalias nonnull [[A]])
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* noalias {{%.*}}, [[X]]* nonnull dereferenceable({{[0-9]+}}) [[A]])
|
||||
// CHECK-NEXT: call {{.*}} @_ZN1XD1Ev([[X]]* nonnull [[A]])
|
||||
// CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[PTR]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -22,16 +22,16 @@ namespace test0 {
|
|||
// Initialize.
|
||||
// CHECK-NEXT: [[E_BEGIN:%.*]] = getelementptr inbounds [10 x [[A]]], [10 x [[A]]]* [[AS]], i64 0, i64 0
|
||||
// CHECK-NEXT: store [[A]]* [[E_BEGIN]], [[A]]** [[ENDVAR]]
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ei([[A]]* [[E_BEGIN]], i32 5)
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ei([[A]]* noalias [[E_BEGIN]], i32 5)
|
||||
// CHECK: [[E1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[E_BEGIN]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[E1]], [[A]]** [[ENDVAR]]
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ei([[A]]* [[E1]], i32 7)
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ei([[A]]* noalias [[E1]], i32 7)
|
||||
// CHECK: [[E2:%.*]] = getelementptr inbounds [[A]], [[A]]* [[E1]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[E2]], [[A]]** [[ENDVAR]]
|
||||
// CHECK-NEXT: [[E_END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[E_BEGIN]], i64 10
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[E_CUR:%.*]] = phi [[A]]* [ [[E2]], {{%.*}} ], [ [[E_NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[E_CUR]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* noalias [[E_CUR]])
|
||||
// CHECK: [[E_NEXT]] = getelementptr inbounds [[A]], [[A]]* [[E_CUR]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[E_NEXT]], [[A]]** [[ENDVAR]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = icmp eq [[A]]* [[E_NEXT]], [[E_END]]
|
||||
|
@ -109,11 +109,11 @@ namespace test1 {
|
|||
// CHECK-NEXT: alloca i8*
|
||||
// CHECK-NEXT: alloca i32
|
||||
// CHECK-NEXT: [[X:%.*]] = getelementptr inbounds [[B]], [[B]]* [[V]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN5test11AC1Ei([[A:%.*]]* [[X]], i32 5)
|
||||
// CHECK-NEXT: call void @_ZN5test11AC1Ei([[A:%.*]]* noalias [[X]], i32 5)
|
||||
// CHECK-NEXT: [[Y:%.*]] = getelementptr inbounds [[B]], [[B]]* [[V]], i32 0, i32 1
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[Y]], i32 6)
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[Y]], i32 6)
|
||||
// CHECK: [[Z:%.*]] = getelementptr inbounds [[B]], [[B]]* [[V]], i32 0, i32 2
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[Z]], i32 7)
|
||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* noalias [[Z]], i32 7)
|
||||
// CHECK: [[W:%.*]] = getelementptr inbounds [[B]], [[B]]* [[V]], i32 0, i32 3
|
||||
// CHECK-NEXT: store i32 8, i32* [[W]], align 4
|
||||
// CHECK-NEXT: call void @_ZN5test11BD1Ev([[B]]* [[V]])
|
||||
|
@ -147,7 +147,7 @@ namespace test2 {
|
|||
// CHECK-NEXT: [[END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[BEGIN]], i64 28
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[BEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: invoke void @_ZN5test21AC1Ev([[A]]* [[CUR]])
|
||||
// CHECK-NEXT: invoke void @_ZN5test21AC1Ev([[A]]* noalias [[CUR]])
|
||||
// CHECK: [[NEXT:%.*]] = getelementptr inbounds [[A]], [[A]]* [[CUR]], i64 1
|
||||
// CHECK-NEXT: [[DONE:%.*]] = icmp eq [[A]]* [[NEXT]], [[END]]
|
||||
// CHECK-NEXT: br i1 [[DONE]],
|
||||
|
@ -193,21 +193,21 @@ namespace test4 {
|
|||
// CHECK-NEXT: store [3 x [[A]]]* [[A0]],
|
||||
// CHECK-NEXT: [[A00:%.*]] = getelementptr inbounds [3 x [[A]]], [3 x [[A]]]* [[A0]], i64 0, i64 0
|
||||
// CHECK-NEXT: store [[A]]* [[A00]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A00]], i32 0)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A00]], i32 0)
|
||||
// CHECK: [[A01:%.*]] = getelementptr inbounds [[A]], [[A]]* [[A00]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[A01]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A01]], i32 1)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A01]], i32 1)
|
||||
// CHECK: [[A02:%.*]] = getelementptr inbounds [[A]], [[A]]* [[A01]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[A02]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A02]], i32 2)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A02]], i32 2)
|
||||
// CHECK: [[A1:%.*]] = getelementptr inbounds [3 x [[A]]], [3 x [[A]]]* [[A0]], i64 1
|
||||
// CHECK-NEXT: store [3 x [[A]]]* [[A1]],
|
||||
// CHECK-NEXT: [[A10:%.*]] = getelementptr inbounds [3 x [[A]]], [3 x [[A]]]* [[A1]], i64 0, i64 0
|
||||
// CHECK-NEXT: store [[A]]* [[A10]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A10]], i32 3)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A10]], i32 3)
|
||||
// CHECK: [[A11:%.*]] = getelementptr inbounds [[A]], [[A]]* [[A10]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[A11]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A11]], i32 4)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A11]], i32 4)
|
||||
// CHECK: [[A12:%.*]] = getelementptr inbounds [[A]], [[A]]* [[A11]], i64 1
|
||||
// CHECK-NEXT: store [[A]]* [[A12]],
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* [[A12]], i32 5)
|
||||
// CHECK-NEXT: invoke void @_ZN5test41AC1Ej([[A]]* noalias [[A12]], i32 5)
|
||||
|
|
|
@ -181,27 +181,27 @@ CALL_AO(PackedMembers)
|
|||
|
||||
CALL_CC(PackedMembers)
|
||||
// PackedMembers copy-assignment:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* %this, %struct.PackedMembers* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* noalias %this, %struct.PackedMembers* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 1 {{.*}} align 1 {{.*}}i64 16, i1 {{.*}})
|
||||
// CHECK: ret void
|
||||
|
||||
CALL_CC(BitfieldMember2)
|
||||
// BitfieldMember2 copy-constructor:
|
||||
// CHECK-2-LABEL: define linkonce_odr void @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* %this, %struct.BitfieldMember2* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-2-LABEL: define linkonce_odr void @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* noalias %this, %struct.BitfieldMember2* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-2: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 false)
|
||||
// CHECK-2: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK-2: ret void
|
||||
|
||||
CALL_CC(BitfieldMember3)
|
||||
// BitfieldMember3 copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN15BitfieldMember3C2ERKS_(%struct.BitfieldMember3* %this, %struct.BitfieldMember3* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN15BitfieldMember3C2ERKS_(%struct.BitfieldMember3* noalias %this, %struct.BitfieldMember3* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 8, i1 false)
|
||||
// CHECK: ret void
|
||||
|
||||
CALL_CC(ReferenceMember)
|
||||
// ReferenceMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* %this, %struct.ReferenceMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* noalias %this, %struct.ReferenceMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 16, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 16, i1 {{.*}})
|
||||
|
@ -209,7 +209,7 @@ CALL_CC(ReferenceMember)
|
|||
|
||||
CALL_CC(InnerClassMember)
|
||||
// InnerClass copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* %this, %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* noalias %this, %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 32, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
|
@ -217,7 +217,7 @@ CALL_CC(InnerClassMember)
|
|||
|
||||
CALL_CC(BitfieldMember)
|
||||
// BitfieldMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* %this, %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* noalias %this, %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 1 {{.*}} align 1 {{.*}}i64 3, i1 {{.*}})
|
||||
|
@ -225,7 +225,7 @@ CALL_CC(BitfieldMember)
|
|||
|
||||
CALL_CC(VolatileMember)
|
||||
// VolatileMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* noalias %this, %struct.VolatileMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
// CHECK: load volatile i32, i32* {{.*}}, align 4
|
||||
// CHECK: store volatile i32 {{.*}}, align 4
|
||||
|
@ -235,7 +235,7 @@ CALL_CC(VolatileMember)
|
|||
|
||||
CALL_CC(ArrayMember)
|
||||
// ArrayMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* %this, %struct.ArrayMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* noalias %this, %struct.ArrayMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 64, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 64, i1 {{.*}})
|
||||
|
@ -243,7 +243,7 @@ CALL_CC(ArrayMember)
|
|||
|
||||
CALL_CC(PODLikeMember)
|
||||
// PODLikeMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* %this, %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* noalias %this, %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 32, i1 {{.*}})
|
||||
// CHECK: invoke void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
|
@ -253,7 +253,7 @@ CALL_CC(PODLikeMember)
|
|||
|
||||
CALL_CC(PODMember)
|
||||
// PODMember copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN9PODMemberC2ERKS_(%struct.PODMember* %this, %struct.PODMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN9PODMemberC2ERKS_(%struct.PODMember* noalias %this, %struct.PODMember* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 32, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
|
@ -261,7 +261,7 @@ CALL_CC(PODMember)
|
|||
|
||||
CALL_CC(Basic)
|
||||
// Basic copy-constructor:
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5BasicC2ERKS_(%struct.Basic* %this, %struct.Basic* dereferenceable({{[0-9]+}}))
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5BasicC2ERKS_(%struct.Basic* noalias %this, %struct.Basic* dereferenceable({{[0-9]+}}))
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}})
|
||||
|
|
|
@ -122,7 +122,7 @@ struct A {
|
|||
A();
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN9ValueInit1AC2Ev(%"struct.ValueInit::A"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN9ValueInit1AC2Ev(%"struct.ValueInit::A"* noalias %this) unnamed_addr
|
||||
// CHECK: store i64 -1, i64*
|
||||
// CHECK: ret void
|
||||
A::A() : a() {}
|
||||
|
|
|
@ -7,8 +7,8 @@ struct foo {
|
|||
};
|
||||
|
||||
foo::foo() {
|
||||
// CHECK-LABEL: define void @_ZN3fooC2Ev(%struct.foo* inreg %this)
|
||||
// CHECK-LABEL: define void @_ZN3fooC1Ev(%struct.foo* inreg %this)
|
||||
// CHECK-LABEL: define void @_ZN3fooC2Ev(%struct.foo* inreg noalias %this)
|
||||
// CHECK-LABEL: define void @_ZN3fooC1Ev(%struct.foo* inreg noalias %this)
|
||||
}
|
||||
|
||||
foo::~foo() {
|
||||
|
@ -21,6 +21,6 @@ void dummy() {
|
|||
// older clangs accept:
|
||||
// template foo::foo(int x);
|
||||
foo x(10);
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN3fooC1IiEET_(%struct.foo* inreg %this, i32 inreg %x)
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN3fooC2IiEET_(%struct.foo* inreg %this, i32 inreg %x)
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN3fooC1IiEET_(%struct.foo* inreg noalias %this, i32 inreg %x)
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN3fooC2IiEET_(%struct.foo* inreg noalias %this, i32 inreg %x)
|
||||
}
|
||||
|
|
|
@ -241,7 +241,7 @@ struct A {
|
|||
};
|
||||
|
||||
// CHECK-LABEL: define internal void @__cxx_global_var_init
|
||||
// CHECK: call void @_ZN2N31AC1Ei(%"struct.N3::A"* @_ZGRN2N35sA123E_, i32 123)
|
||||
// CHECK: call void @_ZN2N31AC1Ei(%"struct.N3::A"* noalias @_ZGRN2N35sA123E_, i32 123)
|
||||
// CHECK: call i32 @__cxa_atexit
|
||||
// CHECK: ret void
|
||||
const A &sA123 = A(123);
|
||||
|
@ -256,7 +256,7 @@ struct A {
|
|||
|
||||
void f() {
|
||||
// CHECK-LABEL: define void @_ZN2N41fEv
|
||||
// CHECK: call void @_ZN2N41AC1Ev(%"struct.N4::A"* @_ZGRZN2N41fEvE2ar_)
|
||||
// CHECK: call void @_ZN2N41AC1Ev(%"struct.N4::A"* noalias @_ZGRZN2N41fEvE2ar_)
|
||||
// CHECK: call i32 @__cxa_atexit
|
||||
// CHECK: ret void
|
||||
static const A& ar = A();
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace test0 {
|
|||
|
||||
A global;
|
||||
// CHECK-LABEL: define internal void @__cxx_global_var_init()
|
||||
// CHECK: call [[A]]* @_ZN5test01AC1Ev([[A]]* @_ZN5test06globalE)
|
||||
// CHECK: call [[A]]* @_ZN5test01AC1Ev([[A]]* noalias @_ZN5test06globalE)
|
||||
// CHECK-NEXT: call i32 @__cxa_atexit(void (i8*)* bitcast ([[A]]* ([[A]]*)* @_ZN5test01AD1Ev to void (i8*)*), i8* bitcast ([[A]]* @_ZN5test06globalE to i8*), i8* @__dso_handle) [[NOUNWIND:#[0-9]+]]
|
||||
// CHECK-NEXT: ret void
|
||||
}
|
||||
|
|
|
@ -33,11 +33,11 @@ const char * f(S s)
|
|||
//
|
||||
// CHECK: [[T2i8:%.*]] = bitcast %class.T* [[T2]] to i8*
|
||||
// CHECK: call void @llvm.lifetime.start.p0i8(i64 16, i8* [[T2i8]])
|
||||
// CHECK: [[T4:%.*]] = call %class.T* @_ZN1TC1EPKc(%class.T* [[T2]], i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0))
|
||||
// CHECK: [[T4:%.*]] = call %class.T* @_ZN1TC1EPKc(%class.T* noalias [[T2]], i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0))
|
||||
//
|
||||
// CHECK: [[T3i8:%.*]] = bitcast %class.T* [[T3]] to i8*
|
||||
// CHECK: call void @llvm.lifetime.start.p0i8(i64 16, i8* [[T3i8]])
|
||||
// CHECK: [[T5:%.*]] = call %class.T* @_ZN1TC1E1S(%class.T* [[T3]], [2 x i32] %{{.*}})
|
||||
// CHECK: [[T5:%.*]] = call %class.T* @_ZN1TC1E1S(%class.T* noalias [[T3]], [2 x i32] %{{.*}})
|
||||
//
|
||||
// CHECK: call void @_ZNK1T6concatERKS_(%class.T* sret [[T1]], %class.T* [[T2]], %class.T* dereferenceable(16) [[T3]])
|
||||
// CHECK: [[T6:%.*]] = call i8* @_ZNK1T3strEv(%class.T* [[T1]])
|
||||
|
|
|
@ -134,7 +134,7 @@ int large_combiner_test(S_large s) {
|
|||
// CHECK-LABEL: define i32 @large_combiner_test
|
||||
// CHECK: [[T2:%.*]] = alloca %struct.Combiner
|
||||
// CHECK: [[T1:%.*]] = alloca %struct.Combiner
|
||||
// CHECK: [[T3:%.*]] = call %struct.Combiner* @_ZN8CombinerC1E7S_large(%struct.Combiner* nonnull [[T1]], [9 x i32] %s.coerce)
|
||||
// CHECK: [[T3:%.*]] = call %struct.Combiner* @_ZN8CombinerC1E7S_large(%struct.Combiner* noalias nonnull [[T1]], [9 x i32] %s.coerce)
|
||||
// CHECK: call void @_ZN8Combiner1fEv(%struct.Combiner* nonnull sret [[T2]], %struct.Combiner* nonnull [[T1]])
|
||||
// CHECK: [[T4:%.*]] = getelementptr inbounds %struct.Combiner, %struct.Combiner* [[T2]], i32 0, i32 0, i32 0, i32 0
|
||||
// CHECK: [[T5:%.*]] = load i32, i32* [[T4]]
|
||||
|
|
|
@ -44,11 +44,11 @@ struct A {
|
|||
A theA;
|
||||
|
||||
// WEBASSEMBLY32: define internal void @__cxx_global_var_init() #3 {
|
||||
// WEBASSEMBLY32: call %struct.A* @_ZN1AC1Ev(%struct.A* @theA)
|
||||
// WEBASSEMBLY32: call %struct.A* @_ZN1AC1Ev(%struct.A* noalias @theA)
|
||||
// WEBASSEMBLY32: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() #3 {
|
||||
// WEBASSEMBLY32: call void @__cxx_global_var_init()
|
||||
//
|
||||
// WEBASSEMBLY64: define internal void @__cxx_global_var_init() #3 {
|
||||
// WEBASSEMBLY64: call %struct.A* @_ZN1AC1Ev(%struct.A* @theA)
|
||||
// WEBASSEMBLY64: call %struct.A* @_ZN1AC1Ev(%struct.A* noalias @theA)
|
||||
// WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() #3 {
|
||||
// WEBASSEMBLY64: call void @__cxx_global_var_init()
|
||||
|
|
|
@ -4,7 +4,7 @@ struct S { S(); ~S(); };
|
|||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
// CHECK-NOT: br
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @global)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @global)
|
||||
S global;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -15,12 +15,12 @@ S global;
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @inline_global)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @inline_global)
|
||||
inline S inline_global;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
// CHECK-NOT: br
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @thread_local_global)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @thread_local_global)
|
||||
thread_local S thread_local_global;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -28,7 +28,7 @@ thread_local S thread_local_global;
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @thread_local_inline_global)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @thread_local_inline_global)
|
||||
thread_local inline S thread_local_inline_global;
|
||||
|
||||
struct A {
|
||||
|
@ -40,7 +40,7 @@ struct A {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1A13inline_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1A13inline_memberE)
|
||||
static inline S inline_member;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -48,7 +48,7 @@ struct A {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1A26thread_local_inline_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1A26thread_local_inline_memberE)
|
||||
static thread_local inline S thread_local_inline_member;
|
||||
};
|
||||
|
||||
|
@ -67,12 +67,12 @@ void f() {
|
|||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
// CHECK-NOT: br
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1A6memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1A6memberE)
|
||||
S A::member;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
// CHECK-NOT: br
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1A19thread_local_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1A19thread_local_memberE)
|
||||
thread_local S A::thread_local_member;
|
||||
|
||||
template <typename T> struct B {
|
||||
|
@ -81,7 +81,7 @@ template <typename T> struct B {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1BIiE6memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1BIiE6memberE)
|
||||
static S member;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -89,7 +89,7 @@ template <typename T> struct B {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1BIiE13inline_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1BIiE13inline_memberE)
|
||||
static inline S inline_member;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -97,7 +97,7 @@ template <typename T> struct B {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1BIiE19thread_local_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1BIiE19thread_local_memberE)
|
||||
static thread_local S thread_local_member;
|
||||
|
||||
// CHECK-LABEL: define {{.*}}global_var_init
|
||||
|
@ -105,7 +105,7 @@ template <typename T> struct B {
|
|||
// CHECK: icmp eq i8 {{.*}}, 0
|
||||
// CHECK: br i1
|
||||
// CHECK-NOT: !prof
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* @_ZN1BIiE26thread_local_inline_memberE)
|
||||
// CHECK: call void @_ZN1SC1Ev({{.*}}* noalias @_ZN1BIiE26thread_local_inline_memberE)
|
||||
static thread_local inline S thread_local_inline_member;
|
||||
};
|
||||
template<typename T> S B<T>::member;
|
||||
|
|
|
@ -95,7 +95,7 @@ struct DynamicFrom2Virtuals;
|
|||
|
||||
// CHECK-NEW: %[[THIS3:.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* %[[THIS2:.*]])
|
||||
// CHECK-NEW: %[[THIS4:.*]] = bitcast i8* %[[THIS3]] to %[[DynamicDerived:.*]]*
|
||||
// CHECK-NEW: call void @_ZN14DynamicDerivedC1Ev(%[[DynamicDerived:.*]]* %[[THIS4]])
|
||||
// CHECK-NEW: call void @_ZN14DynamicDerivedC1Ev(%[[DynamicDerived:.*]]* noalias %[[THIS4]])
|
||||
// CHECK-NEW-LABEL: {{^}}}
|
||||
void Pointers1() {
|
||||
DynamicBase1 *DB = new DynamicBase1;
|
||||
|
@ -141,7 +141,7 @@ struct DynamicDerived;
|
|||
// CHECK-CTORS: %[[THIS2:.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* %[[THIS1:.*]])
|
||||
// CHECK-CTORS: %[[THIS3:.*]] = bitcast i8* %[[THIS2]] to %[[DynamicDerived]]*
|
||||
// CHECK-CTORS: %[[THIS4:.*]] = bitcast %[[DynamicDerived]]* %[[THIS3]] to %[[DynamicBase:.*]]*
|
||||
// CHECK-CTORS: call void @_ZN12DynamicBase1C2Ev(%[[DynamicBase]]* %[[THIS4]])
|
||||
// CHECK-CTORS: call void @_ZN12DynamicBase1C2Ev(%[[DynamicBase]]* noalias %[[THIS4]])
|
||||
|
||||
// CHECK-CTORS: %[[THIS5:.*]] = bitcast %struct.DynamicDerived* %[[THIS0]] to i32 (...)***
|
||||
// CHECK-CTORS: store {{.*}} %[[THIS5]]
|
||||
|
@ -155,7 +155,7 @@ struct DynamicDerivedMultiple;
|
|||
// CHECK-CTORS: %[[THIS2:.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* %[[THIS1]])
|
||||
// CHECK-CTORS: %[[THIS3:.*]] = bitcast i8* %[[THIS2]] to %[[CLASS]]*
|
||||
// CHECK-CTORS: %[[THIS4:.*]] = bitcast %[[CLASS]]* %[[THIS3]] to %[[BASE_CLASS:.*]]*
|
||||
// CHECK-CTORS: call void @_ZN12DynamicBase1C2Ev(%[[BASE_CLASS]]* %[[THIS4]])
|
||||
// CHECK-CTORS: call void @_ZN12DynamicBase1C2Ev(%[[BASE_CLASS]]* noalias %[[THIS4]])
|
||||
|
||||
// CHECK-CTORS: call i8* @llvm.launder.invariant.group.p0i8(
|
||||
|
||||
|
|
|
@ -28,9 +28,9 @@ void test() {
|
|||
//
|
||||
// BAR's instantiation of X:
|
||||
// CHECK-LABEL: define linkonce_odr i32 @_ZN1XIN1SUt_EE1fEv(%struct.X* %this)
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIN1SUt_EEC2ES1_(%struct.X* %this, i32 %t) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIN1SUt_EEC2ES1_(%struct.X* noalias %this, i32 %t) unnamed_addr
|
||||
//
|
||||
// FOO's instantiation of X:
|
||||
// CHECK-LABEL: define linkonce_odr i32 @_ZN1XIN1SUt0_EE1fEv(%struct.X.0* %this)
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIN1SUt0_EEC2ES1_(%struct.X.0* %this, i32 %t) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIN1SUt0_EEC2ES1_(%struct.X.0* noalias %this, i32 %t) unnamed_addr
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// CHECK2-NOT: _ZTVN5test31SIiEE
|
||||
// CHECK2-NOT: _ZTSN5test31SIiEE
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5test21CIiEC1Ev(%"class.test2::C"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5test21CIiEC1Ev(%"class.test2::C"* noalias %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN5test21CIiE6foobarIdEEvT_(
|
||||
// CHECK-LABEL: define available_externally void @_ZN5test21CIiE6zedbarEd(
|
||||
|
||||
|
|
|
@ -400,15 +400,15 @@ namespace Elision {
|
|||
// CHECK-NEXT: [[T1:%.*]] = alloca [[A]], align 8
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision3fooEv()
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[I]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[I]])
|
||||
A i = (foo(), A());
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision4fooAEv([[A]]* sret [[T0]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[J]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[J]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[T0]])
|
||||
A j = (fooA(), A());
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[T1]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[T1]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision4fooAEv([[A]]* sret [[K]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[T1]])
|
||||
A k = (A(), fooA());
|
||||
|
@ -424,12 +424,12 @@ namespace Elision {
|
|||
// CHECK: [[I:%.*]] = alloca [[A]], align 8
|
||||
// CHECK-NEXT: [[J:%.*]] = alloca [[A]], align 8
|
||||
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[I]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[I]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[I]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[I]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||
A i = (c ? A() : x);
|
||||
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[J]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[J]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[J]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[J]])
|
||||
A j = (c ? x : A());
|
||||
|
||||
// CHECK: call void @_ZN7Elision1AD1Ev([[A]]* [[J]])
|
||||
|
@ -439,7 +439,7 @@ namespace Elision {
|
|||
// CHECK: define void @_ZN7Elision5test2Ev([[A]]* noalias sret
|
||||
A test2() {
|
||||
// CHECK: call void @_ZN7Elision3fooEv()
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[RET:%.*]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[RET:%.*]])
|
||||
// CHECK-NEXT: ret void
|
||||
return (foo(), A());
|
||||
}
|
||||
|
@ -447,12 +447,12 @@ namespace Elision {
|
|||
// CHECK: define void @_ZN7Elision5test3EiNS_1AE([[A]]* noalias sret
|
||||
A test3(int v, A x) {
|
||||
if (v < 5)
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET:%.*]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[RET:%.*]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||
return (v < 0 ? A() : x);
|
||||
else
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET]])
|
||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[RET]])
|
||||
return (v > 10 ? x : A());
|
||||
|
||||
// CHECK: ret void
|
||||
|
@ -463,13 +463,13 @@ namespace Elision {
|
|||
// CHECK: [[X:%.*]] = alloca [[A]], align 8
|
||||
// CHECK-NEXT: [[XS:%.*]] = alloca [2 x [[A]]], align 16
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[X]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[X]])
|
||||
A x;
|
||||
|
||||
// CHECK-NEXT: [[XS0:%.*]] = getelementptr inbounds [2 x [[A]]], [2 x [[A]]]* [[XS]], i64 0, i64 0
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[XS0]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* noalias [[XS0]])
|
||||
// CHECK-NEXT: [[XS1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[XS0]], i64 1
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[XS1]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[XS1]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||
A xs[] = { A(), x };
|
||||
|
||||
// CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [2 x [[A]]], [2 x [[A]]]* [[XS]], i32 0, i32 0
|
||||
|
@ -494,23 +494,23 @@ namespace Elision {
|
|||
// CHECK-NEXT: [[BT1:%.*]] = alloca [[B]], align 8
|
||||
// CHECK-NEXT: [[BT2:%.*]] = alloca [[B]], align 8
|
||||
|
||||
// CHECK: call void @_ZN7Elision1BC1Ev([[B]]* [[BT0]])
|
||||
// CHECK: call void @_ZN7Elision1BC1Ev([[B]]* noalias [[BT0]])
|
||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]], [[B]]* [[BT0]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[AT0]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[AT0]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision5takeAENS_1AE([[A]]* [[AT0]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[AT0]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT0]])
|
||||
takeA(B().a);
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT1]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* noalias [[BT1]])
|
||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]], [[B]]* [[BT1]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[X]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[X]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT1]])
|
||||
A x = B().a;
|
||||
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT2]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* noalias [[BT2]])
|
||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]], [[B]]* [[BT2]], i32 0, i32 0
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET:%.*]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* noalias [[RET:%.*]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT2]])
|
||||
return B().a;
|
||||
|
||||
|
@ -542,10 +542,10 @@ namespace PR8623 {
|
|||
// CHECK: store i1 false, i1* [[LCONS]]
|
||||
// CHECK-NEXT: store i1 false, i1* [[RCONS]]
|
||||
// CHECK-NEXT: br i1
|
||||
// CHECK: call void @_ZN6PR86231AC1Ei([[A]]* [[TMP]], i32 2)
|
||||
// CHECK: call void @_ZN6PR86231AC1Ei([[A]]* noalias [[TMP]], i32 2)
|
||||
// CHECK-NEXT: store i1 true, i1* [[LCONS]]
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: call void @_ZN6PR86231AC1Ei([[A]]* [[TMP]], i32 3)
|
||||
// CHECK: call void @_ZN6PR86231AC1Ei([[A]]* noalias [[TMP]], i32 3)
|
||||
// CHECK-NEXT: store i1 true, i1* [[RCONS]]
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: load i1, i1* [[RCONS]]
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
|
||||
// CHECK-LABEL: define void @_Z4testv()
|
||||
void test( void ) {
|
||||
// CHECK: call void @_ZN1CC1Ev(%class.C* [[C:%.+]])
|
||||
// CHECK: call void @_ZN1CC1Ev(%class.C* noalias [[C:%.+]])
|
||||
C c;
|
||||
|
||||
// CHECK: call x86_thiscallcc void @_ZNK1C5SmallEv(%struct.S* sret %{{.+}}, %class.C* [[C]])
|
||||
|
|
|
@ -57,7 +57,7 @@ void testParamSmall(Small a) noexcept {
|
|||
|
||||
// CHECK: define i64 @_Z15testReturnSmallv()
|
||||
// CHECK: %[[RETVAL:.*]] = alloca %[[STRUCT_SMALL:.*]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* %[[RETVAL]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* noalias %[[RETVAL]])
|
||||
// CHECK: %[[COERCE_DIVE:.*]] = getelementptr inbounds %[[STRUCT_SMALL]], %[[STRUCT_SMALL]]* %[[RETVAL]], i32 0, i32 0
|
||||
// CHECK: %[[V0:.*]] = load i32*, i32** %[[COERCE_DIVE]], align 8
|
||||
// CHECK: %[[COERCE_VAL_PI:.*]] = ptrtoint i32* %[[V0]] to i64
|
||||
|
@ -72,8 +72,8 @@ Small testReturnSmall() {
|
|||
// CHECK: define void @_Z14testCallSmall0v()
|
||||
// CHECK: %[[T:.*]] = alloca %[[STRUCT_SMALL:.*]], align 8
|
||||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_SMALL]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* %[[T]])
|
||||
// CHECK: %[[CALL1:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1ERKS_(%[[STRUCT_SMALL]]* %[[AGG_TMP]], %[[STRUCT_SMALL]]* dereferenceable(8) %[[T]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* noalias %[[T]])
|
||||
// CHECK: %[[CALL1:.*]] = call %[[STRUCT_SMALL]]* @_ZN5SmallC1ERKS_(%[[STRUCT_SMALL]]* noalias %[[AGG_TMP]], %[[STRUCT_SMALL]]* dereferenceable(8) %[[T]])
|
||||
// CHECK: %[[COERCE_DIVE:.*]] = getelementptr inbounds %[[STRUCT_SMALL]], %[[STRUCT_SMALL]]* %[[AGG_TMP]], i32 0, i32 0
|
||||
// CHECK: %[[V0:.*]] = load i32*, i32** %[[COERCE_DIVE]], align 8
|
||||
// CHECK: %[[COERCE_VAL_PI:.*]] = ptrtoint i32* %[[V0]] to i64
|
||||
|
@ -127,7 +127,7 @@ void testParamLarge(Large a) noexcept {
|
|||
}
|
||||
|
||||
// CHECK: define void @_Z15testReturnLargev(%[[STRUCT_LARGE:.*]]* noalias sret %[[AGG_RESULT:.*]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* %[[AGG_RESULT]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* noalias %[[AGG_RESULT]])
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
|
@ -139,8 +139,8 @@ Large testReturnLarge() {
|
|||
// CHECK: define void @_Z14testCallLarge0v()
|
||||
// CHECK: %[[T:.*]] = alloca %[[STRUCT_LARGE:.*]], align 8
|
||||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_LARGE]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* %[[T]])
|
||||
// CHECK: %[[CALL1:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1ERKS_(%[[STRUCT_LARGE]]* %[[AGG_TMP]], %[[STRUCT_LARGE]]* dereferenceable(520) %[[T]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* noalias %[[T]])
|
||||
// CHECK: %[[CALL1:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeC1ERKS_(%[[STRUCT_LARGE]]* noalias %[[AGG_TMP]], %[[STRUCT_LARGE]]* dereferenceable(520) %[[T]])
|
||||
// CHECK: call void @_Z14testParamLarge5Large(%[[STRUCT_LARGE]]* %[[AGG_TMP]])
|
||||
// CHECK: %[[CALL2:.*]] = call %[[STRUCT_LARGE]]* @_ZN5LargeD1Ev(%[[STRUCT_LARGE]]* %[[T]])
|
||||
// CHECK: ret void
|
||||
|
@ -187,7 +187,7 @@ Trivial testReturnHasTrivial() {
|
|||
}
|
||||
|
||||
// CHECK: define void @_Z23testReturnHasNonTrivialv(%[[STRUCT_NONTRIVIAL:.*]]* noalias sret %[[AGG_RESULT:.*]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_NONTRIVIAL]]* @_ZN10NonTrivialC1Ev(%[[STRUCT_NONTRIVIAL]]* %[[AGG_RESULT]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_NONTRIVIAL]]* @_ZN10NonTrivialC1Ev(%[[STRUCT_NONTRIVIAL]]* noalias %[[AGG_RESULT]])
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
|
@ -199,8 +199,8 @@ NonTrivial testReturnHasNonTrivial() {
|
|||
// CHECK: define void @_Z18testExceptionSmallv()
|
||||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_SMALL]], align 8
|
||||
// CHECK: %[[AGG_TMP1:.*]] = alloca %[[STRUCT_SMALL]], align 8
|
||||
// CHECK: call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* %[[AGG_TMP]])
|
||||
// CHECK: invoke %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* %[[AGG_TMP1]])
|
||||
// CHECK: call %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* noalias %[[AGG_TMP]])
|
||||
// CHECK: invoke %[[STRUCT_SMALL]]* @_ZN5SmallC1Ev(%[[STRUCT_SMALL]]* noalias %[[AGG_TMP1]])
|
||||
|
||||
// CHECK: call void @_Z20calleeExceptionSmall5SmallS_(i64 %{{.*}}, i64 %{{.*}})
|
||||
// CHECK-NEXT: ret void
|
||||
|
@ -220,8 +220,8 @@ void testExceptionSmall() {
|
|||
// CHECK: define void @_Z18testExceptionLargev()
|
||||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_LARGE]], align 8
|
||||
// CHECK: %[[AGG_TMP1:.*]] = alloca %[[STRUCT_LARGE]], align 8
|
||||
// CHECK: call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* %[[AGG_TMP]])
|
||||
// CHECK: invoke %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* %[[AGG_TMP1]])
|
||||
// CHECK: call %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* noalias %[[AGG_TMP]])
|
||||
// CHECK: invoke %[[STRUCT_LARGE]]* @_ZN5LargeC1Ev(%[[STRUCT_LARGE]]* noalias %[[AGG_TMP1]])
|
||||
|
||||
// CHECK: call void @_Z20calleeExceptionLarge5LargeS_(%[[STRUCT_LARGE]]* %[[AGG_TMP]], %[[STRUCT_LARGE]]* %[[AGG_TMP1]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -209,12 +209,12 @@ namespace test6 {
|
|||
|
||||
// CHECK-NEXT: [[INNER:%.*]] = getelementptr inbounds [10 x [20 x [[A]]]], [10 x [20 x [[A]]]]* [[ARR]], i64 0, i64 0
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [20 x [[A]]], [20 x [[A]]]* [[INNER]], i64 0, i64 0
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ei([[A]]* [[T0]], i32 5)
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ei([[A]]* noalias [[T0]], i32 5)
|
||||
// CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [[A]], [[A]]* [[T0]], i64 1
|
||||
// CHECK-NEXT: [[END:%.*]] = getelementptr inbounds [[A]], [[A]]* [[T0]], i64 20
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[CUR:%.*]] = phi [[A]]* [ [[BEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* [[CUR]])
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* noalias [[CUR]])
|
||||
// CHECK-NEXT: [[NEXT]] = getelementptr inbounds [[A]], [[A]]* [[CUR]], i64 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = icmp eq [[A]]* [[NEXT]], [[END]]
|
||||
// CHECK-NEXT: br i1
|
||||
|
@ -229,7 +229,7 @@ namespace test6 {
|
|||
// CHECK-NEXT: [[IEND:%.*]] = getelementptr inbounds [[A]], [[A]]* [[IBEGIN]], i64 20
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: [[ICUR:%.*]] = phi [[A]]* [ [[IBEGIN]], {{%.*}} ], [ [[INEXT:%.*]], {{%.*}} ]
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* [[ICUR]])
|
||||
// CHECK-NEXT: call void @_ZN5test61AC1Ev([[A]]* noalias [[ICUR]])
|
||||
// CHECK-NEXT: [[INEXT:%.*]] = getelementptr inbounds [[A]], [[A]]* [[ICUR]], i64 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = icmp eq [[A]]* [[INEXT]], [[IEND]]
|
||||
// CHECK-NEXT: br i1 [[T0]],
|
||||
|
@ -326,7 +326,7 @@ int explicitly_defaulted() {
|
|||
return a.n;
|
||||
} // CHECK-LABEL: }
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN8zeroinit2X3IiEC2Ev(%"struct.zeroinit::X3"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN8zeroinit2X3IiEC2Ev(%"struct.zeroinit::X3"* noalias %this) unnamed_addr
|
||||
// CHECK: call void @llvm.memset.p0i8.i64
|
||||
// CHECK-NEXT: call void @_ZN8zeroinit2X2IiEC2Ev
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 -mconstructor-aliases | FileCheck %s
|
||||
|
||||
struct A {
|
||||
struct A {
|
||||
A();
|
||||
};
|
||||
|
||||
// CHECK: @_ZN1AC1Ev = unnamed_addr alias {{.*}} @_ZN1AC2Ev
|
||||
// CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* noalias %this) unnamed_addr
|
||||
A::A() { }
|
||||
|
||||
struct B : virtual A {
|
||||
struct B : virtual A {
|
||||
B();
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1BC2Ev(%struct.B* %this, i8** %vtt) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1BC2Ev(%struct.B* noalias %this, i8** %vtt) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1BC1Ev(%struct.B* noalias %this) unnamed_addr
|
||||
B::B() { }
|
||||
|
||||
struct C : virtual A {
|
||||
C(bool);
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1CC2Eb(%struct.C* %this, i8** %vtt, i1 zeroext) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC1Eb(%struct.C* %this, i1 zeroext) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC2Eb(%struct.C* noalias %this, i8** %vtt, i1 zeroext) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1CC1Eb(%struct.C* noalias %this, i1 zeroext) unnamed_addr
|
||||
C::C(bool) { }
|
||||
|
||||
// PR6251
|
||||
|
@ -39,7 +39,7 @@ struct D : B, C {
|
|||
D();
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN6PR62511DC1Ev(%"struct.PR6251::D"* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN6PR62511DC1Ev(%"struct.PR6251::D"* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN6PR62511AIcEC2Ev
|
||||
// CHECK-NOT: call void @_ZN6PR62511AIcEC2Ev
|
||||
// CHECK: ret void
|
||||
|
@ -51,14 +51,14 @@ namespace virtualBaseAlignment {
|
|||
|
||||
// Check that the store to B::x in the base constructor has an 8-byte alignment.
|
||||
|
||||
// CHECK: define linkonce_odr void @_ZN20virtualBaseAlignment1BC1Ev(%[[STRUCT_B:.*]]* %[[THIS:.*]])
|
||||
// CHECK: define linkonce_odr void @_ZN20virtualBaseAlignment1BC1Ev(%[[STRUCT_B:.*]]* noalias %[[THIS:.*]])
|
||||
// CHECK: %[[THIS_ADDR:.*]] = alloca %[[STRUCT_B]]*, align 8
|
||||
// CHECK: store %[[STRUCT_B]]* %[[THIS]], %[[STRUCT_B]]** %[[THIS_ADDR]], align 8
|
||||
// CHECK: %[[THIS1:.*]] = load %[[STRUCT_B]]*, %[[STRUCT_B]]** %[[THIS_ADDR]], align 8
|
||||
// CHECK: %[[X:.*]] = getelementptr inbounds %[[STRUCT_B]], %[[STRUCT_B]]* %[[THIS1]], i32 0, i32 2
|
||||
// CHECK: store i32 123, i32* %[[X]], align 16
|
||||
|
||||
// CHECK: define linkonce_odr void @_ZN20virtualBaseAlignment1BC2Ev(%[[STRUCT_B]]* %[[THIS:.*]], i8** %{{.*}})
|
||||
// CHECK: define linkonce_odr void @_ZN20virtualBaseAlignment1BC2Ev(%[[STRUCT_B]]* noalias %[[THIS:.*]], i8** %{{.*}})
|
||||
// CHECK: %[[THIS_ADDR:.*]] = alloca %[[STRUCT_B]]*, align 8
|
||||
// CHECK: store %[[STRUCT_B]]* %[[THIS]], %[[STRUCT_B]]** %[[THIS_ADDR]], align 8
|
||||
// CHECK: %[[THIS1:.*]] = load %[[STRUCT_B]]*, %[[STRUCT_B]]** %[[THIS_ADDR]], align 8
|
||||
|
|
|
@ -53,7 +53,7 @@ void test(int n) {
|
|||
|
||||
// CHECK: [[arrayctor_loop]]
|
||||
// CHECK-NEXT: [[arrayctor_cur:%.+]] = phi [[struct_S]]* [ [[vla]], %[[new_ctorloop]] ], [ [[arrayctor_next:%.+]], %[[arrayctor_loop]] ]
|
||||
// CHECK-NEXT: call void [[ctor:@.+]]([[struct_S]]* [[arrayctor_cur]])
|
||||
// CHECK-NEXT: call void [[ctor:@.+]]([[struct_S]]* noalias [[arrayctor_cur]])
|
||||
// CHECK-NEXT: [[arrayctor_next]] = getelementptr inbounds [[struct_S]], [[struct_S]]* [[arrayctor_cur]], i64 1
|
||||
// CHECK-NEXT: [[arrayctor_done:%.+]] = icmp eq [[struct_S]]* [[arrayctor_next]], [[arrayctor_end]]
|
||||
// CHECK-NEXT: br i1 [[arrayctor_done]], label %[[arrayctor_cont]], label %[[arrayctor_loop]]
|
||||
|
|
|
@ -37,7 +37,7 @@ void fooA() {
|
|||
}
|
||||
|
||||
// CHECK1-LABEL: define void @_ZN5test14fooBEv()
|
||||
// CHECK1: call void @_ZN5test11BC1Ev(%"struct.test1::B"* %{{.*}})
|
||||
// CHECK1: call void @_ZN5test11BC1Ev(%"struct.test1::B"* noalias %{{.*}})
|
||||
// CHECK1: %[[VTABLE:.*]] = load i8**, i8*** %{{.*}}
|
||||
// CHECK1: %[[CMP:.*]] = icmp eq i8** %[[VTABLE]], getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN5test11BE, i32 0, inrange i32 0, i32 2)
|
||||
// CHECK1: call void @llvm.assume(i1 %[[CMP]])
|
||||
|
|
|
@ -15,11 +15,11 @@ struct A : Base {
|
|||
~A();
|
||||
|
||||
virtual void f();
|
||||
|
||||
|
||||
Field field;
|
||||
};
|
||||
|
||||
// CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr
|
||||
// CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN4BaseC2Ev(
|
||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1A, i32 0, inrange i32 0, i32 2) to i32 (...)**)
|
||||
// CHECK: call void @_ZN5FieldC1Ev(
|
||||
|
@ -31,23 +31,23 @@ A::A() { }
|
|||
// CHECK: call void @_ZN5FieldD1Ev(
|
||||
// CHECK: call void @_ZN4BaseD2Ev(
|
||||
// CHECK: ret void
|
||||
A::~A() { }
|
||||
A::~A() { }
|
||||
|
||||
struct B : Base {
|
||||
virtual void f();
|
||||
|
||||
|
||||
Field field;
|
||||
};
|
||||
|
||||
void f() { B b; }
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1BC1Ev(%struct.B* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN1BC2Ev(
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1BD1Ev(%struct.B* %this) unnamed_addr
|
||||
// CHECK: call void @_ZN1BD2Ev(
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1BC2Ev(%struct.B* %this) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1BC2Ev(%struct.B* noalias %this) unnamed_addr
|
||||
// CHECK: call void @_ZN4BaseC2Ev(
|
||||
// CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV1B, i32 0, inrange i32 0, i32 2) to i32 (...)**)
|
||||
// CHECK: call void @_ZN5FieldC1Ev
|
||||
|
|
|
@ -48,7 +48,7 @@ struct copy_ctor {
|
|||
test(copy_ctor);
|
||||
// CHECK: define void @_Z7forward9copy_ctor(%struct.copy_ctor* noalias sret %{{.*}}, %struct.copy_ctor* %{{.*}})
|
||||
//
|
||||
// CHECK: declare %struct.copy_ctor* @_ZN9copy_ctorC1ERKS_(%struct.copy_ctor* returned, %struct.copy_ctor* dereferenceable(8))
|
||||
// CHECK: declare %struct.copy_ctor* @_ZN9copy_ctorC1ERKS_(%struct.copy_ctor* noalias returned, %struct.copy_ctor* dereferenceable(8))
|
||||
//
|
||||
// CHECK: define void @_Z14test_copy_ctorv()
|
||||
// CHECK: %[[tmp:.*]] = alloca %struct.copy_ctor, align 8
|
||||
|
@ -66,7 +66,7 @@ struct __attribute__((aligned(16))) aligned_copy_ctor {
|
|||
test(aligned_copy_ctor);
|
||||
// CHECK: define void @_Z7forward17aligned_copy_ctor(%struct.aligned_copy_ctor* noalias sret %{{.*}}, %struct.aligned_copy_ctor* %{{.*}})
|
||||
//
|
||||
// CHECK: declare %struct.aligned_copy_ctor* @_ZN17aligned_copy_ctorC1ERKS_(%struct.aligned_copy_ctor* returned, %struct.aligned_copy_ctor* dereferenceable(16))
|
||||
// CHECK: declare %struct.aligned_copy_ctor* @_ZN17aligned_copy_ctorC1ERKS_(%struct.aligned_copy_ctor* noalias returned, %struct.aligned_copy_ctor* dereferenceable(16))
|
||||
//
|
||||
// CHECK: define void @_Z22test_aligned_copy_ctorv()
|
||||
// CHECK: %[[tmp:.*]] = alloca %struct.aligned_copy_ctor, align 16
|
||||
|
|
|
@ -69,8 +69,8 @@ void f(int val, MoveOnly moParam, MoveAndCopy mcParam) {
|
|||
// CHECK: store i32 %val, i32* %[[ValAddr:.+]]
|
||||
|
||||
// CHECK: call i8* @llvm.coro.begin(
|
||||
// CHECK: call void @_ZN8MoveOnlyC1EOS_(%struct.MoveOnly* %[[MoCopy]], %struct.MoveOnly* dereferenceable(4) %[[MoParam]])
|
||||
// CHECK-NEXT: call void @_ZN11MoveAndCopyC1EOS_(%struct.MoveAndCopy* %[[McCopy]], %struct.MoveAndCopy* dereferenceable(4) %[[McParam]]) #
|
||||
// CHECK: call void @_ZN8MoveOnlyC1EOS_(%struct.MoveOnly* noalias %[[MoCopy]], %struct.MoveOnly* dereferenceable(4) %[[MoParam]])
|
||||
// CHECK-NEXT: call void @_ZN11MoveAndCopyC1EOS_(%struct.MoveAndCopy* noalias %[[McCopy]], %struct.MoveAndCopy* dereferenceable(4) %[[McParam]]) #
|
||||
// CHECK-NEXT: invoke void @_ZNSt12experimental16coroutine_traitsIJvi8MoveOnly11MoveAndCopyEE12promise_typeC1Ev(
|
||||
|
||||
// CHECK: call void @_ZN14suspend_always12await_resumeEv(
|
||||
|
@ -103,9 +103,9 @@ void dependent_params(T x, U, U y) {
|
|||
// CHECK-NEXT: %[[y_copy:.+]] = alloca %struct.B
|
||||
|
||||
// CHECK: call i8* @llvm.coro.begin
|
||||
// CHECK-NEXT: call void @_ZN1AC1EOS_(%struct.A* %[[x_copy]], %struct.A* dereferenceable(512) %x)
|
||||
// CHECK-NEXT: call void @_ZN1BC1EOS_(%struct.B* %[[unnamed_copy]], %struct.B* dereferenceable(512) %0)
|
||||
// CHECK-NEXT: call void @_ZN1BC1EOS_(%struct.B* %[[y_copy]], %struct.B* dereferenceable(512) %y)
|
||||
// CHECK-NEXT: call void @_ZN1AC1EOS_(%struct.A* noalias %[[x_copy]], %struct.A* dereferenceable(512) %x)
|
||||
// CHECK-NEXT: call void @_ZN1BC1EOS_(%struct.B* noalias %[[unnamed_copy]], %struct.B* dereferenceable(512) %0)
|
||||
// CHECK-NEXT: call void @_ZN1BC1EOS_(%struct.B* noalias %[[y_copy]], %struct.B* dereferenceable(512) %y)
|
||||
// CHECK-NEXT: invoke void @_ZNSt12experimental16coroutine_traitsIJv1A1BS2_EE12promise_typeC1Ev(
|
||||
|
||||
co_return;
|
||||
|
@ -153,7 +153,7 @@ void coroutine_matching_promise_constructor(promise_matching_constructor, int, f
|
|||
// CHECK: %[[INT:.+]] = load i32, i32* %5, align 4
|
||||
// CHECK: %[[FLOAT:.+]] = load float, float* %6, align 4
|
||||
// CHECK: %[[DOUBLE:.+]] = load double, double* %7, align 8
|
||||
// CHECK: invoke void @_ZNSt12experimental16coroutine_traitsIJv28promise_matching_constructorifdEE12promise_typeC1ES1_ifd(%"struct.std::experimental::coroutine_traits<void, promise_matching_constructor, int, float, double>::promise_type"* %__promise, i32 %[[INT]], float %[[FLOAT]], double %[[DOUBLE]])
|
||||
// CHECK: invoke void @_ZNSt12experimental16coroutine_traitsIJv28promise_matching_constructorifdEE12promise_typeC1ES1_ifd(%"struct.std::experimental::coroutine_traits<void, promise_matching_constructor, int, float, double>::promise_type"* noalias %__promise, i32 %[[INT]], float %[[FLOAT]], double %[[DOUBLE]])
|
||||
co_return;
|
||||
}
|
||||
|
||||
|
@ -178,6 +178,6 @@ struct some_class {
|
|||
|
||||
// CHECK-LABEL: define void @_ZN10some_class39good_coroutine_calls_custom_constructorEf(%struct.some_class*
|
||||
method some_class::good_coroutine_calls_custom_constructor(float) {
|
||||
// CHECK: invoke void @_ZNSt12experimental16coroutine_traitsIJ6methodR10some_classfEE12promise_typeC1ES3_f(%"struct.std::experimental::coroutine_traits<method, some_class &, float>::promise_type"* %__promise, %struct.some_class* dereferenceable(1) %{{.+}}, float
|
||||
// CHECK: invoke void @_ZNSt12experimental16coroutine_traitsIJ6methodR10some_classfEE12promise_typeC1ES3_f(%"struct.std::experimental::coroutine_traits<method, some_class &, float>::promise_type"* noalias %__promise, %struct.some_class* dereferenceable(1) %{{.+}}, float
|
||||
co_return;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ coro1 f2() {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: define void @_Z2f2v(
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* %[[AVar:.*]])
|
||||
// CHECK: call void @_ZN1AC1Ev(%struct.A* noalias %[[AVar:.*]])
|
||||
// CHECK-NEXT: call void @_ZN1AD1Ev(%struct.A* %[[AVar]])
|
||||
// CHECK-NEXT: call void @_ZN5coro112promise_type11return_voidEv(%"struct.coro1::promise_type"*
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace test0 {
|
|||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[BYREF_A]], [[BYREF_A]]* [[V]], i32 0, i32 6
|
||||
// CHECK-NEXT: store i8* getelementptr inbounds ([3 x i8], [3 x i8]* [[LAYOUT0]], i32 0, i32 0), i8** [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[BYREF_A]], [[BYREF_A]]* [[V]], i32 0, i32 7
|
||||
// CHECK-NEXT: call void @_ZN5test01AC1Ev([[A]]* [[T0]])
|
||||
// CHECK-NEXT: call void @_ZN5test01AC1Ev([[A]]* noalias [[T0]])
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[BYREF_A]], [[BYREF_A]]* [[V]], i32 0, i32 7
|
||||
// CHECK: bitcast [[BYREF_A]]* [[V]] to i8*
|
||||
// CHECK: [[T1:%.*]] = bitcast [[BYREF_A]]* [[V]] to i8*
|
||||
|
@ -45,7 +45,7 @@ namespace test0 {
|
|||
// CHECK-NEXT: load
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast i8* {{.*}} to [[BYREF_A]]*
|
||||
// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_A]], [[BYREF_A]]* [[T2]], i32 0, i32 7
|
||||
// CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* [[T1]], [[A]]* dereferenceable({{[0-9]+}}) [[T3]])
|
||||
// CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* noalias [[T1]], [[A]]* dereferenceable({{[0-9]+}}) [[T3]])
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// CHECK: define internal void [[DISPOSE_HELPER]](
|
||||
|
@ -86,13 +86,13 @@ namespace test1 {
|
|||
|
||||
// CHECK: %[[V11:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK_SOURCE]], i32 0, i32 8
|
||||
// CHECK: %[[V12:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK_DEST]], i32 0, i32 8
|
||||
// CHECK: invoke void @_ZN5test12S0C1ERKS0_(%[[STRUCT_TEST1_S0]]* %[[V12]], %[[STRUCT_TEST1_S0]]* dereferenceable(4) %[[V11]])
|
||||
// CHECK: invoke void @_ZN5test12S0C1ERKS0_(%[[STRUCT_TEST1_S0]]* noalias %[[V12]], %[[STRUCT_TEST1_S0]]* dereferenceable(4) %[[V11]])
|
||||
// CHECK: to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
|
||||
|
||||
// CHECK: [[INVOKE_CONT]]:
|
||||
// CHECK: %[[V13:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK_SOURCE]], i32 0, i32 9
|
||||
// CHECK: %[[V14:.*]] = getelementptr inbounds <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>, <{ i8*, i32, i32, i8*, %[[STRUCT_BLOCK_DESCRIPTOR]]*, i8*, i8*, i8*, %[[STRUCT_TEST1_S0]], %[[STRUCT_TEST1_S0]], %[[STRUCT_TRIVIAL_INTERNAL]] }>* %[[BLOCK_DEST]], i32 0, i32 9
|
||||
// CHECK: invoke void @_ZN5test12S0C1ERKS0_(%[[STRUCT_TEST1_S0]]* %[[V14]], %[[STRUCT_TEST1_S0]]* dereferenceable(4) %[[V13]])
|
||||
// CHECK: invoke void @_ZN5test12S0C1ERKS0_(%[[STRUCT_TEST1_S0]]* noalias %[[V14]], %[[STRUCT_TEST1_S0]]* dereferenceable(4) %[[V13]])
|
||||
// CHECK: to label %[[INVOKE_CONT4:.*]] unwind label %[[LPAD3:.*]]
|
||||
|
||||
// CHECK: [[INVOKE_CONT4]]:
|
||||
|
|
|
@ -41,7 +41,7 @@ void f(D d) {
|
|||
D d2(d);
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* noalias %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||
// CHECK: call void @_ZN1AC1Ev
|
||||
// CHECK: call void @_ZN1CC2ERS_1A
|
||||
// CHECK: call void @_ZN1AD1Ev
|
||||
|
|
|
@ -81,7 +81,7 @@ void testParamStrongWeak(StrongWeak a) {
|
|||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_STRONGWEAK]], align 8
|
||||
// CHECK: store %[[STRUCT_STRONGWEAK]]* %[[A]], %[[STRUCT_STRONGWEAK]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[V0:.*]] = load %[[STRUCT_STRONGWEAK]]*, %[[STRUCT_STRONGWEAK]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONGWEAK]]* @_ZN10StrongWeakC1ERKS_(%[[STRUCT_STRONGWEAK]]* %[[AGG_TMP]], %[[STRUCT_STRONGWEAK]]* dereferenceable(16) %[[V0]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONGWEAK]]* @_ZN10StrongWeakC1ERKS_(%[[STRUCT_STRONGWEAK]]* noalias %[[AGG_TMP]], %[[STRUCT_STRONGWEAK]]* dereferenceable(16) %[[V0]])
|
||||
// CHECK: call void @_Z19testParamStrongWeak10StrongWeak(%[[STRUCT_STRONGWEAK]]* %[[AGG_TMP]])
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
@ -94,7 +94,7 @@ void testCallStrongWeak(StrongWeak *a) {
|
|||
// CHECK: %[[A_ADDR:.*]] = alloca %[[STRUCT_STRONGWEAK]]*, align 8
|
||||
// CHECK: store %[[STRUCT_STRONGWEAK]]* %[[A]], %[[STRUCT_STRONGWEAK]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[V0:.*]] = load %[[STRUCT_STRONGWEAK]]*, %[[STRUCT_STRONGWEAK]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONGWEAK]]* @_ZN10StrongWeakC1ERKS_(%[[STRUCT_STRONGWEAK]]* %[[AGG_RESULT]], %[[STRUCT_STRONGWEAK]]* dereferenceable(16) %[[V0]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONGWEAK]]* @_ZN10StrongWeakC1ERKS_(%[[STRUCT_STRONGWEAK]]* noalias %[[AGG_RESULT]], %[[STRUCT_STRONGWEAK]]* dereferenceable(16) %[[V0]])
|
||||
// CHECK: ret void
|
||||
|
||||
StrongWeak testReturnStrongWeak(StrongWeak *a) {
|
||||
|
@ -131,7 +131,7 @@ void testParamStrong(Strong a) {
|
|||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_STRONG]], align 8
|
||||
// CHECK: store %[[STRUCT_STRONG]]* %[[A]], %[[STRUCT_STRONG]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[V0:.*]] = load %[[STRUCT_STRONG]]*, %[[STRUCT_STRONG]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONG]]* @_ZN6StrongC1ERKS_(%[[STRUCT_STRONG]]* %[[AGG_TMP]], %[[STRUCT_STRONG]]* dereferenceable(8) %[[V0]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONG]]* @_ZN6StrongC1ERKS_(%[[STRUCT_STRONG]]* noalias %[[AGG_TMP]], %[[STRUCT_STRONG]]* dereferenceable(8) %[[V0]])
|
||||
// CHECK: %[[COERCE_DIVE:.*]] = getelementptr inbounds %[[STRUCT_STRONG]], %[[STRUCT_STRONG]]* %[[AGG_TMP]], i32 0, i32 0
|
||||
// CHECK: %[[V1:.*]] = load i8*, i8** %[[COERCE_DIVE]], align 8
|
||||
// CHECK: %[[COERCE_VAL_PI:.*]] = ptrtoint i8* %[[V1]] to i64
|
||||
|
@ -147,7 +147,7 @@ void testCallStrong(Strong *a) {
|
|||
// CHECK: %[[A_ADDR:.*]] = alloca %[[STRUCT_STRONG]]*, align 8
|
||||
// CHECK: store %[[STRUCT_STRONG]]* %[[A]], %[[STRUCT_STRONG]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[V0:.*]] = load %[[STRUCT_STRONG]]*, %[[STRUCT_STRONG]]** %[[A_ADDR]], align 8
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONG]]* @_ZN6StrongC1ERKS_(%[[STRUCT_STRONG]]* %[[RETVAL]], %[[STRUCT_STRONG]]* dereferenceable(8) %[[V0]])
|
||||
// CHECK: %[[CALL:.*]] = call %[[STRUCT_STRONG]]* @_ZN6StrongC1ERKS_(%[[STRUCT_STRONG]]* noalias %[[RETVAL]], %[[STRUCT_STRONG]]* dereferenceable(8) %[[V0]])
|
||||
// CHECK: %[[COERCE_DIVE:.*]] = getelementptr inbounds %[[STRUCT_STRONG]], %[[STRUCT_STRONG]]* %[[RETVAL]], i32 0, i32 0
|
||||
// CHECK: %[[V1:.*]] = load i8*, i8** %[[COERCE_DIVE]], align 8
|
||||
// CHECK: %[[COERCE_VAL_PI:.*]] = ptrtoint i8* %[[V1]] to i64
|
||||
|
|
|
@ -22,8 +22,8 @@ struct S1 {
|
|||
// CHECK: %{{.*}} = alloca %
|
||||
// CHECK: %[[AGG_TMP:.*]] = alloca %[[STRUCT_S1:.*]], align
|
||||
// CHECK: %[[AGG_TMP_1:.*]] = alloca %[[STRUCT_S0:.*]], align
|
||||
// CHECK: call void @_ZN2S0C1Ev(%[[STRUCT_S0]]* %[[AGG_TMP_1]])
|
||||
// CHECK: call void @_ZN2S1C1E2S0(%[[STRUCT_S1]]* %[[AGG_TMP]], %[[STRUCT_S0]]* %[[AGG_TMP_1]])
|
||||
// CHECK: call void @_ZN2S0C1Ev(%[[STRUCT_S0]]* noalias %[[AGG_TMP_1]])
|
||||
// CHECK: call void @_ZN2S1C1E2S0(%[[STRUCT_S1]]* noalias %[[AGG_TMP]], %[[STRUCT_S0]]* %[[AGG_TMP_1]])
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %[[STRUCT_S1]]*)*)(i8* %{{.*}}, i8* %{{.*}}, %[[STRUCT_S1]]* %[[AGG_TMP]])
|
||||
|
||||
void test0(C *c) {
|
||||
|
@ -33,7 +33,7 @@ void test0(C *c) {
|
|||
// CHECK: define void @_Z5test1P1C(
|
||||
// CHECK: %{{.*}} = alloca %
|
||||
// CHECK: %[[TEMP_LVALUE:.*]] = alloca %[[STRUCT_S1:.*]], align
|
||||
// CHECK: call void @_ZN2S1C1Ev(%[[STRUCT_S1]]* %[[TEMP_LVALUE]])
|
||||
// CHECK: call void @_ZN2S1C1Ev(%[[STRUCT_S1]]* noalias %[[TEMP_LVALUE]])
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %[[STRUCT_S1]]*)*)(i8* %{{.*}}, i8* %{{.*}}, %[[STRUCT_S1]]* %[[TEMP_LVALUE]])
|
||||
|
||||
void test1(C *c) {
|
||||
|
|
|
@ -33,7 +33,7 @@ struct TCPPObject
|
|||
// CHECK: [[TWO:%.*]] = load %struct.TCPPObject*, %struct.TCPPObject** [[ADDR:%.*]], align 8
|
||||
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject*, %struct.TCPPObject** [[ADDR1:%.*]], align 8
|
||||
// CHECK: [[CALL:%.*]] = call i32 @_Z7DEFAULTv()
|
||||
// CHECK: call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}}) [[THREE]], i32 [[CALL]])
|
||||
// CHECK: call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject* noalias [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}}) [[THREE]], i32 [[CALL]])
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define internal void @"\01-[MyDocument MyProperty]"(
|
||||
|
|
|
@ -60,7 +60,7 @@ struct CGRect {
|
|||
@end
|
||||
|
||||
// CHECK-LABEL: define i32 @main
|
||||
// CHECK: call void @_ZN1SC1ERKS_(%class.S* [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* dereferenceable({{[0-9]+}}) {{%[a-zA-Z0-9\.]+}})
|
||||
// CHECK: call void @_ZN1SC1ERKS_(%class.S* noalias [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* dereferenceable({{[0-9]+}}) {{%[a-zA-Z0-9\.]+}})
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %class.S*)*)(i8* {{%[a-zA-Z0-9\.]+}}, i8* {{%[a-zA-Z0-9\.]+}}, %class.S* [[AGGTMP]])
|
||||
// CHECK-NEXT: ret i32 0
|
||||
int main() {
|
||||
|
@ -72,8 +72,8 @@ int main() {
|
|||
|
||||
// rdar://8379892
|
||||
// CHECK-LABEL: define void @_Z1fP1A
|
||||
// CHECK: call void @_ZN1XC1Ev(%struct.X* [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
||||
// CHECK: call void @_ZN1XC1ERKS_(%struct.X* [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* dereferenceable({{[0-9]+}}) [[LVTEMP]])
|
||||
// CHECK: call void @_ZN1XC1Ev(%struct.X* noalias [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
||||
// CHECK: call void @_ZN1XC1ERKS_(%struct.X* noalias [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* dereferenceable({{[0-9]+}}) [[LVTEMP]])
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* [[AGGTMP]])
|
||||
struct X {
|
||||
X();
|
||||
|
|
|
@ -25,7 +25,7 @@ void parallel_atomic_ewc() {
|
|||
St s;
|
||||
#pragma omp parallel
|
||||
{
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* noalias [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||
// CHECK: [[SCALAR_VAL:%.+]] = load atomic i32, i32* [[SCALAR_ADDR]] monotonic
|
||||
// CHECK: store i32 [[SCALAR_VAL]], i32* @b
|
||||
|
@ -33,14 +33,14 @@ void parallel_atomic_ewc() {
|
|||
// CHECK11: call void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||
#pragma omp atomic read
|
||||
b = St().get();
|
||||
// CHECK-DAG: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK-DAG: invoke void @_ZN2StC1Ev(%struct.St* noalias [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK-DAG: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||
// CHECK-DAG: [[B_VAL:%.+]] = load i32, i32* @b
|
||||
// CHECK: store atomic i32 [[B_VAL]], i32* [[SCALAR_ADDR]] monotonic
|
||||
// CHECK: {{invoke|call}} void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||
#pragma omp atomic write
|
||||
St().get() = b;
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* noalias [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||
// CHECK: [[B_VAL:%.+]] = load i32, i32* @b
|
||||
// CHECK: [[OLD_VAL:%.+]] = load atomic i32, i32* [[SCALAR_ADDR]] monotonic,
|
||||
|
@ -60,7 +60,7 @@ void parallel_atomic_ewc() {
|
|||
St().get() %= b;
|
||||
#pragma omp atomic
|
||||
s.field++;
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* noalias [[TEMP_ST_ADDR:%.+]])
|
||||
// CHECK: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||
// CHECK: [[B_VAL:%.+]] = load i32, i32* @b
|
||||
// CHECK: [[OLD_VAL:%.+]] = load atomic i32, i32* [[SCALAR_ADDR]] monotonic,
|
||||
|
|
|
@ -159,7 +159,7 @@ int main() {
|
|||
|
||||
// CHECK: define internal {{.*}}void [[REGION]](
|
||||
// CHECK: [[SSS_PRIV:%.+]] = alloca %struct.SSS,
|
||||
// CHECK: invoke {{.*}} @_ZN3SSSIiEC1Ev(%struct.SSS* [[SSS_PRIV]])
|
||||
// CHECK: invoke {{.*}} @_ZN3SSSIiEC1Ev(%struct.SSS* noalias [[SSS_PRIV]])
|
||||
// CHECK-NOT: {{call |invoke }}
|
||||
// CHECK: call {{.*}}i32 @__kmpc_reduce_nowait(
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
// CHECK-DAG: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (%struct.S** [[STAT_REF]] to i8*)],
|
||||
|
||||
// CHECK-DAG: define {{.*}}i32 @{{.*}}{{foo|bar|baz2|baz3|FA|f_method}}{{.*}}()
|
||||
// CHECK-DAG: define {{.*}}void @{{.*}}TemplateClass{{.*}}(%class.TemplateClass* %{{.*}})
|
||||
// CHECK-DAG: define {{.*}}void @{{.*}}TemplateClass{{.*}}(%class.TemplateClass* noalias %{{.*}})
|
||||
// CHECK-DAG: define {{.*}}i32 @{{.*}}TemplateClass{{.*}}f_method{{.*}}(%class.TemplateClass* %{{.*}})
|
||||
// CHECK-DAG: define {{.*}}void @__omp_offloading__{{.*}}_globals_l[[@LINE+63]]_ctor()
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue