Why do we even need ExceptionHandling? Can't this be inferred from the personality routine (+ maybe the triple)?<br><br>On Thursday, May 19, 2016, Saleem Abdulrasool via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: compnerd<br>
Date: Thu May 19 22:39:28 2016<br>
New Revision: 270178<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=270178&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=270178&view=rev</a><br>
Log:<br>
Target: move the EH enumeration and add option<br>
<br>
Move the ExceptionHandling enumeration into TargetOptions and introduce a field<br>
to track the desired exception model. This will allow us to set the exception<br>
model from the frontend (needed to optionally use SjLj EH on other targets where<br>
zero-cost is available and preferred).<br>
<br>
Modified:<br>
llvm/trunk/include/llvm/MC/MCAsmInfo.h<br>
llvm/trunk/include/llvm/Target/TargetOptions.h<br>
<br>
Modified: llvm/trunk/include/llvm/MC/MCAsmInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=270178&r1=270177&r2=270178&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=270178&r1=270177&r2=270178&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/MC/MCAsmInfo.h (original)<br>
+++ llvm/trunk/include/llvm/MC/MCAsmInfo.h Thu May 19 22:39:28 2016<br>
@@ -16,6 +16,7 @@<br>
#ifndef LLVM_MC_MCASMINFO_H<br>
#define LLVM_MC_MCASMINFO_H<br>
<br>
+#include "llvm/Target/TargetOptions.h"<br>
#include "llvm/MC/MCDirectives.h"<br>
#include "llvm/MC/MCDwarf.h"<br>
#include <cassert><br>
@@ -41,14 +42,6 @@ enum class EncodingType {<br>
};<br>
}<br>
<br>
-enum class ExceptionHandling {<br>
- None, /// No exception support<br>
- DwarfCFI, /// DWARF-like instruction based exceptions<br>
- SjLj, /// setjmp/longjmp based exceptions<br>
- ARM, /// ARM EHABI<br>
- WinEH, /// Windows Exception Handling<br>
-};<br>
-<br>
namespace LCOMM {<br>
enum LCOMMType { NoAlignment, ByteAlignment, Log2Alignment };<br>
}<br>
<br>
Modified: llvm/trunk/include/llvm/Target/TargetOptions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=270178&r1=270177&r2=270178&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=270178&r1=270177&r2=270178&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetOptions.h (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetOptions.h Thu May 19 22:39:28 2016<br>
@@ -88,6 +88,14 @@ namespace llvm {<br>
SCE // Tune debug info for SCE targets (e.g. PS4).<br>
};<br>
<br>
+ enum class ExceptionHandling {<br>
+ None, /// No exception support<br>
+ DwarfCFI, /// DWARF-like instruction based exceptions<br>
+ SjLj, /// setjmp/longjmp based exceptions<br>
+ ARM, /// ARM EHABI<br>
+ WinEH, /// Windows Exception Handling<br>
+ };<br>
+<br>
class TargetOptions {<br>
public:<br>
TargetOptions()<br>
@@ -95,14 +103,15 @@ namespace llvm {<br>
UnsafeFPMath(false), NoInfsFPMath(false), NoNaNsFPMath(false),<br>
HonorSignDependentRoundingFPMathOption(false), NoZerosInBSS(false),<br>
GuaranteedTailCallOpt(false), StackAlignmentOverride(0),<br>
- StackSymbolOrdering(true), EnableFastISel(false),<br>
- UseInitArray(false), DisableIntegratedAS(false),<br>
- CompressDebugSections(false), FunctionSections(false),<br>
- DataSections(false), UniqueSectionNames(true), TrapUnreachable(false),<br>
- EmulatedTLS(false), FloatABIType(FloatABI::Default),<br>
+ StackSymbolOrdering(true), EnableFastISel(false), UseInitArray(false),<br>
+ DisableIntegratedAS(false), CompressDebugSections(false),<br>
+ FunctionSections(false), DataSections(false),<br>
+ UniqueSectionNames(true), TrapUnreachable(false), EmulatedTLS(false),<br>
+ FloatABIType(FloatABI::Default),<br>
AllowFPOpFusion(FPOpFusion::Standard), Reciprocals(TargetRecip()),<br>
JTType(JumpTable::Single), ThreadModel(ThreadModel::POSIX),<br>
- EABIVersion(EABI::Default), DebuggerTuning(DebuggerKind::Default) {}<br>
+ EABIVersion(EABI::Default), DebuggerTuning(DebuggerKind::Default),<br>
+ ExceptionModel(ExceptionHandling::None) {}<br>
<br>
/// PrintMachineCode - This flag is enabled when the -print-machineinstrs<br>
/// option is specified on the command line, and should enable debugging<br>
@@ -246,6 +255,9 @@ namespace llvm {<br>
/// Which debugger to tune for.<br>
DebuggerKind DebuggerTuning;<br>
<br>
+ /// What exception model to use<br>
+ ExceptionHandling ExceptionModel;<br>
+<br>
/// Machine level options.<br>
MCTargetOptions MCOptions;<br>
};<br>
@@ -275,6 +287,7 @@ inline bool operator==(const TargetOptio<br>
ARE_EQUAL(ThreadModel) &&<br>
ARE_EQUAL(EABIVersion) &&<br>
ARE_EQUAL(DebuggerTuning) &&<br>
+ ARE_EQUAL(ExceptionModel) &&<br>
ARE_EQUAL(MCOptions);<br>
#undef ARE_EQUAL<br>
}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="javascript:;" onclick="_e(event, 'cvml', 'llvm-commits@lists.llvm.org')">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote>