[llvm] r270178 - Target: move the EH enumeration and add option
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Fri May 20 22:22:42 PDT 2016
On Fri, May 20, 2016 at 8:07 PM, Saleem Abdulrasool <compnerd at compnerd.org>
wrote:
> On Fri, May 20, 2016 at 12:02 AM, David Majnemer <david.majnemer at gmail.com
> > wrote:
>
>> Why do we even need ExceptionHandling? Can't this be inferred from the
>> personality routine (+ maybe the triple)?
>
>
> Well, I just need to know if SjLj is in use. If your argument is on the
> extra bits, I can shrink it to 1 bit. The triple won't tell us the
> exception model when zero cost is available and preferable.
>
My concern is that you won't be able to support modules with both SjLj and
zero-cost exceptions.
> Pulling it from the personality feels less than ideal, and not always
> possible (like in TLI which cares since the Unwind interfaces are
> different).
>
Why? Can't TLI just do:
DAG.getMachineFunction().getFunction()->getPersonalityFn() ?
>
>
>>
>> On Thursday, May 19, 2016, Saleem Abdulrasool via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: compnerd
>>> Date: Thu May 19 22:39:28 2016
>>> New Revision: 270178
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=270178&view=rev
>>> Log:
>>> Target: move the EH enumeration and add option
>>>
>>> Move the ExceptionHandling enumeration into TargetOptions and introduce
>>> a field
>>> to track the desired exception model. This will allow us to set the
>>> exception
>>> model from the frontend (needed to optionally use SjLj EH on other
>>> targets where
>>> zero-cost is available and preferred).
>>>
>>> Modified:
>>> llvm/trunk/include/llvm/MC/MCAsmInfo.h
>>> llvm/trunk/include/llvm/Target/TargetOptions.h
>>>
>>> Modified: llvm/trunk/include/llvm/MC/MCAsmInfo.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=270178&r1=270177&r2=270178&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/MC/MCAsmInfo.h (original)
>>> +++ llvm/trunk/include/llvm/MC/MCAsmInfo.h Thu May 19 22:39:28 2016
>>> @@ -16,6 +16,7 @@
>>> #ifndef LLVM_MC_MCASMINFO_H
>>> #define LLVM_MC_MCASMINFO_H
>>>
>>> +#include "llvm/Target/TargetOptions.h"
>>> #include "llvm/MC/MCDirectives.h"
>>> #include "llvm/MC/MCDwarf.h"
>>> #include <cassert>
>>> @@ -41,14 +42,6 @@ enum class EncodingType {
>>> };
>>> }
>>>
>>> -enum class ExceptionHandling {
>>> - None, /// No exception support
>>> - DwarfCFI, /// DWARF-like instruction based exceptions
>>> - SjLj, /// setjmp/longjmp based exceptions
>>> - ARM, /// ARM EHABI
>>> - WinEH, /// Windows Exception Handling
>>> -};
>>> -
>>> namespace LCOMM {
>>> enum LCOMMType { NoAlignment, ByteAlignment, Log2Alignment };
>>> }
>>>
>>> Modified: llvm/trunk/include/llvm/Target/TargetOptions.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=270178&r1=270177&r2=270178&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/Target/TargetOptions.h (original)
>>> +++ llvm/trunk/include/llvm/Target/TargetOptions.h Thu May 19 22:39:28
>>> 2016
>>> @@ -88,6 +88,14 @@ namespace llvm {
>>> SCE // Tune debug info for SCE targets (e.g. PS4).
>>> };
>>>
>>> + enum class ExceptionHandling {
>>> + None, /// No exception support
>>> + DwarfCFI, /// DWARF-like instruction based exceptions
>>> + SjLj, /// setjmp/longjmp based exceptions
>>> + ARM, /// ARM EHABI
>>> + WinEH, /// Windows Exception Handling
>>> + };
>>> +
>>> class TargetOptions {
>>> public:
>>> TargetOptions()
>>> @@ -95,14 +103,15 @@ namespace llvm {
>>> UnsafeFPMath(false), NoInfsFPMath(false), NoNaNsFPMath(false),
>>> HonorSignDependentRoundingFPMathOption(false),
>>> NoZerosInBSS(false),
>>> GuaranteedTailCallOpt(false), StackAlignmentOverride(0),
>>> - StackSymbolOrdering(true), EnableFastISel(false),
>>> - UseInitArray(false), DisableIntegratedAS(false),
>>> - CompressDebugSections(false), FunctionSections(false),
>>> - DataSections(false), UniqueSectionNames(true),
>>> TrapUnreachable(false),
>>> - EmulatedTLS(false), FloatABIType(FloatABI::Default),
>>> + StackSymbolOrdering(true), EnableFastISel(false),
>>> UseInitArray(false),
>>> + DisableIntegratedAS(false), CompressDebugSections(false),
>>> + FunctionSections(false), DataSections(false),
>>> + UniqueSectionNames(true), TrapUnreachable(false),
>>> EmulatedTLS(false),
>>> + FloatABIType(FloatABI::Default),
>>> AllowFPOpFusion(FPOpFusion::Standard),
>>> Reciprocals(TargetRecip()),
>>> JTType(JumpTable::Single), ThreadModel(ThreadModel::POSIX),
>>> - EABIVersion(EABI::Default),
>>> DebuggerTuning(DebuggerKind::Default) {}
>>> + EABIVersion(EABI::Default),
>>> DebuggerTuning(DebuggerKind::Default),
>>> + ExceptionModel(ExceptionHandling::None) {}
>>>
>>> /// PrintMachineCode - This flag is enabled when the
>>> -print-machineinstrs
>>> /// option is specified on the command line, and should enable
>>> debugging
>>> @@ -246,6 +255,9 @@ namespace llvm {
>>> /// Which debugger to tune for.
>>> DebuggerKind DebuggerTuning;
>>>
>>> + /// What exception model to use
>>> + ExceptionHandling ExceptionModel;
>>> +
>>> /// Machine level options.
>>> MCTargetOptions MCOptions;
>>> };
>>> @@ -275,6 +287,7 @@ inline bool operator==(const TargetOptio
>>> ARE_EQUAL(ThreadModel) &&
>>> ARE_EQUAL(EABIVersion) &&
>>> ARE_EQUAL(DebuggerTuning) &&
>>> + ARE_EQUAL(ExceptionModel) &&
>>> ARE_EQUAL(MCOptions);
>>> #undef ARE_EQUAL
>>> }
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160520/b8194ef7/attachment.html>
More information about the llvm-commits
mailing list