Skip to content
LangRef.html 117 KiB
Newer Older
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>LLVM Assembly Language Reference Manual</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="author" content="Chris Lattner">
  <meta name="description" 
  content="LLVM Assembly Language Reference Manual.">
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
Chris Lattner's avatar
Chris Lattner committed
<div class="doc_title"> LLVM Language Reference Manual </div>
Chris Lattner's avatar
Chris Lattner committed
<ol>
  <li><a href="#abstract">Abstract</a></li>
  <li><a href="#introduction">Introduction</a></li>
  <li><a href="#identifiers">Identifiers</a></li>
  <li><a href="#highlevel">High Level Structure</a>
    <ol>
      <li><a href="#modulestructure">Module Structure</a></li>
      <li><a href="#linkage">Linkage Types</a></li>
      <li><a href="#callingconv">Calling Conventions</a></li>
      <li><a href="#globalvars">Global Variables</a></li>
      <li><a href="#functionstructure">Function Structure</a></li>
    </ol>
  </li>
Chris Lattner's avatar
Chris Lattner committed
  <li><a href="#typesystem">Type System</a>
    <ol>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#t_primitive">Primitive Types</a> 	
        <ol>
          <li><a href="#t_classifications">Type Classifications</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#t_derived">Derived Types</a>
        <ol>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#t_array">Array Type</a></li>
          <li><a href="#t_function">Function Type</a></li>
          <li><a href="#t_pointer">Pointer Type</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#t_struct">Structure Type</a></li>
          <li><a href="#t_packed">Packed Type</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#t_opaque">Opaque Type</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      </li>
    </ol>
  </li>
  <li><a href="#constants">Constants</a>
    <ol>
      <li><a href="#simpleconstants">Simple Constants</a>
      <li><a href="#aggregateconstants">Aggregate Constants</a>
      <li><a href="#globalconstants">Global Variable and Function Addresses</a>
      <li><a href="#undefvalues">Undefined Values</a>
      <li><a href="#constantexprs">Constant Expressions</a>
    </ol>
Chris Lattner's avatar
Chris Lattner committed
  </li>
Chris Lattner's avatar
Chris Lattner committed
  <li><a href="#instref">Instruction Reference</a>
    <ol>
      <li><a href="#terminators">Terminator Instructions</a>
        <ol>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_ret">'<tt>ret</tt>' Instruction</a></li>
          <li><a href="#i_br">'<tt>br</tt>' Instruction</a></li>
          <li><a href="#i_switch">'<tt>switch</tt>' Instruction</a></li>
          <li><a href="#i_invoke">'<tt>invoke</tt>' Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_unwind">'<tt>unwind</tt>'  Instruction</a></li>
          <li><a href="#i_unreachable">'<tt>unreachable</tt>' Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#binaryops">Binary Operations</a>
        <ol>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_add">'<tt>add</tt>' Instruction</a></li>
          <li><a href="#i_sub">'<tt>sub</tt>' Instruction</a></li>
          <li><a href="#i_mul">'<tt>mul</tt>' Instruction</a></li>
          <li><a href="#i_div">'<tt>div</tt>' Instruction</a></li>
          <li><a href="#i_rem">'<tt>rem</tt>' Instruction</a></li>
          <li><a href="#i_setcc">'<tt>set<i>cc</i></tt>' Instructions</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#bitwiseops">Bitwise Binary Operations</a>
        <ol>
          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
          <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
          <li><a href="#i_shr">'<tt>shr</tt>' Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#memoryops">Memory Access Operations</a>
        <ol>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_malloc">'<tt>malloc</tt>'   Instruction</a></li>
          <li><a href="#i_free">'<tt>free</tt>'     Instruction</a></li>
          <li><a href="#i_alloca">'<tt>alloca</tt>'   Instruction</a></li>
	 <li><a href="#i_load">'<tt>load</tt>'     Instruction</a></li>
	 <li><a href="#i_store">'<tt>store</tt>'    Instruction</a></li>
	 <li><a href="#i_getelementptr">'<tt>getelementptr</tt>' Instruction</a></li>
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#otherops">Other Operations</a>
        <ol>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_phi">'<tt>phi</tt>'   Instruction</a></li>
          <li><a href="#i_cast">'<tt>cast .. to</tt>' Instruction</a></li>
          <li><a href="#i_select">'<tt>select</tt>' Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_call">'<tt>call</tt>'  Instruction</a></li>
          <li><a href="#i_vaarg">'<tt>vaarg</tt>'  Instruction</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
Chris Lattner's avatar
Chris Lattner committed
      </li>
Chris Lattner's avatar
Chris Lattner committed
    </ol>
Chris Lattner's avatar
Chris Lattner committed
  </li>
  <li><a href="#intrinsics">Intrinsic Functions</a>
    <ol>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#int_varargs">Variable Argument Handling Intrinsics</a>
        <ol>
          <li><a href="#i_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a></li>
          <li><a href="#i_va_end">'<tt>llvm.va_end</tt>'   Intrinsic</a></li>
          <li><a href="#i_va_copy">'<tt>llvm.va_copy</tt>'  Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_gc">Accurate Garbage Collection Intrinsics</a>
        <ol>
          <li><a href="#i_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a></li>
          <li><a href="#i_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a></li>
          <li><a href="#i_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a></li>
        </ol>
      </li>
Chris Lattner's avatar
Chris Lattner committed
      <li><a href="#int_codegen">Code Generator Intrinsics</a>
        <ol>
          <li><a href="#i_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a></li>
          <li><a href="#i_frameaddress">'<tt>llvm.frameaddress</tt>'   Intrinsic</a></li>
          <li><a href="#i_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a></li>
          <li><a href="#i_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a></li>
        </ol>
      </li>
      <li><a href="#int_os">Operating System Intrinsics</a>
        <ol>
          <li><a href="#i_readport">'<tt>llvm.readport</tt>' Intrinsic</a></li>
          <li><a href="#i_writeport">'<tt>llvm.writeport</tt>' Intrinsic</a></li>
          <li><a href="#i_readio">'<tt>llvm.readio</tt>'   Intrinsic</a></li>
          <li><a href="#i_writeio">'<tt>llvm.writeio</tt>'   Intrinsic</a></li>
Chris Lattner's avatar
Chris Lattner committed
        </ol>
      <li><a href="#int_libc">Standard C Library Intrinsics</a>
        <ol>
          <li><a href="#i_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a></li>
          <li><a href="#i_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a></li>
Chris Lattner's avatar
Chris Lattner committed
          <li><a href="#i_memset">'<tt>llvm.memset</tt>' Intrinsic</a></li>
          <li><a href="#i_isunordered">'<tt>llvm.isunordered</tt>' Intrinsic</a></li>
      <li><a href="#int_count">Bit counting Intrinsics</a>
        <ol>
          <li><a href="#int_ctpop">'<tt>llvm.ctpop</tt>' Intrinsic </a></li>
          <li><a href="#int_ctlz">'<tt>llvm.ctlz</tt>' Intrinsic </a></li>
          <li><a href="#int_cttz">'<tt>llvm.cttz</tt>' Intrinsic </a></li>
      <li><a href="#int_debugger">Debugger intrinsics</a></li>
Chris Lattner's avatar
Chris Lattner committed
    </ol>
  </li>
Chris Lattner's avatar
Chris Lattner committed
</ol>

<div class="doc_author">
  <p>Written by <a href="mailto:sabre@nondot.org">Chris Lattner</a>
            and <a href="mailto:vadve@cs.uiuc.edu">Vikram Adve</a></p>
Chris Lattner's avatar
Chris Lattner committed
<!-- *********************************************************************** -->
Chris Lattner's avatar
Chris Lattner committed
<div class="doc_section"> <a name="abstract">Abstract </a></div>
Chris Lattner's avatar
Chris Lattner committed
<!-- *********************************************************************** -->
Chris Lattner's avatar
Chris Lattner committed
<p>This document is a reference manual for the LLVM assembly language. 
LLVM is an SSA based representation that provides type safety,
low-level operations, flexibility, and the capability of representing
'all' high-level languages cleanly.  It is the common code
representation used throughout all phases of the LLVM compilation
strategy.</p>
Chris Lattner's avatar
Chris Lattner committed
<!-- *********************************************************************** -->
Chris Lattner's avatar
Chris Lattner committed
<div class="doc_section"> <a name="introduction">Introduction</a> </div>
Chris Lattner's avatar
Chris Lattner committed
<!-- *********************************************************************** -->
Chris Lattner's avatar
Chris Lattner committed
<p>The LLVM code representation is designed to be used in three
different forms: as an in-memory compiler IR, as an on-disk bytecode
representation (suitable for fast loading by a Just-In-Time compiler),
and as a human readable assembly language representation.  This allows
LLVM to provide a powerful intermediate representation for efficient
compiler transformations and analysis, while providing a natural means
to debug and visualize the transformations.  The three different forms
of LLVM are all equivalent.  This document describes the human readable
representation and notation.</p>
John Criswell's avatar
John Criswell committed
<p>The LLVM representation aims to be light-weight and low-level
Chris Lattner's avatar
Chris Lattner committed
while being expressive, typed, and extensible at the same time.  It
aims to be a "universal IR" of sorts, by being at a low enough level
that high-level ideas may be cleanly mapped to it (similar to how
microprocessors are "universal IR's", allowing many source languages to
be mapped to them).  By providing type information, LLVM can be used as
the target of optimizations: for example, through pointer analysis, it
Loading
Loading full blame...