[llvm] r270178 - Target: move the EH enumeration and add option

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Sat May 21 09:16:11 PDT 2016


On Fri, May 20, 2016 at 10:22 PM, David Majnemer <david.majnemer at gmail.com>
wrote:

>
>
> 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.
>

Oh, but thats exactly the reason for this change.  The frontend can now
pass along whether SjLj exceptions are desired (via -fsjlj-exceptions).
This will then be passed to the backend explicitly.  Currently, we assume
that only a single exception model exists on a target, and this generalizes
it to permit different ones on a per-target basis.


>   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() ?
>

Sorry, I meant target lowering, not TLI.  The  DAG is not provided to the
constructor.  Furthermore, it seems that there is a means to do something
explicitly rather than trying to infer it from patterns.  Why the
preference for the patterns then?

Im afraid that Im still not seeing your concern.  Could you please be a bit
more explicit about it?  Whats the situation that you envision where this
breaks down?


>
>>
>>>
>>> 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
>>
>
>


-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160521/53b038e1/attachment.html>


More information about the llvm-commits mailing list