[clang] [llvm] [SystemZ] Add support for __builtin_setjmp and __builtin_longjmp (PR #116642)

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 19 15:00:55 PST 2024


================
@@ -4619,6 +4619,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
     // Buffer is a void**.
     Address Buf = EmitPointerWithAlignment(E->getArg(0));
 
+    if (getTarget().getTriple().getArch() == llvm::Triple::systemz) {
+      // Call LLVM's EH setjmp, which is lightweight.
----------------
efriedma-quic wrote:

Hmm.  That's pretty messy.  See also 02269a66b362f1345cc12176f7e2cbc5474d2f02 and faa3abbe39a2b17546387fde04d2822e0402b418 .  I think what happened is that the meaning of the intrinsic was adapted to suit sjlj lowering, and nobody really thought about trying to expose a stable interface to frontends.

I still think it's a bit of a hazard to adjust the semantics of the intrinsic at this point without changing the name.  But there isn't any existing SystemZ bitcode to break, so it might be enough to just update the documentation.

https://github.com/llvm/llvm-project/pull/116642


More information about the llvm-commits mailing list