diff options
Diffstat (limited to 'clang/test/CodeGenCXX')
-rw-r--r-- | clang/test/CodeGenCXX/destructors.cpp | 9 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/nrvo.cpp | 15 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/unnamed-object-lifetime.cpp | 18 |
3 files changed, 13 insertions, 29 deletions
diff --git a/clang/test/CodeGenCXX/destructors.cpp b/clang/test/CodeGenCXX/destructors.cpp index ac2a30ea5c0..bc9a683be5d 100644 --- a/clang/test/CodeGenCXX/destructors.cpp +++ b/clang/test/CodeGenCXX/destructors.cpp @@ -280,8 +280,6 @@ namespace test5 { // CHECK5: [[ELEMS:%.*]] = alloca [5 x [[A:%.*]]], align // CHECK5-NEXT: [[EXN:%.*]] = alloca i8* // CHECK5-NEXT: [[SEL:%.*]] = alloca i32 - // CHECK5-NEXT: [[PELEMS:%.*]] = bitcast [5 x [[A]]]* [[ELEMS]] to i8* - // CHECK5-NEXT: call void @llvm.lifetime.start(i64 5, i8* [[PELEMS]]) // CHECK5-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [5 x [[A]]]* [[ELEMS]], i32 0, i32 0 // CHECK5-NEXT: [[END:%.*]] = getelementptr inbounds [[A]]* [[BEGIN]], i64 5 // CHECK5-NEXT: br label @@ -290,8 +288,7 @@ namespace test5 { // CHECK5-NEXT: invoke void @_ZN5test51AD1Ev([[A]]* [[ELT]]) // CHECK5: [[T0:%.*]] = icmp eq [[A]]* [[ELT]], [[BEGIN]] // CHECK5-NEXT: br i1 [[T0]], - // CHECK5: call void @llvm.lifetime.end - // CHECK5-NEXT: ret void + // CHECK5: ret void // lpad // CHECK5: [[EMPTY:%.*]] = icmp eq [[A]]* [[BEGIN]], [[ELT]] // CHECK5-NEXT: br i1 [[EMPTY]] @@ -408,9 +405,7 @@ namespace test9 { f1<int>(); f2(); } - - // CHECK5-LABEL: define void @_ZN5test93barEv( - // CHECK5: invoke void @_ZN5test97ArgTypeD1Ev(%"struct.test9::ArgType"* % + // CHECK5: call void @_ZN5test97ArgTypeD1Ev(%"struct.test9::ArgType"* % // CHECK5: call void @_ZN5test92f2Ev() } diff --git a/clang/test/CodeGenCXX/nrvo.cpp b/clang/test/CodeGenCXX/nrvo.cpp index bc184e5c5ee..aad287dc320 100644 --- a/clang/test/CodeGenCXX/nrvo.cpp +++ b/clang/test/CodeGenCXX/nrvo.cpp @@ -54,22 +54,16 @@ X test2(bool B) { return x; // CHECK: call {{.*}} @_ZN1XC1Ev - // CHECK-NEXT: {{.*}} getelementptr inbounds %class.X* %y, i32 0, i32 0 - // CHECK-NEXT: call void @llvm.lifetime.start // CHECK-NEXT: call {{.*}} @_ZN1XC1Ev // CHECK: call {{.*}} @_ZN1XC1ERKS_ // CHECK: call {{.*}} @_ZN1XC1ERKS_ // CHECK: call {{.*}} @_ZN1XD1Ev - // CHECK-NEXT: call void @llvm.lifetime.end // CHECK: call {{.*}} @_ZN1XD1Ev - // CHECK-NEXT: call void @llvm.lifetime.end // CHECK: ret void // The block ordering in the -fexceptions IR is unfortunate. - // CHECK-EH: call void @llvm.lifetime.start - // CHECK-EH-NEXT: call {{.*}} @_ZN1XC1Ev - // CHECK-EH: call void @llvm.lifetime.start + // CHECK-EH: call {{.*}} @_ZN1XC1Ev // CHECK-EH-NEXT: invoke {{.*}} @_ZN1XC1Ev // -> %invoke.cont, %lpad @@ -102,9 +96,7 @@ X test2(bool B) { // -> %invoke.cont11, %lpad // %invoke.cont11: normal cleanup for 'x' - // CHECK-EH: call void @llvm.lifetime.end - // CHECK-EH-NEXT: call {{.*}} @_ZN1XD1Ev - // CHECK-EH-NEXT: call void @llvm.lifetime.end + // CHECK-EH: call {{.*}} @_ZN1XD1Ev // CHECK-EH-NEXT: ret void // %eh.cleanup: EH cleanup for 'x' @@ -176,12 +168,9 @@ X test6() { X a __attribute__((aligned(8))); return a; // CHECK: [[A:%.*]] = alloca [[X:%.*]], align 8 - // CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds %class.X* [[A]], i32 0, i32 0 - // CHECK-NEXT: call void @llvm.lifetime.start(i64 1, i8* [[PTR]]) // CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* [[A]]) // CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]* dereferenceable({{[0-9]+}}) [[A]]) // CHECK-NEXT: call {{.*}} @_ZN1XD1Ev([[X]]* [[A]]) - // CHECK-NEXT: call void @llvm.lifetime.end(i64 1, i8* [[PTR]]) // CHECK-NEXT: ret void } diff --git a/clang/test/CodeGenCXX/unnamed-object-lifetime.cpp b/clang/test/CodeGenCXX/unnamed-object-lifetime.cpp index a90cd158ddd..22a64bcd4d5 100644 --- a/clang/test/CodeGenCXX/unnamed-object-lifetime.cpp +++ b/clang/test/CodeGenCXX/unnamed-object-lifetime.cpp @@ -6,7 +6,7 @@ struct X { X(); ~X(); - char t[33]; + char t[33]; // make the class big enough so that lifetime markers get inserted }; extern void useX(const X &); @@ -118,18 +118,18 @@ struct Z { extern void useZ(const Z &); -// Check lifetime markers are inserted even if the unnamed object is small -// CHECK-LABEL: define void @_Z11notTooSmallv -// CHECK-EH-LABEL: define void @_Z11notTooSmallv -void notTooSmall() { - // CHECK: call void @llvm.lifetime.start +// Check lifetime markers are not inserted if the unnamed object is too small +// CHECK-LABEL: define void @_Z8tooSmallv +// CHECK-EH-LABEL: define void @_Z8tooSmallv +void tooSmall() { + // CHECK-NOT: call void @llvm.lifetime.start // CHECK: call void @_Z4useZRK1Z - // CHECK: call void @llvm.lifetime.end + // CHECK-NOT: call void @llvm.lifetime.end // CHECK: ret // - // CHECK-EH: call void @llvm.lifetime.start + // CHECK-EH-NOT: call void @llvm.lifetime.start // CHECK-EH: invoke void @_Z4useZRK1Z - // CHECK-EH: call void @llvm.lifetime.end + // CHECK-EH-NOT: call void @llvm.lifetime.end // CHECK-EH: ret useZ(Z()); } |