summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/nrvo.cpp
diff options
context:
space:
mode:
authorTaiju Tsuiki <tzik@google.com>2018-06-19 05:35:30 +0000
committerTaiju Tsuiki <tzik@google.com>2018-06-19 05:35:30 +0000
commit3be68e162ffbf992c2efbc70983d27c05739a8b0 (patch)
treece47a7000d746109fb539ef4741b57eea3295118 /clang/test/CodeGenCXX/nrvo.cpp
parentea798aa7f596060d4be4e3c6bcadcda77a63829e (diff)
downloadbcm5719-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.cpp51
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 }
OpenPOWER on IntegriCloud