<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 31, 2015 at 1:44 PM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dexonsmith<br>
Date: Fri Jul 31 15:44:32 2015<br>
New Revision: 243779<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D243779-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=kD45hUPPJcWKSK07_iVJJv8oAcydZwVgRerpHhH-lkw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243779&view=rev</a><br>
Log:<br>
IR: Add a broad bitcode compatibility test<br>
<br>
Successive versions of LLVM should retain the ability to parse bitcode<br>
generated by old releases of the compiler.  This adds a bitcode format<br>
compatibility test, which is intended to provide good (albeit not<br>
entirely exhaustive) coverage of the current LangRef.<br>
<br>
This also includes compatibility tests for LLVM 3.6.  After every 3.X.0<br>
release, the compatibility.ll file from the 3.X branch should be copied<br>
to compatibility-3.X.ll on trunk, and the 3.X.0 release used to generate<br>
a corresponding bitcode file.<br>
<br>
Patch by Vedant Kumar!<br>
<br>
Added:<br>
    llvm/trunk/test/Bitcode/compatibility-3.6.ll<br>
    llvm/trunk/test/Bitcode/compatibility-3.6.ll.bc<br>
    llvm/trunk/test/Bitcode/compatibility.ll<br>
Modified:<br>
    llvm/trunk/docs/DeveloperPolicy.rst<br>
<br>
Modified: llvm/trunk/docs/DeveloperPolicy.rst<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_docs_DeveloperPolicy.rst-3Frev-3D243779-26r1-3D243778-26r2-3D243779-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=nr_7ZaOoQ0evTGTEl5hUZ4vLPfLwIuqUdDiBvhcSYc8&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/DeveloperPolicy.rst?rev=243779&r1=243778&r2=243779&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/docs/DeveloperPolicy.rst (original)<br>
+++ llvm/trunk/docs/DeveloperPolicy.rst Fri Jul 31 15:44:32 2015<br>
@@ -505,8 +505,13 @@ for llvm users and not imposing a big bu<br>
 * The textual format is not backwards compatible. We don't change it too often,<br>
   but there are no specific promises.<br>
<br>
-* The bitcode format produced by a X.Y release will be readable by all following<br>
-  X.Z releases and the (X+1).0 release.<br>
+* Additions and changes to the IR should be reflected in<br>
+  ``test/Bitcode/compatibility.ll``.<br>
+<br>
+* The bitcode format produced by a X.Y release will be readable by all<br>
+  following X.Z releases and the (X+1).0 release. To help ensure this, an X.Y<br>
+  version of ``test/Bitcode/compatibility.ll`` should be assembled and<br>
+  committed after each release.<br></blockquote><div><br></div><div>Please be a bit more specific here. I would like us to document explicitly the naming of the assembled files to avoid guesswork in the future.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
 * Newer releases can ignore features from older releases, but they cannot<br>
   miscompile them. For example, if nsw is ever replaced with something else,<br>
<br>
Added: llvm/trunk/test/Bitcode/compatibility-3.6.ll<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Bitcode_compatibility-2D3.6.ll-3Frev-3D243779-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=OW76BHIoFfLfH09ZxkxHw6jt2M6PSsjvhqMJbHErbUw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility-3.6.ll?rev=243779&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/Bitcode/compatibility-3.6.ll (added)<br>
+++ llvm/trunk/test/Bitcode/compatibility-3.6.ll Fri Jul 31 15:44:32 2015<br>
@@ -0,0 +1,1195 @@<br>
+; Bitcode compatibility test for llvm 3.6.2<br>
+;<br>
+; N.b: This is 3.6.2-compatible IR. The CHECK lines occasionally differ from<br>
+;      the IR used to generate the bitcode, and may need to be updated. These<br>
+;      locations are tagged with an 'XXX'.<br>
+<br>
+; RUN: llvm-dis < %s.bc | FileCheck %s<br>
+<br>
+target datalayout = "E"<br>
+; CHECK: target datalayout = "E"<br>
+<br>
+target triple = "x86_64-apple-macosx10.10.0"<br>
+; CHECK: target triple = "x86_64-apple-macosx10.10.0"<br>
+<br>
+;; Module-level assembly<br>
+module asm "beep boop"<br>
+; CHECK: module asm "beep boop"<br>
+<br>
+;; Comdats<br>
+$comdat.any = comdat any<br>
+; CHECK: $comdat.any = comdat any<br>
+$comdat.exactmatch = comdat exactmatch<br>
+; CHECK: $comdat.exactmatch = comdat exactmatch<br>
+$comdat.largest = comdat largest<br>
+; CHECK: $comdat.largest = comdat largest<br>
+$comdat.noduplicates = comdat noduplicates<br>
+; CHECK: $comdat.noduplicates = comdat noduplicates<br>
+$comdat.samesize = comdat samesize<br>
+; CHECK: $comdat.samesize = comdat samesize<br>
+<br>
+; Global Variables -- comdat<br>
+@comdat.any = global i32 0, comdat<br>
+; CHECK: @comdat.any = global i32 0, comdat<br>
+@comdat.exactmatch = global i32 0, comdat<br>
+; CHECK: @comdat.exactmatch = global i32 0, comdat<br>
+@comdat.largest = global i32 0, comdat<br>
+; CHECK: @comdat.largest = global i32 0, comdat<br>
+@comdat.noduplicates = global i32 0, comdat<br>
+; CHECK: @comdat.noduplicates = global i32 0, comdat<br>
+@comdat.samesize = global i32 0, comdat<br>
+; CHECK: @comdat.samesize = global i32 0, comdat<br></blockquote><div><br></div><div>Is there a reason this is not covering usage of comdats with explicit comdat name?</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
+;; Constants<br>
+@const.true = constant i1 true<br>
+; CHECK: @const.true = constant i1 true<br>
+@const.false = constant i1 false<br>
+; CHECK: @const.false = constant i1 false<br>
+@<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__const.int&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=MNjKXpkLeogzpXCakzBUaVXF6qFKXRGSrwIFz02gop4&e=" rel="noreferrer" target="_blank">const.int</a> = constant i32 zeroinitializer<br>
+; CHECK: @<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__const.int&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=MNjKXpkLeogzpXCakzBUaVXF6qFKXRGSrwIFz02gop4&e=" rel="noreferrer" target="_blank">const.int</a> = constant i32 0<br>
+@const.float = constant double 0.0<br>
+; CHECK: @const.float = constant double 0.0<br>
+@const.null = constant i8* null<br>
+; CHECK: @const.null = constant i8* null<br>
+%const.struct.type = type { i32, i8 }<br>
+%const.struct.type.packed = type <{ i32, i8 }><br>
+@const.struct = constant %const.struct.type { i32 -1, i8 undef }<br>
+; CHECK: @const.struct = constant %const.struct.type { i32 -1, i8 undef }<br>
+@const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }><br>
+; CHECK: @const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }><br>
+@const.array = constant [2 x i32] [i32 -3, i32 -4]<br>
+; CHECK: @const.array = constant [2 x i32] [i32 -3, i32 -4]<br>
+@const.vector = constant <2 x i32> <i32 -5, i32 -6><br>
+; CHECK: @const.vector = constant <2 x i32> <i32 -5, i32 -6><br>
+<br>
+;; Global Variables<br>
+; Format: [@<GlobalVarName> =] [Linkage] [Visibility] [DLLStorageClass]<br>
+;         [ThreadLocal] [unnamed_addr] [AddrSpace] [ExternallyInitialized]<br>
+;         <global | constant> <Type> [<InitializerConstant>]<br>
+;         [, section "name"] [, align <Alignment>]<br>
+<br>
+; Global Variables -- Simple<br>
+@g1 = global i32 0<br>
+; CHECK: @g1 = global i32 0<br>
+@g2 = constant i32 0<br>
+; CHECK: @g2 = constant i32 0<br>
+<br>
+; Global Variables -- Linkage<br>
+@g.private = private global i32 0<br>
+; CHECK: @g.private = private global i32 0<br>
+@g.internal = internal global i32 0<br>
+; CHECK: @g.internal = internal global i32 0<br>
+@g.available_externally = available_externally global i32 0<br>
+; CHECK: @g.available_externally = available_externally global i32 0<br>
+@g.linkonce = linkonce global i32 0<br>
+; CHECK: @g.linkonce = linkonce global i32 0<br>
+@g.weak = weak global i32 0<br>
+; CHECK: @g.weak = weak global i32 0<br>
+@g.common = common global i32 0<br>
+; CHECK: @g.common = common global i32 0<br>
+@g.appending = appending global [4 x i8] c"test"<br>
+; CHECK: @g.appending = appending global [4 x i8] c"test"<br>
+@g.extern_weak = extern_weak global i32<br>
+; CHECK: @g.extern_weak = extern_weak global i32<br>
+@g.linkonce_odr = linkonce_odr global i32 0<br>
+; CHECK: @g.linkonce_odr = linkonce_odr global i32 0<br>
+@g.weak_odr = weak_odr global i32 0<br>
+; CHECK: @g.weak_odr = weak_odr global i32 0<br>
+@g.external = external global i32<br>
+; CHECK: @g.external = external global i32<br>
+<br>
+; Global Variables -- Visibility<br>
+@g.default = default global i32 0<br>
+; CHECK: @g.default = global i32 0<br>
+@g.hidden = hidden global i32 0<br>
+; CHECK: @g.hidden = hidden global i32 0<br>
+@g.protected = protected global i32 0<br>
+; CHECK: @g.protected = protected global i32 0<br>
+<br>
+; Global Variables -- DLLStorageClass<br>
+@g.dlldefault = default global i32 0<br>
+; CHECK: @g.dlldefault = global i32 0<br>
+@g.dllimport = external dllimport global i32<br>
+; CHECK: @g.dllimport = external dllimport global i32<br>
+@g.dllexport = dllexport global i32 0<br>
+; CHECK: @g.dllexport = dllexport global i32 0<br>
+<br>
+; Global Variables -- ThreadLocal<br>
+@g.notthreadlocal = global i32 0<br>
+; CHECK: @g.notthreadlocal = global i32 0<br>
+@g.generaldynamic = thread_local global i32 0<br>
+; CHECK: @g.generaldynamic = thread_local global i32 0<br>
+@g.localdynamic = thread_local(localdynamic) global i32 0<br>
+; CHECK: @g.localdynamic = thread_local(localdynamic) global i32 0<br>
+@g.initialexec = thread_local(initialexec) global i32 0<br>
+; CHECK: @g.initialexec = thread_local(initialexec) global i32 0<br>
+@g.localexec = thread_local(localexec) global i32 0<br>
+; CHECK: @g.localexec = thread_local(localexec) global i32 0<br>
+<br>
+; Global Variables -- unnamed_addr<br>
+@g.unnamed_addr = unnamed_addr global i32 0<br>
+; CHECK: @g.unnamed_addr = unnamed_addr global i32 0<br>
+<br>
+; Global Variables -- AddrSpace<br>
+@g.addrspace = addrspace(1) global i32 0<br>
+; CHECK: @g.addrspace = addrspace(1) global i32 0<br>
+<br>
+; Global Variables -- ExternallyInitialized<br>
+@g.externally_initialized = external externally_initialized global i32<br>
+; CHECK: @g.externally_initialized = external externally_initialized global i32<br>
+<br>
+; Global Variables -- section<br>
+@g.section = global i32 0, section "_DATA"<br>
+; CHECK: @g.section = global i32 0, section "_DATA"<br>
+<br>
+; Global Variables -- align<br>
+@g.align = global i32 0, align 4<br>
+; CHECK: @g.align = global i32 0, align 4<br>
+<br>
+; Global Variables -- Intrinsics<br>
+%pri.func.data = type { i32, void ()*, i8* }<br>
+@g.used1 = global i32 0<br>
+@g.used2 = global i32 0<br>
+@g.used3 = global i8 0<br>
+declare void @g.f1()<br>
+@llvm.used = appending global [1 x i32*] [i32* @g.used1], section "llvm.metadata"<br>
+; CHECK: @llvm.used = appending global [1 x i32*] [i32* @g.used1], section "llvm.metadata"<br>
+@llvm.compiler.used = appending global [1 x i32*] [i32* @g.used2], section "llvm.metadata"<br>
+; CHECK: @llvm.compiler.used = appending global [1 x i32*] [i32* @g.used2], section "llvm.metadata"<br>
+@llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+; CHECK: @llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+@llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+; CHECK: @llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+<br>
+;; Aliases<br>
+; Format: @<Name> = [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal]<br>
+;                   [unnamed_addr] alias <AliaseeTy> @<Aliasee><br>
+<br>
+; Aliases -- Linkage<br>
+@a.private = private alias i32* @g.private<br>
+; CHECK: @a.private = private alias i32* @g.private<br>
+@a.internal = internal alias i32* @g.internal<br>
+; CHECK: @a.internal = internal alias i32* @g.internal<br>
+@a.linkonce = linkonce alias i32* @g.linkonce<br>
+; CHECK: @a.linkonce = linkonce alias i32* @g.linkonce<br>
+@a.weak = weak alias i32* @g.weak<br>
+; CHECK: @a.weak = weak alias i32* @g.weak<br>
+@a.linkonce_odr = linkonce_odr alias i32* @g.linkonce_odr<br>
+; CHECK: @a.linkonce_odr = linkonce_odr alias i32* @g.linkonce_odr<br>
+@a.weak_odr = weak_odr alias i32* @g.weak_odr<br>
+; CHECK: @a.weak_odr = weak_odr alias i32* @g.weak_odr<br>
+@a.external = external alias i32* @g1<br>
+; CHECK: @a.external = alias i32* @g1<br>
+<br>
+; Aliases -- Visibility<br>
+@a.default = default alias i32* @g.default<br>
+; CHECK: @a.default = alias i32* @g.default<br>
+@a.hidden = hidden alias i32* @g.hidden<br>
+; CHECK: @a.hidden = hidden alias i32* @g.hidden<br>
+@a.protected = protected alias i32* @g.protected<br>
+; CHECK: @a.protected = protected alias i32* @g.protected<br>
+<br>
+; Aliases -- DLLStorageClass<br>
+@a.dlldefault = default alias i32* @g.dlldefault<br>
+; CHECK: @a.dlldefault = alias i32* @g.dlldefault<br>
+@a.dllimport = dllimport alias i32* @g1<br>
+; CHECK: @a.dllimport = dllimport alias i32* @g1<br>
+@a.dllexport = dllexport alias i32* @g.dllexport<br>
+; CHECK: @a.dllexport = dllexport alias i32* @g.dllexport<br>
+<br>
+; Aliases -- ThreadLocal<br>
+@a.notthreadlocal = alias i32* @g.notthreadlocal<br>
+; CHECK: @a.notthreadlocal = alias i32* @g.notthreadlocal<br>
+@a.generaldynamic = thread_local alias i32* @g.generaldynamic<br>
+; CHECK: @a.generaldynamic = thread_local alias i32* @g.generaldynamic<br>
+@a.localdynamic = thread_local(localdynamic) alias i32* @g.localdynamic<br>
+; CHECK: @a.localdynamic = thread_local(localdynamic) alias i32* @g.localdynamic<br>
+@a.initialexec = thread_local(initialexec) alias i32* @g.initialexec<br>
+; CHECK: @a.initialexec = thread_local(initialexec) alias i32* @g.initialexec<br>
+@a.localexec = thread_local(localexec) alias i32* @g.localexec<br>
+; CHECK: @a.localexec = thread_local(localexec) alias i32* @g.localexec<br>
+<br>
+; Aliases -- unnamed_addr<br>
+@a.unnamed_addr = unnamed_addr alias i32* @g.unnamed_addr<br>
+; CHECK: @a.unnamed_addr = unnamed_addr alias i32* @g.unnamed_addr<br>
+<br>
+;; Functions<br>
+; Format: define [linkage] [visibility] [DLLStorageClass]<br>
+;         [cconv] [ret attrs]<br>
+;         <ResultType> @<FunctionName> ([argument list])<br>
+;         [unnamed_addr] [fn Attrs] [section "name"] [comdat [($name)]]<br>
+;         [align N] [gc] [prefix Constant]<br>
+;         { ... }<br>
+<br>
+; Functions -- Simple<br>
+declare void @f1 ()<br>
+; CHECK: declare void @f1()<br>
+<br>
+define void @f2 () {<br>
+; CHECK: define void @f2()<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; Functions -- linkage<br>
+define private void @f.private() {<br>
+; CHECK: define private void @f.private()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define internal void @f.internal() {<br>
+; CHECK: define internal void @f.internal()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define available_externally void @f.available_externally() {<br>
+; CHECK: define available_externally void @f.available_externally()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define linkonce void @f.linkonce() {<br>
+; CHECK: define linkonce void @f.linkonce()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define weak void @f.weak() {<br>
+; CHECK: define weak void @f.weak()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define linkonce_odr void @f.linkonce_odr() {<br>
+; CHECK: define linkonce_odr void @f.linkonce_odr()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define weak_odr void @f.weak_odr() {<br>
+; CHECK: define weak_odr void @f.weak_odr()<br>
+entry:<br>
+  ret void<br>
+}<br>
+declare external void @f.external()<br>
+; CHECK: declare void @f.external()<br>
+declare extern_weak void @f.extern_weak()<br>
+; CHECK: declare extern_weak void @f.extern_weak()<br>
+<br>
+; Functions -- visibility<br>
+declare default void @f.default()<br>
+; CHECK: declare void @f.default()<br>
+declare hidden void @f.hidden()<br>
+; CHECK: declare hidden void @f.hidden()<br>
+declare protected void @f.protected()<br>
+; CHECK: declare protected void @f.protected()<br>
+<br>
+; Functions -- DLLStorageClass<br>
+declare dllimport void @f.dllimport()<br>
+; CHECK: declare dllimport void @f.dllimport()<br>
+declare dllexport void @f.dllexport()<br>
+; CHECK: declare dllexport void @f.dllexport()<br>
+<br>
+; Functions -- cconv (Calling conventions)<br>
+declare ccc void @f.ccc()<br>
+; CHECK: declare void @f.ccc()<br>
+declare fastcc void @f.fastcc()<br>
+; CHECK: declare fastcc void @f.fastcc()<br>
+declare coldcc void @f.coldcc()<br>
+; CHECK: declare coldcc void @f.coldcc()<br>
+declare cc10 void @f.cc10()<br>
+; CHECK: declare ghccc void @f.cc10()<br>
+declare ghccc void @f.ghccc()<br>
+; CHECK: declare ghccc void @f.ghccc()<br>
+declare cc11 void @f.cc11()<br>
+; CHECK: declare cc11 void @f.cc11()<br>
+declare webkit_jscc void @f.webkit_jscc()<br>
+; CHECK: declare webkit_jscc void @f.webkit_jscc()<br>
+declare anyregcc void @f.anyregcc()<br>
+; CHECK: declare anyregcc void @f.anyregcc()<br>
+declare preserve_mostcc void @f.preserve_mostcc()<br>
+; CHECK: declare preserve_mostcc void @f.preserve_mostcc()<br>
+declare preserve_allcc void @f.preserve_allcc()<br>
+; CHECK: declare preserve_allcc void @f.preserve_allcc()<br>
+declare cc64 void @f.cc64()<br>
+; CHECK: declare x86_stdcallcc void @f.cc64()<br>
+declare x86_stdcallcc void @f.x86_stdcallcc()<br>
+; CHECK: declare x86_stdcallcc void @f.x86_stdcallcc()<br>
+declare cc65 void @f.cc65()<br>
+; CHECK: declare x86_fastcallcc void @f.cc65()<br>
+declare x86_fastcallcc void @f.x86_fastcallcc()<br>
+; CHECK: declare x86_fastcallcc void @f.x86_fastcallcc()<br>
+declare cc66 void @f.cc66()<br>
+; CHECK: declare arm_apcscc void @f.cc66()<br>
+declare arm_apcscc void @f.arm_apcscc()<br>
+; CHECK: declare arm_apcscc void @f.arm_apcscc()<br>
+declare cc67 void @f.cc67()<br>
+; CHECK: declare arm_aapcscc void @f.cc67()<br>
+declare arm_aapcscc void @f.arm_aapcscc()<br>
+; CHECK: declare arm_aapcscc void @f.arm_aapcscc()<br>
+declare cc68 void @f.cc68()<br>
+; CHECK: declare arm_aapcs_vfpcc void @f.cc68()<br>
+declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()<br>
+; CHECK: declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()<br>
+declare cc69 void @f.cc69()<br>
+; CHECK: declare msp430_intrcc void @f.cc69()<br>
+declare msp430_intrcc void @f.msp430_intrcc()<br>
+; CHECK: declare msp430_intrcc void @f.msp430_intrcc()<br>
+declare cc70 void @f.cc70()<br>
+; CHECK: declare x86_thiscallcc void @f.cc70()<br>
+declare x86_thiscallcc void @f.x86_thiscallcc()<br>
+; CHECK: declare x86_thiscallcc void @f.x86_thiscallcc()<br>
+declare cc71 void @f.cc71()<br>
+; CHECK: declare ptx_kernel void @f.cc71()<br>
+declare ptx_kernel void @f.ptx_kernel()<br>
+; CHECK: declare ptx_kernel void @f.ptx_kernel()<br>
+declare cc72 void @f.cc72()<br>
+; CHECK: declare ptx_device void @f.cc72()<br>
+declare ptx_device void @f.ptx_device()<br>
+; CHECK: declare ptx_device void @f.ptx_device()<br>
+declare cc75 void @f.cc75()<br>
+; CHECK: declare spir_func void @f.cc75()<br>
+declare spir_func void @f.spir_func()<br>
+; CHECK: declare spir_func void @f.spir_func()<br>
+declare cc76 void @f.cc76()<br>
+; CHECK: declare spir_kernel void @f.cc76()<br>
+declare spir_kernel void @f.spir_kernel()<br>
+; CHECK: declare spir_kernel void @f.spir_kernel()<br>
+declare cc77 void @f.cc77()<br>
+; CHECK: declare intel_ocl_bicc void @f.cc77()<br>
+declare intel_ocl_bicc void @f.intel_ocl_bicc()<br>
+; CHECK: declare intel_ocl_bicc void @f.intel_ocl_bicc()<br>
+declare cc78 void @f.cc78()<br>
+; CHECK: declare x86_64_sysvcc void @f.cc78()<br>
+declare x86_64_sysvcc void @f.x86_64_sysvcc()<br>
+; CHECK: declare x86_64_sysvcc void @f.x86_64_sysvcc()<br>
+declare cc79 void @f.cc79()<br>
+; CHECK: declare x86_64_win64cc void @f.cc79()<br>
+declare x86_64_win64cc void @f.x86_64_win64cc()<br>
+; CHECK: declare x86_64_win64cc void @f.x86_64_win64cc()<br>
+declare cc80 void @f.cc80()<br>
+; CHECK: declare x86_vectorcallcc void @f.cc80()<br>
+declare x86_vectorcallcc void @f.x86_vectorcallcc()<br>
+; CHECK: declare x86_vectorcallcc void @f.x86_vectorcallcc()<br>
+declare cc8191 void @f.cc8191()<br>
+; CHECK: declare cc8191 void @f.cc8191()<br>
+<br>
+; Functions -- ret attrs (Return attributes)<br>
+declare zeroext i64 @f.zeroext()<br>
+; CHECK: declare zeroext i64 @f.zeroext()<br>
+declare signext i64 @f.signext()<br>
+; CHECK: declare signext i64 @f.signext()<br>
+declare inreg i32* @f.inreg()<br>
+; CHECK: declare inreg i32* @f.inreg()<br>
+declare noalias i32* @f.noalias()<br>
+; CHECK: declare noalias i32* @f.noalias()<br>
+declare nonnull i32* @f.nonnull()<br>
+; CHECK: declare nonnull i32* @f.nonnull()<br>
+declare dereferenceable(4) i32* @f.dereferenceable4()<br>
+; CHECK: declare dereferenceable(4) i32* @f.dereferenceable4()<br>
+declare dereferenceable(8) i32* @f.dereferenceable8()<br>
+; CHECK: declare dereferenceable(8) i32* @f.dereferenceable8()<br>
+declare dereferenceable(16) i32* @f.dereferenceable16()<br>
+; CHECK: declare dereferenceable(16) i32* @f.dereferenceable16()<br>
+<br>
+; Functions -- Parameter attributes<br>
+declare void @f.param.zeroext(i8 zeroext)<br>
+; CHECK: declare void @f.param.zeroext(i8 zeroext)<br>
+declare void @f.param.signext(i8 signext)<br>
+; CHECK: declare void @f.param.signext(i8 signext)<br>
+declare void @f.param.inreg(i8 inreg)<br>
+; CHECK: declare void @f.param.inreg(i8 inreg)<br>
+declare void @f.param.byval({ i8, i8 }* byval)<br>
+; CHECK: declare void @f.param.byval({ i8, i8 }* byval)<br>
+declare void @f.param.inalloca(i8* inalloca)<br>
+; CHECK: declare void @f.param.inalloca(i8* inalloca)<br>
+declare void @f.param.sret(i8* sret)<br>
+; CHECK: declare void @f.param.sret(i8* sret)<br>
+declare void @f.param.noalias(i8* noalias)<br>
+; CHECK: declare void @f.param.noalias(i8* noalias)<br>
+declare void @f.param.nocapture(i8* nocapture)<br>
+; CHECK: declare void @f.param.nocapture(i8* nocapture)<br>
+declare void @f.param.nest(i8* nest)<br>
+; CHECK: declare void @f.param.nest(i8* nest)<br>
+declare i8* @f.param.returned(i8* returned)<br>
+; CHECK: declare i8* @f.param.returned(i8* returned)<br>
+declare void @f.param.nonnull(i8* nonnull)<br>
+; CHECK: declare void @f.param.nonnull(i8* nonnull)<br>
+declare void @f.param.dereferenceable(i8* dereferenceable(4))<br>
+; CHECK: declare void @f.param.dereferenceable(i8* dereferenceable(4))<br>
+<br>
+; Functions -- unnamed_addr<br>
+declare void @f.unnamed_addr() unnamed_addr<br>
+; CHECK: declare void @f.unnamed_addr() unnamed_addr<br>
+<br>
+; Functions -- fn Attrs (Function attributes)<br>
+declare void @f.alignstack4() alignstack(4)<br>
+; CHECK: declare void @f.alignstack4() #0<br>
+declare void @f.alignstack8() alignstack(8)<br>
+; CHECK: declare void @f.alignstack8() #1<br>
+declare void @f.alwaysinline() alwaysinline<br>
+; CHECK: declare void @f.alwaysinline() #2<br>
+declare void @f.cold() cold<br>
+; CHECK: declare void @f.cold() #3<br>
+declare void @f.inlinehint() inlinehint<br>
+; CHECK: declare void @f.inlinehint() #4<br>
+declare void @f.jumptable() unnamed_addr jumptable<br>
+; CHECK: declare void @f.jumptable() unnamed_addr #5<br>
+declare void @f.minsize() minsize<br>
+; CHECK: declare void @f.minsize() #6<br>
+declare void @f.naked() naked<br>
+; CHECK: declare void @f.naked() #7<br>
+declare void @f.nobuiltin() nobuiltin<br>
+; CHECK: declare void @f.nobuiltin() #8<br>
+declare void @f.noduplicate() noduplicate<br>
+; CHECK: declare void @f.noduplicate() #9<br>
+declare void @f.noimplicitfloat() noimplicitfloat<br>
+; CHECK: declare void @f.noimplicitfloat() #10<br>
+declare void @f.noinline() noinline<br>
+; CHECK: declare void @f.noinline() #11<br>
+declare void @f.nonlazybind() nonlazybind<br>
+; CHECK: declare void @f.nonlazybind() #12<br>
+declare void @f.noredzone() noredzone<br>
+; CHECK: declare void @f.noredzone() #13<br>
+declare void @f.noreturn() noreturn<br>
+; CHECK: declare void @f.noreturn() #14<br>
+declare void @f.nounwind() nounwind<br>
+; CHECK: declare void @f.nounwind() #15<br>
+declare void @f.optnone() noinline optnone<br>
+; CHECK: declare void @f.optnone() #16<br>
+declare void @f.optsize() optsize<br>
+; CHECK: declare void @f.optsize() #17<br>
+declare void @f.readnone() readnone<br>
+; CHECK: declare void @f.readnone() #18<br>
+declare void @f.readonly() readonly<br>
+; CHECK: declare void @f.readonly() #19<br>
+declare void @f.returns_twice() returns_twice<br>
+; CHECK: declare void @f.returns_twice() #20<br>
+declare void @f.sanitize_address() sanitize_address<br>
+; CHECK: declare void @f.sanitize_address() #21<br>
+declare void @f.sanitize_memory() sanitize_memory<br>
+; CHECK: declare void @f.sanitize_memory() #22<br>
+declare void @f.sanitize_thread() sanitize_thread<br>
+; CHECK: declare void @f.sanitize_thread() #23<br>
+declare void @f.ssp() ssp<br>
+; CHECK: declare void @f.ssp() #24<br>
+declare void @f.sspreq() sspreq<br>
+; CHECK: declare void @f.sspreq() #25<br>
+declare void @f.sspstrong() sspstrong<br>
+; CHECK: declare void @f.sspstrong() #26<br>
+declare void @f.uwtable() uwtable<br>
+; CHECK: declare void @f.uwtable() #27<br>
+declare void @f.kvpair() "cpu"="cortex-a8"<br>
+; CHECK:declare void @f.kvpair() #28<br>
+<br>
+; Functions -- section<br>
+declare void @f.section() section "80"<br>
+; CHECK: declare void @f.section() section "80"<br>
+<br>
+; Functions -- comdat<br>
+define void @f.comdat_any() comdat($comdat.any) {<br>
+; CHECK: define void @f.comdat_any() comdat($comdat.any)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_exactmatch() comdat($comdat.exactmatch) {<br>
+; CHECK: define void @f.comdat_exactmatch() comdat($comdat.exactmatch)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_largest() comdat($comdat.largest) {<br>
+; CHECK: define void @f.comdat_largest() comdat($comdat.largest)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_noduplicates() comdat($comdat.noduplicates) {<br>
+; CHECK: define void @f.comdat_noduplicates() comdat($comdat.noduplicates)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_samesize() comdat($comdat.samesize) {<br>
+; CHECK: define void @f.comdat_samesize() comdat($comdat.samesize)<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; Functions -- align<br>
+declare void @f.align2() align 2<br>
+; CHECK: declare void @f.align2() align 2<br>
+declare void @f.align4() align 4<br>
+; CHECK: declare void @f.align4() align 4<br>
+declare void @f.align8() align 8<br>
+; CHECK: declare void @f.align8() align 8<br>
+<br>
+; Functions -- GC<br>
+declare void @f.gcshadow() gc "shadow-stack"<br>
+; CHECK: declare void @f.gcshadow() gc "shadow-stack"<br>
+<br>
+; Functions -- Prefix data<br>
+declare void @f.prefixi32() prefix i32 1684365668<br>
+; CHECK: declare void @f.prefixi32() prefix i32 1684365668<br>
+declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+; CHECK: declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+<br>
+;; Atomic Memory Ordering Constraints<br>
+define void @atomics(i32* %word) {<br>
+  %cmpxchg.0 = cmpxchg i32* %word, i32 0, i32 4 monotonic monotonic<br>
+  ; CHECK: %cmpxchg.0 = cmpxchg i32* %word, i32 0, i32 4 monotonic monotonic<br>
+  %cmpxchg.1 = cmpxchg i32* %word, i32 0, i32 5 acq_rel monotonic<br>
+  ; CHECK: %cmpxchg.1 = cmpxchg i32* %word, i32 0, i32 5 acq_rel monotonic<br>
+  %cmpxchg.2 = cmpxchg i32* %word, i32 0, i32 6 acquire monotonic<br>
+  ; CHECK: %cmpxchg.2 = cmpxchg i32* %word, i32 0, i32 6 acquire monotonic<br>
+  %cmpxchg.3 = cmpxchg i32* %word, i32 0, i32 7 release monotonic<br>
+  ; CHECK: %cmpxchg.3 = cmpxchg i32* %word, i32 0, i32 7 release monotonic<br>
+  %cmpxchg.4 = cmpxchg i32* %word, i32 0, i32 8 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.4 = cmpxchg i32* %word, i32 0, i32 8 seq_cst monotonic<br>
+  %cmpxchg.5 = cmpxchg weak i32* %word, i32 0, i32 9 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.5 = cmpxchg weak i32* %word, i32 0, i32 9 seq_cst monotonic<br>
+  %cmpxchg.6 = cmpxchg volatile i32* %word, i32 0, i32 10 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.6 = cmpxchg volatile i32* %word, i32 0, i32 10 seq_cst monotonic<br>
+  %cmpxchg.7 = cmpxchg weak volatile i32* %word, i32 0, i32 11 singlethread seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.7 = cmpxchg weak volatile i32* %word, i32 0, i32 11 singlethread seq_cst monotonic<br>
+  %atomicrmw.xchg = atomicrmw xchg i32* %word, i32 12 monotonic<br>
+  ; CHECK: %atomicrmw.xchg = atomicrmw xchg i32* %word, i32 12 monotonic<br>
+  %atomicrmw.add = atomicrmw add i32* %word, i32 13 monotonic<br>
+  ; CHECK: %atomicrmw.add = atomicrmw add i32* %word, i32 13 monotonic<br>
+  %atomicrmw.sub = atomicrmw sub i32* %word, i32 14 monotonic<br>
+  ; CHECK: %atomicrmw.sub = atomicrmw sub i32* %word, i32 14 monotonic<br>
+  %atomicrmw.and = atomicrmw and i32* %word, i32 15 monotonic<br>
+  ; CHECK: %atomicrmw.and = atomicrmw and i32* %word, i32 15 monotonic<br>
+  %atomicrmw.nand = atomicrmw nand i32* %word, i32 16 monotonic<br>
+  ; CHECK: %atomicrmw.nand = atomicrmw nand i32* %word, i32 16 monotonic<br>
+  %atomicrmw.or = atomicrmw or i32* %word, i32 17 monotonic<br>
+  ; CHECK: %atomicrmw.or = atomicrmw or i32* %word, i32 17 monotonic<br>
+  %atomicrmw.xor = atomicrmw xor i32* %word, i32 18 monotonic<br>
+  ; CHECK: %atomicrmw.xor = atomicrmw xor i32* %word, i32 18 monotonic<br>
+  %atomicrmw.max = atomicrmw max i32* %word, i32 19 monotonic<br>
+  ; CHECK: %atomicrmw.max = atomicrmw max i32* %word, i32 19 monotonic<br>
+  %atomicrmw.min = atomicrmw volatile min i32* %word, i32 20 monotonic<br>
+  ; CHECK: %atomicrmw.min = atomicrmw volatile min i32* %word, i32 20 monotonic<br>
+  %atomicrmw.umax = atomicrmw umax i32* %word, i32 21 singlethread monotonic<br>
+  ; CHECK: %atomicrmw.umax = atomicrmw umax i32* %word, i32 21 singlethread monotonic<br>
+  %atomicrmw.umin = atomicrmw volatile umin i32* %word, i32 22 singlethread monotonic<br>
+  ; CHECK: %atomicrmw.umin = atomicrmw volatile umin i32* %word, i32 22 singlethread monotonic<br>
+  fence acquire<br>
+  ; CHECK: fence acquire<br>
+  fence release<br>
+  ; CHECK: fence release<br>
+  fence acq_rel<br>
+  ; CHECK: fence acq_rel<br>
+  fence singlethread seq_cst<br>
+  ; CHECK: fence singlethread seq_cst<br>
+<br>
+  ; XXX: The parser spits out the load type here.<br>
+  %ld.1 = load atomic i32* %word monotonic, align 4<br>
+  ; CHECK: %ld.1 = load atomic i32, i32* %word monotonic, align 4<br>
+  %ld.2 = load atomic volatile i32* %word acquire, align 8<br>
+  ; CHECK: %ld.2 = load atomic volatile i32, i32* %word acquire, align 8<br>
+  %ld.3 = load atomic volatile i32* %word singlethread seq_cst, align 16<br>
+  ; CHECK: %ld.3 = load atomic volatile i32, i32* %word singlethread seq_cst, align 16<br>
+<br>
+  store atomic i32 23, i32* %word monotonic, align 4<br>
+  ; CHECK: store atomic i32 23, i32* %word monotonic, align 4<br>
+  store atomic volatile i32 24, i32* %word monotonic, align 4<br>
+  ; CHECK: store atomic volatile i32 24, i32* %word monotonic, align 4<br>
+  store atomic volatile i32 25, i32* %word singlethread monotonic, align 4<br>
+  ; CHECK: store atomic volatile i32 25, i32* %word singlethread monotonic, align 4<br>
+  ret void<br>
+}<br>
+<br>
+;; Fast Math Flags<br>
+define void @fastmathflags(float %op1, float %op2) {<br>
+  %f.nnan = fadd nnan float %op1, %op2<br>
+  ; CHECK: %f.nnan = fadd nnan float %op1, %op2<br>
+  %f.ninf = fadd ninf float %op1, %op2<br>
+  ; CHECK: %f.ninf = fadd ninf float %op1, %op2<br>
+  %f.nsz = fadd nsz float %op1, %op2<br>
+  ; CHECK: %f.nsz = fadd nsz float %op1, %op2<br>
+  %f.arcp = fadd arcp float %op1, %op2<br>
+  ; CHECK: %f.arcp = fadd arcp float %op1, %op2<br>
+  %f.fast = fadd fast float %op1, %op2<br>
+  ; CHECK: %f.fast = fadd fast float %op1, %op2<br>
+  ret void<br>
+}<br>
+<br>
+;; Type System<br>
+%opaquety = type opaque<br>
+define void @typesystem() {<br>
+  %p0 = bitcast i8* null to i32 (i32)*<br>
+  ; CHECK: %p0 = bitcast i8* null to i32 (i32)*<br>
+  %p1 = bitcast i8* null to void (i8*)*<br>
+  ; CHECK: %p1 = bitcast i8* null to void (i8*)*<br>
+  %p2 = bitcast i8* null to i32 (i8*, ...)*<br>
+  ; CHECK: %p2 = bitcast i8* null to i32 (i8*, ...)*<br>
+  %p3 = bitcast i8* null to { i32, i8 } (i8*, ...)*<br>
+  ; CHECK: %p3 = bitcast i8* null to { i32, i8 } (i8*, ...)*<br>
+  %p4 = bitcast i8* null to <{ i32, i8 }> (i8*, ...)*<br>
+  ; CHECK: %p4 = bitcast i8* null to <{ i32, i8 }> (i8*, ...)*<br>
+  %p5 = bitcast i8* null to <{ i32, i8 }> (<{ i8*, i64 }>*, ...)*<br>
+  ; CHECK: %p5 = bitcast i8* null to <{ i32, i8 }> (<{ i8*, i64 }>*, ...)*<br>
+<br>
+  %t0 = alloca i1942652<br>
+  ; CHECK: %t0 = alloca i1942652<br>
+  %t1 = alloca half<br>
+  ; CHECK: %t1 = alloca half<br>
+  %t2 = alloca float<br>
+  ; CHECK: %t2 = alloca float<br>
+  %t3 = alloca double<br>
+  ; CHECK: %t3 = alloca double<br>
+  %t4 = alloca fp128<br>
+  ; CHECK: %t4 = alloca fp128<br>
+  %t5 = alloca x86_fp80<br>
+  ; CHECK: %t5 = alloca x86_fp80<br>
+  %t6 = alloca ppc_fp128<br>
+  ; CHECK: %t6 = alloca ppc_fp128<br>
+  %t7 = alloca x86_mmx<br>
+  ; CHECK: %t7 = alloca x86_mmx<br>
+  %t8 = alloca %opaquety*<br>
+  ; CHECK: %t8 = alloca %opaquety*<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+;; Inline Assembler Expressions<br>
+define void @inlineasm(i32 %arg) {<br>
+  call i32 asm "bswap $0", "=r,r"(i32 %arg)<br>
+  ; CHECK: call i32 asm "bswap $0", "=r,r"(i32 %arg)<br>
+  call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)<br>
+  ; CHECK: call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)<br>
+  ret void<br>
+}<br>
+<br>
+;; Instructions<br>
+<br>
+; Instructions -- Terminators<br>
+define void @instructions.terminators(i8 %val) { ; XXX: landingpad changed.<br>
+; CHECK: define void @instructions.terminators(i8 %val) personality i32 ()* @personality_handler<br>
+<br>
+  br i1 false, label %iftrue, label %iffalse<br>
+  ; CHECK: br i1 false, label %iftrue, label %iffalse<br>
+  br label %iftrue<br>
+  ; CHECK: br label %iftrue<br>
+iftrue:<br>
+  ret void<br>
+  ; CHECK: ret void<br>
+iffalse:<br>
+<br>
+  switch i8 %val, label %defaultdest [<br>
+  ; CHECK: switch i8 %val, label %defaultdest [<br>
+         i8 0, label %defaultdest.0<br>
+         ; CHECK: i8 0, label %defaultdest.0<br>
+         i8 1, label %defaultdest.1<br>
+         ; CHECK: i8 1, label %defaultdest.1<br>
+         i8 2, label %defaultdest.2<br>
+         ; CHECK: i8 2, label %defaultdest.2<br>
+  ]<br>
+  ; CHECK: ]<br>
+defaultdest:<br>
+  ret void<br>
+defaultdest.0:<br>
+  ret void<br>
+defaultdest.1:<br>
+  ret void<br>
+defaultdest.2:<br>
+<br>
+  indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]<br>
+  ; CHECK: indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]<br>
+  indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]<br>
+  ; CHECK: indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]<br>
+<br>
+  invoke fastcc void @f.fastcc()<br>
+  ; CHECK: invoke fastcc void @f.fastcc()<br>
+         to label %defaultdest unwind label %exc<br>
+         ; CHECK: to label %defaultdest unwind label %exc<br>
+exc:<br>
+  %cleanup = landingpad i32 personality i32()* @personality_handler cleanup<br>
+<br>
+  resume i32 undef<br>
+  ; CHECK: resume i32 undef<br>
+  unreachable<br>
+  ; CHECK: unreachable<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Binary Operations<br>
+define void @instructions.binops(i8 %op1, i8 %op2) {<br>
+  ; nuw x nsw<br>
+  add i8 %op1, %op2<br>
+  ; CHECK: add i8 %op1, %op2<br>
+  add nuw i8 %op1, %op2<br>
+  ; CHECK: add nuw i8 %op1, %op2<br>
+  add nsw i8 %op1, %op2<br>
+  ; CHECK: add nsw i8 %op1, %op2<br>
+  add nuw nsw i8 %op1, %op2<br>
+  ; CHECK: add nuw nsw i8 %op1, %op2<br>
+  sub i8 %op1, %op2<br>
+  ; CHECK: sub i8 %op1, %op2<br>
+  sub nuw i8 %op1, %op2<br>
+  ; CHECK: sub nuw i8 %op1, %op2<br>
+  sub nsw i8 %op1, %op2<br>
+  ; CHECK: sub nsw i8 %op1, %op2<br>
+  sub nuw nsw i8 %op1, %op2<br>
+  ; CHECK: sub nuw nsw i8 %op1, %op2<br>
+  mul i8 %op1, %op2<br>
+  ; CHECK: mul i8 %op1, %op2<br>
+  mul nuw i8 %op1, %op2<br>
+  ; CHECK: mul nuw i8 %op1, %op2<br>
+  mul nsw i8 %op1, %op2<br>
+  ; CHECK: mul nsw i8 %op1, %op2<br>
+  mul nuw nsw i8 %op1, %op2<br>
+  ; CHECK: mul nuw nsw i8 %op1, %op2<br>
+<br>
+  ; exact<br>
+  udiv i8 %op1, %op2<br>
+  ; CHECK: udiv i8 %op1, %op2<br>
+  udiv exact i8 %op1, %op2<br>
+  ; CHECK: udiv exact i8 %op1, %op2<br>
+  sdiv i8 %op1, %op2<br>
+  ; CHECK: sdiv i8 %op1, %op2<br>
+  sdiv exact i8 %op1, %op2<br>
+  ; CHECK: sdiv exact i8 %op1, %op2<br>
+<br>
+  ; none<br>
+  urem i8 %op1, %op2<br>
+  ; CHECK: urem i8 %op1, %op2<br>
+  srem i8 %op1, %op2<br>
+  ; CHECK: srem i8 %op1, %op2<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Bitwise Binary Operations<br>
+define void @instructions.bitwise_binops(i8 %op1, i8 %op2) {<br>
+  ; nuw x nsw<br>
+  shl i8 %op1, %op2<br>
+  ; CHECK: shl i8 %op1, %op2<br>
+  shl nuw i8 %op1, %op2<br>
+  ; CHECK: shl nuw i8 %op1, %op2<br>
+  shl nsw i8 %op1, %op2<br>
+  ; CHECK: shl nsw i8 %op1, %op2<br>
+  shl nuw nsw i8 %op1, %op2<br>
+  ; CHECK: shl nuw nsw i8 %op1, %op2<br>
+<br>
+  ; exact<br>
+  lshr i8 %op1, %op2<br>
+  ; CHECK: lshr i8 %op1, %op2<br>
+  lshr exact i8 %op1, %op2<br>
+  ; CHECK: lshr exact i8 %op1, %op2<br>
+  ashr i8 %op1, %op2<br>
+  ; CHECK: ashr i8 %op1, %op2<br>
+  ashr exact i8 %op1, %op2<br>
+  ; CHECK: ashr exact i8 %op1, %op2<br>
+<br>
+  ; none<br>
+  and i8 %op1, %op2<br>
+  ; CHECK: and i8 %op1, %op2<br>
+  or i8 %op1, %op2<br>
+  ; CHECK: or i8 %op1, %op2<br>
+  xor i8 %op1, %op2<br>
+  ; CHECK: xor i8 %op1, %op2<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Vector Operations<br>
+define void @instructions.vectorops(<4 x float> %vec, <4 x float> %vec2) {<br>
+  extractelement <4 x float> %vec, i8 0<br>
+  ; CHECK: extractelement <4 x float> %vec, i8 0<br>
+  insertelement <4 x float> %vec, float 3.500000e+00, i8 0<br>
+  ; CHECK: insertelement <4 x float> %vec, float 3.500000e+00, i8 0<br>
+  shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer<br>
+  ; CHECK: shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Aggregate Operations<br>
+define void @instructions.aggregateops({ i8, i32 } %up, <{ i8, i32 }> %p,<br>
+                                       [3 x i8] %arr, { i8, { i32 }} %n,<br>
+                                       <2 x i8*> %pvec, <2 x i64> %offsets) {<br>
+  extractvalue { i8, i32 } %up, 0<br>
+  ; CHECK: extractvalue { i8, i32 } %up, 0<br>
+  extractvalue <{ i8, i32 }> %p, 1<br>
+  ; CHECK: extractvalue <{ i8, i32 }> %p, 1<br>
+  extractvalue [3 x i8] %arr, 2<br>
+  ; CHECK: extractvalue [3 x i8] %arr, 2<br>
+  extractvalue { i8, { i32 } } %n, 1, 0<br>
+  ; CHECK: extractvalue { i8, { i32 } } %n, 1, 0<br>
+<br>
+  insertvalue { i8, i32 } %up, i8 1, 0<br>
+  ; CHECK: insertvalue { i8, i32 } %up, i8 1, 0<br>
+  insertvalue <{ i8, i32 }> %p, i32 2, 1<br>
+  ; CHECK: insertvalue <{ i8, i32 }> %p, i32 2, 1<br>
+  insertvalue [3 x i8] %arr, i8 0, 0<br>
+  ; CHECK: insertvalue [3 x i8] %arr, i8 0, 0<br>
+  insertvalue { i8, { i32 } } %n, i32 0, 1, 0<br>
+  ; CHECK: insertvalue { i8, { i32 } } %n, i32 0, 1, 0<br>
+<br>
+  %up.ptr = alloca { i8, i32 }<br>
+  %p.ptr = alloca <{ i8, i32 }><br>
+  %arr.ptr = alloca [3 x i8]<br>
+  %n.ptr = alloca { i8, { i32 } }<br>
+<br>
+  ; XXX: The parser spits out the load type here.<br>
+  getelementptr { i8, i32 }* %up.ptr, i8 0<br>
+  ; CHECK: getelementptr { i8, i32 }, { i8, i32 }* %up.ptr, i8 0<br>
+  getelementptr <{ i8, i32 }>* %p.ptr, i8 1<br>
+  ; CHECK: getelementptr <{ i8, i32 }>, <{ i8, i32 }>* %p.ptr, i8 1<br>
+  getelementptr [3 x i8]* %arr.ptr, i8 2<br>
+  ; CHECK: getelementptr [3 x i8], [3 x i8]* %arr.ptr, i8 2<br>
+  getelementptr { i8, { i32 } }* %n.ptr, i32 0, i32 1<br>
+  ; CHECK: getelementptr { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 0, i32 1<br>
+  getelementptr inbounds { i8, { i32 } }* %n.ptr, i32 1, i32 0<br>
+  ; CHECK: getelementptr inbounds { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 1, i32 0<br>
+  getelementptr <2 x i8*> %pvec, <2 x i64> %offsets<br>
+  ; CHECK: getelementptr i8, <2 x i8*> %pvec, <2 x i64> %offsets<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Memory Access and Addressing Operations<br>
+!7 = !{i32 1}<br>
+!8 = !{}<br>
+!9 = !{i64 4}<br>
+define void @instructions.memops(i32** %base) {<br>
+  alloca i32, i8 4, align 4<br>
+  ; CHECK: alloca i32, i8 4, align 4<br>
+  alloca inalloca i32, i8 4, align 4<br>
+  ; CHECK: alloca inalloca i32, i8 4, align 4<br>
+<br>
+  load i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9<br>
+  ; CHECK: load i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9<br>
+  load volatile i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9<br>
+  ; CHECK: load volatile i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9<br>
+<br>
+  store i32* null, i32** %base, align 4, !nontemporal !8<br>
+  ; CHECK: store i32* null, i32** %base, align 4, !nontemporal !8<br>
+  store volatile i32* null, i32** %base, align 4, !nontemporal !8<br>
+  ; CHECK: store volatile i32* null, i32** %base, align 4, !nontemporal !8<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Conversion Operations<br>
+define void @instructions.conversions() {<br>
+  trunc i32 -1 to i1<br>
+  ; CHECK: trunc i32 -1 to i1<br>
+  zext i32 -1 to i64<br>
+  ; CHECK: zext i32 -1 to i64<br>
+  sext i32 -1 to i64<br>
+  ; CHECK: sext i32 -1 to i64<br>
+  fptrunc float undef to half<br>
+  ; CHECK: fptrunc float undef to half<br>
+  fpext half undef to float<br>
+  ; CHECK: fpext half undef to float<br>
+  fptoui float undef to i32<br>
+  ; CHECK: fptoui float undef to i32<br>
+  fptosi float undef to i32<br>
+  ; CHECK: fptosi float undef to i32<br>
+  uitofp i32 1 to float<br>
+  ; CHECK: uitofp i32 1 to float<br>
+  sitofp i32 -1 to float<br>
+  ; CHECK: sitofp i32 -1 to float<br>
+  ptrtoint i8* null to i64<br>
+  ; CHECK: ptrtoint i8* null to i64<br>
+  inttoptr i64 0 to i8*<br>
+  ; CHECK: inttoptr i64 0 to i8*<br>
+  bitcast i32 0 to i32<br>
+  ; CHECK: bitcast i32 0 to i32<br>
+  addrspacecast i32* null to i32 addrspace(1)*<br>
+  ; CHECK: addrspacecast i32* null to i32 addrspace(1)*<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Other Operations<br>
+define void @instructions.other(i32 %op1, i32 %op2, half %fop1, half %fop2) {<br>
+entry:<br>
+  icmp eq  i32 %op1, %op2<br>
+  ; CHECK: icmp eq  i32 %op1, %op2<br>
+  icmp ne  i32 %op1, %op2<br>
+  ; CHECK: icmp ne  i32 %op1, %op2<br>
+  icmp ugt i32 %op1, %op2<br>
+  ; CHECK: icmp ugt i32 %op1, %op2<br>
+  icmp uge i32 %op1, %op2<br>
+  ; CHECK: icmp uge i32 %op1, %op2<br>
+  icmp ult i32 %op1, %op2<br>
+  ; CHECK: icmp ult i32 %op1, %op2<br>
+  icmp ule i32 %op1, %op2<br>
+  ; CHECK: icmp ule i32 %op1, %op2<br>
+  icmp sgt i32 %op1, %op2<br>
+  ; CHECK: icmp sgt i32 %op1, %op2<br>
+  icmp sge i32 %op1, %op2<br>
+  ; CHECK: icmp sge i32 %op1, %op2<br>
+  icmp slt i32 %op1, %op2<br>
+  ; CHECK: icmp slt i32 %op1, %op2<br>
+  icmp sle i32 %op1, %op2<br>
+  ; CHECK: icmp sle i32 %op1, %op2<br>
+<br>
+  fcmp false half %fop1, %fop2<br>
+  ; CHECK: fcmp false half %fop1, %fop2<br>
+  fcmp oeq   half %fop1, %fop2<br>
+  ; CHECK: fcmp oeq   half %fop1, %fop2<br>
+  fcmp ogt   half %fop1, %fop2<br>
+  ; CHECK: fcmp ogt   half %fop1, %fop2<br>
+  fcmp oge   half %fop1, %fop2<br>
+  ; CHECK: fcmp oge   half %fop1, %fop2<br>
+  fcmp olt   half %fop1, %fop2<br>
+  ; CHECK: fcmp olt   half %fop1, %fop2<br>
+  fcmp ole   half %fop1, %fop2<br>
+  ; CHECK: fcmp ole   half %fop1, %fop2<br>
+  fcmp one   half %fop1, %fop2<br>
+  ; CHECK: fcmp one   half %fop1, %fop2<br>
+  fcmp ord   half %fop1, %fop2<br>
+  ; CHECK: fcmp ord   half %fop1, %fop2<br>
+  fcmp ueq   half %fop1, %fop2<br>
+  ; CHECK: fcmp ueq   half %fop1, %fop2<br>
+  fcmp ugt   half %fop1, %fop2<br>
+  ; CHECK: fcmp ugt   half %fop1, %fop2<br>
+  fcmp uge   half %fop1, %fop2<br>
+  ; CHECK: fcmp uge   half %fop1, %fop2<br>
+  fcmp ult   half %fop1, %fop2<br>
+  ; CHECK: fcmp ult   half %fop1, %fop2<br>
+  fcmp ule   half %fop1, %fop2<br>
+  ; CHECK: fcmp ule   half %fop1, %fop2<br>
+  fcmp une   half %fop1, %fop2<br>
+  ; CHECK: fcmp une   half %fop1, %fop2<br>
+  fcmp uno   half %fop1, %fop2<br>
+  ; CHECK: fcmp uno   half %fop1, %fop2<br>
+  fcmp true  half %fop1, %fop2<br>
+  ; CHECK: fcmp true  half %fop1, %fop2<br>
+<br>
+  br label %exit<br>
+L1:<br>
+  %v1 = add i32 %op1, %op2<br>
+  br label %exit<br>
+L2:<br>
+  %v2 = add i32 %op1, %op2<br>
+  br label %exit<br>
+exit:<br>
+  phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]<br>
+  ; CHECK: phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]<br>
+<br>
+  select i1 true, i32 0, i32 1<br>
+  ; CHECK: select i1 true, i32 0, i32 1<br>
+  select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br>
+  ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br>
+<br>
+  call void @f.nobuiltin() builtin<br>
+  ; CHECK: call void @f.nobuiltin() #31<br>
+<br>
+  call fastcc noalias i32* @f.noalias() noinline<br>
+  ; CHECK: call fastcc noalias i32* @f.noalias() #11<br>
+  tail call ghccc nonnull i32* @f.nonnull() minsize<br>
+  ; CHECK: tail call ghccc nonnull i32* @f.nonnull() #6<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+define void @instructions.call_musttail(i8* inalloca %val) {<br>
+  musttail call void @f.param.inalloca(i8* inalloca %val)<br>
+  ; CHECK: musttail call void @f.param.inalloca(i8* inalloca %val)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+declare void @llvm.donothing() nounwind readnone<br>
+<br>
+declare i32 @personality_handler()<br>
+<br>
+define void @instructions.landingpad() {<br>
+; CHECK: define void @instructions.landingpad() personality i32 ()* @personality_handler<br>
+<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch1<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch2<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch3<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch4<br>
+<br>
+catch1:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             personality i32()* @personality_handler<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+  br label %proceed<br>
+<br>
+catch2:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             personality i32()* @personality_handler<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+  br label %proceed<br>
+<br>
+catch3:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             personality i32()* @personality_handler<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+  br label %proceed<br>
+<br>
+catch4:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             personality i32()* @personality_handler<br>
+             filter [2 x i32] zeroinitializer<br>
+             ; CHECK: filter [2 x i32] zeroinitializer<br>
+  br label %proceed<br>
+<br>
+proceed:<br>
+  ret void<br>
+}<br>
+<br>
+;; Intrinsic Functions<br>
+<br>
+; Intrinsic Functions -- Variable Argument Handling<br>
+declare void @llvm.va_start(i8*)<br>
+declare void @llvm.va_copy(i8*, i8*)<br>
+declare void @llvm.va_end(i8*)<br>
+define void @instructions.va_arg(i8* %v, ...) {<br>
+  %ap = alloca i8*<br>
+  %ap2 = bitcast i8** %ap to i8*<br>
+<br>
+  call void @llvm.va_start(i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_start(i8* %ap2)<br>
+<br>
+  va_arg i8* %ap2, i32<br>
+  ; CHECK: va_arg i8* %ap2, i32<br>
+<br>
+  call void @llvm.va_copy(i8* %v, i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_copy(i8* %v, i8* %ap2)<br>
+<br>
+  call void @llvm.va_end(i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_end(i8* %ap2)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Intrinsic Functions -- Accurate Garbage Collection<br>
+declare void @llvm.gcroot(i8**, i8*)<br>
+declare i8* @llvm.gcread(i8*, i8**)<br>
+declare void @llvm.gcwrite(i8*, i8*, i8**)<br>
+define void @intrinsics.gc() gc "shadow-stack" {<br>
+  %ptrloc = alloca i8*<br>
+  call void @llvm.gcroot(i8** %ptrloc, i8* null)<br>
+  ; CHECK: call void @llvm.gcroot(i8** %ptrloc, i8* null)<br>
+<br>
+  call i8* @llvm.gcread(i8* null, i8** %ptrloc)<br>
+  ; CHECK: call i8* @llvm.gcread(i8* null, i8** %ptrloc)<br>
+<br>
+  %ref = alloca i8<br>
+  call void @llvm.gcwrite(i8* %ref, i8* null, i8** %ptrloc)<br>
+  ; CHECK: call void @llvm.gcwrite(i8* %ref, i8* null, i8** %ptrloc)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Intrinsic Functions -- Code Generation<br>
+declare i8* @llvm.returnaddress(i32)<br>
+declare i8* @llvm.frameaddress(i32)<br>
+declare i32 @llvm.read_register.i32(metadata)<br>
+declare i64 @llvm.read_register.i64(metadata)<br>
+declare void @llvm.write_register.i32(metadata, i32)<br>
+declare void @llvm.write_register.i64(metadata, i64)<br>
+declare i8* @llvm.stacksave()<br>
+declare void @llvm.stackrestore(i8*)<br>
+declare void @llvm.prefetch(i8*, i32, i32, i32)<br>
+declare void @llvm.pcmarker(i32)<br>
+declare i64 @llvm.readcyclecounter()<br>
+declare void @llvm.clear_cache(i8*, i8*)<br>
+declare void @llvm.instrprof_increment(i8*, i64, i32, i32)<br>
+<br>
+!10 = !{!"rax"}<br>
+define void @intrinsics.codegen() {<br>
+  call i8* @llvm.returnaddress(i32 1)<br>
+  ; CHECK: call i8* @llvm.returnaddress(i32 1)<br>
+  call i8* @llvm.frameaddress(i32 1)<br>
+  ; CHECK: call i8* @llvm.frameaddress(i32 1)<br>
+<br>
+  call i32 @llvm.read_register.i32(metadata !10)<br>
+  ; CHECK: call i32 @llvm.read_register.i32(metadata !10)<br>
+  call i64 @llvm.read_register.i64(metadata !10)<br>
+  ; CHECK: call i64 @llvm.read_register.i64(metadata !10)<br>
+  call void @llvm.write_register.i32(metadata !10, i32 0)<br>
+  ; CHECK: call void @llvm.write_register.i32(metadata !10, i32 0)<br>
+  call void @llvm.write_register.i64(metadata !10, i64 0)<br>
+  ; CHECK: call void @llvm.write_register.i64(metadata !10, i64 0)<br>
+<br>
+  %stack = call i8* @llvm.stacksave()<br>
+  ; CHECK: %stack = call i8* @llvm.stacksave()<br>
+  call void @llvm.stackrestore(i8* %stack)<br>
+  ; CHECK: call void @llvm.stackrestore(i8* %stack)<br>
+<br>
+  call void @llvm.prefetch(i8* %stack, i32 0, i32 3, i32 0)<br>
+  ; CHECK: call void @llvm.prefetch(i8* %stack, i32 0, i32 3, i32 0)<br>
+<br>
+  call void @llvm.pcmarker(i32 1)<br>
+  ; CHECK: call void @llvm.pcmarker(i32 1)<br>
+<br>
+  call i64 @llvm.readcyclecounter()<br>
+  ; CHECK: call i64 @llvm.readcyclecounter()<br>
+<br>
+  call void @llvm.clear_cache(i8* null, i8* null)<br>
+  ; CHECK: call void @llvm.clear_cache(i8* null, i8* null)<br>
+<br>
+  call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)<br>
+  ; CHECK: call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; CHECK: attributes #0 = { alignstack=4 }<br>
+; CHECK: attributes #1 = { alignstack=8 }<br>
+; CHECK: attributes #2 = { alwaysinline }<br>
+; CHECK: attributes #3 = { cold }<br>
+; CHECK: attributes #4 = { inlinehint }<br>
+; CHECK: attributes #5 = { jumptable }<br>
+; CHECK: attributes #6 = { minsize }<br>
+; CHECK: attributes #7 = { naked }<br>
+; CHECK: attributes #8 = { nobuiltin }<br>
+; CHECK: attributes #9 = { noduplicate }<br>
+; CHECK: attributes #10 = { noimplicitfloat }<br>
+; CHECK: attributes #11 = { noinline }<br>
+; CHECK: attributes #12 = { nonlazybind }<br>
+; CHECK: attributes #13 = { noredzone }<br>
+; CHECK: attributes #14 = { noreturn }<br>
+; CHECK: attributes #15 = { nounwind }<br>
+; CHECK: attributes #16 = { noinline optnone }<br>
+; CHECK: attributes #17 = { optsize }<br>
+; CHECK: attributes #18 = { readnone }<br>
+; CHECK: attributes #19 = { readonly }<br>
+; CHECK: attributes #20 = { returns_twice }<br>
+; CHECK: attributes #21 = { sanitize_address }<br>
+; CHECK: attributes #22 = { sanitize_memory }<br>
+; CHECK: attributes #23 = { sanitize_thread }<br>
+; CHECK: attributes #24 = { ssp }<br>
+; CHECK: attributes #25 = { sspreq }<br>
+; CHECK: attributes #26 = { sspstrong }<br>
+; CHECK: attributes #27 = { uwtable }<br>
+; CHECK: attributes #28 = { "cpu"="cortex-a8" }<br>
+; CHECK: attributes #31 = { builtin }<br>
+<br>
+;; Metadata<br>
+<br>
+; Metadata -- Module flags<br>
+!llvm.module.flags = !{!0, !1, !2, !4, !5, !6}<br>
+; CHECK: !llvm.module.flags = !{!0, !1, !2, !4, !5, !6}<br>
+<br>
+!0 = !{i32 1, !"mod1", i32 0}<br>
+; CHECK: !0 = !{i32 1, !"mod1", i32 0}<br>
+!1 = !{i32 2, !"mod2", i32 0}<br>
+; CHECK: !1 = !{i32 2, !"mod2", i32 0}<br>
+!2 = !{i32 3, !"mod3", !3}<br>
+; CHECK: !2 = !{i32 3, !"mod3", !3}<br>
+!3 = !{!"mod6", !0}<br>
+; CHECK: !3 = !{!"mod6", !0}<br>
+!4 = !{i32 4, !"mod4", i32 0}<br>
+; CHECK: !4 = !{i32 4, !"mod4", i32 0}<br>
+!5 = !{i32 5, !"mod5", !0}<br>
+; CHECK: !5 = !{i32 5, !"mod5", !0}<br>
+!6 = !{i32 6, !"mod6", !0}<br>
+; CHECK: !6 = !{i32 6, !"mod6", !0}<br>
<br>
Added: llvm/trunk/test/Bitcode/compatibility-3.6.ll.bc<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Bitcode_compatibility-2D3.6.ll.bc-3Frev-3D243779-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=VCr0aTfZg2eyySBPN4W2v2jABgMHC1fw_hZlNKbAhbo&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility-3.6.ll.bc?rev=243779&view=auto</a><br>
==============================================================================<br>
Binary files llvm/trunk/test/Bitcode/compatibility-3.6.ll.bc (added) and llvm/trunk/test/Bitcode/compatibility-3.6.ll.bc Fri Jul 31 15:44:32 2015 differ<br>
<br>
Added: llvm/trunk/test/Bitcode/compatibility.ll<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Bitcode_compatibility.ll-3Frev-3D243779-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=VvnAqbNQS0O8-SZNn9mPVT0oXFbybNGfkRQwyeqkxMA&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility.ll?rev=243779&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/Bitcode/compatibility.ll (added)<br>
+++ llvm/trunk/test/Bitcode/compatibility.ll Fri Jul 31 15:44:32 2015<br>
@@ -0,0 +1,1280 @@<br>
+; Bitcode compatibility test for llvm<br>
+;<br>
+; Please update this file when making any IR changes. Information on the<br>
+; release process for this file is available here:<br>
+;<br>
+;     <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_DeveloperPolicy.html-23ir-2Dbackwards-2Dcompatibility&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=iUEvLJFf2MzkEK4dthfTILBUV3ogxBqfp-ExDpeEwyI&e=" rel="noreferrer" target="_blank">http://llvm.org/docs/DeveloperPolicy.html#ir-backwards-compatibility</a><br>
+<br>
+; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s<br>
+; RUN: verify-uselistorder < %s<br>
+<br>
+target datalayout = "E"<br>
+; CHECK: target datalayout = "E"<br>
+<br>
+target triple = "x86_64-apple-macosx10.10.0"<br>
+; CHECK: target triple = "x86_64-apple-macosx10.10.0"<br>
+<br>
+;; Module-level assembly<br>
+module asm "beep boop"<br>
+; CHECK: module asm "beep boop"<br>
+<br>
+;; Comdats<br>
+$comdat.any = comdat any<br>
+; CHECK: $comdat.any = comdat any<br>
+$comdat.exactmatch = comdat exactmatch<br>
+; CHECK: $comdat.exactmatch = comdat exactmatch<br>
+$comdat.largest = comdat largest<br>
+; CHECK: $comdat.largest = comdat largest<br>
+$comdat.noduplicates = comdat noduplicates<br>
+; CHECK: $comdat.noduplicates = comdat noduplicates<br>
+$comdat.samesize = comdat samesize<br>
+; CHECK: $comdat.samesize = comdat samesize<br>
+<br>
+;; Constants<br>
+@const.true = constant i1 true<br>
+; CHECK: @const.true = constant i1 true<br>
+@const.false = constant i1 false<br>
+; CHECK: @const.false = constant i1 false<br>
+@<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__const.int&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=MNjKXpkLeogzpXCakzBUaVXF6qFKXRGSrwIFz02gop4&e=" rel="noreferrer" target="_blank">const.int</a> = constant i32 zeroinitializer<br>
+; CHECK: @<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__const.int&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=ze4ZPDFxC7sHorl44hHRjfJy3ERdHUAobaC0U28eqA4&s=MNjKXpkLeogzpXCakzBUaVXF6qFKXRGSrwIFz02gop4&e=" rel="noreferrer" target="_blank">const.int</a> = constant i32 0<br>
+@const.float = constant double 0.0<br>
+; CHECK: @const.float = constant double 0.0<br>
+@const.null = constant i8* null<br>
+; CHECK: @const.null = constant i8* null<br>
+%const.struct.type = type { i32, i8 }<br>
+%const.struct.type.packed = type <{ i32, i8 }><br>
+@const.struct = constant %const.struct.type { i32 -1, i8 undef }<br>
+; CHECK: @const.struct = constant %const.struct.type { i32 -1, i8 undef }<br>
+@const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }><br>
+; CHECK: @const.struct.packed = constant %const.struct.type.packed <{ i32 -1, i8 1 }><br>
+@const.array = constant [2 x i32] [i32 -3, i32 -4]<br>
+; CHECK: @const.array = constant [2 x i32] [i32 -3, i32 -4]<br>
+@const.vector = constant <2 x i32> <i32 -5, i32 -6><br>
+; CHECK: @const.vector = constant <2 x i32> <i32 -5, i32 -6><br>
+<br>
+;; Global Variables<br>
+; Format: [@<GlobalVarName> =] [Linkage] [Visibility] [DLLStorageClass]<br>
+;         [ThreadLocal] [unnamed_addr] [AddrSpace] [ExternallyInitialized]<br>
+;         <global | constant> <Type> [<InitializerConstant>]<br>
+;         [, section "name"] [, comdat [($name)]] [, align <Alignment>]<br>
+<br>
+; Global Variables -- Simple<br>
+@g1 = global i32 0<br>
+; CHECK: @g1 = global i32 0<br>
+@g2 = constant i32 0<br>
+; CHECK: @g2 = constant i32 0<br>
+<br>
+; Global Variables -- Linkage<br>
+@g.private = private global i32 0<br>
+; CHECK: @g.private = private global i32 0<br>
+@g.internal = internal global i32 0<br>
+; CHECK: @g.internal = internal global i32 0<br>
+@g.available_externally = available_externally global i32 0<br>
+; CHECK: @g.available_externally = available_externally global i32 0<br>
+@g.linkonce = linkonce global i32 0<br>
+; CHECK: @g.linkonce = linkonce global i32 0<br>
+@g.weak = weak global i32 0<br>
+; CHECK: @g.weak = weak global i32 0<br>
+@g.common = common global i32 0<br>
+; CHECK: @g.common = common global i32 0<br>
+@g.appending = appending global [4 x i8] c"test"<br>
+; CHECK: @g.appending = appending global [4 x i8] c"test"<br>
+@g.extern_weak = extern_weak global i32<br>
+; CHECK: @g.extern_weak = extern_weak global i32<br>
+@g.linkonce_odr = linkonce_odr global i32 0<br>
+; CHECK: @g.linkonce_odr = linkonce_odr global i32 0<br>
+@g.weak_odr = weak_odr global i32 0<br>
+; CHECK: @g.weak_odr = weak_odr global i32 0<br>
+@g.external = external global i32<br>
+; CHECK: @g.external = external global i32<br>
+<br>
+; Global Variables -- Visibility<br>
+@g.default = default global i32 0<br>
+; CHECK: @g.default = global i32 0<br>
+@g.hidden = hidden global i32 0<br>
+; CHECK: @g.hidden = hidden global i32 0<br>
+@g.protected = protected global i32 0<br>
+; CHECK: @g.protected = protected global i32 0<br>
+<br>
+; Global Variables -- DLLStorageClass<br>
+@g.dlldefault = default global i32 0<br>
+; CHECK: @g.dlldefault = global i32 0<br>
+@g.dllimport = external dllimport global i32<br>
+; CHECK: @g.dllimport = external dllimport global i32<br>
+@g.dllexport = dllexport global i32 0<br>
+; CHECK: @g.dllexport = dllexport global i32 0<br>
+<br>
+; Global Variables -- ThreadLocal<br>
+@g.notthreadlocal = global i32 0<br>
+; CHECK: @g.notthreadlocal = global i32 0<br>
+@g.generaldynamic = thread_local global i32 0<br>
+; CHECK: @g.generaldynamic = thread_local global i32 0<br>
+@g.localdynamic = thread_local(localdynamic) global i32 0<br>
+; CHECK: @g.localdynamic = thread_local(localdynamic) global i32 0<br>
+@g.initialexec = thread_local(initialexec) global i32 0<br>
+; CHECK: @g.initialexec = thread_local(initialexec) global i32 0<br>
+@g.localexec = thread_local(localexec) global i32 0<br>
+; CHECK: @g.localexec = thread_local(localexec) global i32 0<br>
+<br>
+; Global Variables -- unnamed_addr<br>
+@g.unnamed_addr = unnamed_addr global i32 0<br>
+; CHECK: @g.unnamed_addr = unnamed_addr global i32 0<br>
+<br>
+; Global Variables -- AddrSpace<br>
+@g.addrspace = addrspace(1) global i32 0<br>
+; CHECK: @g.addrspace = addrspace(1) global i32 0<br>
+<br>
+; Global Variables -- ExternallyInitialized<br>
+@g.externally_initialized = external externally_initialized global i32<br>
+; CHECK: @g.externally_initialized = external externally_initialized global i32<br>
+<br>
+; Global Variables -- section<br>
+@g.section = global i32 0, section "_DATA"<br>
+; CHECK: @g.section = global i32 0, section "_DATA"<br>
+<br>
+; Global Variables -- comdat<br>
+@comdat.any = global i32 0, comdat<br>
+; CHECK: @comdat.any = global i32 0, comdat<br>
+@comdat.exactmatch = global i32 0, comdat<br>
+; CHECK: @comdat.exactmatch = global i32 0, comdat<br>
+@comdat.largest = global i32 0, comdat<br>
+; CHECK: @comdat.largest = global i32 0, comdat<br>
+@comdat.noduplicates = global i32 0, comdat<br>
+; CHECK: @comdat.noduplicates = global i32 0, comdat<br>
+@comdat.samesize = global i32 0, comdat<br>
+; CHECK: @comdat.samesize = global i32 0, comdat<br>
+<br>
+; Force two globals from different comdats into sections with the same name.<br>
+$comdat1 = comdat any<br>
+$comdat2 = comdat any<br>
+@g.comdat1 = global i32 0, section "SharedSection", comdat($comdat1)<br>
+; CHECK: @g.comdat1 = global i32 0, section "SharedSection", comdat($comdat1)<br>
+@g.comdat2 = global i32 0, section "SharedSection", comdat($comdat2)<br>
+; CHECK: @g.comdat2 = global i32 0, section "SharedSection", comdat($comdat2)<br>
+<br>
+; Global Variables -- align<br>
+@g.align = global i32 0, align 4<br>
+; CHECK: @g.align = global i32 0, align 4<br>
+<br>
+; Global Variables -- Intrinsics<br>
+%pri.func.data = type { i32, void ()*, i8* }<br>
+@g.used1 = global i32 0<br>
+@g.used2 = global i32 0<br>
+@g.used3 = global i8 0<br>
+declare void @g.f1()<br>
+@llvm.used = appending global [1 x i32*] [i32* @g.used1], section "llvm.metadata"<br>
+; CHECK: @llvm.used = appending global [1 x i32*] [i32* @g.used1], section "llvm.metadata"<br>
+@llvm.compiler.used = appending global [1 x i32*] [i32* @g.used2], section "llvm.metadata"<br>
+; CHECK: @llvm.compiler.used = appending global [1 x i32*] [i32* @g.used2], section "llvm.metadata"<br>
+@llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+; CHECK: @llvm.global_ctors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+@llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+; CHECK: @llvm.global_dtors = appending global [1 x %pri.func.data] [%pri.func.data { i32 0, void ()* @g.f1, i8* @g.used3 }], section "llvm.metadata"<br>
+<br>
+;; Aliases<br>
+; Format: @<Name> = [Linkage] [Visibility] [DLLStorageClass] [ThreadLocal]<br>
+;                   [unnamed_addr] alias <AliaseeTy> @<Aliasee><br>
+<br>
+; Aliases -- Linkage<br>
+@a.private = private alias i32* @g.private<br>
+; CHECK: @a.private = private alias i32* @g.private<br>
+@a.internal = internal alias i32* @g.internal<br>
+; CHECK: @a.internal = internal alias i32* @g.internal<br>
+@a.linkonce = linkonce alias i32* @g.linkonce<br>
+; CHECK: @a.linkonce = linkonce alias i32* @g.linkonce<br>
+@a.weak = weak alias i32* @g.weak<br>
+; CHECK: @a.weak = weak alias i32* @g.weak<br>
+@a.linkonce_odr = linkonce_odr alias i32* @g.linkonce_odr<br>
+; CHECK: @a.linkonce_odr = linkonce_odr alias i32* @g.linkonce_odr<br>
+@a.weak_odr = weak_odr alias i32* @g.weak_odr<br>
+; CHECK: @a.weak_odr = weak_odr alias i32* @g.weak_odr<br>
+@a.external = external alias i32* @g1<br>
+; CHECK: @a.external = alias i32* @g1<br>
+<br>
+; Aliases -- Visibility<br>
+@a.default = default alias i32* @g.default<br>
+; CHECK: @a.default = alias i32* @g.default<br>
+@a.hidden = hidden alias i32* @g.hidden<br>
+; CHECK: @a.hidden = hidden alias i32* @g.hidden<br>
+@a.protected = protected alias i32* @g.protected<br>
+; CHECK: @a.protected = protected alias i32* @g.protected<br>
+<br>
+; Aliases -- DLLStorageClass<br>
+@a.dlldefault = default alias i32* @g.dlldefault<br>
+; CHECK: @a.dlldefault = alias i32* @g.dlldefault<br>
+@a.dllimport = dllimport alias i32* @g1<br>
+; CHECK: @a.dllimport = dllimport alias i32* @g1<br>
+@a.dllexport = dllexport alias i32* @g.dllexport<br>
+; CHECK: @a.dllexport = dllexport alias i32* @g.dllexport<br>
+<br>
+; Aliases -- ThreadLocal<br>
+@a.notthreadlocal = alias i32* @g.notthreadlocal<br>
+; CHECK: @a.notthreadlocal = alias i32* @g.notthreadlocal<br>
+@a.generaldynamic = thread_local alias i32* @g.generaldynamic<br>
+; CHECK: @a.generaldynamic = thread_local alias i32* @g.generaldynamic<br>
+@a.localdynamic = thread_local(localdynamic) alias i32* @g.localdynamic<br>
+; CHECK: @a.localdynamic = thread_local(localdynamic) alias i32* @g.localdynamic<br>
+@a.initialexec = thread_local(initialexec) alias i32* @g.initialexec<br>
+; CHECK: @a.initialexec = thread_local(initialexec) alias i32* @g.initialexec<br>
+@a.localexec = thread_local(localexec) alias i32* @g.localexec<br>
+; CHECK: @a.localexec = thread_local(localexec) alias i32* @g.localexec<br>
+<br>
+; Aliases -- unnamed_addr<br>
+@a.unnamed_addr = unnamed_addr alias i32* @g.unnamed_addr<br>
+; CHECK: @a.unnamed_addr = unnamed_addr alias i32* @g.unnamed_addr<br>
+<br>
+;; Functions<br>
+; Format: define [linkage] [visibility] [DLLStorageClass]<br>
+;         [cconv] [ret attrs]<br>
+;         <ResultType> @<FunctionName> ([argument list])<br>
+;         [unnamed_addr] [fn Attrs] [section "name"] [comdat [($name)]]<br>
+;         [align N] [gc] [prefix Constant] [prologue Constant]<br>
+;         [personality Constant] { ... }<br>
+<br>
+; Functions -- Simple<br>
+declare void @f1 ()<br>
+; CHECK: declare void @f1()<br>
+<br>
+define void @f2 () {<br>
+; CHECK: define void @f2()<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; Functions -- linkage<br>
+define private void @f.private() {<br>
+; CHECK: define private void @f.private()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define internal void @f.internal() {<br>
+; CHECK: define internal void @f.internal()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define available_externally void @f.available_externally() {<br>
+; CHECK: define available_externally void @f.available_externally()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define linkonce void @f.linkonce() {<br>
+; CHECK: define linkonce void @f.linkonce()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define weak void @f.weak() {<br>
+; CHECK: define weak void @f.weak()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define linkonce_odr void @f.linkonce_odr() {<br>
+; CHECK: define linkonce_odr void @f.linkonce_odr()<br>
+entry:<br>
+  ret void<br>
+}<br>
+define weak_odr void @f.weak_odr() {<br>
+; CHECK: define weak_odr void @f.weak_odr()<br>
+entry:<br>
+  ret void<br>
+}<br>
+declare external void @f.external()<br>
+; CHECK: declare void @f.external()<br>
+declare extern_weak void @f.extern_weak()<br>
+; CHECK: declare extern_weak void @f.extern_weak()<br>
+<br>
+; Functions -- visibility<br>
+declare default void @f.default()<br>
+; CHECK: declare void @f.default()<br>
+declare hidden void @f.hidden()<br>
+; CHECK: declare hidden void @f.hidden()<br>
+declare protected void @f.protected()<br>
+; CHECK: declare protected void @f.protected()<br>
+<br>
+; Functions -- DLLStorageClass<br>
+declare dllimport void @f.dllimport()<br>
+; CHECK: declare dllimport void @f.dllimport()<br>
+declare dllexport void @f.dllexport()<br>
+; CHECK: declare dllexport void @f.dllexport()<br>
+<br>
+; Functions -- cconv (Calling conventions)<br>
+declare ccc void @f.ccc()<br>
+; CHECK: declare void @f.ccc()<br>
+declare fastcc void @f.fastcc()<br>
+; CHECK: declare fastcc void @f.fastcc()<br>
+declare coldcc void @f.coldcc()<br>
+; CHECK: declare coldcc void @f.coldcc()<br>
+declare cc10 void @f.cc10()<br>
+; CHECK: declare ghccc void @f.cc10()<br>
+declare ghccc void @f.ghccc()<br>
+; CHECK: declare ghccc void @f.ghccc()<br>
+declare cc11 void @f.cc11()<br>
+; CHECK: declare cc11 void @f.cc11()<br>
+declare webkit_jscc void @f.webkit_jscc()<br>
+; CHECK: declare webkit_jscc void @f.webkit_jscc()<br>
+declare anyregcc void @f.anyregcc()<br>
+; CHECK: declare anyregcc void @f.anyregcc()<br>
+declare preserve_mostcc void @f.preserve_mostcc()<br>
+; CHECK: declare preserve_mostcc void @f.preserve_mostcc()<br>
+declare preserve_allcc void @f.preserve_allcc()<br>
+; CHECK: declare preserve_allcc void @f.preserve_allcc()<br>
+declare cc64 void @f.cc64()<br>
+; CHECK: declare x86_stdcallcc void @f.cc64()<br>
+declare x86_stdcallcc void @f.x86_stdcallcc()<br>
+; CHECK: declare x86_stdcallcc void @f.x86_stdcallcc()<br>
+declare cc65 void @f.cc65()<br>
+; CHECK: declare x86_fastcallcc void @f.cc65()<br>
+declare x86_fastcallcc void @f.x86_fastcallcc()<br>
+; CHECK: declare x86_fastcallcc void @f.x86_fastcallcc()<br>
+declare cc66 void @f.cc66()<br>
+; CHECK: declare arm_apcscc void @f.cc66()<br>
+declare arm_apcscc void @f.arm_apcscc()<br>
+; CHECK: declare arm_apcscc void @f.arm_apcscc()<br>
+declare cc67 void @f.cc67()<br>
+; CHECK: declare arm_aapcscc void @f.cc67()<br>
+declare arm_aapcscc void @f.arm_aapcscc()<br>
+; CHECK: declare arm_aapcscc void @f.arm_aapcscc()<br>
+declare cc68 void @f.cc68()<br>
+; CHECK: declare arm_aapcs_vfpcc void @f.cc68()<br>
+declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()<br>
+; CHECK: declare arm_aapcs_vfpcc void @f.arm_aapcs_vfpcc()<br>
+declare cc69 void @f.cc69()<br>
+; CHECK: declare msp430_intrcc void @f.cc69()<br>
+declare msp430_intrcc void @f.msp430_intrcc()<br>
+; CHECK: declare msp430_intrcc void @f.msp430_intrcc()<br>
+declare cc70 void @f.cc70()<br>
+; CHECK: declare x86_thiscallcc void @f.cc70()<br>
+declare x86_thiscallcc void @f.x86_thiscallcc()<br>
+; CHECK: declare x86_thiscallcc void @f.x86_thiscallcc()<br>
+declare cc71 void @f.cc71()<br>
+; CHECK: declare ptx_kernel void @f.cc71()<br>
+declare ptx_kernel void @f.ptx_kernel()<br>
+; CHECK: declare ptx_kernel void @f.ptx_kernel()<br>
+declare cc72 void @f.cc72()<br>
+; CHECK: declare ptx_device void @f.cc72()<br>
+declare ptx_device void @f.ptx_device()<br>
+; CHECK: declare ptx_device void @f.ptx_device()<br>
+declare cc75 void @f.cc75()<br>
+; CHECK: declare spir_func void @f.cc75()<br>
+declare spir_func void @f.spir_func()<br>
+; CHECK: declare spir_func void @f.spir_func()<br>
+declare cc76 void @f.cc76()<br>
+; CHECK: declare spir_kernel void @f.cc76()<br>
+declare spir_kernel void @f.spir_kernel()<br>
+; CHECK: declare spir_kernel void @f.spir_kernel()<br>
+declare cc77 void @f.cc77()<br>
+; CHECK: declare intel_ocl_bicc void @f.cc77()<br>
+declare intel_ocl_bicc void @f.intel_ocl_bicc()<br>
+; CHECK: declare intel_ocl_bicc void @f.intel_ocl_bicc()<br>
+declare cc78 void @f.cc78()<br>
+; CHECK: declare x86_64_sysvcc void @f.cc78()<br>
+declare x86_64_sysvcc void @f.x86_64_sysvcc()<br>
+; CHECK: declare x86_64_sysvcc void @f.x86_64_sysvcc()<br>
+declare cc79 void @f.cc79()<br>
+; CHECK: declare x86_64_win64cc void @f.cc79()<br>
+declare x86_64_win64cc void @f.x86_64_win64cc()<br>
+; CHECK: declare x86_64_win64cc void @f.x86_64_win64cc()<br>
+declare cc80 void @f.cc80()<br>
+; CHECK: declare x86_vectorcallcc void @f.cc80()<br>
+declare x86_vectorcallcc void @f.x86_vectorcallcc()<br>
+; CHECK: declare x86_vectorcallcc void @f.x86_vectorcallcc()<br>
+declare cc8191 void @f.cc8191()<br>
+; CHECK: declare cc8191 void @f.cc8191()<br>
+<br>
+; Functions -- ret attrs (Return attributes)<br>
+declare zeroext i64 @f.zeroext()<br>
+; CHECK: declare zeroext i64 @f.zeroext()<br>
+declare signext i64 @f.signext()<br>
+; CHECK: declare signext i64 @f.signext()<br>
+declare inreg i32* @f.inreg()<br>
+; CHECK: declare inreg i32* @f.inreg()<br>
+declare noalias i32* @f.noalias()<br>
+; CHECK: declare noalias i32* @f.noalias()<br>
+declare nonnull i32* @f.nonnull()<br>
+; CHECK: declare nonnull i32* @f.nonnull()<br>
+declare dereferenceable(4) i32* @f.dereferenceable4()<br>
+; CHECK: declare dereferenceable(4) i32* @f.dereferenceable4()<br>
+declare dereferenceable(8) i32* @f.dereferenceable8()<br>
+; CHECK: declare dereferenceable(8) i32* @f.dereferenceable8()<br>
+declare dereferenceable(16) i32* @f.dereferenceable16()<br>
+; CHECK: declare dereferenceable(16) i32* @f.dereferenceable16()<br>
+declare dereferenceable_or_null(4) i32* @f.dereferenceable4_or_null()<br>
+; CHECK: declare dereferenceable_or_null(4) i32* @f.dereferenceable4_or_null()<br>
+declare dereferenceable_or_null(8) i32* @f.dereferenceable8_or_null()<br>
+; CHECK: declare dereferenceable_or_null(8) i32* @f.dereferenceable8_or_null()<br>
+declare dereferenceable_or_null(16) i32* @f.dereferenceable16_or_null()<br>
+; CHECK: declare dereferenceable_or_null(16) i32* @f.dereferenceable16_or_null()<br>
+<br>
+; Functions -- Parameter attributes<br>
+declare void @f.param.zeroext(i8 zeroext)<br>
+; CHECK: declare void @f.param.zeroext(i8 zeroext)<br>
+declare void @f.param.signext(i8 signext)<br>
+; CHECK: declare void @f.param.signext(i8 signext)<br>
+declare void @f.param.inreg(i8 inreg)<br>
+; CHECK: declare void @f.param.inreg(i8 inreg)<br>
+declare void @f.param.byval({ i8, i8 }* byval)<br>
+; CHECK: declare void @f.param.byval({ i8, i8 }* byval)<br>
+declare void @f.param.inalloca(i8* inalloca)<br>
+; CHECK: declare void @f.param.inalloca(i8* inalloca)<br>
+declare void @f.param.sret(i8* sret)<br>
+; CHECK: declare void @f.param.sret(i8* sret)<br>
+declare void @f.param.noalias(i8* noalias)<br>
+; CHECK: declare void @f.param.noalias(i8* noalias)<br>
+declare void @f.param.nocapture(i8* nocapture)<br>
+; CHECK: declare void @f.param.nocapture(i8* nocapture)<br>
+declare void @f.param.nest(i8* nest)<br>
+; CHECK: declare void @f.param.nest(i8* nest)<br>
+declare i8* @f.param.returned(i8* returned)<br>
+; CHECK: declare i8* @f.param.returned(i8* returned)<br>
+declare void @f.param.nonnull(i8* nonnull)<br>
+; CHECK: declare void @f.param.nonnull(i8* nonnull)<br>
+declare void @f.param.dereferenceable(i8* dereferenceable(4))<br>
+; CHECK: declare void @f.param.dereferenceable(i8* dereferenceable(4))<br>
+declare void @f.param.dereferenceable_or_null(i8* dereferenceable_or_null(4))<br>
+; CHECK: declare void @f.param.dereferenceable_or_null(i8* dereferenceable_or_null(4))<br>
+<br>
+; Functions -- unnamed_addr<br>
+declare void @f.unnamed_addr() unnamed_addr<br>
+; CHECK: declare void @f.unnamed_addr() unnamed_addr<br>
+<br>
+; Functions -- fn Attrs (Function attributes)<br>
+declare void @f.alignstack4() alignstack(4)<br>
+; CHECK: declare void @f.alignstack4() #0<br>
+declare void @f.alignstack8() alignstack(8)<br>
+; CHECK: declare void @f.alignstack8() #1<br>
+declare void @f.alwaysinline() alwaysinline<br>
+; CHECK: declare void @f.alwaysinline() #2<br>
+declare void @f.cold() cold<br>
+; CHECK: declare void @f.cold() #3<br>
+declare void @f.convergent() convergent<br>
+; CHECK: declare void @f.convergent() #4<br>
+declare void @f.inlinehint() inlinehint<br>
+; CHECK: declare void @f.inlinehint() #5<br>
+declare void @f.jumptable() unnamed_addr jumptable<br>
+; CHECK: declare void @f.jumptable() unnamed_addr #6<br>
+declare void @f.minsize() minsize<br>
+; CHECK: declare void @f.minsize() #7<br>
+declare void @f.naked() naked<br>
+; CHECK: declare void @f.naked() #8<br>
+declare void @f.nobuiltin() nobuiltin<br>
+; CHECK: declare void @f.nobuiltin() #9<br>
+declare void @f.noduplicate() noduplicate<br>
+; CHECK: declare void @f.noduplicate() #10<br>
+declare void @f.noimplicitfloat() noimplicitfloat<br>
+; CHECK: declare void @f.noimplicitfloat() #11<br>
+declare void @f.noinline() noinline<br>
+; CHECK: declare void @f.noinline() #12<br>
+declare void @f.nonlazybind() nonlazybind<br>
+; CHECK: declare void @f.nonlazybind() #13<br>
+declare void @f.noredzone() noredzone<br>
+; CHECK: declare void @f.noredzone() #14<br>
+declare void @f.noreturn() noreturn<br>
+; CHECK: declare void @f.noreturn() #15<br>
+declare void @f.nounwind() nounwind<br>
+; CHECK: declare void @f.nounwind() #16<br>
+declare void @f.optnone() noinline optnone<br>
+; CHECK: declare void @f.optnone() #17<br>
+declare void @f.optsize() optsize<br>
+; CHECK: declare void @f.optsize() #18<br>
+declare void @f.readnone() readnone<br>
+; CHECK: declare void @f.readnone() #19<br>
+declare void @f.readonly() readonly<br>
+; CHECK: declare void @f.readonly() #20<br>
+declare void @f.returns_twice() returns_twice<br>
+; CHECK: declare void @f.returns_twice() #21<br>
+declare void @f.safestack() safestack<br>
+; CHECK: declare void @f.safestack() #22<br>
+declare void @f.sanitize_address() sanitize_address<br>
+; CHECK: declare void @f.sanitize_address() #23<br>
+declare void @f.sanitize_memory() sanitize_memory<br>
+; CHECK: declare void @f.sanitize_memory() #24<br>
+declare void @f.sanitize_thread() sanitize_thread<br>
+; CHECK: declare void @f.sanitize_thread() #25<br>
+declare void @f.ssp() ssp<br>
+; CHECK: declare void @f.ssp() #26<br>
+declare void @f.sspreq() sspreq<br>
+; CHECK: declare void @f.sspreq() #27<br>
+declare void @f.sspstrong() sspstrong<br>
+; CHECK: declare void @f.sspstrong() #28<br>
+declare void @f.thunk() "thunk"<br>
+; CHECK: declare void @f.thunk() #29<br>
+declare void @f.uwtable() uwtable<br>
+; CHECK: declare void @f.uwtable() #30<br>
+declare void @f.kvpair() "cpu"="cortex-a8"<br>
+; CHECK:declare void @f.kvpair() #31<br>
+<br>
+; Functions -- section<br>
+declare void @f.section() section "80"<br>
+; CHECK: declare void @f.section() section "80"<br>
+<br>
+; Functions -- comdat<br>
+define void @f.comdat_any() comdat($comdat.any) {<br>
+; CHECK: define void @f.comdat_any() comdat($comdat.any)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_exactmatch() comdat($comdat.exactmatch) {<br>
+; CHECK: define void @f.comdat_exactmatch() comdat($comdat.exactmatch)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_largest() comdat($comdat.largest) {<br>
+; CHECK: define void @f.comdat_largest() comdat($comdat.largest)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_noduplicates() comdat($comdat.noduplicates) {<br>
+; CHECK: define void @f.comdat_noduplicates() comdat($comdat.noduplicates)<br>
+entry:<br>
+  ret void<br>
+}<br>
+define void @f.comdat_samesize() comdat($comdat.samesize) {<br>
+; CHECK: define void @f.comdat_samesize() comdat($comdat.samesize)<br>
+entry:<br>
+  ret void<br>
+}<br>
+<br>
+; Functions -- align<br>
+declare void @f.align2() align 2<br>
+; CHECK: declare void @f.align2() align 2<br>
+declare void @f.align4() align 4<br>
+; CHECK: declare void @f.align4() align 4<br>
+declare void @f.align8() align 8<br>
+; CHECK: declare void @f.align8() align 8<br>
+<br>
+; Functions -- GC<br>
+declare void @f.gcshadow() gc "shadow-stack"<br>
+; CHECK: declare void @f.gcshadow() gc "shadow-stack"<br>
+<br>
+; Functions -- Prefix data<br>
+declare void @f.prefixi32() prefix i32 1684365668<br>
+; CHECK: declare void @f.prefixi32() prefix i32 1684365668<br>
+declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+; CHECK: declare void @f.prefixarray() prefix [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+<br>
+; Functions -- Prologue data<br>
+declare void @f.prologuei32() prologue i32 1684365669<br>
+; CHECK: declare void @f.prologuei32() prologue i32 1684365669<br>
+declare void @f.prologuearray() prologue [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+; CHECK: declare void @f.prologuearray() prologue [4 x i32] [i32 0, i32 1, i32 2, i32 3]<br>
+<br>
+; Functions -- Personality constant<br>
+declare void @llvm.donothing() nounwind readnone<br>
+; CHECK: declare void @llvm.donothing() #32<br>
+define void @f.no_personality() personality i8 3 {<br>
+; CHECK: define void @f.no_personality() personality i8 3<br>
+  invoke void @llvm.donothing() to label %normal unwind label %exception<br>
+exception:<br>
+  %cleanup = landingpad i8 cleanup<br>
+  br label %normal<br>
+normal:<br>
+  ret void<br>
+}<br>
+<br>
+declare i32 @f.personality_handler()<br>
+; CHECK: declare i32 @f.personality_handler()<br>
+define void @f.personality() personality i32 ()* @f.personality_handler {<br>
+; CHECK: define void @f.personality() personality i32 ()* @f.personality_handler<br>
+  invoke void @llvm.donothing() to label %normal unwind label %exception<br>
+exception:<br>
+  %cleanup = landingpad i32 cleanup<br>
+  br label %normal<br>
+normal:<br>
+  ret void<br>
+}<br>
+<br>
+;; Atomic Memory Ordering Constraints<br>
+define void @atomics(i32* %word) {<br>
+  %cmpxchg.0 = cmpxchg i32* %word, i32 0, i32 4 monotonic monotonic<br>
+  ; CHECK: %cmpxchg.0 = cmpxchg i32* %word, i32 0, i32 4 monotonic monotonic<br>
+  %cmpxchg.1 = cmpxchg i32* %word, i32 0, i32 5 acq_rel monotonic<br>
+  ; CHECK: %cmpxchg.1 = cmpxchg i32* %word, i32 0, i32 5 acq_rel monotonic<br>
+  %cmpxchg.2 = cmpxchg i32* %word, i32 0, i32 6 acquire monotonic<br>
+  ; CHECK: %cmpxchg.2 = cmpxchg i32* %word, i32 0, i32 6 acquire monotonic<br>
+  %cmpxchg.3 = cmpxchg i32* %word, i32 0, i32 7 release monotonic<br>
+  ; CHECK: %cmpxchg.3 = cmpxchg i32* %word, i32 0, i32 7 release monotonic<br>
+  %cmpxchg.4 = cmpxchg i32* %word, i32 0, i32 8 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.4 = cmpxchg i32* %word, i32 0, i32 8 seq_cst monotonic<br>
+  %cmpxchg.5 = cmpxchg weak i32* %word, i32 0, i32 9 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.5 = cmpxchg weak i32* %word, i32 0, i32 9 seq_cst monotonic<br>
+  %cmpxchg.6 = cmpxchg volatile i32* %word, i32 0, i32 10 seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.6 = cmpxchg volatile i32* %word, i32 0, i32 10 seq_cst monotonic<br>
+  %cmpxchg.7 = cmpxchg weak volatile i32* %word, i32 0, i32 11 singlethread seq_cst monotonic<br>
+  ; CHECK: %cmpxchg.7 = cmpxchg weak volatile i32* %word, i32 0, i32 11 singlethread seq_cst monotonic<br>
+  %atomicrmw.xchg = atomicrmw xchg i32* %word, i32 12 monotonic<br>
+  ; CHECK: %atomicrmw.xchg = atomicrmw xchg i32* %word, i32 12 monotonic<br>
+  %atomicrmw.add = atomicrmw add i32* %word, i32 13 monotonic<br>
+  ; CHECK: %atomicrmw.add = atomicrmw add i32* %word, i32 13 monotonic<br>
+  %atomicrmw.sub = atomicrmw sub i32* %word, i32 14 monotonic<br>
+  ; CHECK: %atomicrmw.sub = atomicrmw sub i32* %word, i32 14 monotonic<br>
+  %atomicrmw.and = atomicrmw and i32* %word, i32 15 monotonic<br>
+  ; CHECK: %atomicrmw.and = atomicrmw and i32* %word, i32 15 monotonic<br>
+  %atomicrmw.nand = atomicrmw nand i32* %word, i32 16 monotonic<br>
+  ; CHECK: %atomicrmw.nand = atomicrmw nand i32* %word, i32 16 monotonic<br>
+  %atomicrmw.or = atomicrmw or i32* %word, i32 17 monotonic<br>
+  ; CHECK: %atomicrmw.or = atomicrmw or i32* %word, i32 17 monotonic<br>
+  %atomicrmw.xor = atomicrmw xor i32* %word, i32 18 monotonic<br>
+  ; CHECK: %atomicrmw.xor = atomicrmw xor i32* %word, i32 18 monotonic<br>
+  %atomicrmw.max = atomicrmw max i32* %word, i32 19 monotonic<br>
+  ; CHECK: %atomicrmw.max = atomicrmw max i32* %word, i32 19 monotonic<br>
+  %atomicrmw.min = atomicrmw volatile min i32* %word, i32 20 monotonic<br>
+  ; CHECK: %atomicrmw.min = atomicrmw volatile min i32* %word, i32 20 monotonic<br>
+  %atomicrmw.umax = atomicrmw umax i32* %word, i32 21 singlethread monotonic<br>
+  ; CHECK: %atomicrmw.umax = atomicrmw umax i32* %word, i32 21 singlethread monotonic<br>
+  %atomicrmw.umin = atomicrmw volatile umin i32* %word, i32 22 singlethread monotonic<br>
+  ; CHECK: %atomicrmw.umin = atomicrmw volatile umin i32* %word, i32 22 singlethread monotonic<br>
+  fence acquire<br>
+  ; CHECK: fence acquire<br>
+  fence release<br>
+  ; CHECK: fence release<br>
+  fence acq_rel<br>
+  ; CHECK: fence acq_rel<br>
+  fence singlethread seq_cst<br>
+  ; CHECK: fence singlethread seq_cst<br>
+<br>
+  %ld.1 = load atomic i32, i32* %word monotonic, align 4<br>
+  ; CHECK: %ld.1 = load atomic i32, i32* %word monotonic, align 4<br>
+  %ld.2 = load atomic volatile i32, i32* %word acquire, align 8<br>
+  ; CHECK: %ld.2 = load atomic volatile i32, i32* %word acquire, align 8<br>
+  %ld.3 = load atomic volatile i32, i32* %word singlethread seq_cst, align 16<br>
+  ; CHECK: %ld.3 = load atomic volatile i32, i32* %word singlethread seq_cst, align 16<br>
+<br>
+  store atomic i32 23, i32* %word monotonic, align 4<br>
+  ; CHECK: store atomic i32 23, i32* %word monotonic, align 4<br>
+  store atomic volatile i32 24, i32* %word monotonic, align 4<br>
+  ; CHECK: store atomic volatile i32 24, i32* %word monotonic, align 4<br>
+  store atomic volatile i32 25, i32* %word singlethread monotonic, align 4<br>
+  ; CHECK: store atomic volatile i32 25, i32* %word singlethread monotonic, align 4<br>
+  ret void<br>
+}<br>
+<br>
+;; Fast Math Flags<br>
+define void @fastmathflags(float %op1, float %op2) {<br>
+  %f.nnan = fadd nnan float %op1, %op2<br>
+  ; CHECK: %f.nnan = fadd nnan float %op1, %op2<br>
+  %f.ninf = fadd ninf float %op1, %op2<br>
+  ; CHECK: %f.ninf = fadd ninf float %op1, %op2<br>
+  %f.nsz = fadd nsz float %op1, %op2<br>
+  ; CHECK: %f.nsz = fadd nsz float %op1, %op2<br>
+  %f.arcp = fadd arcp float %op1, %op2<br>
+  ; CHECK: %f.arcp = fadd arcp float %op1, %op2<br>
+  %f.fast = fadd fast float %op1, %op2<br>
+  ; CHECK: %f.fast = fadd fast float %op1, %op2<br>
+  ret void<br>
+}<br>
+<br>
+;; Type System<br>
+%opaquety = type opaque<br>
+define void @typesystem() {<br>
+  %p0 = bitcast i8* null to i32 (i32)*<br>
+  ; CHECK: %p0 = bitcast i8* null to i32 (i32)*<br>
+  %p1 = bitcast i8* null to void (i8*)*<br>
+  ; CHECK: %p1 = bitcast i8* null to void (i8*)*<br>
+  %p2 = bitcast i8* null to i32 (i8*, ...)*<br>
+  ; CHECK: %p2 = bitcast i8* null to i32 (i8*, ...)*<br>
+  %p3 = bitcast i8* null to { i32, i8 } (i8*, ...)*<br>
+  ; CHECK: %p3 = bitcast i8* null to { i32, i8 } (i8*, ...)*<br>
+  %p4 = bitcast i8* null to <{ i32, i8 }> (i8*, ...)*<br>
+  ; CHECK: %p4 = bitcast i8* null to <{ i32, i8 }> (i8*, ...)*<br>
+  %p5 = bitcast i8* null to <{ i32, i8 }> (<{ i8*, i64 }>*, ...)*<br>
+  ; CHECK: %p5 = bitcast i8* null to <{ i32, i8 }> (<{ i8*, i64 }>*, ...)*<br>
+<br>
+  %t0 = alloca i1942652<br>
+  ; CHECK: %t0 = alloca i1942652<br>
+  %t1 = alloca half<br>
+  ; CHECK: %t1 = alloca half<br>
+  %t2 = alloca float<br>
+  ; CHECK: %t2 = alloca float<br>
+  %t3 = alloca double<br>
+  ; CHECK: %t3 = alloca double<br>
+  %t4 = alloca fp128<br>
+  ; CHECK: %t4 = alloca fp128<br>
+  %t5 = alloca x86_fp80<br>
+  ; CHECK: %t5 = alloca x86_fp80<br>
+  %t6 = alloca ppc_fp128<br>
+  ; CHECK: %t6 = alloca ppc_fp128<br>
+  %t7 = alloca x86_mmx<br>
+  ; CHECK: %t7 = alloca x86_mmx<br>
+  %t8 = alloca %opaquety*<br>
+  ; CHECK: %t8 = alloca %opaquety*<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+;; Inline Assembler Expressions<br>
+define void @inlineasm(i32 %arg) {<br>
+  call i32 asm "bswap $0", "=r,r"(i32 %arg)<br>
+  ; CHECK: call i32 asm "bswap $0", "=r,r"(i32 %arg)<br>
+  call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)<br>
+  ; CHECK: call i32 asm sideeffect "blt $1, $2, $3", "=r,r,rm"(i32 %arg, i32 %arg)<br>
+  ret void<br>
+}<br>
+<br>
+;; Instructions<br>
+<br>
+; Instructions -- Terminators<br>
+define void @instructions.terminators(i8 %val) personality i32 -10 {<br>
+  br i1 false, label %iftrue, label %iffalse<br>
+  ; CHECK: br i1 false, label %iftrue, label %iffalse<br>
+  br label %iftrue<br>
+  ; CHECK: br label %iftrue<br>
+iftrue:<br>
+  ret void<br>
+  ; CHECK: ret void<br>
+iffalse:<br>
+<br>
+  switch i8 %val, label %defaultdest [<br>
+  ; CHECK: switch i8 %val, label %defaultdest [<br>
+         i8 0, label %defaultdest.0<br>
+         ; CHECK: i8 0, label %defaultdest.0<br>
+         i8 1, label %defaultdest.1<br>
+         ; CHECK: i8 1, label %defaultdest.1<br>
+         i8 2, label %defaultdest.2<br>
+         ; CHECK: i8 2, label %defaultdest.2<br>
+  ]<br>
+  ; CHECK: ]<br>
+defaultdest:<br>
+  ret void<br>
+defaultdest.0:<br>
+  ret void<br>
+defaultdest.1:<br>
+  ret void<br>
+defaultdest.2:<br>
+<br>
+  indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]<br>
+  ; CHECK: indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2]<br>
+  indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]<br>
+  ; CHECK: indirectbr i8* blockaddress(@instructions.terminators, %defaultdest.2), [label %defaultdest.2, label %defaultdest.2]<br>
+<br>
+  invoke fastcc void @f.fastcc()<br>
+  ; CHECK: invoke fastcc void @f.fastcc()<br>
+         to label %defaultdest unwind label %exc<br>
+         ; CHECK: to label %defaultdest unwind label %exc<br>
+exc:<br>
+  %cleanup = landingpad i32 cleanup<br>
+<br>
+  resume i32 undef<br>
+  ; CHECK: resume i32 undef<br>
+  unreachable<br>
+  ; CHECK: unreachable<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Binary Operations<br>
+define void @instructions.binops(i8 %op1, i8 %op2) {<br>
+  ; nuw x nsw<br>
+  add i8 %op1, %op2<br>
+  ; CHECK: add i8 %op1, %op2<br>
+  add nuw i8 %op1, %op2<br>
+  ; CHECK: add nuw i8 %op1, %op2<br>
+  add nsw i8 %op1, %op2<br>
+  ; CHECK: add nsw i8 %op1, %op2<br>
+  add nuw nsw i8 %op1, %op2<br>
+  ; CHECK: add nuw nsw i8 %op1, %op2<br>
+  sub i8 %op1, %op2<br>
+  ; CHECK: sub i8 %op1, %op2<br>
+  sub nuw i8 %op1, %op2<br>
+  ; CHECK: sub nuw i8 %op1, %op2<br>
+  sub nsw i8 %op1, %op2<br>
+  ; CHECK: sub nsw i8 %op1, %op2<br>
+  sub nuw nsw i8 %op1, %op2<br>
+  ; CHECK: sub nuw nsw i8 %op1, %op2<br>
+  mul i8 %op1, %op2<br>
+  ; CHECK: mul i8 %op1, %op2<br>
+  mul nuw i8 %op1, %op2<br>
+  ; CHECK: mul nuw i8 %op1, %op2<br>
+  mul nsw i8 %op1, %op2<br>
+  ; CHECK: mul nsw i8 %op1, %op2<br>
+  mul nuw nsw i8 %op1, %op2<br>
+  ; CHECK: mul nuw nsw i8 %op1, %op2<br>
+<br>
+  ; exact<br>
+  udiv i8 %op1, %op2<br>
+  ; CHECK: udiv i8 %op1, %op2<br>
+  udiv exact i8 %op1, %op2<br>
+  ; CHECK: udiv exact i8 %op1, %op2<br>
+  sdiv i8 %op1, %op2<br>
+  ; CHECK: sdiv i8 %op1, %op2<br>
+  sdiv exact i8 %op1, %op2<br>
+  ; CHECK: sdiv exact i8 %op1, %op2<br>
+<br>
+  ; none<br>
+  urem i8 %op1, %op2<br>
+  ; CHECK: urem i8 %op1, %op2<br>
+  srem i8 %op1, %op2<br>
+  ; CHECK: srem i8 %op1, %op2<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Bitwise Binary Operations<br>
+define void @instructions.bitwise_binops(i8 %op1, i8 %op2) {<br>
+  ; nuw x nsw<br>
+  shl i8 %op1, %op2<br>
+  ; CHECK: shl i8 %op1, %op2<br>
+  shl nuw i8 %op1, %op2<br>
+  ; CHECK: shl nuw i8 %op1, %op2<br>
+  shl nsw i8 %op1, %op2<br>
+  ; CHECK: shl nsw i8 %op1, %op2<br>
+  shl nuw nsw i8 %op1, %op2<br>
+  ; CHECK: shl nuw nsw i8 %op1, %op2<br>
+<br>
+  ; exact<br>
+  lshr i8 %op1, %op2<br>
+  ; CHECK: lshr i8 %op1, %op2<br>
+  lshr exact i8 %op1, %op2<br>
+  ; CHECK: lshr exact i8 %op1, %op2<br>
+  ashr i8 %op1, %op2<br>
+  ; CHECK: ashr i8 %op1, %op2<br>
+  ashr exact i8 %op1, %op2<br>
+  ; CHECK: ashr exact i8 %op1, %op2<br>
+<br>
+  ; none<br>
+  and i8 %op1, %op2<br>
+  ; CHECK: and i8 %op1, %op2<br>
+  or i8 %op1, %op2<br>
+  ; CHECK: or i8 %op1, %op2<br>
+  xor i8 %op1, %op2<br>
+  ; CHECK: xor i8 %op1, %op2<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Vector Operations<br>
+define void @instructions.vectorops(<4 x float> %vec, <4 x float> %vec2) {<br>
+  extractelement <4 x float> %vec, i8 0<br>
+  ; CHECK: extractelement <4 x float> %vec, i8 0<br>
+  insertelement <4 x float> %vec, float 3.500000e+00, i8 0<br>
+  ; CHECK: insertelement <4 x float> %vec, float 3.500000e+00, i8 0<br>
+  shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer<br>
+  ; CHECK: shufflevector <4 x float> %vec, <4 x float> %vec2, <2 x i32> zeroinitializer<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Aggregate Operations<br>
+define void @instructions.aggregateops({ i8, i32 } %up, <{ i8, i32 }> %p,<br>
+                                       [3 x i8] %arr, { i8, { i32 }} %n,<br>
+                                       <2 x i8*> %pvec, <2 x i64> %offsets) {<br>
+  extractvalue { i8, i32 } %up, 0<br>
+  ; CHECK: extractvalue { i8, i32 } %up, 0<br>
+  extractvalue <{ i8, i32 }> %p, 1<br>
+  ; CHECK: extractvalue <{ i8, i32 }> %p, 1<br>
+  extractvalue [3 x i8] %arr, 2<br>
+  ; CHECK: extractvalue [3 x i8] %arr, 2<br>
+  extractvalue { i8, { i32 } } %n, 1, 0<br>
+  ; CHECK: extractvalue { i8, { i32 } } %n, 1, 0<br>
+<br>
+  insertvalue { i8, i32 } %up, i8 1, 0<br>
+  ; CHECK: insertvalue { i8, i32 } %up, i8 1, 0<br>
+  insertvalue <{ i8, i32 }> %p, i32 2, 1<br>
+  ; CHECK: insertvalue <{ i8, i32 }> %p, i32 2, 1<br>
+  insertvalue [3 x i8] %arr, i8 0, 0<br>
+  ; CHECK: insertvalue [3 x i8] %arr, i8 0, 0<br>
+  insertvalue { i8, { i32 } } %n, i32 0, 1, 0<br>
+  ; CHECK: insertvalue { i8, { i32 } } %n, i32 0, 1, 0<br>
+<br>
+  %up.ptr = alloca { i8, i32 }<br>
+  %p.ptr = alloca <{ i8, i32 }><br>
+  %arr.ptr = alloca [3 x i8]<br>
+  %n.ptr = alloca { i8, { i32 } }<br>
+<br>
+  getelementptr { i8, i32 }, { i8, i32 }* %up.ptr, i8 0<br>
+  ; CHECK: getelementptr { i8, i32 }, { i8, i32 }* %up.ptr, i8 0<br>
+  getelementptr <{ i8, i32 }>, <{ i8, i32 }>* %p.ptr, i8 1<br>
+  ; CHECK: getelementptr <{ i8, i32 }>, <{ i8, i32 }>* %p.ptr, i8 1<br>
+  getelementptr [3 x i8], [3 x i8]* %arr.ptr, i8 2<br>
+  ; CHECK: getelementptr [3 x i8], [3 x i8]* %arr.ptr, i8 2<br>
+  getelementptr { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 0, i32 1<br>
+  ; CHECK: getelementptr { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 0, i32 1<br>
+  getelementptr inbounds { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 1, i32 0<br>
+  ; CHECK: getelementptr inbounds { i8, { i32 } }, { i8, { i32 } }* %n.ptr, i32 1, i32 0<br>
+  getelementptr i8, <2 x i8*> %pvec, <2 x i64> %offsets<br>
+  ; CHECK: getelementptr i8, <2 x i8*> %pvec, <2 x i64> %offsets<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Memory Access and Addressing Operations<br>
+!7 = !{i32 1}<br>
+!8 = !{}<br>
+!9 = !{i64 4}<br>
+define void @instructions.memops(i32** %base) {<br>
+  alloca i32, i8 4, align 4<br>
+  ; CHECK: alloca i32, i8 4, align 4<br>
+  alloca inalloca i32, i8 4, align 4<br>
+  ; CHECK: alloca inalloca i32, i8 4, align 4<br>
+<br>
+  load i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9, !dereferenceable_or_null !9<br>
+  ; CHECK: load i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9, !dereferenceable_or_null !9<br>
+  load volatile i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9, !dereferenceable_or_null !9<br>
+  ; CHECK: load volatile i32*, i32** %base, align 8, !invariant.load !7, !nontemporal !8, !nonnull !7, !dereferenceable !9, !dereferenceable_or_null !9<br>
+<br>
+  store i32* null, i32** %base, align 4, !nontemporal !8<br>
+  ; CHECK: store i32* null, i32** %base, align 4, !nontemporal !8<br>
+  store volatile i32* null, i32** %base, align 4, !nontemporal !8<br>
+  ; CHECK: store volatile i32* null, i32** %base, align 4, !nontemporal !8<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Conversion Operations<br>
+define void @instructions.conversions() {<br>
+  trunc i32 -1 to i1<br>
+  ; CHECK: trunc i32 -1 to i1<br>
+  zext i32 -1 to i64<br>
+  ; CHECK: zext i32 -1 to i64<br>
+  sext i32 -1 to i64<br>
+  ; CHECK: sext i32 -1 to i64<br>
+  fptrunc float undef to half<br>
+  ; CHECK: fptrunc float undef to half<br>
+  fpext half undef to float<br>
+  ; CHECK: fpext half undef to float<br>
+  fptoui float undef to i32<br>
+  ; CHECK: fptoui float undef to i32<br>
+  fptosi float undef to i32<br>
+  ; CHECK: fptosi float undef to i32<br>
+  uitofp i32 1 to float<br>
+  ; CHECK: uitofp i32 1 to float<br>
+  sitofp i32 -1 to float<br>
+  ; CHECK: sitofp i32 -1 to float<br>
+  ptrtoint i8* null to i64<br>
+  ; CHECK: ptrtoint i8* null to i64<br>
+  inttoptr i64 0 to i8*<br>
+  ; CHECK: inttoptr i64 0 to i8*<br>
+  bitcast i32 0 to i32<br>
+  ; CHECK: bitcast i32 0 to i32<br>
+  addrspacecast i32* null to i32 addrspace(1)*<br>
+  ; CHECK: addrspacecast i32* null to i32 addrspace(1)*<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Instructions -- Other Operations<br>
+define void @instructions.other(i32 %op1, i32 %op2, half %fop1, half %fop2) {<br>
+entry:<br>
+  icmp eq  i32 %op1, %op2<br>
+  ; CHECK: icmp eq  i32 %op1, %op2<br>
+  icmp ne  i32 %op1, %op2<br>
+  ; CHECK: icmp ne  i32 %op1, %op2<br>
+  icmp ugt i32 %op1, %op2<br>
+  ; CHECK: icmp ugt i32 %op1, %op2<br>
+  icmp uge i32 %op1, %op2<br>
+  ; CHECK: icmp uge i32 %op1, %op2<br>
+  icmp ult i32 %op1, %op2<br>
+  ; CHECK: icmp ult i32 %op1, %op2<br>
+  icmp ule i32 %op1, %op2<br>
+  ; CHECK: icmp ule i32 %op1, %op2<br>
+  icmp sgt i32 %op1, %op2<br>
+  ; CHECK: icmp sgt i32 %op1, %op2<br>
+  icmp sge i32 %op1, %op2<br>
+  ; CHECK: icmp sge i32 %op1, %op2<br>
+  icmp slt i32 %op1, %op2<br>
+  ; CHECK: icmp slt i32 %op1, %op2<br>
+  icmp sle i32 %op1, %op2<br>
+  ; CHECK: icmp sle i32 %op1, %op2<br>
+<br>
+  fcmp false half %fop1, %fop2<br>
+  ; CHECK: fcmp false half %fop1, %fop2<br>
+  fcmp oeq   half %fop1, %fop2<br>
+  ; CHECK: fcmp oeq   half %fop1, %fop2<br>
+  fcmp ogt   half %fop1, %fop2<br>
+  ; CHECK: fcmp ogt   half %fop1, %fop2<br>
+  fcmp oge   half %fop1, %fop2<br>
+  ; CHECK: fcmp oge   half %fop1, %fop2<br>
+  fcmp olt   half %fop1, %fop2<br>
+  ; CHECK: fcmp olt   half %fop1, %fop2<br>
+  fcmp ole   half %fop1, %fop2<br>
+  ; CHECK: fcmp ole   half %fop1, %fop2<br>
+  fcmp one   half %fop1, %fop2<br>
+  ; CHECK: fcmp one   half %fop1, %fop2<br>
+  fcmp ord   half %fop1, %fop2<br>
+  ; CHECK: fcmp ord   half %fop1, %fop2<br>
+  fcmp ueq   half %fop1, %fop2<br>
+  ; CHECK: fcmp ueq   half %fop1, %fop2<br>
+  fcmp ugt   half %fop1, %fop2<br>
+  ; CHECK: fcmp ugt   half %fop1, %fop2<br>
+  fcmp uge   half %fop1, %fop2<br>
+  ; CHECK: fcmp uge   half %fop1, %fop2<br>
+  fcmp ult   half %fop1, %fop2<br>
+  ; CHECK: fcmp ult   half %fop1, %fop2<br>
+  fcmp ule   half %fop1, %fop2<br>
+  ; CHECK: fcmp ule   half %fop1, %fop2<br>
+  fcmp une   half %fop1, %fop2<br>
+  ; CHECK: fcmp une   half %fop1, %fop2<br>
+  fcmp uno   half %fop1, %fop2<br>
+  ; CHECK: fcmp uno   half %fop1, %fop2<br>
+  fcmp true  half %fop1, %fop2<br>
+  ; CHECK: fcmp true  half %fop1, %fop2<br>
+<br>
+  br label %exit<br>
+L1:<br>
+  %v1 = add i32 %op1, %op2<br>
+  br label %exit<br>
+L2:<br>
+  %v2 = add i32 %op1, %op2<br>
+  br label %exit<br>
+exit:<br>
+  phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]<br>
+  ; CHECK: phi i32 [ %v1, %L1 ], [ %v2, %L2 ], [ %op1, %entry ]<br>
+<br>
+  select i1 true, i32 0, i32 1<br>
+  ; CHECK: select i1 true, i32 0, i32 1<br>
+  select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br>
+  ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2><br>
+<br>
+  call void @f.nobuiltin() builtin<br>
+  ; CHECK: call void @f.nobuiltin() #34<br>
+<br>
+  call fastcc noalias i32* @f.noalias() noinline<br>
+  ; CHECK: call fastcc noalias i32* @f.noalias() #12<br>
+  tail call ghccc nonnull i32* @f.nonnull() minsize<br>
+  ; CHECK: tail call ghccc nonnull i32* @f.nonnull() #7<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+define void @instructions.call_musttail(i8* inalloca %val) {<br>
+  musttail call void @f.param.inalloca(i8* inalloca %val)<br>
+  ; CHECK: musttail call void @f.param.inalloca(i8* inalloca %val)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+define void @instructions.landingpad() personality i32 -2 {<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch1<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch2<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch3<br>
+  invoke void @llvm.donothing() to label %proceed unwind label %catch4<br>
+<br>
+catch1:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+  br label %proceed<br>
+<br>
+catch2:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+  br label %proceed<br>
+<br>
+catch3:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             cleanup<br>
+             ; CHECK: cleanup<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+             catch i32* null<br>
+             ; CHECK: catch i32* null<br>
+  br label %proceed<br>
+<br>
+catch4:<br>
+  landingpad i32<br>
+  ; CHECK: landingpad i32<br>
+             filter [2 x i32] zeroinitializer<br>
+             ; CHECK: filter [2 x i32] zeroinitializer<br>
+  br label %proceed<br>
+<br>
+proceed:<br>
+  ret void<br>
+}<br>
+<br>
+;; Intrinsic Functions<br>
+<br>
+; Intrinsic Functions -- Variable Argument Handling<br>
+declare void @llvm.va_start(i8*)<br>
+declare void @llvm.va_copy(i8*, i8*)<br>
+declare void @llvm.va_end(i8*)<br>
+define void @instructions.va_arg(i8* %v, ...) {<br>
+  %ap = alloca i8*<br>
+  %ap2 = bitcast i8** %ap to i8*<br>
+<br>
+  call void @llvm.va_start(i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_start(i8* %ap2)<br>
+<br>
+  va_arg i8* %ap2, i32<br>
+  ; CHECK: va_arg i8* %ap2, i32<br>
+<br>
+  call void @llvm.va_copy(i8* %v, i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_copy(i8* %v, i8* %ap2)<br>
+<br>
+  call void @llvm.va_end(i8* %ap2)<br>
+  ; CHECK: call void @llvm.va_end(i8* %ap2)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Intrinsic Functions -- Accurate Garbage Collection<br>
+declare void @llvm.gcroot(i8**, i8*)<br>
+declare i8* @llvm.gcread(i8*, i8**)<br>
+declare void @llvm.gcwrite(i8*, i8*, i8**)<br>
+define void @intrinsics.gc() gc "shadow-stack" {<br>
+  %ptrloc = alloca i8*<br>
+  call void @llvm.gcroot(i8** %ptrloc, i8* null)<br>
+  ; CHECK: call void @llvm.gcroot(i8** %ptrloc, i8* null)<br>
+<br>
+  call i8* @llvm.gcread(i8* null, i8** %ptrloc)<br>
+  ; CHECK: call i8* @llvm.gcread(i8* null, i8** %ptrloc)<br>
+<br>
+  %ref = alloca i8<br>
+  call void @llvm.gcwrite(i8* %ref, i8* null, i8** %ptrloc)<br>
+  ; CHECK: call void @llvm.gcwrite(i8* %ref, i8* null, i8** %ptrloc)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; Intrinsic Functions -- Code Generation<br>
+declare i8* @llvm.returnaddress(i32)<br>
+declare i8* @llvm.frameaddress(i32)<br>
+declare i32 @llvm.read_register.i32(metadata)<br>
+declare i64 @llvm.read_register.i64(metadata)<br>
+declare void @llvm.write_register.i32(metadata, i32)<br>
+declare void @llvm.write_register.i64(metadata, i64)<br>
+declare i8* @llvm.stacksave()<br>
+declare void @llvm.stackrestore(i8*)<br>
+declare void @llvm.prefetch(i8*, i32, i32, i32)<br>
+declare void @llvm.pcmarker(i32)<br>
+declare i64 @llvm.readcyclecounter()<br>
+declare void @llvm.clear_cache(i8*, i8*)<br>
+declare void @llvm.instrprof_increment(i8*, i64, i32, i32)<br>
+<br>
+!10 = !{!"rax"}<br>
+define void @intrinsics.codegen() {<br>
+  call i8* @llvm.returnaddress(i32 1)<br>
+  ; CHECK: call i8* @llvm.returnaddress(i32 1)<br>
+  call i8* @llvm.frameaddress(i32 1)<br>
+  ; CHECK: call i8* @llvm.frameaddress(i32 1)<br>
+<br>
+  call i32 @llvm.read_register.i32(metadata !10)<br>
+  ; CHECK: call i32 @llvm.read_register.i32(metadata !10)<br>
+  call i64 @llvm.read_register.i64(metadata !10)<br>
+  ; CHECK: call i64 @llvm.read_register.i64(metadata !10)<br>
+  call void @llvm.write_register.i32(metadata !10, i32 0)<br>
+  ; CHECK: call void @llvm.write_register.i32(metadata !10, i32 0)<br>
+  call void @llvm.write_register.i64(metadata !10, i64 0)<br>
+  ; CHECK: call void @llvm.write_register.i64(metadata !10, i64 0)<br>
+<br>
+  %stack = call i8* @llvm.stacksave()<br>
+  ; CHECK: %stack = call i8* @llvm.stacksave()<br>
+  call void @llvm.stackrestore(i8* %stack)<br>
+  ; CHECK: call void @llvm.stackrestore(i8* %stack)<br>
+<br>
+  call void @llvm.prefetch(i8* %stack, i32 0, i32 3, i32 0)<br>
+  ; CHECK: call void @llvm.prefetch(i8* %stack, i32 0, i32 3, i32 0)<br>
+<br>
+  call void @llvm.pcmarker(i32 1)<br>
+  ; CHECK: call void @llvm.pcmarker(i32 1)<br>
+<br>
+  call i64 @llvm.readcyclecounter()<br>
+  ; CHECK: call i64 @llvm.readcyclecounter()<br>
+<br>
+  call void @llvm.clear_cache(i8* null, i8* null)<br>
+  ; CHECK: call void @llvm.clear_cache(i8* null, i8* null)<br>
+<br>
+  call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)<br>
+  ; CHECK: call void @llvm.instrprof_increment(i8* null, i64 0, i32 0, i32 0)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+declare void @llvm.localescape(...)<br>
+declare i8* @llvm.localrecover(i8* %func, i8* %fp, i32 %idx)<br>
+define void @intrinsics.localescape() {<br>
+  %static.alloca = alloca i32<br>
+  call void (...) @llvm.localescape(i32* %static.alloca)<br>
+  ; CHECK: call void (...) @llvm.localescape(i32* %static.alloca)<br>
+<br>
+  call void @intrinsics.localrecover()<br>
+<br>
+  ret void<br>
+}<br>
+define void @intrinsics.localrecover() {<br>
+  %func = bitcast void ()* @intrinsics.localescape to i8*<br>
+  %fp = call i8* @llvm.frameaddress(i32 1)<br>
+  call i8* @llvm.localrecover(i8* %func, i8* %fp, i32 0)<br>
+  ; CHECK: call i8* @llvm.localrecover(i8* %func, i8* %fp, i32 0)<br>
+<br>
+  ret void<br>
+}<br>
+<br>
+; We need this function to provide `uses' for some metadata tests.<br>
+define void @misc.metadata() {<br>
+  call void @f1(), !srcloc !11<br>
+  call void @f1(), !srcloc !12<br>
+  call void @f1(), !srcloc !13<br>
+  call void @f1(), !srcloc !14<br>
+  ret void<br>
+}<br>
+<br>
+; CHECK: attributes #0 = { alignstack=4 }<br>
+; CHECK: attributes #1 = { alignstack=8 }<br>
+; CHECK: attributes #2 = { alwaysinline }<br>
+; CHECK: attributes #3 = { cold }<br>
+; CHECK: attributes #4 = { convergent }<br>
+; CHECK: attributes #5 = { inlinehint }<br>
+; CHECK: attributes #6 = { jumptable }<br>
+; CHECK: attributes #7 = { minsize }<br>
+; CHECK: attributes #8 = { naked }<br>
+; CHECK: attributes #9 = { nobuiltin }<br>
+; CHECK: attributes #10 = { noduplicate }<br>
+; CHECK: attributes #11 = { noimplicitfloat }<br>
+; CHECK: attributes #12 = { noinline }<br>
+; CHECK: attributes #13 = { nonlazybind }<br>
+; CHECK: attributes #14 = { noredzone }<br>
+; CHECK: attributes #15 = { noreturn }<br>
+; CHECK: attributes #16 = { nounwind }<br>
+; CHECK: attributes #17 = { noinline optnone }<br>
+; CHECK: attributes #18 = { optsize }<br>
+; CHECK: attributes #19 = { readnone }<br>
+; CHECK: attributes #20 = { readonly }<br>
+; CHECK: attributes #21 = { returns_twice }<br>
+; CHECK: attributes #22 = { safestack }<br>
+; CHECK: attributes #23 = { sanitize_address }<br>
+; CHECK: attributes #24 = { sanitize_memory }<br>
+; CHECK: attributes #25 = { sanitize_thread }<br>
+; CHECK: attributes #26 = { ssp }<br>
+; CHECK: attributes #27 = { sspreq }<br>
+; CHECK: attributes #28 = { sspstrong }<br>
+; CHECK: attributes #29 = { "thunk" }<br>
+; CHECK: attributes #30 = { uwtable }<br>
+; CHECK: attributes #31 = { "cpu"="cortex-a8" }<br>
+; CHECK: attributes #32 = { nounwind readnone }<br>
+; CHECK: attributes #33 = { nounwind readonly }<br>
+; CHECK: attributes #34 = { builtin }<br>
+<br>
+;; Metadata<br>
+<br>
+; Metadata -- Module flags<br>
+!llvm.module.flags = !{!0, !1, !2, !4, !5, !6}<br>
+; CHECK: !llvm.module.flags = !{!0, !1, !2, !4, !5, !6}<br>
+<br>
+!0 = !{i32 1, !"mod1", i32 0}<br>
+; CHECK: !0 = !{i32 1, !"mod1", i32 0}<br>
+!1 = !{i32 2, !"mod2", i32 0}<br>
+; CHECK: !1 = !{i32 2, !"mod2", i32 0}<br>
+!2 = !{i32 3, !"mod3", !3}<br>
+; CHECK: !2 = !{i32 3, !"mod3", !3}<br>
+!3 = !{!"mod6", !0}<br>
+; CHECK: !3 = !{!"mod6", !0}<br>
+!4 = !{i32 4, !"mod4", i32 0}<br>
+; CHECK: !4 = !{i32 4, !"mod4", i32 0}<br>
+!5 = !{i32 5, !"mod5", !0}<br>
+; CHECK: !5 = !{i32 5, !"mod5", !0}<br>
+!6 = !{i32 6, !"mod6", !0}<br>
+; CHECK: !6 = !{i32 6, !"mod6", !0}<br>
+<br>
+; Metadata -- Check `distinct'<br>
+!11 = distinct !{}<br>
+; CHECK: !11 = distinct !{}<br>
+!12 = distinct !{}<br>
+; CHECK: !12 = distinct !{}<br>
+!13 = !{!11}<br>
+; CHECK: !13 = !{!11}<br>
+!14 = !{!12}<br>
+; CHECK: !14 = !{!12}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>