diff options
Diffstat (limited to 'clang/test/CodeGenCXX')
-rw-r--r-- | clang/test/CodeGenCXX/nrvo-noopt.cpp | 58 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/nrvo.cpp | 51 |
2 files changed, 7 insertions, 102 deletions
diff --git a/clang/test/CodeGenCXX/nrvo-noopt.cpp b/clang/test/CodeGenCXX/nrvo-noopt.cpp deleted file mode 100644 index 46da7cd013b..00000000000 --- a/clang/test/CodeGenCXX/nrvo-noopt.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s - -struct X { - X(); - X(X&&); -}; - -// CHECK-LABEL: define void @_Z7test_00b -X test_00(bool b) { - if (b) { - // CHECK-NOT: call void @_ZN1XC1EOS_ - // CHECK: call void @_ZN1XC1Ev - // CHECK-NEXT: br label %return - X x; - return x; - } else { - // CHECK-NOT: call void @_ZN1XC1EOS_ - // CHECK: call void @_ZN1XC1Ev - // CHECK-NEXT: br label %return - X x; - return x; - } -} - -// CHECK-LABEL: define void @_Z7test_01b -X test_01(bool b) { - if (b) { - // CHECK-NOT: call void @_ZN1XC1EOS_ - // CHECK: call void @_ZN1XC1Ev - // CHECK-NEXT: br label %return - X x; - return x; - } - // CHECK-NOT: call void @_ZN1XC1EOS_ - // CHECK: call void @_ZN1XC1Ev - // CHECK-NEXT: br label %return - X x; - return x; -} - -// CHECK-LABEL: define void @_Z7test_02b -X test_02(bool b) { - // CHECK: call void @_ZN1XC1Ev - X x; - - if (b) { - // CHECK-NOT: call void @_ZN1XC1EOS_ - // CHECK: call void @_ZN1XC1Ev - // CHECK-NEXT: br label %return - X y; - return y; - } - - // CHECK-NOT: call void @_ZN1XC1Ev - // CHECK: call void @_ZN1XC1EOS_ - // CHECK-NEXT: br label %return - return x; -} diff --git a/clang/test/CodeGenCXX/nrvo.cpp b/clang/test/CodeGenCXX/nrvo.cpp index 1da4308e26b..0f359b9c900 100644 --- a/clang/test/CodeGenCXX/nrvo.cpp +++ b/clang/test/CodeGenCXX/nrvo.cpp @@ -130,13 +130,17 @@ X test2(bool B) { } // CHECK-LABEL: define void @_Z5test3b -X test3(bool B, X x) { +X test3(bool B) { // CHECK: tail call {{.*}} @_ZN1XC1Ev + // CHECK-NOT: call {{.*}} @_ZN1XC1ERKS_ + // CHECK: call {{.*}} @_ZN1XC1Ev + // CHECK: call {{.*}} @_ZN1XC1ERKS_ if (B) { X y; return y; } - // CHECK: tail call {{.*}} @_ZN1XC1ERKS_ + // FIXME: we should NRVO this variable too. + X x; return x; } @@ -187,13 +191,9 @@ X test6() { } // CHECK-LABEL: define void @_Z5test7b -// CHECK-EH-LABEL: define void @_Z5test7b X test7(bool b) { // CHECK: tail call {{.*}} @_ZN1XC1Ev // CHECK-NEXT: ret - - // CHECK-EH: tail call {{.*}} @_ZN1XC1Ev - // CHECK-EH-NEXT: ret if (b) { X x; return x; @@ -202,14 +202,10 @@ X test7(bool b) { } // CHECK-LABEL: define void @_Z5test8b -// CHECK-EH-LABEL: define void @_Z5test8b X test8(bool b) { // CHECK: tail call {{.*}} @_ZN1XC1Ev // CHECK-NEXT: ret - - // CHECK-EH: tail call {{.*}} @_ZN1XC1Ev - // CHECK-EH-NEXT: ret -if (b) { + if (b) { X x; return x; } else { @@ -225,37 +221,4 @@ Y<int> test9() { // CHECK-LABEL: define linkonce_odr void @_ZN1YIiE1fEv // CHECK: tail call {{.*}} @_ZN1YIiEC1Ev -// CHECK-LABEL: define void @_Z6test10b -X test10(bool B, X x) { - if (B) { - // CHECK: tail call {{.*}} @_ZN1XC1ERKS_ - // CHECK-EH: tail call {{.*}} @_ZN1XC1ERKS_ - return x; - } - // CHECK: tail call {{.*}} @_ZN1XC1Ev - // CHECK-NOT: call {{.*}} @_ZN1XC1ERKS_ - - // CHECK-EH: tail call {{.*}} @_ZN1XC1Ev - // CHECK-EH-NOT: call {{.*}} @_ZN1XC1ERKS_ - X y; - return y; -} - -// CHECK-LABEL: define {{.*}} void @_Z6test11I1XET_v -// CHECK-EH-LABEL: define {{.*}} void @_Z6test11I1XET_v -template <typename T> -T test11() { - // CHECK: tail call {{.*}} @_ZN1XC1Ev - // CHECK-NEXT: ret void - - // CHECK-EH: tail call {{.*}} @_ZN1XC1Ev - // CHECK-EH-NEXT: ret void - T t; - return t; -} - -void test12() { - test11<X>(); -} - // CHECK-EH-03: attributes [[NR_NUW]] = { noreturn nounwind } |