diff options
author | Taiju Tsuiki <tzik@google.com> | 2018-06-19 05:35:30 +0000 |
---|---|---|
committer | Taiju Tsuiki <tzik@google.com> | 2018-06-19 05:35:30 +0000 |
commit | 3be68e162ffbf992c2efbc70983d27c05739a8b0 (patch) | |
tree | ce47a7000d746109fb539ef4741b57eea3295118 /clang/test/CodeGenCXX/nrvo.cpp | |
parent | ea798aa7f596060d4be4e3c6bcadcda77a63829e (diff) | |
download | bcm5719-llvm-3be68e162ffbf992c2efbc70983d27c05739a8b0.tar.gz bcm5719-llvm-3be68e162ffbf992c2efbc70983d27c05739a8b0.zip |
Revert r335019 "Update NRVO logic to support early return (Attempt 2)"
llvm-svn: 335022
Diffstat (limited to 'clang/test/CodeGenCXX/nrvo.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/nrvo.cpp | 51 |
1 files changed, 7 insertions, 44 deletions
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 } |