LLVM  8.0.1
Typedefs | Enumerations
llvm::CallingConv Namespace Reference

CallingConv Namespace - This namespace contains an enum with a value for the well-known calling conventions. More...

Typedefs

using ID = unsigned
 LLVM IR allows to use arbitrary numbers as calling convention identifiers. More...
 

Enumerations

enum  {
  C = 0, Fast = 8, Cold = 9, GHC = 10,
  HiPE = 11, WebKit_JS = 12, AnyReg = 13, PreserveMost = 14,
  PreserveAll = 15, Swift = 16, CXX_FAST_TLS = 17, FirstTargetCC = 64,
  X86_StdCall = 64, X86_FastCall = 65, ARM_APCS = 66, ARM_AAPCS = 67,
  ARM_AAPCS_VFP = 68, MSP430_INTR = 69, X86_ThisCall = 70, PTX_Kernel = 71,
  PTX_Device = 72, SPIR_FUNC = 75, SPIR_KERNEL = 76, Intel_OCL_BI = 77,
  X86_64_SysV = 78, Win64 = 79, X86_VectorCall = 80, HHVM = 81,
  HHVM_C = 82, X86_INTR = 83, AVR_INTR = 84, AVR_SIGNAL = 85,
  AVR_BUILTIN = 86, AMDGPU_VS = 87, AMDGPU_GS = 88, AMDGPU_PS = 89,
  AMDGPU_CS = 90, AMDGPU_KERNEL = 91, X86_RegCall = 92, AMDGPU_HS = 93,
  MSP430_BUILTIN = 94, AMDGPU_LS = 95, AMDGPU_ES = 96, AArch64_VectorCall = 97,
  MaxID = 1023
}
 A set of enums which specify the assigned numeric values for known llvm calling conventions. More...
 

Detailed Description

CallingConv Namespace - This namespace contains an enum with a value for the well-known calling conventions.

Typedef Documentation

◆ ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

Definition at line 25 of file CallingConv.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

A set of enums which specify the assigned numeric values for known llvm calling conventions.

LLVM Calling Convention Representation

Enumerator

C - The default llvm calling convention, compatible with C.

This convention is the only calling convention that supports varargs calls. As with typical C calling conventions, the callee/caller have to tolerate certain amounts of prototype mismatch.

Fast 

Fast - This calling convention attempts to make calls as fast as possible (e.g.

by passing things in registers).

Cold 
GHC 
HiPE 
WebKit_JS 
AnyReg 
PreserveMost 
PreserveAll 
Swift 
CXX_FAST_TLS 
FirstTargetCC 
X86_StdCall 

X86_StdCall - stdcall is the calling conventions mostly used by the Win32 API.

It is basically the same as the C convention with the difference in that the callee is responsible for popping the arguments from the stack.

X86_FastCall 

X86_FastCall - 'fast' analog of X86_StdCall.

Passes first two arguments in ECX:EDX registers, others - via stack. Callee is responsible for stack cleaning.

ARM_APCS 

ARM_APCS - ARM Procedure Calling Standard calling convention (obsolete, but still used on some targets).

ARM_AAPCS 

ARM_AAPCS - ARM Architecture Procedure Calling Standard calling convention (aka EABI).

Soft float variant.

ARM_AAPCS_VFP 

ARM_AAPCS_VFP - Same as ARM_AAPCS, but uses hard floating point ABI.

MSP430_INTR 

MSP430_INTR - Calling convention used for MSP430 interrupt routines.

X86_ThisCall 

X86_ThisCall - Similar to X86_StdCall.

Passes first argument in ECX, others via stack. Callee is responsible for stack cleaning. MSVC uses this by default for methods in its ABI.

PTX_Kernel 

PTX_Kernel - Call to a PTX kernel.

Passes all arguments in parameter space.

PTX_Device 

PTX_Device - Call to a PTX device function.

Passes all arguments in register or parameter space.

SPIR_FUNC 

SPIR_FUNC - Calling convention for SPIR non-kernel device functions.

No lowering or expansion of arguments. Structures are passed as a pointer to a struct with the byval attribute. Functions can only call SPIR_FUNC and SPIR_KERNEL functions. Functions can only have zero or one return values. Variable arguments are not allowed, except for printf. How arguments/return values are lowered are not specified. Functions are only visible to the devices.

SPIR_KERNEL 

SPIR_KERNEL - Calling convention for SPIR kernel functions.

Inherits the restrictions of SPIR_FUNC, except Cannot have non-void return values. Cannot have variable arguments. Can also be called by the host. Is externally visible.

Intel_OCL_BI 

Intel_OCL_BI - Calling conventions for Intel OpenCL built-ins.

X86_64_SysV 

The C convention as specified in the x86-64 supplement to the System V ABI, used on most non-Windows systems.

Win64 

The C convention as implemented on Windows/x86-64 and AArch64.

This convention differs from the more common X86_64_SysV convention in a number of ways, most notably in that XMM registers used to pass arguments are shadowed by GPRs, and vice versa. On AArch64, this is identical to the normal C (AAPCS) calling convention for normal functions, but floats are passed in integer registers to variadic functions.

X86_VectorCall 

MSVC calling convention that passes vectors and vector aggregates in SSE registers.

HHVM 

Calling convention used by HipHop Virtual Machine (HHVM) to perform calls to and from translation cache, and for calling PHP functions.

HHVM calling convention supports tail/sibling call elimination.

HHVM_C 

HHVM calling convention for invoking C/C++ helpers.

X86_INTR 

X86_INTR - x86 hardware interrupt context.

Callee may take one or two parameters, where the 1st represents a pointer to hardware context frame and the 2nd represents hardware error code, the presence of the later depends on the interrupt vector taken. Valid for both 32- and 64-bit subtargets.

AVR_INTR 

Used for AVR interrupt routines.

AVR_SIGNAL 

Calling convention used for AVR signal routines.

AVR_BUILTIN 

Calling convention used for special AVR rtlib functions which have an "optimized" convention to preserve registers.

AMDGPU_VS 

Calling convention used for Mesa vertex shaders, or AMDPAL last shader stage before rasterization (vertex shader if tessellation and geometry are not in use, or otherwise copy shader if one is needed).

AMDGPU_GS 

Calling convention used for Mesa/AMDPAL geometry shaders.

AMDGPU_PS 

Calling convention used for Mesa/AMDPAL pixel shaders.

AMDGPU_CS 

Calling convention used for Mesa/AMDPAL compute shaders.

AMDGPU_KERNEL 

Calling convention for AMDGPU code object kernels.

X86_RegCall 

Register calling convention used for parameters transfer optimization.

AMDGPU_HS 

Calling convention used for Mesa/AMDPAL hull shaders (= tessellation control shaders).

MSP430_BUILTIN 

Calling convention used for special MSP430 rtlib functions which have an "optimized" convention using additional registers.

AMDGPU_LS 

Calling convention used for AMDPAL vertex shader if tessellation is in use.

AMDGPU_ES 

Calling convention used for AMDPAL shader stage before geometry shader if geometry is in use.

So either the domain (= tessellation evaluation) shader if tessellation is in use, or otherwise the vertex shader.

AArch64_VectorCall 
MaxID 

The highest possible calling convention ID. Must be some 2^k - 1.

Definition at line 30 of file CallingConv.h.