From 62922d5727caf28dcdef68c5b8e9fe10a9eabd9e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 27 Sep 2005 22:13:36 +0000 Subject: [PATCH] Add a new flag for targets where setjmp/longjmp saves/restores the signal mask, and _setjmp/_longjmp should be used instead (for llvm.setjmp/llvm.longjmp). llvm-svn: 23479 --- include/llvm/Target/TargetLowering.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h index 7c2839176f8..734c8dc0297 100644 --- a/include/llvm/Target/TargetLowering.h +++ b/include/llvm/Target/TargetLowering.h @@ -100,7 +100,7 @@ public: assert(RC && "This value type is not natively supported!"); return RC; } - + /// isTypeLegal - Return true if the target has native support for the /// specified value type. This means that it has a register that directly /// holds it without promotions or expansions. @@ -218,6 +218,12 @@ public: /// @brief Determine if the target supports unaligned memory accesses. bool allowsUnalignedMemoryAccesses() const { return allowUnalignedMemoryAccesses; } + + /// usesUnderscoreSetJmpLongJmp - Determine if we should use _setjmp or setjmp + /// to implement llvm.setjmp. + bool usesUnderscoreSetJmpLongJmp() const { + return UseUnderscoreSetJmpLongJmp; + } //===--------------------------------------------------------------------===// // TargetLowering Configuration Methods - These methods should be invoked by @@ -244,6 +250,13 @@ protected: ShiftAmtHandling = OORSA; } + /// setUseUnderscoreSetJmpLongJmp - Indicate whether this target prefers to + /// use _setjmp and _longjmp to or implement llvm.setjmp/llvm.longjmp or + /// the non _ versions. Defaults to false. + void setUseUnderscoreSetJmpLongJmp(bool Val) { + UseUnderscoreSetJmpLongJmp = Val; + } + /// setSetCCIxExpensive - This is a short term hack for targets that codegen /// setcc as a conditional branch. This encourages the code generator to fold /// setcc operations into other operations if possible. @@ -379,6 +392,10 @@ private: /// SetCCResultContents - Information about the contents of the high-bits in /// the result of a setcc comparison operation. SetCCResultValue SetCCResultContents; + + /// UseUnderscoreSetJmpLongJmp - This target prefers to use _setjmp and + /// _longjmp to implement llvm.setjmp/llvm.longjmp. Defaults to false. + bool UseUnderscoreSetJmpLongJmp; /// RegClassForVT - This indicates the default register class to use for /// each ValueType the target supports natively.