Skip to content

Commit 5a6644d

Browse files
committed
Align NRVO test with the SYCL compiler FE after 3587b15
1 parent 94913b8 commit 5a6644d

File tree

1 file changed

+89
-69
lines changed

1 file changed

+89
-69
lines changed

clang/test/CodeGenCXX/nrvo.cpp

Lines changed: 89 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,30 +1117,37 @@ X test15(bool b) { // http://wg21.link/p2025r2#ex-15
11171117
// CHECK-EH-11-NEXT: entry:
11181118
// CHECK-EH-11-NEXT: [[X:%.*]] = alloca [[CLASS_X:%.*]], align 1
11191119
// CHECK-EH-11-NEXT: [[AGG_TMP:%.*]] = alloca [[CLASS_X]], align 1
1120+
// CHECK-EH-11-NEXT: [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 4
11201121
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X]], i32 0, i32 0
11211122
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
11221123
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X]])
1123-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP]], %class.X* noundef nonnull align 1 dereferenceable(1) [[X]])
1124+
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = bitcast %class.anon* [[REF_TMP]] to i8*
1125+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull [[TMP1]]) #[[ATTR7]]
1126+
// CHECK-EH-11-NEXT: [[TMP2:%.*]] = getelementptr inbounds [[CLASS_ANON]], %class.anon* [[REF_TMP]], i32 0, i32 0
1127+
// CHECK-EH-11-NEXT: store %class.X* [[X]], %class.X** [[TMP2]], align 4, !tbaa [[TBAA3:![0-9]+]]
1128+
// CHECK-EH-11-NEXT: invoke fastcc void @"_ZZ6test16vENK3$_0clEv"(%class.X* nonnull sret([[CLASS_X]]) align 1 [[AGG_TMP]], %class.anon* noundef nonnull align 4 dereferenceable(4) [[REF_TMP]])
11241129
// CHECK-EH-11-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
11251130
// CHECK-EH-11: invoke.cont:
11261131
// CHECK-EH-11-NEXT: invoke void @_Z8ConsumeX1X(%class.X* noundef nonnull [[AGG_TMP]])
11271132
// CHECK-EH-11-NEXT: to label [[INVOKE_CONT2:%.*]] unwind label [[LPAD1:%.*]]
11281133
// CHECK-EH-11: invoke.cont2:
11291134
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP]]) #[[ATTR7]]
1135+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull [[TMP1]]) #[[ATTR7]]
11301136
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X]]) #[[ATTR7]]
11311137
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
11321138
// CHECK-EH-11-NEXT: ret void
11331139
// CHECK-EH-11: lpad:
1134-
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
1140+
// CHECK-EH-11-NEXT: [[TMP3:%.*]] = landingpad { i8*, i32 }
11351141
// CHECK-EH-11-NEXT: cleanup
11361142
// CHECK-EH-11-NEXT: br label [[EHCLEANUP:%.*]]
11371143
// CHECK-EH-11: lpad1:
1138-
// CHECK-EH-11-NEXT: [[TMP2:%.*]] = landingpad { i8*, i32 }
1144+
// CHECK-EH-11-NEXT: [[TMP4:%.*]] = landingpad { i8*, i32 }
11391145
// CHECK-EH-11-NEXT: cleanup
11401146
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP]]) #[[ATTR7]]
11411147
// CHECK-EH-11-NEXT: br label [[EHCLEANUP]]
11421148
// CHECK-EH-11: ehcleanup:
1143-
// CHECK-EH-11-NEXT: [[DOTPN:%.*]] = phi { i8*, i32 } [ [[TMP2]], [[LPAD1]] ], [ [[TMP1]], [[LPAD]] ]
1149+
// CHECK-EH-11-NEXT: [[DOTPN:%.*]] = phi { i8*, i32 } [ [[TMP4]], [[LPAD1]] ], [ [[TMP3]], [[LPAD]] ]
1150+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull [[TMP1]]) #[[ATTR7]]
11441151
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X]]) #[[ATTR7]]
11451152
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
11461153
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[DOTPN]]
@@ -1505,7 +1512,7 @@ X test18(int i) { // http://wg21.link/p2025r2#ex-11
15051512
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_RESULT:%.*]])
15061513
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[L]], i32 0, i32 0
15071514
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1508-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[L]])
1515+
// CHECK-EH-11-NEXT: invoke fastcc void @"_ZZ6test19vENK3$_1clEv"(%class.X* nonnull sret([[CLASS_X]]) align 1 [[L]])
15091516
// CHECK-EH-11-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
15101517
// CHECK-EH-11: invoke.cont:
15111518
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[L]]) #[[ATTR7]]
@@ -1542,44 +1549,51 @@ X test20() { // http://wg21.link/p2025r2#ex-18
15421549

15431550
// CHECK-EH-11-LABEL: @_Z17test20instantiatev(
15441551
// CHECK-EH-11-NEXT: entry:
1545-
// CHECK-EH-11-NEXT: [[X_I2:%.*]] = alloca [[CLASS_X:%.*]], align 1
1546-
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X]], align 1
1547-
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED:%.*]] = alloca [[CLASS_X]], align 1
1552+
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED:%.*]] = alloca [[CLASS_X:%.*]], align 1
15481553
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED1:%.*]] = alloca [[CLASS_X]], align 1
1554+
// CHECK-EH-11-NEXT: call void @_Z6test20ILb1EE1Xv(%class.X* nonnull sret([[CLASS_X]]) align 1 [[AGG_TMP_ENSURED]])
1555+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) #[[ATTR7]]
1556+
// CHECK-EH-11-NEXT: call void @_Z6test20ILb0EE1Xv(%class.X* nonnull sret([[CLASS_X]]) align 1 [[AGG_TMP_ENSURED1]])
1557+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]]) #[[ATTR7]]
1558+
// CHECK-EH-11-NEXT: ret void
1559+
1560+
// CHECK-EH-11: @_Z6test20ILb1EE1Xv
1561+
// CHECK-EH-11-NEXT: entry:
1562+
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X:%.*]], align 1
15491563
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I]], i32 0, i32 0
1550-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !6
1551-
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]), !noalias !6
1552-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1553-
// CHECK-EH-11-NEXT: to label [[_Z6TEST20ILB1EE1XV_EXIT:%.*]] unwind label [[LPAD_I:%.*]]
1554-
// CHECK-EH-11: common.resume:
1555-
// CHECK-EH-11-NEXT: [[COMMON_RESUME_OP:%.*]] = phi { i8*, i32 } [ [[TMP1:%.*]], [[LPAD_I]] ], [ [[TMP3:%.*]], [[LPAD_I3:%.*]] ]
1556-
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[COMMON_RESUME_OP]]
1557-
// CHECK-EH-11: lpad.i:
1558-
// CHECK-EH-11-NEXT: [[TMP1]] = landingpad { i8*, i32 }
1564+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1565+
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1566+
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) %agg.result, %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1567+
// CHECK-EH-11-NEXT: to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
1568+
// CHECK-EH-11: [[INVOKE_CONT]]:
1569+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1570+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1571+
// CHECK-EH-11-NEXT: ret void
1572+
// CHECK-EH-11: [[LPAD]]:
1573+
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
15591574
// CHECK-EH-11-NEXT: cleanup
15601575
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1561-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !6
1562-
// CHECK-EH-11-NEXT: br label [[COMMON_RESUME:%.*]]
1563-
// CHECK-EH-11: _Z6test20ILb1EE1Xv.exit:
1576+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1577+
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[TMP1]]
1578+
1579+
// CHECK-EH-11: @_Z6test20ILb0EE1Xv
1580+
// CHECK-EH-11-NEXT: entry:
1581+
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X:%.*]], align 1
1582+
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I]], i32 0, i32 0
1583+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1584+
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1585+
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) %agg.result, %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1586+
// CHECK-EH-11-NEXT: to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
1587+
// CHECK-EH-11: [[INVOKE_CONT]]:
15641588
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1565-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !6
1566-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) #[[ATTR7]]
1567-
// CHECK-EH-11-NEXT: [[TMP2:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I2]], i32 0, i32 0
1568-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !9
1569-
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]), !noalias !9
1570-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]], %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]])
1571-
// CHECK-EH-11-NEXT: to label [[_Z6TEST20ILB0EE1XV_EXIT:%.*]] unwind label [[LPAD_I3]]
1572-
// CHECK-EH-11: lpad.i3:
1573-
// CHECK-EH-11-NEXT: [[TMP3]] = landingpad { i8*, i32 }
1574-
// CHECK-EH-11-NEXT: cleanup
1575-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]) #[[ATTR7]]
1576-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !9
1577-
// CHECK-EH-11-NEXT: br label [[COMMON_RESUME]]
1578-
// CHECK-EH-11: _Z6test20ILb0EE1Xv.exit:
1579-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]) #[[ATTR7]]
1580-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !9
1581-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]]) #[[ATTR7]]
1589+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
15821590
// CHECK-EH-11-NEXT: ret void
1591+
// CHECK-EH-11: [[LPAD]]:
1592+
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
1593+
// CHECK-EH-11-NEXT: cleanup
1594+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1595+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1596+
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[TMP1]]
15831597
//
15841598
void test20instantiate() {
15851599
test20<true>();
@@ -1778,44 +1792,50 @@ X test25() {
17781792

17791793
// CHECK-EH-11-LABEL: @_Z17test25instantiatev(
17801794
// CHECK-EH-11-NEXT: entry:
1781-
// CHECK-EH-11-NEXT: [[X_I2:%.*]] = alloca [[CLASS_X:%.*]], align 1
1782-
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X]], align 1
1783-
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED:%.*]] = alloca [[CLASS_X]], align 1
1795+
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED:%.*]] = alloca [[CLASS_X:%.*]], align 1
17841796
// CHECK-EH-11-NEXT: [[AGG_TMP_ENSURED1:%.*]] = alloca [[CLASS_X]], align 1
1797+
// CHECK-EH-11-NEXT: call void @_Z6test25ILb1EE1Xv(%class.X* nonnull sret([[CLASS_X]]) align 1 [[AGG_TMP_ENSURED]])
1798+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) #[[ATTR7]]
1799+
// CHECK-EH-11-NEXT: call void @_Z6test25ILb0EE1Xv(%class.X* nonnull sret([[CLASS_X]]) align 1 [[AGG_TMP_ENSURED1]])
1800+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]]) #[[ATTR7]]
1801+
//
1802+
// CHECK-EH-11: @_Z6test25ILb1EE1Xv
1803+
// CHECK-EH-11-NEXT: entry:
1804+
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X:%.*]], align 1
17851805
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I]], i32 0, i32 0
1786-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !12
1787-
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]), !noalias !12
1788-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]], %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1789-
// CHECK-EH-11-NEXT: to label [[_Z6TEST25ILB1EE1XV_EXIT:%.*]] unwind label [[LPAD_I:%.*]]
1790-
// CHECK-EH-11: common.resume:
1791-
// CHECK-EH-11-NEXT: [[COMMON_RESUME_OP:%.*]] = phi { i8*, i32 } [ [[TMP1:%.*]], [[LPAD_I]] ], [ [[TMP3:%.*]], [[LPAD_I3:%.*]] ]
1792-
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[COMMON_RESUME_OP]]
1793-
// CHECK-EH-11: lpad.i:
1794-
// CHECK-EH-11-NEXT: [[TMP1]] = landingpad { i8*, i32 }
1806+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1807+
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1808+
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1ERKS_(%class.X* noundef nonnull align 1 dereferenceable(1) %agg.result, %class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1809+
// CHECK-EH-11-NEXT: to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
1810+
// CHECK-EH-11: [[INVOKE_CONT]]:
1811+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1812+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1813+
// CHECK-EH-11-NEXT: ret void
1814+
// CHECK-EH-11: [[LPAD]]:
1815+
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
17951816
// CHECK-EH-11-NEXT: cleanup
17961817
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1797-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !12
1798-
// CHECK-EH-11-NEXT: br label [[COMMON_RESUME:%.*]]
1799-
// CHECK-EH-11: _Z6test25ILb1EE1Xv.exit:
1818+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1819+
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[TMP1]]
1820+
//
1821+
// CHECK-EH-11: @_Z6test25ILb0EE1Xv
1822+
// CHECK-EH-11-NEXT: entry:
1823+
// CHECK-EH-11-NEXT: [[X_I:%.*]] = alloca [[CLASS_X:%.*]], align 1
1824+
// CHECK-EH-11-NEXT: [[TMP0:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I]], i32 0, i32 0
1825+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1826+
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]])
1827+
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) %agg.result)
1828+
// CHECK-EH-11-NEXT: to label %[[INVOKE_CONT:.*]] unwind label %[[LPAD:.*]]
1829+
// CHECK-EH-11: [[INVOKE_CONT]]:
18001830
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1801-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]], !noalias !12
1802-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED]]) #[[ATTR7]]
1803-
// CHECK-EH-11-NEXT: [[TMP2:%.*]] = getelementptr inbounds [[CLASS_X]], %class.X* [[X_I2]], i32 0, i32 0
1804-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !15
1805-
// CHECK-EH-11-NEXT: call void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]), !noalias !15
1806-
// CHECK-EH-11-NEXT: invoke void @_ZN1XC1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]])
1807-
// CHECK-EH-11-NEXT: to label [[_Z6TEST25ILB0EE1XV_EXIT:%.*]] unwind label [[LPAD_I3]]
1808-
// CHECK-EH-11: lpad.i3:
1809-
// CHECK-EH-11-NEXT: [[TMP3]] = landingpad { i8*, i32 }
1810-
// CHECK-EH-11-NEXT: cleanup
1811-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]) #[[ATTR7]]
1812-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !15
1813-
// CHECK-EH-11-NEXT: br label [[COMMON_RESUME]]
1814-
// CHECK-EH-11: _Z6test25ILb0EE1Xv.exit:
1815-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I2]]) #[[ATTR7]]
1816-
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP2]]) #[[ATTR7]], !noalias !15
1817-
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[AGG_TMP_ENSURED1]]) #[[ATTR7]]
1831+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
18181832
// CHECK-EH-11-NEXT: ret void
1833+
// CHECK-EH-11: [[LPAD]]:
1834+
// CHECK-EH-11-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
1835+
// CHECK-EH-11-NEXT: cleanup
1836+
// CHECK-EH-11-NEXT: call void @_ZN1XD1Ev(%class.X* noundef nonnull align 1 dereferenceable(1) [[X_I]]) #[[ATTR7]]
1837+
// CHECK-EH-11-NEXT: call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]]) #[[ATTR7]]
1838+
// CHECK-EH-11-NEXT: resume { i8*, i32 } [[TMP1]]
18191839
//
18201840
void test25instantiate() {
18211841
test25<true>();

0 commit comments

Comments
 (0)