#===- enumerations.py - Python LLVM Enumerations -------------*- python -*--===#
#
#                     The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#

r"""
LLVM Enumerations
=================

This file defines enumerations from LLVM.

Each enumeration is exposed as a list of 2-tuples. These lists are consumed by
dedicated types elsewhere in the package. The enumerations are centrally
defined in this file so they are easier to locate and maintain.
"""

__all__ = [
    'Attributes',
    'OpCodes',
    'TypeKinds',
    'Linkages',
    'Visibility',
    'CallConv',
    'IntPredicate',
    'RealPredicate',
    'LandingPadClauseTy',
]

Attributes = [
    ('ZExt', 1 << 0),
    ('MSExt', 1 << 1),
    ('NoReturn', 1 << 2),
    ('InReg', 1 << 3),
    ('StructRet', 1 << 4),
    ('NoUnwind', 1 << 5),
    ('NoAlias', 1 << 6),
    ('ByVal', 1 << 7),
    ('Nest', 1 << 8),
    ('ReadNone', 1 << 9),
    ('ReadOnly', 1 << 10),
    ('NoInline', 1 << 11),
    ('AlwaysInline', 1 << 12),
    ('OptimizeForSize', 1 << 13),
    ('StackProtect', 1 << 14),
    ('StackProtectReq', 1 << 15),
    ('Alignment', 31 << 16),
    ('NoCapture', 1 << 21),
    ('NoRedZone', 1 << 22),
    ('ImplicitFloat', 1 << 23),
    ('Naked', 1 << 24),
    ('InlineHint', 1 << 25),
    ('StackAlignment', 7 << 26),
    ('Retur
nsTwice', 1 << 29),
    ('UWTable', 1 << 30),
    ('NonLazyBind', 1 << 31),
]

OpCodes = [
    ('Ret', 1),
    ('Br', 2),
    ('Switch', 3),
    ('IndirectBr', 4),
    ('Inv
oke', 5),
    ('Unreachable', 7),
    ('Add', 8),
    ('FAdd', 9),
    ('Sub', 10),
    ('FSub', 11),
    ('Mul', 12),
    ('FMul', 13),
    ('UDiv', 14),
    ('SDiv', 15),
    ('FDiv', 16),
    ('URem', 17),
    ('SRem', 18),
    ('FRem', 19),
    ('Shl', 20),
    ('LShr', 21),
    ('AShr', 22),
    ('And', 23),
    ('Or', 24),
    ('Xor', 25),
    ('Alloca', 26),
    ('Load', 27),
    ('Store', 28),
    ('GetElementPtr', 29),
    ('Trunc', 30),
    ('ZExt', 31),
    ('SExt', 32),
    ('FPToUI', 33),
    ('FPToSI', 34),
    ('UIToFP', 35),
    ('SIToFP', 36),
    ('FPTrunc', 37),
    ('FPExt', 38),
    ('PtrToInt', 39),
    ('IntToPtr', 40),
    ('BitCast', 41),
    ('ICmp', 42),
    ('FCmpl', 43),
    ('PHI', 44),
    ('Call', 45),
    ('Select', 46),
    ('UserOp1', 47),
    ('UserOp2', 48),
    ('AArg', 49),
    ('ExtractElement', 50),
    ('InsertElement', 51),
    ('ShuffleVector', 52),
    ('ExtractValue', 53),
    ('InsertValue', 54),
    ('Fence', 55),
    ('AtomicCmpXchg', 56),
    ('AtomicRMW', 57),
    ('Resume', 58),
    ('LandingPad', 59),
]

TypeKinds = [
    ('Void', 0),
    ('Half', 1),
    ('Float', 2),
    ('Double', 3),
    ('X86_FP80', 4),
    ('FP128', 5),
    ('PPC_FP128', 6),
    ('Label', 7),
    ('Integer', 8),
    ('Function', 9),
    ('Struct', 10),
    ('Array', 11),
    ('Pointer', 12),
    ('Vector', 13),
    ('Metadata', 14),
    ('X86_MMX', 15),
]

Linkages = [
    ('External', 0),
    ('AvailableExternally', 1),
    ('LinkOnceAny', 2),
    ('LinkOnceODR', 3),
    ('WeakAny', 4),
    ('WeakODR', 5),
    ('Appending', 6),
    ('Internal', 7),
    ('Private', 8),
    ('DLLImport', 9),
    ('DLLExport', 10),
    ('ExternalWeak', 11),
    ('Ghost', 12),
    ('Common', 13),
    ('LinkerPrivate', 14),
    ('LinkerPrivateWeak', 15),
    ('LinkerPrivateWeakDefAuto', 16),
]

Visibility = [
    ('Default', 0),
    ('Hidden', 1),
    ('Protected', 2),
]

CallConv = [
    ('CCall', 0),
    ('FastCall', 8),
    ('ColdCall', 9),
    ('X86StdcallCall', 64),
    ('X86FastcallCall', 65),
]

IntPredicate = [
    ('EQ', 32),
    ('NE', 33),
    ('UGT', 34),
    ('UGE', 35),
    ('ULT', 36),
    ('ULE', 37),
    ('SGT', 38),
    ('SGE', 39),
    ('SLT', 40),
    ('SLE', 41),
]

RealPredicate = [
    ('PredicateFalse', 0),
    ('OEQ', 1),
    ('OGT', 2),
    ('OGE', 3),
    ('OLT', 4),
    ('OLE', 5),
    ('ONE', 6),
    ('ORD', 7),
    ('UNO', 8),
    ('UEQ', 9),
    ('UGT', 10),
    ('UGE', 11),
    ('ULT', 12),
    ('ULE', 13),
    ('UNE', 14),
    ('PredicateTrue', 15),
]

LandingPadClauseTy = [
    ('Catch', 0),
    ('Filter', 1),
]
