mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
611d5e2eda
1. New parameter attribute called 'inreg'. It has meaning "place this parameter in registers, if possible". This is some generalization of gcc's regparm(n) attribute. It's currently used only in X86-32 backend. 2. Completely rewritten CC handling/lowering code inside X86 backend. Merged stdcall + c CCs and fastcall + fast CC. 3. Dropped CSRET CC. We cannot add struct return variant for each target-specific CC (e.g. stdcall + csretcc and so on). 4. Instead of CSRET CC introduced 'sret' parameter attribute. Setting in on first attribute has meaning 'This is hidden pointer to structure return. Handle it gently'. 5. Fixed small bug in llvm-extract + add new feature to FunctionExtraction pass, which relinks all internal-linkaged callees from deleted function to external linkage. This will allow further linking everything together. NOTEs: 1. Documentation will be updated soon. 2. llvm-upgrade should be improved to translate csret => sret. Before this, there will be some unexpected test fails. llvm-svn: 33597
67 lines
2.5 KiB
C++
67 lines
2.5 KiB
C++
//===-- llvm/CallingConv.h - LLVM Calling Conventions -----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file was developed by the LLVM research group and is distributed under
|
|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines LLVM's set of calling conventions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CALLINGCONV_H
|
|
#define LLVM_CALLINGCONV_H
|
|
|
|
namespace llvm {
|
|
|
|
/// CallingConv Namespace - This namespace contains an enum with a value for
|
|
/// the well-known calling conventions.
|
|
///
|
|
namespace CallingConv {
|
|
/// A set of enums which specify the assigned numeric values for known llvm
|
|
/// calling conventions.
|
|
/// @brief LLVM Calling Convention Representation
|
|
enum ID {
|
|
/// 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.
|
|
C = 0,
|
|
|
|
// Generic LLVM calling conventions. None of these calling conventions
|
|
// support varargs calls, and all assume that the caller and callee
|
|
// prototype exactly match.
|
|
|
|
/// Fast - This calling convention attempts to make calls as fast as possible
|
|
/// (e.g. by passing things in registers).
|
|
Fast = 8,
|
|
|
|
// Cold - This calling convention attempts to make code in the caller as
|
|
// efficient as possible under the assumption that the call is not commonly
|
|
// executed. As such, these calls often preserve all registers so that the
|
|
// call does not break any live ranges in the caller side.
|
|
Cold = 9,
|
|
|
|
// Target - This is the start of the target-specific calling conventions,
|
|
// e.g. fastcall and thiscall on X86.
|
|
FirstTargetCC = 64,
|
|
|
|
/// 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_StdCall = 64,
|
|
|
|
/// X86_FastCall - 'fast' analog of X86_StdCall. Passes first two arguments
|
|
/// in ECX:EDX registers, others - via stack. Callee is responsible for
|
|
/// stack cleaning.
|
|
X86_FastCall = 65
|
|
};
|
|
} // End CallingConv namespace
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|