@@ -1192,3 +1192,182 @@ false:
11921192
11931193 ret void
11941194}
1195+
1196+ @exception = external hidden constant { ptr , ptr , ptr }
1197+
1198+ define noundef i32 @call_with_no_ret (i32 %in ) personality ptr @__gxx_personality_v0 {
1199+ ; ENABLE-LABEL: call_with_no_ret:
1200+ ; ENABLE: Lfunc_begin0:
1201+ ; ENABLE-NEXT: .cfi_startproc
1202+ ; ENABLE-NEXT: .cfi_personality 155, ___gxx_personality_v0
1203+ ; ENABLE-NEXT: .cfi_lsda 16, Lexception0
1204+ ; ENABLE-NEXT: ; %bb.0: ; %entry
1205+ ; ENABLE-NEXT: cmp w0, #1
1206+ ; ENABLE-NEXT: b.eq LBB15_2
1207+ ; ENABLE-NEXT: ; %bb.1: ; %exit
1208+ ; ENABLE-NEXT: mov w0, wzr
1209+ ; ENABLE-NEXT: ret
1210+ ; ENABLE-NEXT: LBB15_2: ; %setup
1211+ ; ENABLE-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
1212+ ; ENABLE-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1213+ ; ENABLE-NEXT: add x29, sp, #16
1214+ ; ENABLE-NEXT: .cfi_def_cfa w29, 16
1215+ ; ENABLE-NEXT: .cfi_offset w30, -8
1216+ ; ENABLE-NEXT: .cfi_offset w29, -16
1217+ ; ENABLE-NEXT: .cfi_offset w19, -24
1218+ ; ENABLE-NEXT: .cfi_offset w20, -32
1219+ ; ENABLE-NEXT: mov w0, #32 ; =0x20
1220+ ; ENABLE-NEXT: bl ___cxa_allocate_exception
1221+ ; ENABLE-NEXT: Ltmp0: ; EH_LABEL
1222+ ; ENABLE-NEXT: bl _construct_exception
1223+ ; ENABLE-NEXT: Ltmp1: ; EH_LABEL
1224+ ; ENABLE-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1225+ ; ENABLE-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
1226+ ; ENABLE-NEXT: ; %bb.3: ; %throw
1227+ ; ENABLE-NEXT: Lloh0:
1228+ ; ENABLE-NEXT: adrp x2, _destruct_exception@GOTPAGE
1229+ ; ENABLE-NEXT: Lloh1:
1230+ ; ENABLE-NEXT: ldr x2, [x2, _destruct_exception@GOTPAGEOFF]
1231+ ; ENABLE-NEXT: Lloh2:
1232+ ; ENABLE-NEXT: adrp x1, _exception@PAGE
1233+ ; ENABLE-NEXT: Lloh3:
1234+ ; ENABLE-NEXT: add x1, x1, _exception@PAGEOFF
1235+ ; ENABLE-NEXT: mov x0, x19
1236+ ; ENABLE-NEXT: bl ___cxa_throw
1237+ ; ENABLE-NEXT: LBB15_4: ; %teardown
1238+ ; ENABLE-NEXT: Ltmp2: ; EH_LABEL
1239+ ; ENABLE-NEXT: mov x20, x0
1240+ ; ENABLE-NEXT: mov x0, x19
1241+ ; ENABLE-NEXT: bl ___cxa_free_exception
1242+ ; ENABLE-NEXT: mov x0, x20
1243+ ; ENABLE-NEXT: bl __Unwind_Resume
1244+ ; ENABLE-NEXT: .loh AdrpAdd Lloh2, Lloh3
1245+ ; ENABLE-NEXT: .loh AdrpLdrGot Lloh0, Lloh1
1246+ ; ENABLE-NEXT: Lfunc_end0:
1247+ ; ENABLE-NEXT: .cfi_endproc
1248+ ; ENABLE-NEXT: .section __TEXT,__gcc_except_tab
1249+ ; ENABLE-NEXT: .p2align 2, 0x0
1250+ ; ENABLE-NEXT: GCC_except_table15:
1251+ ; ENABLE-NEXT: Lexception0:
1252+ ; ENABLE-NEXT: .byte 255 ; @LPStart Encoding = omit
1253+ ; ENABLE-NEXT: .byte 255 ; @TType Encoding = omit
1254+ ; ENABLE-NEXT: .byte 1 ; Call site Encoding = uleb128
1255+ ; ENABLE-NEXT: .uleb128 Lcst_end0-Lcst_begin0
1256+ ; ENABLE-NEXT: Lcst_begin0:
1257+ ; ENABLE-NEXT: .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
1258+ ; ENABLE-NEXT: .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and Ltmp0
1259+ ; ENABLE-NEXT: .byte 0 ; has no landing pad
1260+ ; ENABLE-NEXT: .byte 0 ; On action: cleanup
1261+ ; ENABLE-NEXT: .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
1262+ ; ENABLE-NEXT: .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
1263+ ; ENABLE-NEXT: .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
1264+ ; ENABLE-NEXT: .byte 0 ; On action: cleanup
1265+ ; ENABLE-NEXT: .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
1266+ ; ENABLE-NEXT: .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
1267+ ; ENABLE-NEXT: .byte 0 ; has no landing pad
1268+ ; ENABLE-NEXT: .byte 0 ; On action: cleanup
1269+ ; ENABLE-NEXT: Lcst_end0:
1270+ ; ENABLE-NEXT: .p2align 2, 0x0
1271+ ;
1272+ ; DISABLE-LABEL: call_with_no_ret:
1273+ ; DISABLE: Lfunc_begin0:
1274+ ; DISABLE-NEXT: .cfi_startproc
1275+ ; DISABLE-NEXT: .cfi_personality 155, ___gxx_personality_v0
1276+ ; DISABLE-NEXT: .cfi_lsda 16, Lexception0
1277+ ; DISABLE-NEXT: ; %bb.0: ; %entry
1278+ ; DISABLE-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
1279+ ; DISABLE-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
1280+ ; DISABLE-NEXT: add x29, sp, #16
1281+ ; DISABLE-NEXT: .cfi_def_cfa w29, 16
1282+ ; DISABLE-NEXT: .cfi_offset w30, -8
1283+ ; DISABLE-NEXT: .cfi_offset w29, -16
1284+ ; DISABLE-NEXT: .cfi_offset w19, -24
1285+ ; DISABLE-NEXT: .cfi_offset w20, -32
1286+ ; DISABLE-NEXT: cmp w0, #1
1287+ ; DISABLE-NEXT: b.eq LBB15_2
1288+ ; DISABLE-NEXT: ; %bb.1: ; %exit
1289+ ; DISABLE-NEXT: mov w0, wzr
1290+ ; DISABLE-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
1291+ ; DISABLE-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
1292+ ; DISABLE-NEXT: ret
1293+ ; DISABLE-NEXT: LBB15_2: ; %setup
1294+ ; DISABLE-NEXT: mov w0, #32 ; =0x20
1295+ ; DISABLE-NEXT: bl ___cxa_allocate_exception
1296+ ; DISABLE-NEXT: mov x19, x0
1297+ ; DISABLE-NEXT: Ltmp0: ; EH_LABEL
1298+ ; DISABLE-NEXT: bl _construct_exception
1299+ ; DISABLE-NEXT: Ltmp1: ; EH_LABEL
1300+ ; DISABLE-NEXT: ; %bb.3: ; %throw
1301+ ; DISABLE-NEXT: Lloh0:
1302+ ; DISABLE-NEXT: adrp x2, _destruct_exception@GOTPAGE
1303+ ; DISABLE-NEXT: Lloh1:
1304+ ; DISABLE-NEXT: ldr x2, [x2, _destruct_exception@GOTPAGEOFF]
1305+ ; DISABLE-NEXT: Lloh2:
1306+ ; DISABLE-NEXT: adrp x1, _exception@PAGE
1307+ ; DISABLE-NEXT: Lloh3:
1308+ ; DISABLE-NEXT: add x1, x1, _exception@PAGEOFF
1309+ ; DISABLE-NEXT: mov x0, x19
1310+ ; DISABLE-NEXT: bl ___cxa_throw
1311+ ; DISABLE-NEXT: LBB15_4: ; %teardown
1312+ ; DISABLE-NEXT: Ltmp2: ; EH_LABEL
1313+ ; DISABLE-NEXT: mov x20, x0
1314+ ; DISABLE-NEXT: mov x0, x19
1315+ ; DISABLE-NEXT: bl ___cxa_free_exception
1316+ ; DISABLE-NEXT: mov x0, x20
1317+ ; DISABLE-NEXT: bl __Unwind_Resume
1318+ ; DISABLE-NEXT: .loh AdrpAdd Lloh2, Lloh3
1319+ ; DISABLE-NEXT: .loh AdrpLdrGot Lloh0, Lloh1
1320+ ; DISABLE-NEXT: Lfunc_end0:
1321+ ; DISABLE-NEXT: .cfi_endproc
1322+ ; DISABLE-NEXT: .section __TEXT,__gcc_except_tab
1323+ ; DISABLE-NEXT: .p2align 2, 0x0
1324+ ; DISABLE-NEXT: GCC_except_table15:
1325+ ; DISABLE-NEXT: Lexception0:
1326+ ; DISABLE-NEXT: .byte 255 ; @LPStart Encoding = omit
1327+ ; DISABLE-NEXT: .byte 255 ; @TType Encoding = omit
1328+ ; DISABLE-NEXT: .byte 1 ; Call site Encoding = uleb128
1329+ ; DISABLE-NEXT: .uleb128 Lcst_end0-Lcst_begin0
1330+ ; DISABLE-NEXT: Lcst_begin0:
1331+ ; DISABLE-NEXT: .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
1332+ ; DISABLE-NEXT: .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and Ltmp0
1333+ ; DISABLE-NEXT: .byte 0 ; has no landing pad
1334+ ; DISABLE-NEXT: .byte 0 ; On action: cleanup
1335+ ; DISABLE-NEXT: .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
1336+ ; DISABLE-NEXT: .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
1337+ ; DISABLE-NEXT: .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
1338+ ; DISABLE-NEXT: .byte 0 ; On action: cleanup
1339+ ; DISABLE-NEXT: .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
1340+ ; DISABLE-NEXT: .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
1341+ ; DISABLE-NEXT: .byte 0 ; has no landing pad
1342+ ; DISABLE-NEXT: .byte 0 ; On action: cleanup
1343+ ; DISABLE-NEXT: Lcst_end0:
1344+ ; DISABLE-NEXT: .p2align 2, 0x0
1345+ entry:
1346+ %cmp = icmp eq i32 %in , 1
1347+ br i1 %cmp , label %setup , label %exit
1348+
1349+ setup:
1350+ %exception = tail call ptr @__cxa_allocate_exception (i64 32 ) nounwind
1351+ %call = invoke noundef ptr @construct_exception (ptr noundef nonnull %exception ) to label %throw unwind label %teardown
1352+
1353+ throw:
1354+ tail call void @__cxa_throw (ptr nonnull %exception , ptr nonnull @exception , ptr nonnull @destruct_exception ) noreturn
1355+ unreachable
1356+
1357+ teardown:
1358+ %caught = landingpad { ptr , i32 } cleanup
1359+ tail call void @__cxa_free_exception (ptr nonnull %exception ) nounwind
1360+ resume { ptr , i32 } %caught
1361+
1362+ exit:
1363+ ret i32 0
1364+ }
1365+
1366+ declare i32 @__gxx_personality_v0 (...)
1367+
1368+ declare ptr @__cxa_allocate_exception (i64 ) local_unnamed_addr
1369+ declare void @__cxa_free_exception (ptr ) local_unnamed_addr
1370+ declare void @__cxa_throw (ptr , ptr , ptr ) local_unnamed_addr cold noreturn
1371+
1372+ declare noundef ptr @construct_exception (ptr noundef nonnull returned ) unnamed_addr
1373+ declare noundef ptr @destruct_exception (ptr noundef nonnull returned ) unnamed_addr mustprogress nounwind ssp uwtable (sync)
0 commit comments