Skip to content

Commit d5022d9

Browse files
authored
[SystemZ][z/OS] Make z/OS personality function known (#89679)
This change adds the z/OS personality function to the list of known EH personality functions. It enables removing of the EH data/labels if the personality function is not invoked.
1 parent 74cab54 commit d5022d9

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

llvm/include/llvm/IR/EHPersonalities.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ enum class EHPersonality {
3232
CoreCLR,
3333
Rust,
3434
Wasm_CXX,
35-
XL_CXX
35+
XL_CXX,
36+
ZOS_CXX,
3637
};
3738

3839
/// See if the given exception handling personality function is one

llvm/lib/IR/EHPersonalities.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ EHPersonality llvm::classifyEHPersonality(const Value *Pers) {
4242
.Case("rust_eh_personality", EHPersonality::Rust)
4343
.Case("__gxx_wasm_personality_v0", EHPersonality::Wasm_CXX)
4444
.Case("__xlcxx_personality_v1", EHPersonality::XL_CXX)
45+
.Case("__zos_cxx_personality_v2", EHPersonality::ZOS_CXX)
4546
.Default(EHPersonality::Unknown);
4647
}
4748

@@ -73,6 +74,8 @@ StringRef llvm::getEHPersonalityName(EHPersonality Pers) {
7374
return "__gxx_wasm_personality_v0";
7475
case EHPersonality::XL_CXX:
7576
return "__xlcxx_personality_v1";
77+
case EHPersonality::ZOS_CXX:
78+
return "__zos_cxx_personality_v2";
7679
case EHPersonality::Unknown:
7780
llvm_unreachable("Unknown EHPersonality!");
7881
}

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3972,6 +3972,7 @@ static bool isCatchAll(EHPersonality Personality, Constant *TypeInfo) {
39723972
case EHPersonality::CoreCLR:
39733973
case EHPersonality::Wasm_CXX:
39743974
case EHPersonality::XL_CXX:
3975+
case EHPersonality::ZOS_CXX:
39753976
return TypeInfo->isNullValue();
39763977
}
39773978
llvm_unreachable("invalid enum");
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
; RUN: llc -mtriple s390x-ibm-zos < %s | FileCheck %s
2+
3+
define signext i32 @_Z9computeitv() personality ptr @__zos_cxx_personality_v2 {
4+
ret i32 0
5+
}
6+
7+
declare i32 @__zos_cxx_personality_v2(...)
8+
9+
; The personality function is unused, therefore check that it is not referenced.
10+
; There should also be no exception table.
11+
; CHECK-NOT: __zos_cxx_personality_v2
12+
; CHECK-NOT: GCC_except_table

0 commit comments

Comments
 (0)