[www-releases] r331981 - Add 5.0.2 docs and update download.html

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Thu May 10 06:54:19 PDT 2018


Added: www-releases/trunk/5.0.2/docs/searchindex.js
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/searchindex.js?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/searchindex.js (added)
+++ www-releases/trunk/5.0.2/docs/searchindex.js Thu May 10 06:54:16 2018
@@ -0,0 +1 @@
+Search.setIndex({objects:{"":{"--stats":[92,0,1,"cmdoption--stats"],"-D":[2,0,1,"cmdoption-D"],"-name-regex":[100,0,1,"cmdoption-llvm-cov-show-name-regex"],"--radix":[36,0,1,"cmdoption-llvm-nm--radix"],"-O":[92,0,1,"cmdoption-O"],"-seed":[58,0,1,"cmdoption-seed"],"-elf-section-groups":[71,0,1,"cmdoption-elf-section-groups"],"-mattr":[95,0,1,"cmdoption-mattr"],"-pretty-print":[94,0,1,"cmdoption-pretty-print"],"-gen-register-info":[137,0,1,"cmdoption-tblgen-gen-register-info"],"-gen-subtarget":[137,0,1,"cmdoption-tblgen-gen-subtarget"],"-S":[127,0,1,"cmdoption-S"],"-binary":[141,0,1,"cmdoption-llvm-profdata-merge-binary"],"-arch":[100,0,1,"cmdoption-llvm-cov-export-arch"],"-counts":[141,0,1,"cmdoption-llvm-profdata-show-counts"],"-show-line-counts":[100,0,1,"cmdoption-llvm-cov-show-show-line-counts"],"-topn":[141,0,1,"cmdoption-llvm-profdata-show-topn"],"-d":[99,0,1,"cmdoption-d"],"-f":[100,0,1,"cmdoption-llvm-cov-gcov-f"],"-a":[2,0,1,"cmdoption-a"],"-c":[100,0,1,"cmdoption-llvm-cov-gcov-c"],"-demangle":[94,0,1,"cmdoption-demangle"],"--no-progress-bar":[2,0,1,"cmdoption--no-progress-bar"],"-l":[100,0,1,"cmdoption-llvm-cov-gcov-l"],"-o":[137,0,1,"cmdoption-tblgen-o"],"-n":[100,0,1,"cmdoption-llvm-cov-gcov-n"],"-h":[2,0,1,"cmdoption-h"],"--defined-only":[36,0,1,"cmdoption-llvm-nm--defined-only"],"-j":[2,0,1,"cmdoption-j"],"-u":[100,0,1,"cmdoption-llvm-cov-gcov-u"],"-dyn-symbols":[71,0,1,"cmdoption-dyn-symbols"],"-v":[99,0,1,"cmdoption-v"],"-q":[2,0,1,"cmdoption-q"],"--show-tests":[2,0,1,"cmdoption--show-tests"],"-s":[2,0,1,"cmdoption-s"],"-functions":[94,0,1,"cmdoption-functions"],"-gen-dag-isel":[137,0,1,"cmdoption-tblgen-gen-dag-isel"],"-show-line-counts-or-regions":[100,0,1,"cmdoption-llvm-cov-show-show-line-counts-or-regions"],"-use-symbol-table":[94,0,1,"cmdoption-use-symbol-table"],"--max-tests":[2,0,1,"cmdoption--max-tests"],"-class":[137,0,1,"cmdoption-tblgen-class"],"--max-time":[2,0,1,"cmdoption--max-time"],"-I":[137,0,1,"cmdoption-tblgen-I"],"-line-coverage-gt":[100,0,1,"cmdoption-llvm-cov-show-line-coverage-gt"],"-instr":[141,0,1,"cmdoption-llvm-profdata-show-instr"],"-input-files":[141,0,1,"cmdoption-llvm-profdata-merge-input-files"],"-sparse":[141,0,1,"cmdoption-llvm-profdata-merge-sparse"],"-B":[36,0,1,"cmdoption-llvm-nm-B"],"-regalloc":[95,0,1,"cmdoption-regalloc"],"-all-functions":[141,0,1,"cmdoption-llvm-profdata-show-all-functions"],"-use-color":[100,0,1,"cmdoption-llvm-cov-report-use-color"],"-pre-RA-sched":[95,0,1,"cmdoption-pre-RA-sched"],"--vg-leak":[2,0,1,"cmdoption--vg-leak"],"-format":[100,0,1,"cmdoption-llvm-cov-show-format"],"-gen-instr-info":[137,0,1,"cmdoption-tblgen-gen-instr-info"],"-P":[36,0,1,"cmdoption-llvm-nm-P"],"--print-file-name":[36,0,1,"cmdoption-llvm-nm--print-file-name"],"-stats":[127,0,1,"cmdoption-stats"],"-name":[100,0,1,"cmdoption-llvm-cov-show-name"],"--extern-only":[36,0,1,"cmdoption-llvm-nm--extern-only"],"-tab-size":[100,0,1,"cmdoption-llvm-cov-show-tab-size"],"-symbols":[71,0,1,"cmdoption-symbols"],"-print-sets":[137,0,1,"cmdoption-tblgen-print-sets"],"-program-headers":[71,0,1,"cmdoption-program-headers"],"--check-prefixes":[7,0,1,"cmdoption--check-prefixes"],"--disable-fp-elim":[92,0,1,"cmdoption--disable-fp-elim"],"--show-xfail":[2,0,1,"cmdoption--show-xfail"],"-obj":[94,0,1,"cmdoption-obj"],"--check-prefix":[7,0,1,"cmdoption--check-prefix"],"-region-coverage-gt":[100,0,1,"cmdoption-llvm-cov-show-region-coverage-gt"],"-vv":[2,0,1,"cmdoption-vv"],"--show-suites":[2,0,1,"cmdoption--show-suites"],"-spiller":[95,0,1,"cmdoption-spiller"],"-relocations":[71,0,1,"cmdoption-relocations"],"-gcc":[141,0,1,"cmdoption-llvm-profdata-merge-gcc"],"--run-shard":[2,0,1,"cmdoption--run-shard"],"-needed-libs":[71,0,1,"cmdoption-needed-libs"],"-line-coverage-lt":[100,0,1,"cmdoption-llvm-cov-show-line-coverage-lt"],"--num-shards":[2,0,1,"cmdoption--num-shards"],"-nodetails":[53,0,1,"cmdoption-llvm-bcanalyzer-nodetails"],"--enable-no-nans-fp-math":[92,0,1,"cmdoption--enable-no-nans-fp-math"],"-asmwriternum":[137,0,1,"cmdoption-tblgen-asmwriternum"],"-join-liveintervals":[95,0,1,"cmdoption-join-liveintervals"],"-show-functions":[100,0,1,"cmdoption-llvm-cov-report-show-functions"],"-debug-dump":[107,0,1,"cmdoption-debug-dump"],"--print-machineinstrs":[92,0,1,"cmdoption--print-machineinstrs"],"-asmparsernum":[137,0,1,"cmdoption-tblgen-asmparsernum"],"-section-symbols":[71,0,1,"cmdoption-section-symbols"],"--print-size":[36,0,1,"cmdoption-llvm-nm--print-size"],"--config-prefix":[2,0,1,"cmdoption--config-prefix"],"-sections":[71,0,1,"cmdoption-sections"],"-function":[141,0,1,"cmdoption-llvm-profdata-show-function"],"-print-records":[137,0,1,"cmdoption-tblgen-print-records"],"-gen-dfa-packetizer":[137,0,1,"cmdoption-tblgen-gen-dfa-packetizer"],"--load":[92,0,1,"cmdoption--load"],"-dump":[53,0,1,"cmdoption-llvm-bcanalyzer-dump"],"--dynamic":[36,0,1,"cmdoption-llvm-nm--dynamic"],"--match-full-lines":[7,0,1,"cmdoption--match-full-lines"],"-disable-post-RA-scheduler":[95,0,1,"cmdoption-disable-post-RA-scheduler"],"-b":[100,0,1,"cmdoption-llvm-cov-gcov-b"],"--spiller":[92,0,1,"cmdoption--spiller"],"-meabi":[92,0,1,"cmdoption-meabi"],"--enable-unsafe-fp-math":[92,0,1,"cmdoption--enable-unsafe-fp-math"],"-gen-intrinsic":[137,0,1,"cmdoption-tblgen-gen-intrinsic"],"-print-address":[94,0,1,"cmdoption-print-address"],"-verify-each":[127,0,1,"cmdoption-verify-each"],"-strip-debug":[127,0,1,"cmdoption-strip-debug"],"--size-sort":[36,0,1,"cmdoption-llvm-nm--size-sort"],"-version":[100,0,1,"cmdoption-llvm-cov-gcov-version"],"-section-data":[71,0,1,"cmdoption-section-data"],"-size":[58,0,1,"cmdoption-size"],"--enable-no-infs-fp-math":[92,0,1,"cmdoption--enable-no-infs-fp-math"],"--path":[2,0,1,"cmdoption--path"],"-text":[141,0,1,"cmdoption-llvm-profdata-merge-text"],"--shuffle":[2,0,1,"cmdoption--shuffle"],"-time-passes":[127,0,1,"cmdoption-time-passes"],"--filter":[2,0,1,"cmdoption--filter"],"-march":[95,0,1,"cmdoption-march"],"--show-unsupported":[2,0,1,"cmdoption--show-unsupported"],"-disable-inlining":[127,0,1,"cmdoption-disable-inlining"],"--time-passes":[92,0,1,"cmdoption--time-passes"],"-region-coverage-lt":[100,0,1,"cmdoption-llvm-cov-show-region-coverage-lt"],"--vg":[2,0,1,"cmdoption--vg"],"-p":[100,0,1,"cmdoption-llvm-cov-gcov-p"],"-nozero-initialized-in-bss":[95,0,1,"cmdoption-nozero-initialized-in-bss"],"-section-relocations":[71,0,1,"cmdoption-section-relocations"],"-help":[53,0,1,"cmdoption-llvm-bcanalyzer-help"],"-jit-enable-eh":[95,0,1,"cmdoption-jit-enable-eh"],"-show-regions":[100,0,1,"cmdoption-llvm-cov-show-show-regions"],"-fake-argv0":[95,0,1,"cmdoption-fake-argv0"],"-gen-asm-writer":[137,0,1,"cmdoption-tblgen-gen-asm-writer"],"-enable-no-nans-fp-math":[95,0,1,"cmdoption-enable-no-nans-fp-math"],"-enable-unsafe-fp-math":[95,0,1,"cmdoption-enable-unsafe-fp-math"],"-load":[127,0,1,"cmdoption-load"],"-expand-relocs":[71,0,1,"cmdoption-expand-relocs"],"--disable-excess-fp-precision":[92,0,1,"cmdoption--disable-excess-fp-precision"],"--format":[36,0,1,"cmdoption-llvm-nm--format"],"-print-enums":[137,0,1,"cmdoption-tblgen-print-enums"],"-memop-sizes":[141,0,1,"cmdoption-llvm-profdata-show-memop-sizes"],"-show-instantiations":[100,0,1,"cmdoption-llvm-cov-show-show-instantiations"],"-enable-no-infs-fp-math":[95,0,1,"cmdoption-enable-no-infs-fp-math"],"-filetype":[92,0,1,"cmdoption-filetype"],"-gen-emitter":[137,0,1,"cmdoption-tblgen-gen-emitter"],"-unwind":[71,0,1,"cmdoption-unwind"],"-gen-pseudo-lowering":[137,0,1,"cmdoption-tblgen-gen-pseudo-lowering"],"-verify":[53,0,1,"cmdoption-llvm-bcanalyzer-verify"],"-gen-tgt-intrinsic":[137,0,1,"cmdoption-tblgen-gen-tgt-intrinsic"],"--help":[100,0,1,"cmdoption-llvm-cov-gcov--help"],"--implicit-check-not":[7,0,1,"cmdoption--implicit-check-not"],"-x86-asm-syntax":[95,0,1,"cmdoption-x86-asm-syntax"],"-disable-opt":[127,0,1,"cmdoption-disable-opt"],"-mcpu":[95,0,1,"cmdoption-mcpu"],"-relocation-model":[95,0,1,"cmdoption-relocation-model"],"-file-headers":[71,0,1,"cmdoption-file-headers"],"-disable-spill-fusing":[95,0,1,"cmdoption-disable-spill-fusing"],"--undefined-only":[36,0,1,"cmdoption-llvm-nm--undefined-only"],"-debug":[127,0,1,"cmdoption-debug"],"-code-model":[95,0,1,"cmdoption-code-model"],"-sample":[141,0,1,"cmdoption-llvm-profdata-show-sample"],"-dynamic-table":[71,0,1,"cmdoption-dynamic-table"],"-inlining":[94,0,1,"cmdoption-inlining"],"--vg-arg":[2,0,1,"cmdoption--vg-arg"],"--x86-asm-syntax":[92,0,1,"cmdoption--x86-asm-syntax"],"-Xdemangler":[100,0,1,"cmdoption-llvm-cov-show-Xdemangler"],"--debug":[2,0,1,"cmdoption--debug"],"-force-interpreter":[95,0,1,"cmdoption-force-interpreter"],"-mtriple":[95,0,1,"cmdoption-mtriple"],"--numeric-sort":[36,0,1,"cmdoption-llvm-nm--numeric-sort"],"--strict-whitespace":[7,0,1,"cmdoption--strict-whitespace"],"-num-threads":[141,0,1,"cmdoption-llvm-profdata-merge-num-threads"],"-gen-fast-isel":[137,0,1,"cmdoption-tblgen-gen-fast-isel"],"-gen-disassembler":[137,0,1,"cmdoption-tblgen-gen-disassembler"],"-gen-asm-matcher":[137,0,1,"cmdoption-tblgen-gen-asm-matcher"],"-show-expansions":[100,0,1,"cmdoption-llvm-cov-show-show-expansions"],"--enable-var-scope":[7,0,1,"cmdoption--enable-var-scope"],"--time-tests":[2,0,1,"cmdoption--time-tests"],"-soft-float":[95,0,1,"cmdoption-soft-float"],"--no-sort":[36,0,1,"cmdoption-llvm-nm--no-sort"],"-dsym-hint":[94,0,1,"cmdoption-dsym-hint"],"--input-file":[7,0,1,"cmdoption--input-file"],"--debug-syms":[36,0,1,"cmdoption-llvm-nm--debug-syms"],"-gen-enhanced-disassembly-info":[137,0,1,"cmdoption-tblgen-gen-enhanced-disassembly-info"],"-output-dir":[100,0,1,"cmdoption-llvm-cov-show-output-dir"],"--regalloc":[92,0,1,"cmdoption--regalloc"],"-output":[141,0,1,"cmdoption-llvm-profdata-show-output"],"-default-arch":[94,0,1,"cmdoption-default-arch"],"-weighted-input":[141,0,1,"cmdoption-llvm-profdata-merge-weighted-input"],"-disable-excess-fp-precision":[95,0,1,"cmdoption-disable-excess-fp-precision"]}},terms:{func:[79,10,89,101,91,16,17,18,19,83,84,22,23],orthogon:51,interchang:[102,81],four:[29,144,65,11,88,68,28,2,30,57,51,81,93,130,102,83,45,9,23],prefix:[81,48,2,100,83,8,13,7,86,18,19,101,41,126,89,28,132,32,94,37,74,38,139,39,102,77,144,149],grokabl:81,is_open:11,francesco:46,device_fn:14,repetit:102,add32ri8:8,address_class:38,"24mb":39,"__llvm_memset_element_unordered_atomic_":83,uint64_max:72,identityprop:101,foldingsetnodeid:101,lore:131,build_fcmp:[16,17,18,19,23],dbx:132,digit:[101,28,36,83],dst_sel:38,rational:[54,130,102,68,40,83],emitconst:65,module_code_funct:144,basic_:149,n2118:81,delv:[16,40,30],make_rang:101,f110:11,lit_num_shard:2,bdist_egg:49,amdhsa:38,fptrunc:83,fpmad:132,mli:16,bitstream:144,second:[46,102,1,48,49,26,81,114,115,52,3,82,4,113,83,9,79,68,120,7,132,15,90,87,17,101,63,23,24,25,2,65,130,88,67,28,29,30,31,32,33,91,37,74,138,38,139,39,110,103,104,105,106,144,147,148],getprocaddress:30,x86ii:65,r15d:8,functionfaultinfo:109,r15b:8,alignstack:[83,144],make_error_cod:101,alt_always_instru:118,thefpm:[30,31,32,33],migrat:[88,40,134,57],constrast:57,r15w:8,xchg:[83,51],cull:81,ongo:[118,48,40,0,1],mspdbxxxx:148,noreturn:[83,62,144],visitxor:20,here:[110,0,139,124,48,49,26,113,50,51,90,115,52,81,117,131,82,4,5,6,7,8,9,85,54,63,68,102,11,129,83,132,121,61,86,14,15,62,87,16,17,18,19,20,125,22,23,24,25,123,65,130,88,27,28,29,30,31,32,33,91,134,96,114,120,37,74,138,38,101,39,57,103,104,106,148,140,108,84,89,146,149,44,45,79],gnu_hash:132,lowerswitch:[46,68],amdgiz:38,alignstyl:101,dx10_clamp:38,dllvm_build_runtim:37,iseldagtodag:34,s_setvskip:38,myregalloc:91,spotti:83,dwarfregnum:65,synchronis:118,"0x20":132,golden:81,argn:90,propag:[37,73,74,38,46,48,28,102,13,14,139,89,4,83,101],unic:28,bou_tru:28,"_workgroup_count_z":38,"_workgroup_count_x":38,belevich:14,substr:[79,86],unix:[37,74,120,83,28,121,86,4,7,101],pound:110,pointeealign:38,content_disposition_typ:40,txt:[91,37,81,74,138,65,66,28,147,132,84,86,94,40,114,42,5,6,63,61,9],unit:[46,81,1,83,117,79,145,121,13,101,25,65,130,28,30,132,91,34,93,73,74,38,139,39,102,148,149],"_workgroup_count_i":38,sexual:111,llvm_use_link:74,fstream:11,subpath:[42,2],childorerr:101,destarglist:83,callgraph:[91,46],get_ptr:109,feat_jit_arm:102,until:[46,81,0,134,47,2,115,125,83,61,9,85,63,86,105,62,16,17,18,19,20,21,22,23,24,25,65,139,27,28,29,30,31,32,33,91,34,93,70,36,37,138,38,101,39,102,118,40,144,145],new_else_bb:[17,18,19],emitlabelplusoffset:88,v8p0f_i32f:83,jmp:83,relat:[46,102,47,48,2,51,115,52,81,82,83,11,122,86,105,87,16,18,101,23,65,130,29,68,31,32,132,91,34,134,114,90,38,139,110,57,40,106,42,148],notic:[102,74,129,11,87,29,33,14,40,62,134,90,130,19,101,121,23],hurt:81,initialize_pass_depend:91,exce:[81,83,132,38],"_dcleanup":139,hole:[48,28,83],hold:[46,111,87,52,83,8,9,85,132,122,61,86,16,17,18,19,101,125,22,23,24,25,65,88,27,28,29,30,31,32,33,91,37,38,139,39,102,41,131,42,45,149],unpack:[37,12,54],image_scn_align_128byt:140,catch3:139,adc32rr:8,generalis:[18,32],talli:49,dagtodag:55,conceptu:[81,130,7,28,102,93,139,83,101],forexpr:[24,25,31,32,33,17,18,19],oftc:54,rework:[28,40],get_matcher_implement:34,al_superregsset:65,phabric:[37,40,134,138,54],dtor:[121,83],createfunct:25,replaceusesofwith:[73,101],doubletyp:101,intregsregclass:65,caution:[37,51],fibonacci:[27,104,21],want:[46,75,111,110,48,49,26,115,52,81,125,82,4,7,8,54,55,68,102,11,129,83,132,121,12,60,61,86,14,15,124,87,16,17,19,101,21,22,23,24,25,65,130,27,28,29,30,31,33,91,96,118,97,37,74,138,100,39,57,104,76,40,84,41,144,146,147,149],umin:83,"__sync_fetch_and_and_n":51,hasfp:65,motion:[37,73,57,91,115,46,83],mcasmstream:102,shuffl:[45,2,83],hoc:[46,102,101],mov32mr:89,classifi:57,i686:[86,52,102,7],how:[0,2,3,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,42,44,45,46,47,48,49,50,104,54,55,57,63,61,62,41,64,65,66,68,70,72,73,74,75,118,77,110,80,82,83,84,79,86,90,88,91,16,93,96,97,101,102,51,105,106,81,114,115,117,120,121,122,123,124,125,129,130,132,134,138,139,142,144,146,147,148,149],hot:[48,83,62,72],fuzzer:[54,39],actionscript:[26,15],symposium:14,macosx10:83,dbi_head:148,lhse:[24,25,33],i29:83,wrong:[25,81,111,57,45,75,30,14,4,121,97],beauti:[27,29,32,18,21,23],adc32rm:8,outoperandlist:[8,65],weakanylinkag:101,index2virtreg:102,passopt:91,apint:[101,84],cheri:134,revolv:132,alias:[46,102,65,57,87,28,26,115,15,62,144,106,130,83,45],"18th":130,prototypeast:[24,25,125,29,30,31,32,33,5,6],tok_for:[24,25,31,32,33],plugin_tool:91,"0x3f":35,objptr:83,readandmaybemodifi:39,"0x0abcd":83,affect:[111,47,87,114,4,83,11,7,12,13,14,134,17,101,68,28,30,31,91,93,73,74,38,75,51,40,44,149],vari:[37,68,111,20,39,26,67,51,15,144,4,102,83,121,101],exec_lo:38,directli:[46,102,0,48,80,51,115,52,81,53,4,5,6,83,8,9,120,11,63,132,60,61,13,122,62,16,17,18,19,101,41,126,65,130,88,68,28,29,30,31,32,33,91,34,134,95,37,74,38,139,45,57,104,118,40,106,144,146,148],fit:[46,81,138,130,101,28,102,67,14,31,52,40,93,17,83,61,132],benign:[49,101],float_mode_denorm_16_64:38,fix:[110,47,87,49,26,7,114,52,81,125,63,8,117,102,83,15,19,101,21,22,23,2,65,130,27,28,29,30,132,33,91,134,72,37,73,38,45,75,103,51,118,40,106,144,147,44,148,149],"200000e":[17,31],xxxinstrdescriptor:65,codlay:63,updatepoint:[5,6],hidden:[81,144,101,28,102,60,80,132,91,100,134,70,83,148,9],easier:[46,75,111,47,102,115,81,83,8,9,55,11,7,121,12,123,86,105,19,101,22,23,25,126,88,125,29,33,91,34,134,96,138,38,57,51,40,42],aliasesset:57,var1:90,proce:[73,74,47,87,122,114,88,105,139,101,61],imagstart:[18,32],surgic:101,interrupt:[109,4,81,2,83],itanium:[136,142,35,139],enable_sgpr_grid_workgroup:38,kernelparam:11,loopinfo:91,sparclite86x:65,buildnumb:148,dcmake_install_prefix:[37,74,12,50],exprast:[24,25,125,29,30,31,32,33,5,6,22],accommod:[83,102,35,144,11],timeout:39,debug:[46,102,64,48,26,113,80,114,100,104,81,123,83,8,89,79,54,10,57,145,59,84,13,15,117,87,19,20,21,41,24,25,126,2,65,88,27,28,127,132,33,91,69,92,35,86,94,36,37,73,74,38,101,39,75,148,76,40,106,139,107,108,45],build_fadd:23,r390x:38,openfileforwrit:4,resum:[139,106,105,83,123],llvmfuzzertestoneinput:39,bitread:42,pinsrd_1:7,numentri:144,inaccessiblememonly_or_argmemonli:144,whip:[18,32],intregssuperclass:65,dst:[82,102,8,65,149],smt:97,smp:[91,51],dso:51,dsl:[8,124],branch:[109,46,81,142,48,114,100,3,83,54,136,121,122,13,105,62,17,18,19,101,24,25,65,88,89,31,32,33,134,96,72,37,74,138,139,45,102,40],llvm_lit_arg:74,adapt:[46,121,14,40,4,101],inteqclass:101,dse:[46,73,51,57],dsc:84,impract:[13,101],committ:40,navig:[42,28,138],selectionkind:83,omiss:[40,83],targetloweringobjectfil:102,private_segment_fixed_s:38,adc64ri32:8,md5:[79,40],f3_1:65,sahf:102,f3_3:65,proj_src_root:41,atc:38,reformul:57,realstart:[18,32],formatadapt:101,pointstoconstantmemori:[83,57],att:[95,92,83],unabl:[73,111,83,13,62,101,22,149],disablelazycompil:101,confus:[81,120,65,130,87,122,40,139,83,101],mcinstrdesc:68,catchswitch:[139,83],clariti:[17,45,0,31,83],wast:[85,147,132,33,106,19,101],psubusw:86,mingw:[104,102,74],wasm:45,wasn:[24,25,57,87,32,33,18,19],subtleti:134,isalnum:[24,25,27,125,29,30,31,32,33],evolut:[91,46],llvmmemorymanagerallocatedatasectioncallback:106,signext:[83,144],setargstr:28,nobuiltin:[83,144],master:[37,138,54,134,146,41],image_scn_mem_discard:[140,35],similarli:[81,49,83,101,54,65,57,14,40,20,24,25,129,28,68,93,139,75,51,118,142,144],getnod:[55,65],listen:5,windbg:132,addrrr:65,arrayidx1:83,arrayidx3:83,arrayidx2:83,arrayidx4:83,"0x3500000001652748":123,flat_scratch_hi:38,bpf_ind:102,crawl:88,technic:[54,111,39,40,134,90,84],mayfail2:101,sht_rela:38,getposit:28,iommu:38,lvalu:101,tree:[46,81,87,49,2,114,52,83,54,11,132,121,12,122,86,62,16,17,18,19,101,21,22,23,24,25,129,66,88,27,125,29,30,31,32,33,91,134,130,37,73,74,139,45,102,104,40,41,131,42],project:[81,0,111,48,49,2,80,114,104,54,55,136,121,12,86,62,87,101,21,41,66,27,90,68,132,134,96,37,74,138,39,52,118,77,40,106,131,42,45],wchar_t:83,image_rel_i386_secrel:35,sdnode:[65,20,102,84,101,8],recheck:[46,87],uniniti:[88,39,149,83,130],aapc:[83,93],runner:49,libllvmcor:101,reassur:39,parenthes:[81,2,83,125,22],aforement:[37,40,67],"__atomic_store_n":51,increment:[24,25,81,37,88,83,102,67,31,33,40,103,90,46,17,113,19,20,101],miniatur:117,infring:40,dcmake_toolchain_fil:37,incompat:[76,139,83],dozen:[101,50,62],sig_atomic_t:83,implicitus:102,musttail:83,browsabl:74,co_await:105,weaktrackingvh:45,eagerli:61,get_instrinfo_operand_types_enum:65,simplifi:[46,75,48,49,81,83,9,102,13,89,16,17,18,19,101,21,25,88,27,30,31,32,33,138,110,140,40,131],shall:[83,28,26,15,74],cpu2:110,object:[26,4,9,11,12,13,15,16,17,19,20,21,22,23,24,25,2,27,125,29,31,33,34,35,36,37,38,39,40,44,48,49,104,57,145,60,41,64,65,68,69,70,71,73,75,118,77,79,110,80,83,85,87,88,127,91,92,93,94,95,101,102,51,105,106,107,108,109,81,100,117,136,121,123,28,126,129,130,132,133,134,139,140,142,144,148,149],apr1:40,specifi:[46,75,139,1,48,49,26,100,104,81,127,4,141,7,8,117,79,54,10,119,102,11,83,132,121,122,13,96,14,15,62,58,90,16,17,18,19,20,125,22,23,24,25,126,2,65,130,88,89,28,29,68,31,32,33,91,34,35,86,94,95,71,36,120,112,37,74,99,38,101,39,57,51,110,92,106,41,144,145,42,107,137,44,148,149],letter:[24,25,81,65,28,32,33,144,18,19,83],breakpoint:[25,38,27,45,123,91,20],alwaysinlin:[83,144],getelementtyp:101,upenn:97,expr0rh:79,srcvalu:48,dummi:[46,121,65,89,102,86,149],lpm:91,place:[46,102,1,47,48,26,115,81,125,131,83,8,89,79,55,120,61,86,105,15,62,87,16,18,19,20,21,41,23,2,65,130,88,27,28,29,30,132,32,33,91,146,35,93,95,96,97,37,138,38,101,45,110,77,40,106,139,42,149],tma_hi:38,mayreadfrommemori:51,detriment:81,came:[139,26,31,36,15,131,17],undefinit:83,tok_var:[24,25,33],vop_sdwa:38,cheapli:115,sexist:111,advisori:[0,111],addr2:94,quad:[48,83,65,38],klimek:138,priv:38,matchinstructionimpl:102,layout:[46,48,113,83,117,79,54,11,12,14,62,90,101,41,24,65,130,88,30,67,132,69,93,37,74,38,45,102,142,148],ccmake:74,apach:[4,40,114],theme:[8,9,124],busi:40,ditemplatetypeparamet:83,image_sym_type_word:140,rich:[54,43],exctyp:139,plate:[28,101],c11bytes:[69,148],selectiondagbuild:102,googlegroup:39,lanai:136,csk_md5:83,ceil:[67,83,1],replaceusesofwithonconst:73,addrr:65,obscur:[101,83],llvm_install_doxygen_html_dir:74,smallvectorimpl:[101,84],jaguar:45,ppc_fp128:[87,83,144],tstri:89,ever:[81,57,63,26,118,69,40,15,42,83,9,101],patch:[109,81,48,114,104,83,84,54,86,62,16,101,25,88,30,134,97,37,73,138,118,40,106,146],xcore:[37,102,83,136],emitstorecondit:51,bound_ctrl:38,sligtli:93,bpf_ja:102,respond:[46,0,138,57],sjljehprepar:139,mandatori:[101,104,83,62,65],result:[1,2,4,7,8,9,11,13,14,87,17,18,19,101,22,23,24,25,125,29,30,31,32,33,35,37,38,39,40,45,46,47,48,49,104,54,55,57,63,61,62,79,65,67,68,70,74,75,118,77,110,82,83,84,85,86,90,88,89,127,91,16,93,95,96,100,20,102,51,105,106,81,113,114,115,119,120,121,123,28,130,132,134,139,141,144,145,149],respons:[46,102,0,142,113,114,83,9,57,122,105,101,66,88,28,68,91,34,38,138,139,110,103,40,106],fail:[109,81,1,47,49,2,50,7,104,4,83,145,86,101,28,29,132,134,95,37,74,139,75,51,40],best:[46,75,81,83,57,121,122,15,62,90,101,22,88,27,125,68,132,93,95,139,102,40,106],dw_tag_reference_typ:[83,132],heterogen:38,r_amdgpu_gotpcrel32_hi:38,wikipedia:[42,17,83,31],copyleft:40,figur:[91,102,65,20,28,75,86,115,81,93,83,61,101],irc:[54,0,111,138,40,62],sysroot:[12,8,114],glasgow:83,fuzz_target:39,xvf:104,never:[109,46,102,134,87,49,26,113,100,81,63,84,79,120,57,129,83,121,13,14,15,16,101,65,130,88,68,91,93,96,38,110,51,118,77,105,108],extend:[81,48,26,125,117,83,8,9,54,55,68,129,61,15,62,124,16,17,18,19,101,21,22,64,2,65,88,27,28,30,31,32,33,35,37,102,51,149],extens:[46,81,1,48,100,4,83,54,55,136,132,121,62,87,17,18,19,101,125,22,65,88,28,68,31,32,33,91,34,35,133,74,38,139,92,102,140,40,106,42],extent:[88,40,83,130,66],toler:[88,39,83,114],advertis:139,rtti:[24,25,81,74,129,54,139,33,76,142,101],"_args_":90,"0f3f800000":11,accident:[91,4,28,81,101],extra_operand0:38,atomicexpandpass:51,logic:[46,81,87,2,7,5,6,63,61,9,83,17,18,19,101,23,129,130,125,68,31,32,33,102,40,42,148],hh567368:81,seri:[37,102,74,38,139,27,131,75,30,61,91,72,40,144,89,16,83,21,101],compromis:[101,83],with_assert:74,assur:110,mattr:[24,95,92,7,65],creategvnpass:[25,30,31,32,33,5,6,63,61],"2nd":[101,39,83,149],dibuild:[25,132],diff:[37,81,138,46,59,80,86,40,134,96,101],summat:83,assum:[46,110,47,48,49,26,81,142,104,3,117,131,83,84,9,55,11,121,14,105,15,62,87,18,102,20,23,24,25,2,65,130,88,113,125,29,67,132,32,33,91,69,92,134,95,72,37,74,38,101,57,103,40,106,144,139,148],debug_mod:38,duplic:[46,81,48,4,83,8,9,120,57,105,117,90,87,101,125,22,62,28,132,34,35,73,102,40,108],frc:102,frb:102,fra:102,union:[81,57,102,132,33,19,83,148],gfx903:38,image_file_machine_r4000:140,joerg:134,n_hash:132,r390:38,frt:102,bpf_mod:102,feat_disassembl:102,life:[14,40,81,39,62],regul:91,p0v8p0f64:83,mrm6m:65,type_code_x86_fp80:144,worker:39,earlyclobb:89,cufunct:11,lift:[122,61,62],legacypassmanag:[24,25,30,31,32,33,84,5,6,63,61],"0x16151f0":123,objectfil:85,hasfparmv8:8,image_scn_mem_not_cach:140,ada:139,dissect:[79,11],paramattr_block:144,commerci:[48,40],employ:40,one_onli:35,debug_metadata_vers:25,optionaldbgheaders:148,r_amdgpu_non:38,emit_22:65,idnam:[24,25,125,29,30,31,32,33],"0xk":83,rediscov:[26,15],filename0:79,toolkit:[14,101,11],libxml:39,globaldc:[46,101],leaksanit:39,createret:[24,25,29,30,31,32,33],sanitizercommonflag:52,bikesh:129,harass:111,generalcategori:28,falsedest:83,split:[46,134,87,115,83,55,14,105,68,20,41,65,130,89,28,67,93,38,39,102,103,51,40],immtypebit:8,skipbasicblock:13,european:122,functionpassmanag:[30,31,32,33,5,6,63,61,9],annoat:43,reassoci:[46,73,30,31,32,33,16,17,18,19,83],permit:[24,25,73,88,101,102,33,86,92,35,19,83,149],cxx0x:81,dest1:83,fairli:[65,57,27,39,121,31,32,51,15,62,125,42,17,18,101,21,22],dest2:83,refil:87,ownership:[24,25,30,31,32,33,40,5,6,101],printdeclar:65,engin:[85,37,126,29,54,46,27,39,26,31,73,15,134,87,16,17,130,21,121],fprofil:[79,100,74],tune:[1,28,102,132,33,92,62,19,101],libcal:[46,49,68,51],buffer_load:38,fucomip:102,nuzman:[122,1],gzip:37,argmemonli:[83,62,144],arcp:83,ordin:28,volunt:[47,146,39,134,114],phinod:[24,25,81,31,32,33,115],previous:[74,65,49,44,28,30,31,61,100,69,45,144,139,114,83,39,23],pcre2:39,han:114,hao:122,had:[110,38,11,48,53,68,122,91,3,106,93,87,4,147,83,61,9,101],v4p0f_i32f:83,nc_nv:38,endur:40,har:[37,41],hat:110,sanit:[37,74,39,52,90,84],ocamlbuild:[16,17,18,19,22,23],sanir:39,quirk:48,preserv:[37,102,120,130,57,139,28,26,66,91,100,105,15,93,134,106,83,39],unif:57,st_mode:120,attrparsedattrkind:34,protoast:[24,25,29,30,31,32,33],shadow:[24,25,65,88,48,31,32,33,106,17,18,19],isdeclar:101,measur:[101,120,97],specif:[46,102,0,1,47,48,49,26,114,115,104,81,125,117,4,7,8,9,85,54,55,68,136,120,11,83,121,12,61,13,14,15,62,89,18,101,21,22,24,79,2,65,130,88,27,92,124,30,132,32,91,34,35,86,134,95,71,97,37,73,74,38,100,139,39,110,51,148,118,40,106,144,131,42,43,44,45,149],fcmpinst:101,nonlazybind:[83,144],streamdirectori:67,remind:[40,114],underli:[25,81,74,130,88,68,28,102,67,142,40,93,83,101],right:[46,102,134,47,87,26,114,81,125,83,89,55,120,145,121,86,15,62,90,16,18,19,101,21,22,23,24,25,129,27,28,29,30,31,32,33,34,93,37,138,38,75,51,40],old:[24,25,51,123,37,54,132,26,57,33,100,40,15,117,134,70,19,83,148,9,101],getargumentlist:101,x86_fastcal:102,olt:83,dominatorset:91,getbit:28,sparcsubtarget:65,bottom:[46,73,138,65,1,87,28,68,72,91,17,4,83,61,95],undisturb:81,lto_module_get_num_symbol:108,stringsort:81,subclass:[102,129,65,57,88,89,28,110,122,132,91,81,125,101,8,22,149],cassert:[24,81,11,30,31,32,33,5,6],op_begin:101,condit:[46,81,48,90,100,3,125,4,83,11,121,13,62,87,17,18,19,101,21,22,23,24,25,65,130,27,28,29,68,31,32,33,91,37,73,74,139,102,51,105,108],foo:[75,1,48,81,115,3,141,83,79,11,7,121,60,86,14,142,90,16,17,102,101,125,22,23,129,130,88,28,29,30,31,132,35,93,94,72,74,139,39,57,110,105,44,149],"0f00000000":11,sensibl:101,leftr:87,clientaddrlen:5,egregi:[40,111],codeview:[113,132,69,143,135,148,117],tablegen:[37,55,74,65,54,68,102,12,98,114,82,34,124,42,137,44,8,149],bindex:65,llvm_on_xyz:4,image_scn_mem_lock:140,llvmanalysi:41,true_branch_weight:3,timelin:[118,114],benderski:14,baselayert:61,slightli:[81,48,39,30,32,33,91,14,131,16,18,19,83,101],coars:2,xor64rr:102,dw_tag_array_typ:[83,132],llvmfuzzeriniti:39,selectiondagisel:[34,84],basenam:132,expandop:55,mbb:[102,65],mcinstlow:102,wrap:[81,4,83,9,85,60,62,90,101,125,22,23,130,27,28,29,68,132,37,110,21,40,144],"_size":38,workgroups:38,msp430:[37,102,83],data32bitsdirect:65,suffici:[46,48,7,57,83,62,101,21,129,130,88,27,28,134,97,37,138,20,75,51,43,149],support:[1,2,3,4,5,6,7,8,9,11,86,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,104,48,52,54,55,57,63,60,61,62,41,64,65,67,68,70,36,74,110,118,77,82,83,84,90,88,91,16,92,93,97,102,51,106,107,108,109,81,111,114,100,117,76,120,121,122,123,125,126,129,130,132,134,139,141,142,144,131,147,148,149],sub_rr:149,happi:[19,101,138,41,33],avail:[46,81,0,1,47,48,49,2,80,114,106,52,4,123,83,8,9,54,129,57,121,61,86,14,142,68,62,90,16,17,101,21,23,24,126,127,65,88,27,28,29,30,31,32,132,91,146,92,134,95,96,118,37,98,74,38,100,139,39,102,51,76,40,84,42,45,149],width:[102,144,1,88,101,26,51,14,81,15,62,93,83,148],cpprefer:101,call:[1,2,3,4,5,6,7,8,9,11,86,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,42,43,44,45,46,48,49,53,55,57,63,60,61,62,41,79,65,68,70,72,73,74,110,118,83,84,85,13,90,88,91,16,93,95,96,100,101,102,103,51,105,106,108,109,81,113,115,76,136,120,121,122,123,125,132,134,138,139,141,142,144,131,149],constantli:37,path_to_clang:131,use_back:101,headach:47,setxyzzi:81,"0x2413bc":91,fpga:102,offer:[88,48,45,110,51,134,101],privatesegmentfixeds:38,unrool:14,refcount:88,strike:[29,23],dllstorageclass:[83,144],multiprocessor:[88,91],reserveresourc:102,offen:38,profdata:[79,74,80,141,100,131,83],loadlibraryperman:[5,6,63,61,9],insidi:81,getdefaulttargettripl:24,reiter:83,handili:81,fermi:102,dump_valu:[16,17,18,19,23],modsd:45,fmt_pad:101,isexternalsymbol:65,adopt:[54,81,102,40,134,4,9],attrgrp:144,proven:[46,38,48,33,40,62,36,19,83],exist:[46,110,0,124,48,26,113,51,115,52,81,117,4,7,8,9,54,55,102,57,83,132,121,60,86,14,105,15,62,90,17,18,19,101,41,23,24,25,2,65,66,88,68,29,30,31,32,33,91,146,92,35,134,122,130,120,112,74,138,100,139,39,75,104,77,40,106,144,89,42,147,149],flagsflat:110,nvvmreflect:11,ericsson:83,build_phi:[17,18,19],bswap:[55,83],gfx702:38,floor:[83,1],relax:[48,45,68],sh_hidden_private_base_vimid:38,role:[81,47,87,125,132,44,22,101],finalizeobject:[85,25],presum:[83,138],smell:101,roll:[81,129],mri:[102,68],legitim:81,notif:[146,138,57],intend:[46,0,111,113,4,83,85,54,55,120,57,7,59,60,13,133,62,90,101,65,88,28,131,68,91,86,134,37,74,108,45,102,51,40,106,139,43,44],readjust:102,cmpgep:87,removemoduleset:[63,61,9],"__except":139,intens:[101,62,1],intent:[120,83,102,33,13,40,108,93,90,19,44],execpt:38,p0i32:7,"0b10110110":83,dyn_switch:81,"1s100000s11010s10100s1111s1010s110s11s1":101,padparam:139,cumemcpyhtod:11,pre_stor:102,time:[1,2,3,7,8,9,10,11,12,13,14,87,17,18,19,20,21,23,25,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,47,48,49,104,54,55,57,63,60,61,62,41,65,66,68,36,72,73,74,75,118,77,110,83,84,85,86,90,88,127,91,16,92,94,95,96,97,100,101,102,51,105,106,108,81,111,113,114,115,117,76,120,122,124,132,134,139,141,142,144,131,146,147,148,149],push:[25,81,37,88,102,134,20],image_file_dl:140,corpu:39,breadth:[27,21,95],v_cmpx_le_u32:38,nearbyint:[83,1],chain:[46,87,2,115,104,3,4,83,57,19,101,65,68,132,33,91,34,37,73,74,102,105,131,108],b0000:38,ptrtoint:[83,62,130],oss:[134,114],sparctargetmachin:65,osi:121,aptr:83,const_nul:[17,18,19],s_trap:38,netbsd:[37,45],image_sym_type_short:140,millisecond:84,decid:[75,134,1,48,83,55,14,16,18,19,101,125,22,28,68,132,32,33,91,93,74,138,139,110],herebi:81,decim:[120,28,110,141,36,35,83,149],vex:34,x08:140,decis:[81,0,111,1,48,39,102,30,122,40,68,62,93,139,16,20,61,101],x03:140,uadd:83,macho:[85,45,102,144],x04:140,painlessli:28,"__atomic_fetch_or_n":51,intrins:[46,1,48,83,54,55,11,105,62,101,65,88,132,34,93,73,38,139,45,103,141,142,106,137],uint32_max:132,cudevicecomputecap:11,vmcore:28,lrt:14,fullest:81,exact:[91,37,81,46,88,89,28,66,113,51,132,13,108,134,139,42,83,49,101],numlin:79,solver:102,tear:139,llvmaddslpvectorizepass:45,unsupport:[102,65,47,2,51,86,104],team:[14,134,41,114],cooki:[101,83],prevent:[46,81,1,48,52,4,5,6,83,9,57,7,121,86,14,105,19,101,23,24,25,88,28,29,132,33,91,134,38,102,103,40,106,148],silvermont:45,feat_inlineasm:102,dcmake_cxx_flag:[12,84],numroot:88,heavyweight:101,scev:[46,40,57],perfunctionst:84,relocat:[85,95,83,65,38],filenameindex1:79,lazili:[101,108,144,16,5,6,63,61,9],currenc:[16,102,40,30],thecu:25,merge_bb:[17,18,19],current:[0,26,3,4,7,8,9,11,12,86,14,15,87,17,18,19,101,21,22,23,24,25,2,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,104,47,48,52,54,55,57,145,60,61,62,41,79,65,67,68,36,74,110,118,77,82,83,85,90,88,89,91,16,92,93,95,96,102,103,51,105,106,109,81,111,114,100,76,120,121,125,130,132,134,138,139,142,144,146,148,149],image_scn_cnt_cod:140,i256:83,boost:97,oeq:83,intraprocedur:[115,20],adc64rr:8,cudevicegetnam:11,dropdown:138,autogener:40,live_begin:88,modif:[25,65,38,83,28,132,120,91,3,87,5,141,20,96,9,101],splice:[101,83],address:[46,102,134,1,48,26,80,142,52,5,6,83,8,89,85,54,11,63,132,60,61,14,105,15,62,87,16,19,101,65,130,88,68,28,30,31,32,33,91,36,93,94,97,74,138,38,139,39,57,103,51,148,76,40,106,144,146,45,149],along:[46,102,48,26,113,81,82,83,89,85,129,11,14,15,62,87,16,101,21,23,65,88,27,29,30,132,91,36,134,37,74,75,103,51,141,144,147],shstrtab:38,ffast:[14,1],cur_var:19,volumin:101,checksum:[52,83,39],commentstr:65,queue:[91,118,101,65,38],throughput:62,replaceinstwithvalu:101,safepoint:[88,48,83,54],mipsel:118,bpf_ld:102,commonli:[81,65,88,83,144,101],ourselv:[132,81,117,9,11],ipc:4,ipa:73,love:101,"2ap3":35,pentium:[37,65],ipi:[78,117],prefer:[81,47,87,50,4,83,84,89,57,8,14,62,90,101,21,65,27,94,138,139,45,51,40,146,9],ipo:[87,73],src2:[102,8,149],regalloc:[91,95,92,102],src1:[102,8,149],fake:95,instal:[47,49,50,114,104,8,118,55,11,12,14,90,16,17,18,19,101,22,23,24,25,126,125,29,30,31,32,33,91,146,134,96,37,74,38,39,76,77,41,131,42],anothercategori:28,tabsiz:100,tokvarnam:44,virtreg:102,image_sym_class_nul:140,abbrevid:144,scope:[81,48,83,57,7,132,62,90,17,18,19,20,23,24,25,88,89,29,31,32,33,91,34,94,74,38,101,39,110,40,144,139,137,149],tightli:[24,25,81,125,29,30,31,32,33,16,17,18,19,83,22,23],analyz:[46,102,37,87,49,127,68,31,80,132,91,104,34,62,118,53,17,105,101,84],peopl:[81,111,47,26,114,4,83,9,54,55,121,15,21,130,27,28,91,134,37,138,102,40],n2627:81,claus:[101,40,83,102,139],refrain:[83,0,114],enhanc:[25,29,54,48,26,30,31,32,33,91,40,15,81,16,17,18,19,137,23],visual:[37,81,74,65,54,46,83,39,102,31,132,104,35,139,17,7,45,131,101],langref:[55,51,62,11],easiest:[37,65,26,30,51,114,91,15,147,118],behalf:[40,138],b_ctor_bas:7,subel:83,my_fuzz:39,descriptor:[25,38,65,132,106,144,83,148],daniel:132,print_pc:39,whatev:[37,110,74,130,46,83,28,57,12,118,115,14,105,139,4,7,9,101],problemat:[40,81],s_bfm_b64:38,encapsul:[81,101,122,129,70],errortoerrorcod:101,tracksregl:89,failtkind:109,myremot:5,recycl:[118,102],setrecordnam:144,streamsiz:67,optnon:[13,83,144],fpm:[5,6,63,61],fpo:[148,117],r11d:8,"0x00001c00":102,grosser:122,fpu:[83,12],legalizetyp:102,buffer_store_format_xi:38,rel_path_to_fil:100,parameter:[68,149],r11w:8,vec0123:83,remap:[85,102,68],motohiro:102,getsigjmp_buftyp:81,dw_apple_property_gett:132,spot:[46,39],mrm4m:65,mrm4r:65,succ:81,isfloatingpointti:101,date:[37,120,138,57,47,45,12,31,114,115,104,17,20,148,149],fucompi:102,data:[109,46,110,134,48,80,106,81,117,131,4,83,8,89,85,55,102,11,130,122,61,62,90,16,17,18,19,20,24,25,65,66,88,67,28,29,30,132,33,91,36,35,93,71,97,73,38,100,101,39,57,51,141,118,105,84,144,139,149,108,148,79],codes:8,stress:[81,58,80],indexloc:101,ebpf:102,ver60:148,stdio:[37,77,104,17,16,4,18,19,108],stdin:[25,132,86,100,16,17,18,19,7,22,23],dyn:[71,105,38],mangl:[81,132,40,5,6,83,9],fp4:[8,149],sandbox:[47,12],fp6:[8,149],fp1:[8,149],fp0:[8,149],fp3:[8,149],fp2:[8,149],callabl:[81,11,83,29,101,23],iftmp:[24,25,31,32,33,17,18,19],untest:47,operand_type_list_end:65,my_funct:11,llvm_library_vis:88,getinsertblock:[24,25,31,32,33],revisit:[48,122],numbyt:106,x86retflag:149,overhaul:114,thumb:[81,129,45,102,51,118,40,4],image_sym_class_block:140,instantli:101,"__stack_chk_guard":83,jit:[102,64,49,26,104,81,5,6,83,61,9,54,11,63,121,123,15,16,17,18,19,20,21,22,23,24,25,126,65,88,27,29,30,31,32,33,95,37,74,101,75,76,40,106,145,42],cmptype:87,suspend1:105,suspend2:105,canonicalis:93,image_sym_class_end_of_struct:140,ideal:[81,65,48,39,68,42,101],opencl:[38,11],alacconvert:49,outli:139,nabbl:134,matcher:[102,39,34,137],isbinaryop:[24,25,32,33],nation:111,"0x00000147":132,inpredsens:82,therebi:[106,28,83],"0x00000140":132,maxatomicsizeinbitssupport:51,machineconstantpoolvalu:89,mcode:35,perspect:[0,111,129,57,48,91,105,139,83],revers:[46,73,74,1,7,45,130,93,149,83,101],revert:[37,40],separ:[102,0,49,2,115,52,81,4,5,83,11,7,12,60,86,14,105,68,90,101,125,41,65,130,88,67,28,30,132,91,34,134,96,36,72,37,74,38,100,39,110,51,141,40,106,22,144,42,147,108,149],xctoolchain:74,dwarf2:25,image_sym_class_end_of_funct:140,complex:[46,81,1,87,26,114,4,83,61,55,8,13,14,15,90,16,18,19,101,22,25,65,88,68,125,124,30,132,32,33,91,39,102,131],confid:40,src0_sel:38,compil:[1,26,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,27,28,29,30,31,32,33,34,37,38,39,40,42,45,46,104,47,48,49,50,52,54,55,57,63,61,62,41,64,65,68,73,74,75,118,80,83,84,79,86,90,88,91,16,92,93,95,96,100,20,102,51,105,106,108,81,114,115,117,76,136,121,122,125,126,130,131,132,134,139,141,36,144,145,146,148],argvalu:[28,123],insertbyt:39,receipt:0,"0x4000":132,sponsor:134,registertarget:65,switchinst:[46,3],irrespect:74,"__has_attribut":34,blx:35,blockmapaddr:67,dw_op_stack_valu:83,hcc:38,"0x100":132,explan:[0,129,87,121,74,96,83],internet:134,"0x1c2":35,getschedclass:65,e_flag:38,pseudocod:65,million:[101,83],procedur:[73,136,27,28,114,3,62,93,87,83,21,41,101],removefrompar:101,crazier:[17,31],micromip:45,"byte":[48,52,53,83,117,79,55,120,57,142,16,17,18,19,101,22,23,65,130,67,132,69,93,38,39,102,103,51,105,106,144,148],unpredict:83,reusabl:[102,68],departur:134,clangattrvisitor:34,ocaml:[74,88,16,17,18,19,21,22,23],recov:[109,7,39,106,139,83,101],enable_vgpr:38,cbw:102,nicknam:0,neglect:49,arraytyp:101,oper:[109,46,110,1,48,64,26,81,142,115,3,4,83,8,9,79,55,68,136,102,11,121,61,13,14,105,15,62,87,16,17,18,19,101,21,22,23,24,25,65,66,88,27,125,29,30,31,32,33,91,34,93,95,130,120,37,74,38,139,39,57,51,118,92,84,144,44,149],onc:[109,110,0,139,47,48,49,26,114,100,52,81,127,4,5,6,83,8,101,85,54,10,102,57,63,121,122,61,13,14,105,15,90,87,16,17,19,20,125,22,23,2,65,130,88,108,28,29,30,31,33,91,37,73,74,138,38,145,39,75,104,141,77,40,84,144,55,147,44,148,149],iaddroff:102,coveragemappingdataforfunctionrecord1:79,coveragemappingdataforfunctionrecord0:79,submit:[37,138,54,75,40,20],symmetri:86,spanish:52,subtarget:[65,102,68,34,137,83],open:[81,87,104,4,5,6,63,61,9,54,83,121,14,16,17,18,19,101,23,24,25,129,68,30,31,32,33,134,73,74,138,38,45,102,40,106,145,147,149],lexicograph:[87,81],rmw:51,addtmp4:[29,23],breviti:[93,11],f88:11,convent:[81,48,83,136,129,11,121,60,90,87,101,23,25,65,29,68,132,34,38,139,102,105,106,144,147],bite:121,f80:83,flush_statu:118,enable_optim:76,optlevel:28,draft:[37,132,0,51,111],addtmp1:[16,30],getsubtarget:65,s_barrier:38,conveni:[46,81,26,115,83,9,79,11,86,40,15,17,18,101,41,2,129,30,28,68,31,32,134,102,118,105,149],goldberg91:88,usenamedoperandt:65,fma:[102,14,11,83,1],cpuset:97,dllvm_include_exampl:37,artifact:[87,39,122,130],forward:[46,81,48,4,83,117,55,57,14,101,21,22,23,88,27,125,31,132,70,139,102,118,144,44,149],ei_abivers:38,"__apple_namespac":132,llvm_parallel_compile_job:74,vec012:83,third:[102,48,49,26,114,81,83,79,13,40,15,87,101,41,23,65,130,88,28,29,132,91,37,139,110,105,106,144,131],rival:101,rzi:11,param2:101,param1:101,nuisanc:40,sai:[111,49,26,113,115,82,4,83,120,7,15,62,101,21,23,2,129,130,27,28,29,68,134,67,102,147],nicer:[25,28,110,101],profiledata:83,argument:[46,102,134,48,49,26,80,90,100,104,81,149,53,82,106,5,7,8,9,85,54,63,68,129,57,83,132,121,60,61,13,14,15,62,87,16,17,18,19,101,125,22,23,24,25,126,2,65,130,88,27,28,29,30,31,32,33,91,36,86,93,95,96,139,37,74,38,145,39,75,103,141,77,105,84,144,55,137,44,45,79],predrel:82,second_tru:83,sar:102,saw:[91,17,108,31],well:[109,46,102,0,111,1,48,49,114,90,100,81,125,117,123,83,8,9,54,55,11,145,121,84,86,68,62,87,16,18,19,20,21,22,23,24,25,127,27,28,29,30,132,32,33,91,69,134,37,138,101,45,57,51,77,40,144,89,42,108,148,149],entrytoken:102,notw:7,add_llvm_execut:90,xxxgenregisterinfo:65,wrapcolumn:110,destroi:[102,65,101,110,68,60,105,139,83,121],libpath:133,note:[0,26,4,7,8,11,12,86,14,15,87,17,18,19,20,21,22,23,24,25,2,27,28,29,30,31,32,33,35,37,38,39,40,42,44,45,46,48,49,50,53,54,55,57,145,61,62,41,65,67,68,70,73,74,75,118,80,82,83,84,85,90,88,91,16,92,93,96,97,101,102,51,105,106,108,109,81,111,113,114,115,136,120,122,123,125,129,130,132,134,138,139,142,144,148,149],denomin:81,take:[0,2,5,6,7,61,9,10,11,14,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,34,35,37,38,39,40,44,45,46,47,48,104,53,55,57,63,60,65,70,110,118,77,82,83,85,90,88,127,91,16,92,93,95,96,138,101,102,51,105,106,108,81,111,112,122,28,129,130,132,134,99,139,140,141,142,144,131,147,149],multiarch:12,llvmcreatesimplemcjitmemorymanag:106,jumptabl:[83,144],printer:[24,46,65,88,102,91,34,42,43,101],offload:[52,45],atomic_:51,buffer:[26,83,132,15,16,17,18,19,101,21,22,23,24,25,125,29,30,31,32,33,38,139,118,108,148],fcc_ug:65,compress:[37,74,39,144,53,101],private_segment_align:38,insertel:[83,7,93],abus:101,coroaddr:105,"__xray_patch":118,joinerror:101,homepag:[37,104],hexadecom:36,phid:81,"_function_nam":35,drive:[42,48,50,122],fulldebug:[83,132],setinsertfencesforatom:51,salt:52,mcjit:[85,25,37,54,30,31,32,33,62,123,9],"0b01101101":83,vextuhlx:45,merit:81,rodata:[65,38],identifierstr:[24,25,27,125,29,30,31,32,33],cclib:[18,19],feedback:[0,114,91,40,146,5,6,63,61],slot:[46,65,139,48,102,103,60,33,105,106,62,53,19,83],xmm:[83,7,65],xmo:136,mergefunct:[87,54],activ:[81,48,5,6,83,61,54,57,63,60,14,40,101,64,65,88,91,96,139,39,102,105,106],v2size:57,freebsd5:102,codeblock:88,v16f32:83,assing:87,dominatortre:91,flagscpu1:110,r630:38,clang:[81,1,47,2,50,51,100,52,3,117,5,6,7,8,9,79,54,11,83,132,121,12,61,13,14,142,15,62,16,19,101,125,63,24,25,123,129,130,92,29,30,31,32,33,34,86,134,96,114,37,73,74,138,38,139,39,75,104,118,77,40,84,41,131,42,108,45],x86reloc:65,run_long_test:86,requir:[0,2,4,5,6,7,61,11,12,86,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,34,37,38,39,40,42,45,46,104,47,48,50,52,55,57,60,62,41,79,65,66,68,74,110,118,77,82,83,85,13,90,88,89,91,16,93,97,100,101,102,51,105,106,108,109,81,114,115,136,120,121,28,129,130,132,134,138,139,144,131,149],corosplit:105,discontigu:67,borrow:[101,83],specialsquar:129,getframes:88,openorcreatefileforwrit:4,xmax:[18,32],where:[109,46,110,0,111,47,48,49,2,81,51,115,52,3,117,7,8,9,85,86,63,102,11,129,83,132,121,12,122,61,13,14,105,68,62,87,16,17,139,19,20,21,22,23,24,25,127,65,130,88,27,28,29,30,31,33,91,93,70,114,72,148,120,37,74,138,38,100,101,45,75,104,141,118,77,40,84,41,144,55,42,137,44,134,79],compute_pgm_rsrc2_user_sgpr:38,loopvectorizationplann:122,deadlin:40,postdom:46,dw_at_apple_property_sett:132,callseq_start:48,arglist:83,isphysicalregist:102,clangcommenthtmltagsproperti:34,emitlabel:102,x24:140,caico:38,getindex:65,spars:[37,55,73,46,102,141,13,134,101],amort:68,sigplan:[88,102],screen:47,secnam:35,tma_lo:38,imm32:102,opval:65,sparc:[37,136,65,102,51,91,83,149],parsenumberexpr:[24,25,125,29,30,31,32,33],buffer_atomic_inc:38,uncondition:[25,57,83,102,35,146,63],vextsb2d:45,genericvalu:[16,17,18,19],eflag:[89,8,149],unforeseen:68,extern_weak:[83,144],mani:[109,46,75,134,1,47,48,49,26,81,115,104,3,125,131,4,7,9,121,55,102,11,129,83,132,59,12,60,86,14,15,90,16,17,18,19,20,21,22,23,65,130,88,27,28,29,30,31,32,33,91,93,148,72,97,37,138,101,39,57,51,110,118,106,144,139,42,45],copypart:39,qhelpgener:74,dw_at_mips_linkage_nam:132,ttmp:38,sccp:[46,73],sentinel:[101,144],glibcxx_3:37,boat:81,curs:[145,2],printstar:[17,31],fib:[25,46,27,31,33,17,19,21],add16mr:8,attrgrp0:144,attrgrp1:144,pluginfilenam:95,modinfo:148,ismod:149,parseifexpr:[24,25,31,32,33],inst_begin:101,add16mi:8,"15mb":134,reflex:87,rss_limit_mb:39,constantfoldcal:55,symobl:35,xray_fdr_log:118,thousand:[46,67],resolut:[0,30,32,14,108,9,97],somemap:81,ppcisellow:55,former:[48,125,102,51,142,62,89,22],combine1:102,combine2:102,substream:[69,148,117],emitalign:88,columnstart:79,polli:[37,74,122],view_function_cfg:17,numsgpr:38,test_exec_root:2,ctrl:[24,29],lto_module_get_symbol_attribut:108,canon:[46,134,101,132,62,93,5,6,83],llvm_enable_lld:74,blah:[28,81,39],freelist:52,pthread:[52,83,14],ascii:[24,25,120,27,39,29,30,31,32,33,132,125,144,16,17,18,19,83,21,22,23],typedescriptor2:139,g_icmp:68,econom:111,binari:[46,81,47,87,26,51,100,52,3,125,83,84,85,118,10,119,11,132,121,12,14,15,112,16,17,18,19,20,21,22,23,24,25,126,127,65,88,27,28,29,30,31,32,33,69,34,35,94,136,96,114,37,74,99,38,101,39,102,140,104,141,76,77,40,144,149,148,79],devcount:11,tutori:[64,87,26,125,5,6,7,61,9,54,11,63,14,15,16,17,18,19,21,22,23,24,25,129,27,28,29,30,31,32,33,39],immutableset:101,srem:[102,83],p0v8i32:83,dw_tag_friend:83,sreg:11,unhandl:[139,101],irread:74,"0x1603020":123,getfunct:[24,25,88,101,29,30,31,32,33,13,91],extern:[46,81,64,47,48,49,26,50,52,125,5,6,83,61,9,85,120,11,63,86,14,142,15,62,87,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,91,36,93,95,74,38,39,102,76,77,40,144,89,108,45],defi:83,sret:[83,144],defm:[44,8,65,149],pdbfilepathnameindex:148,fnname:[24,25,125,29,30,31,32,33],dw_form_ref_udata:132,clobber:[57,89,102,115,83,149],imlpement:39,dereferenc:[109,46,130,83,62,144,90,101],runtimedyldmacho:85,noencod:102,v_add_f32_e32:38,addmodul:[30,31,32,33,5,6,63,61,9],resp:[101,83],rest:[87,4,83,7,40,68,19,101,22,88,89,125,30,132,33,134,94,37,39,102,118,105,144,147,108],checkcudaerror:11,fmadd:102,gdb:[54,65,102,132,123,91,77,15,101],unmaintain:[40,8],invalid:[46,81,48,2,115,83,85,57,132,16,17,18,19,101,125,22,23,24,25,127,65,130,28,29,30,31,32,33,91,37,73,38,139,39,110,51,141,106],smallvector:[25,5,101],uid:[83,120],loadable_modul:88,cond_fals:[19,33],r13w:8,"__builtin_trap":39,ghostli:101,"__imp_":83,littl:[46,81,87,26,50,125,4,83,61,117,68,132,121,13,15,18,19,101,21,22,23,24,25,65,130,88,27,28,29,30,31,32,33,91,93,96,37,38,102,142,144,147],"__device__":14,instrument:[79,46,54,39,130,148,118,84,13,100,3,131,141,83,45],r13d:8,r13b:8,exercis:[86,52,26,15,9],prefix2:7,featurev8deprec:65,kaveri:38,disubprogram:[25,83,132],logallunhandlederror:[5,6],mrm2m:[65,149],around:[46,81,48,26,4,83,57,60,13,15,87,17,101,125,25,65,130,88,28,90,31,132,91,134,70,37,38,139,45,51,118,40,42,39],libm:[16,83,29,30,23],getunqu:101,unveil:[27,21],sumo:38,libz:83,traffic:[19,101,134,33],my86flag:110,llvm_lib:74,at_decl_lin:132,part:[46,102,0,134,48,26,113,90,104,81,125,5,6,83,8,9,68,129,57,63,132,61,86,14,105,15,62,87,16,17,18,19,20,21,22,23,25,2,65,130,88,27,28,29,30,31,32,33,91,34,93,74,96,139,37,67,101,39,110,51,118,40,84,144,145,42,108],mrm2r:[65,149],find_program:74,intel:[24,74,1,45,136,12,51,86,92,95,83,97],"__gxx_personality_v0":139,integ:[102,1,48,81,53,83,79,55,120,7,86,14,62,87,101,23,65,130,88,89,28,29,68,132,134,72,38,139,39,110,51,141,105,144,44,148,149],timepassesisen:28,updat:[46,0,134,48,26,114,115,104,5,6,83,85,55,120,57,7,132,105,15,87,16,17,18,19,101,125,63,24,25,129,88,67,28,29,30,31,32,33,91,93,37,138,38,139,39,102,118,40,106,108,45],weng:14,inter:[3,73,57,40,62,4,83],orcremotetargetserv:5,manag:[109,111,47,48,26,114,104,5,6,63,61,9,85,57,83,121,13,14,15,19,20,65,130,88,30,31,32,33,91,134,73,38,101,11,106,145,146],pushq:48,isnotduplic:8,a64:93,catchpad:[139,83],mfenc:51,pushf:102,constitut:[0,93,68,86,144,101],pod:81,whould:0,stryjewski:46,exig:101,issiz:101,definit:[46,102,48,26,81,114,115,52,3,89,53,82,5,6,7,8,9,54,63,68,83,132,59,125,61,142,15,87,16,17,18,19,101,21,22,23,24,25,65,88,27,28,29,30,31,32,33,91,34,93,36,90,73,38,108,45,75,51,105,106,144,55,42,137,44,149],parseextern:[24,25,125,29,30,31,32,33],evolv:[79,40,108,111],exit:[46,81,87,49,26,7,100,53,5,6,83,84,10,119,120,11,145,59,122,123,15,62,58,112,17,101,121,24,25,126,2,66,88,127,31,33,91,92,134,94,95,71,72,37,99,139,39,102,141,118,36,107,137],nonintuit:54,notabl:[55,74,130,101,102,14,83],ddd:120,pointnum:88,ispip:38,isloopinvari:101,blockaddress:83,image_sym_type_union:140,compileondemand:[6,63],n1984:81,n1987:81,n1986:81,ispic:65,standpoint:101,clangattrimpl:34,mov64rm:89,isset:28,mingw32msvc:102,lock:[83,51,91,62,134,101],spiffygrep:28,gplv3:77,aco:57,acm:[88,102],printmethod:65,ptr64:38,compuat:73,powerpc64:[136,83],sm_35:[14,102],lto_module_dispos:108,industri:54,invert:[86,83,62],specialfp:149,effici:[46,81,122,4,83,54,57,121,60,86,142,16,101,22,129,88,68,125,30,132,91,34,37,39,102,40,144,43,45,149],enable_sgpr_flat_scratch_init:38,surviv:[139,125,22],pr26576:68,homeless:101,cmake_module_path:74,globalrefss:69,diflagfwddecl:83,basictyp:83,ehptr:139,hex:[39,110,83],movsx64rr16:102,clear_cach:83,uglifi:[16,30],paramattr_code_entry_old:144,isloadfromstackslot:65,verbatim:[94,28,65],thedoclist:110,mantissa:83,conclud:[17,18,83,31,32],bundl:[105,102,83],inner_a:83,htpasswd:40,createjit:85,"__anon_expr":[24,25,125,29,30,31,32,33],clenumv:28,epilog:[102,65],conclus:[25,64,27,125,26,15,87,19,63,21,22],ifunequ:83,pull:[134,37,81,51,138],tripl:[24,25,65,38,11,89,39,102,12,132,85,86,92,62,144,95,5,83],dirti:[81,148],rage:53,machinecs:68,linkinfo:117,agg:83,emitprologu:65,reprimand:0,gcolumn:1,puls:39,gone:[45,61],unreferenc:[83,90],creat:[1,2,4,5,6,63,8,9,11,12,86,14,15,87,17,18,19,101,21,22,23,24,25,26,125,29,30,31,32,33,34,35,37,38,39,40,43,44,45,46,47,48,49,104,54,60,61,41,64,65,68,70,73,74,110,118,79,83,84,85,90,88,89,127,91,16,92,93,96,100,102,105,106,108,81,111,114,115,120,121,124,28,126,130,132,133,134,138,139,142,144,146,147,149],certain:[48,2,113,83,84,79,55,120,57,7,89,16,19,101,24,88,30,28,67,32,33,91,35,93,37,38,39,102,76,105,106,149],numregion:79,row_shr:38,getnamedoperandidx:65,creal:[18,32],movsx32rr8:102,parsevalid:84,googl:[52,96,14,138],row_shl:38,collector:[73,88,48,26,15,144,83,121],emphas:[81,147],collis:[101,81,83,132,134],writabl:[96,148,35,61,132],freestand:83,genuin:101,of_list:[16,17,18,19,22,23],benchspec:49,bpf_ldx:102,numexpress:79,lds_size:38,spiffysh:28,smrd:38,allowsanysmalls:101,mask:[102,65,88,7,110,81,34,62,70,83],shadowlist:65,absolute_symbol:83,tricki:[88,91,14,81,51],mimic:[81,134],createuitofp:[24,25,29,30,31,32,33],mass:72,scudo:[54,52],prealloc:101,cpp:[81,1,48,52,4,5,6,63,61,9,55,11,7,132,121,84,86,90,87,125,24,25,126,123,65,88,28,29,30,31,32,33,91,34,134,37,74,102],cpu:[102,87,2,50,5,6,83,84,12,61,14,24,65,68,91,92,70,95,97,38,39,110,51,144,45],scm:134,consider:[37,102,111,48,39,110,60,93,124,4,101,8],illustr:[101,134,27,28,29,132,125,33,91,105,108,93,16,19,83,21,22,23],labeltyp:101,scc:[13,46,73,91],dw_at_apple_properti:132,fntree:87,astcontext:81,getnamewithprefix:[5,6,63,61,9],rewrit:[46,73,129,65,48,33,81,134,19,83],add16ri:8,incap:[26,15,144],add16rm:8,spirit:[101,111],tail:[46,102,144,11,88,44,26,132,105,15,83,87,7,149],add16rr:8,introduc:[46,48,114,115,5,6,83,61,9,129,57,7,60,8,87,17,18,19,101,65,68,67,31,32,33,134,122,97,45,102,51,105,106,149],"case":[0,1,26,3,4,7,8,9,10,12,13,14,15,87,17,18,19,101,21,22,23,24,25,27,125,29,30,31,32,33,34,37,38,39,40,43,44,45,46,48,49,50,54,55,57,145,60,61,62,41,79,65,68,74,110,75,80,82,83,85,86,90,88,89,127,91,16,93,96,20,102,103,51,105,106,108,109,81,111,113,115,117,120,121,28,126,129,130,132,134,139,144,147,148,149],corollari:69,getframeinfo:[102,65],"102kb":28,getaddress:[30,31,32,33,5,6,61,9],gcov_prefix_strip:100,candid:[109,47,89,122,114,40,96,83],element_typ:[16,17,18,19,23],attr0:144,attr1:144,ia64:136,strang:[49,19,81,93,33],condition:[88,2,90],release_xx:114,quux:81,colleagu:111,helloworld:90,retcc_x86_32_c:65,sane:[27,74,21,51],initializeallasmpars:24,small:[81,87,49,114,53,4,83,79,54,11,145,86,105,62,90,20,21,63,25,129,130,88,27,28,68,132,91,95,96,101,39,102,141,40,106,144,42],release_xi:114,dsa:73,mount:[37,96,97],reqdworkgroups:38,quicker:[115,0,50,61],"__image_info":83,sync:[37,38,11,110,51,134],past:[25,81,138,65,130,48,32,40,134,18,149,83,101],pass:[2,5,6,7,8,9,11,13,14,15,87,17,18,19,101,22,23,24,25,26,28,29,30,31,32,33,35,37,38,39,40,42,43,45,46,104,47,48,49,52,54,55,57,63,59,60,61,62,41,65,68,70,72,73,74,75,77,80,82,83,84,85,86,90,88,89,127,91,16,92,93,95,96,97,100,20,102,103,51,105,106,108,109,110,114,115,121,122,123,125,129,130,131,132,134,139,141,142,145,148],enter_subblock:144,trick:[54,40,129,27,26,12,33,34,15,134,19,83,21,101],deleg:[139,81,83,51],xor:[46,102,65,11,83,1,105,101],registerregalloc:91,clock:[91,83],section:[109,46,102,134,1,142,48,49,26,140,80,114,149,115,52,81,127,4,83,84,9,85,120,57,129,130,14,105,15,117,87,16,101,125,22,25,2,65,66,88,89,28,90,30,132,91,34,35,93,94,95,71,97,37,74,38,139,45,75,103,51,141,118,40,106,96,144,42,107,43,147,148,79],delet:[46,102,87,7,115,52,81,63,9,120,11,83,132,121,16,17,18,19,20,23,25,68,29,30,31,32,33,91,96,37,101,45,57,77],abbrevi:[81,144,53],succinct:2,letlist:44,method:[110,48,49,7,81,4,63,61,9,85,55,102,57,129,83,132,60,87,16,17,19,20,125,23,65,130,88,68,28,29,30,31,33,91,34,70,90,73,138,101,75,106],contrast:[29,129,139,102,122,91,134,101,61,23],hasn:[91,39,101,61,130],full:[46,110,48,26,114,81,5,6,7,61,9,63,102,11,83,132,121,12,60,84,86,14,142,15,90,87,16,17,18,19,101,21,22,23,24,25,126,123,27,125,29,30,31,32,33,36,134,94,37,137,74,138,38,39,57,51,40,41,89,42,147,148],hash:[79,37,110,102,38,57,87,39,26,132,40,15,134,78,83,49,117,101],vtabl:[81,7,142],unmodifi:48,tailcal:102,r_offset:38,sol_socket:5,inher:[101,113,121,83,90],ineffici:[1,39,102,33,62,144,19,101],memfenc:38,islvalu:81,simpleproject:74,myownp3sett:132,shufflevector:[83,7,93],prior:[79,37,38,139,28,102,60,91,40,144,42,105,83],lto_module_get_symbol_nam:108,social:[54,111],action:[91,37,55,73,0,65,38,48,102,68,13,105,3,81,139,138,5,6,83,61,101],narrowaddr:83,sendmsg:38,via:[109,46,48,49,4,5,6,83,61,9,85,86,12,122,8,13,105,124,101,25,127,123,68,29,30,91,34,35,94,37,74,138,38,139,39,102,51,141,77,40,106,108,45],depart:[81,120],dw_tag_namespac:132,r_amdgpu_gotpcrel:38,vim:[37,147,8],memrr:65,dllvm_use_link:74,image_sym_class_member_of_union:140,ifcont:[24,25,31,32,33,17,18,19],test_hd:14,decrement:139,select:[46,102,134,48,49,2,100,104,81,82,83,8,85,54,55,11,122,84,19,20,24,65,130,88,89,28,68,33,91,34,35,93,96,36,37,73,74,138,38,101,45,110,40,139,149],fuzzing_build_mode_unsafe_for_product:39,x44:140,cis501:97,llvm_doxygen_qch_filenam:74,googlesourc:39,"3dnowa":24,targetselect:[24,25,30,31,32,33,5],objectivec:83,isconst:[101,144,38],more:[0,1,26,3,4,7,8,9,11,12,86,14,15,87,17,18,19,101,21,22,23,25,2,27,28,29,30,31,32,33,34,37,38,39,40,42,43,45,46,47,48,49,50,104,53,54,55,57,63,60,61,62,41,65,67,68,70,71,73,74,75,76,110,83,84,79,90,88,89,127,91,16,96,100,20,102,103,51,105,106,108,109,81,111,114,115,117,118,120,121,122,124,125,129,130,131,132,134,138,139,141,142,144,145,146,147,148,149],isintegerti:101,amd_float_denorm_mode_flush_non:38,door:129,tester:[54,49,2,80,114,40],hundr:62,hundt:14,uint8:[109,106],type_code_metadata:144,tr1:101,seciton:35,worri:[25,138,37,28,83,125,22],addcom:88,sens:[101,26,74,120,121,57,48,28,29,60,84,132,81,15,51,130,102,83,39,9,23],webkit:[106,83],multiset:101,compani:40,logcount:148,cach:[85,25,102,74,38,46,101,132,57,68,50,51,91,52,106,90,83,131],uint64:[109,106],llvm_on_unix:4,enable_if:129,sparcv8:[83,51],sparcv9:83,at_apple_properti:132,x86callingconv:65,leari:14,minnum:83,isnullvalu:87,use_value_profil:39,dst_unus:38,learn:[37,81,111,138,87,39,26,147,33,15,19,83,61,117,101],cmpinst:101,add_librari:74,ds_load:38,bogu:[24,91],scan:[91,26,113,88,87,49,2,92,86,34,15,16,95,81,102,63],challeng:[48,18,81,68,32],registr:[136,65,88,121,123,91],accept:[81,111,87,114,104,5,83,9,11,7,121,86,105,101,129,28,68,36,35,96,37,38,138,39,77,40,43,44,149],pessim:[109,46],buid:105,reconstruct:[118,132,120,130],v_reg:102,newsockfd:5,huge:[37,40,39,81,86,34,8],llvmgrep:37,readobj:[71,101,132,80],testresult:54,typesaf:83,feat_objectwrit:102,exprsymbol:[30,31,32,33],vla:[35,130],clangxx:86,appenduniqu:83,simpl:[46,110,134,1,48,64,2,115,104,81,125,131,4,5,6,7,61,9,79,63,68,102,49,11,129,83,132,86,15,90,87,16,17,18,19,20,21,22,23,24,25,26,65,130,88,27,28,29,30,31,32,33,91,92,93,95,96,36,72,37,74,101,39,57,51,40,144,55,42,43,149],prefetch:[136,83],loophead:[83,31,32],plant:91,referenc:[87,83,132,14,16,17,18,19,101,125,22,23,24,25,65,89,28,29,30,31,32,33,36,73,38,108,77,142,144,44,148],spillalign:65,unfus:14,variant:[46,4,83,7,86,16,17,18,19,101,21,22,23,65,28,68,91,134,139,51,106,42],freetyp:39,unsound:48,plane:[118,18,32],dllvm_use_sanit:39,maywritetomemori:[101,51],thought:[44,102,48,29,113,115,83,9,23],circumst:[65,83,30,33,91,139,16,19,7,101],github:[37,138,38,54,64,52,134,101,117,97],m64:96,arcanist:[54,138],author:[54,73,129,87,102,81,40,62,146,105,83,121],llvmbitcod:55,msg_interrupt:38,django:[0,111],atan2:[27,21],nvidia:[14,102,96,11],isd:[55,102,51,65],returns_signed_char:83,"_flag":90,syncscop:83,constitu:[17,31,139],ith:101,cc1:123,jitsymbolflag:[5,6,63,61,9],trade:[115,20,61,101],i386:[94,52,102,83],paper:[54,81,136,102,115,14,101,97],scott:81,vec0:83,vec1:[101,83],bou_unset:28,brig:38,row_mirror:38,nifti:[91,17,26,15,31],bpf_jmp:102,alli:83,compilecallback:[5,6],gcov:[100,141],bypass:[5,6,83,14,38],superflu:130,recip:122,srgp:38,e_typ:38,transformftor:61,slight:35,targetselectiondag:[55,102,65],image_sym_type_void:140,argsv:[24,25,29,30,31,32,33],cond_next:[19,33],gitlab:134,sourceinfos:148,authent:[146,136],dname:28,achiev:[74,101,45,51,122,52,108,62,134,82,4,96,83],tokcodefrag:44,lto_module_is_object_file_in_memory_for_target:108,found:[46,75,139,1,47,48,2,114,115,52,53,82,4,7,61,9,54,102,11,83,132,12,120,13,14,117,18,19,20,41,23,24,25,65,88,28,29,30,31,32,33,91,86,134,96,97,37,74,99,101,39,57,104,110,118,40,145,108,148],gettermin:101,errata:136,bpf_mem:102,quesion:87,clangattrparsedattrimpl:34,"0b000011":65,monoton:[134,83,51,38,114],stringli:90,realli:[46,81,49,26,113,115,104,83,117,55,132,121,86,14,15,16,17,18,19,101,21,23,25,130,27,28,29,30,31,32,33,37,74,138,39,51,40,131,147,44,149],tahiti:38,loweralloc:91,getcalleesavedreg:65,reduct:[46,81,1,145,45,80,95,83],reconstitut:83,ftp:37,massiv:[54,39,34,59],passmanagerbuild:11,ftz:11,stackframes:88,research:[54,49,55],stonei:38,sparingli:62,x86genregisterinfo:[102,65],occurr:[28,7,144],ftl:[106,83],targetpassconfig:68,loopbb:[24,25,31,32,33],isfirstclasstyp:87,mrm0r:65,tsc701:65,numabbrevop:144,believ:[81,0,111,101,30,31,32,13,40,16,17,18,83],"__cxa_begin_catch":139,instrmap:[82,65],mrm0m:65,wall:[26,91,2,15],fnptrval:83,prefac:90,getdebugloc:132,xxxend:101,struggl:37,amper:50,enough:[81,87,4,83,86,62,17,101,125,41,23,25,65,130,28,31,132,91,134,74,20,102,103,51,40,106,22,43],testament:[27,21],ge_missing_jmp_buf:81,new_then_bb:[17,18,19],cst_code_integ:144,major:[46,81,87,114,104,7,8,79,86,57,83,121,122,13,62,19,101,65,68,132,33,134,37,38,139,45,102,76,40,148],instprint:34,setversionprint:28,curesult:11,only_ascii:39,unprofit:46,number:[1,26,3,7,8,12,13,14,15,16,17,18,19,20,21,22,23,24,25,2,27,125,29,30,31,32,33,35,37,38,39,40,42,44,46,48,49,50,53,54,55,57,62,41,65,67,68,70,72,73,74,110,118,83,79,86,87,88,89,91,93,96,100,101,102,103,105,106,108,109,81,113,114,115,117,76,120,121,122,123,28,126,130,132,134,137,138,139,141,144,147,148,149],frameptr:105,obj_root:37,horribl:81,dw_at_low_pc:132,"0xxxxxxxxx":132,vararg:[102,83,29,144,101,23],val29:105,getpoint:83,checkpoint:139,unrecogniz:36,"0x2":[106,102,101],illeg:[46,102,38,11,48,28,1,68,121,134,130,83,45,101],dfa:[102,34,137],fptr:25,relationship:[118,65,38,88,87,132,91,139,83,48,82,4,7,101],v2p1f64:83,meabi:92,no_switch:1,compile_tim:49,dagarglist:44,consult:[37,73,74,120,54,91,115,104,148],oland:38,compute_pgm_rsrc1_vgpr:38,grace:68,aad:102,llvm_svn_rw:123,prebuilt:96,seamlessli:108,m35qpb:84,powi:83,reus:[102,68,132,40,106,134,90,83],arrang:[91,46,129,88,83,28,102,86,63],image_sym_class_stat:140,cgft_objectfil:24,comput:[46,102,48,26,52,81,53,83,79,11,121,122,14,15,62,16,17,18,19,20,21,23,24,25,65,130,88,27,29,30,31,32,33,91,72,73,38,101,39,57,106,146,148],packag:[37,74,54,47,12,50,114,76,14,146,96,72,41],qpx:83,returns_twic:[83,144],weak_odr:[83,144],linpack:1,flto:[13,77,108,74],namesbuff:148,machinecombin:68,equival:[46,81,48,26,52,83,61,11,7,14,15,90,87,101,130,88,89,28,68,132,35,93,95,37,73,74,38,139,102,51,141,144,44,149],ueq:[19,83,33],self:[79,46,121,0,138,88,87,45,102,30,32,148,91,125,144,16,18,83,49,22,101],also:[0,1,2,3,4,7,61,9,10,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,41,42,44,45,46,104,47,48,49,50,52,53,54,55,57,145,60,62,63,65,67,68,70,36,73,74,110,76,77,82,83,79,86,90,88,89,91,16,92,93,94,95,96,100,20,102,51,105,106,108,81,112,114,115,118,119,120,121,122,125,130,132,134,138,139,141,142,144,147,149],pmdatamanag:84,"__atomic_compare_exchange_n":51,ex2:11,brace:[81,7,86,139,149,83,101],ptrc:11,coff:[136,140,45,102,113,104,35,144,83,148],ptra:11,pipelin:[91,46,65,11,48,68,86,62,144,53,16,17,18,19,83],rhs_val:[16,17,18,19,23],dbi_mfc_type_server_substream:148,step_val:[17,18,19],plai:[27,26,91,15,87,44,21,101],"_z3foov":83,plan:[37,102,11,88,48,1,60,122,91,40,54,134,101,8,121],thecontext:[24,25,29,30,31,32,33],llvm_install_ocamldoc_html_dir:74,exn:[105,83],ptr7:83,src_reg:102,"0x14c":[140,148],cover:[81,87,114,100,104,83,79,136,7,86,62,18,101,21,65,130,88,27,28,68,132,32,91,37,39,102,118,40,106,146,147],ptr3:83,ptr0:83,ptr1:83,ext:[83,93],abnorm:[4,62],exp:[3,83,1],gabi:136,artem:14,rewritestatepointsforgc:[88,48],microsoft:[54,81,74,28,102,67,60,132,133,104,35,146,136,83,148,117],pubnam:132,gold:[37,74,54,102,50,13,77],getsymbolnam:65,xcode:[37,74,123],gcmetadaprint:88,session:[147,101,123],tracevalu:46,ntid:11,reput:134,ugt:83,impact:[81,38,88,83,122,132,62,134,90,101],fputc:[24,25,30,31,32,33],cr0:83,cr7:83,addrri:65,writer:[54,55,102,136,65,88,87,45,59,51,91,144,137,83,121],solut:[37,102,74,134,54,87,28,26,51,33,91,132,104,15,93,96,19,61,39,101],printdatadirect:65,baseregisterinfo:34,llvm_executionengin:[16,17,18,19],factor:[81,1,83,102,122,101,8,149],bernstein:132,i64imm:65,microprocessor:[102,83,65],regstat:[89,102],tmp_clang:39,mainten:[82,40,108],banner:101,llvm_link_llvm_dylib:74,v_addc_u32:38,synthet:65,f2_2:65,synthes:[16,55,30,132],"__chkstk":35,machinememoperand:51,crc:39,"7600p":38,coerce_offset0:7,link_compon:41,set:[2,3,4,5,6,7,8,9,11,12,13,14,87,17,18,19,101,21,22,23,24,25,27,28,29,30,31,32,33,34,37,38,39,40,42,44,46,47,48,49,50,104,54,55,57,63,60,61,41,79,65,67,68,69,36,74,110,118,77,82,83,84,85,86,90,88,91,16,92,93,95,96,97,20,102,51,105,106,108,81,114,100,117,76,136,120,121,125,129,131,132,134,138,139,142,144,145,146,137,148,149],exec_tim:49,image_sym_class_member_of_enum:140,seq:140,creator:[91,74],overwhelm:[27,21],organ:[54,81,0,38,48,49,90,30,132,86,42,139,87,16,4,41],startup:[37,81,11,63,39,2,76,83,61],sex:111,bulki:38,cbpf:102,see:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,87,17,18,19,101,22,23,24,25,26,28,29,30,31,32,33,34,37,38,39,40,41,42,43,46,104,47,48,49,52,53,54,55,57,145,61,62,63,65,66,67,68,69,36,72,73,74,75,118,83,84,86,90,89,127,91,16,92,93,94,95,96,97,100,20,102,51,106,107,81,111,112,115,117,119,120,121,122,125,129,130,132,133,134,137,138,142,144,146,147,148,149],sed:[37,121],sec:83,callahan:122,overboard:81,sel:105,analog:[88,48,91,139,149,83,9,101],seh:[139,83],module_code_tripl:144,v_mov_b32:38,isselector:148,llvm_external_project:74,jenkin:134,gfx900:38,gfx901:38,gfx902:38,topmost:88,vop1:38,vop3:38,vop2:38,mutex:51,documentlisttrait:110,mappingtrait:110,thrive:54,signatur:[37,102,120,48,29,113,69,51,91,14,93,53,83,101],machineoperand:[102,65],thread_siblings_list:97,mspdb:148,javascript:[83,26,15,106],libnam:[91,126],myocamlbuild:[16,17,18,19,23],disallow:[130,48,28,106,42,83],nohup:47,dividend:[14,102,83],sparctargetlow:65,vopc:38,last:[81,1,48,2,114,115,104,83,9,86,120,129,7,13,105,18,101,23,30,25,65,27,28,67,32,91,134,138,139,102,40,144,147,44,149],widest:40,cmake_cxx_flags_relwithdebinfo:37,objects:83,mmap:52,pdf:97,image_debug_type_fixup:148,whole:[46,81,87,49,114,52,83,61,9,55,120,12,86,142,62,89,16,17,101,22,88,68,125,30,31,91,70,139,39,102,40,131,42],foo_var:90,sink:[46,28,57],load:[109,46,75,134,48,2,142,115,52,81,5,83,84,9,85,102,11,7,59,122,123,86,105,62,87,139,19,20,24,25,65,66,88,89,28,127,68,132,33,91,92,35,93,95,130,97,73,74,38,101,45,57,51,118,40,106,144,145,42,43,108,39],episod:[17,31],nakatani:102,schedul:[37,65,11,48,45,102,50,114,91,34,95,7,101],tslp:122,hollow:110,sinf:14,functionpass:[46,65,57,101,13,91],"0x100000f24":94,w7100:38,worthless:81,sine:[83,65],handleallerror:101,static_cast:[24,25,5,33],devic:[10,119,99,38,11,112,127,50,14,97],perpetu:[118,40],"0xf":149,llvm_abi_breaking_check:74,tensorflow:39,xab:39,isstrongerthan:51,devis:[61,41],squirrel:61,gettokpreced:[24,25,125,29,30,31,32,33],fire:[81,20],informativemailnotifi:146,sampler:38,nologo:133,registerpass:91,rdtsc:83,educ:[111,38],"__xray_unpatch":118,uncertain:81,straight:[102,57,27,125,70,14,9,48,87,4,149,101,21,22,23],erron:[37,28],histor:[81,130,48,131,86,90,83,101],durat:[91,102,57],passmanag:[24,85,28,30,84,91,16,17,18,19,101,61],formatv:101,seed:[39,58],error:[46,75,110,47,102,2,114,100,52,81,125,53,4,5,6,7,8,9,54,10,119,120,11,83,12,92,13,14,15,90,16,17,18,19,101,21,22,23,24,25,126,26,127,65,88,27,28,29,30,31,32,33,91,34,35,86,94,95,112,37,74,99,38,139,39,57,118,77,40,41,145,137,108,45,149],dvariabl:74,v1size:57,memoryaccess:115,real:[101,81,0,134,65,11,27,28,57,68,132,32,148,39,83,18,7,8,97],machinecodeemitt:65,reg2mem:46,do_two:105,binutil:[37,136,12,77,146,96],genregisternam:102,property_valu:42,inst_invok:144,chase:75,bpf_stx:102,decor:132,irrelev:[130,83,57],initializerconst:83,i20:83,ieee_mod:38,i24:83,x64:[146,37,104,7],shorter:[40,141],funni:[19,33],decod:[46,101,49,132,34,144,83,149],dllvm_enable_sphinx:37,boringssl:39,foldingset:101,lxv:45,s_sendmsg:38,atomic_load_:51,stt_amdgpu_hsa_kernel:38,predreg:82,dw_at_declar:132,stack:[46,102,48,26,115,81,5,63,84,9,54,57,83,60,15,62,19,101,21,25,65,88,27,132,33,91,35,37,73,38,139,45,110,103,118,105,106,43,44],recent:[88,37,74,138,47,139,39,110,30,77,40,96,83,9],call32r:149,eleg:[125,26,30,31,15,16,17,22],vc70:113,rdi:[89,102,35,106,83,8],dw_apple_property_readwrit:132,llvm_unreach:[87,81,101],mingw64:37,person:[73,0,111,138,75,139,110,144,147,83,61],parse_prototyp:[16,17,18,19,22,23],expens:[109,46,81,74,65,87,28,68,51,91,14,139,101,39],call32m:149,llvm_tablegen:74,always_inlin:[46,14],crosscompil:[102,12],else_v:[17,18,19],debug_level:28,simd:[38,1,122,92,95,83],numshadowbyt:106,sidebar:114,mandat:[102,134],smooshlab:54,invalidobjectfil:101,eager:[101,61],fnast:[24,25,29,30,31,32,33,5,6],input:[46,110,1,48,26,114,100,89,53,82,127,7,8,9,121,10,68,119,102,11,83,59,122,61,86,14,15,90,16,17,19,20,21,23,24,25,2,65,27,28,29,30,31,32,33,91,34,125,94,95,71,36,97,112,37,73,38,101,39,57,140,141,92,84,145,107,137,108,149],earlycs:62,transpar:[55,81,130,101,28,108],subfield:149,myfoobar:101,intuit:[115,83],dw_tag_ptr_to_member_typ:[83,132],submodul:134,formal:[0,83,14,87,101,8,149],sgi:101,todefin:34,atomicexpand:51,ivar:132,stylist:81,s_cmp_eq_i32:38,threadsaf:88,image_sym_type_nul:140,parse_toplevel:[16,17,18,19,22,23],ii32:149,x86framelow:102,moduleid:[86,29,23],encount:[144,65,7,102,68,84,118,105,62,134,139,36,83,61,9,101],image_file_debug_strip:140,acknowledg:0,sampl:[48,104,3,82,84,79,11,123,125,41,23,25,88,28,29,91,38,39,140,141,22,131],sight:[19,33],itanium_abi_tripl:86,attrvisitor:34,instcount:46,compilelay:[5,6,63,61,9],"_bool":[19,33],p5i8:11,religion:111,recognis:101,llvm_obj_root:[86,49,41],xxxgendagisel:65,reloc:[24,85,102,65,38,88,48,45,75,12,35,95,71,83],agreement:40,"0x2a":93,prerequisit:[91,14,65],wget:37,cvdebugrecord:113,minorvers:148,pdbdllversion:148,sub:[87,2,114,83,8,79,55,7,122,86,105,90,101,23,24,65,29,34,35,134,37,102,51,40,144,149],indirectbrinst:3,materi:[87,68,111,122],codeemittergen:34,numloc:106,"1gb":134,uncach:38,intd:7,oneormor:28,hiddennon:38,putchard:[24,25,26,30,31,32,33,15,16,17,18,19],primarili:[37,10,59,46,88,39,2,50,32,60,66,42,18,102,101,71,149],getimm:65,xxxinstrformat:65,deduct:81,requires_rtti:76,contributor:[131,40,74,134,90],volcan:38,pcre:39,occupi:[67,83,120,38],span:[79,91,81,8],kaleidoscopejit:[25,64,30,31,32,33,5,6,63,61,9],textual:[73,100,92,102,30,84,86,115,34,40,16,43,149,83,8,121],custom:[46,102,48,49,7,81,6,83,8,9,54,55,145,121,86,62,124,101,65,130,88,89,28,34,74,139,39,110,105,42],createcondbr:[24,25,31,32,33],suit:[47,87,49,2,50,114,104,9,55,12,86,14,90,101,68,132,134,37,74,139,102,118,40,131],parse_arg:[16,17,18,19,22,23],subgraph:[46,122],poster:111,atop:88,lint:46,nodupl:[83,144],atoi:83,link:[46,75,0,47,87,49,113,80,51,115,52,81,83,84,9,79,54,102,11,63,12,120,13,14,142,15,16,17,18,19,20,21,41,23,24,126,127,65,88,27,28,29,30,132,32,133,91,36,35,86,134,114,118,99,97,37,98,73,74,138,38,100,101,39,57,103,104,148,76,77,40,145,42,147,108,45],atom:[46,81,38,54,7,45,67,51,132,118,115,52,62,83,101],line:[110,139,1,47,102,49,26,131,137,115,104,81,125,53,5,127,7,8,89,79,54,10,119,120,86,83,132,84,13,14,15,117,90,16,17,18,19,20,21,22,23,24,25,2,123,65,88,27,28,29,30,31,32,33,91,69,92,134,70,94,95,71,36,99,112,37,73,74,138,38,100,101,39,75,51,141,76,77,40,41,145,42,147,148,149],bpf_exit:102,clangattrspel:34,workitem_vgpr_count:38,cie:73,simplif:[91,46,68,20],cin:121,intim:81,hex8:110,"0xffffffff":[83,144,38],fdiv:83,doc:[24,54,55,74,37,45,110,12,114,134,136,147,83],impl:[91,46,5,6,101],userdefinederror:101,afed8lhqlzfqjer0:40,debugtrap:[83,38],parser:[64,26,125,83,121,15,89,16,17,18,19,21,22,23,24,25,27,28,29,30,31,32,33,34,37,39,102,42,137],chao:131,call_site_num:139,"char":[81,1,52,125,5,83,84,9,79,120,11,132,123,16,17,18,19,101,21,22,23,24,25,65,130,67,28,29,30,31,32,33,91,39,57,118,108,148],insertvalu:[105,83],gcfunctioninfo:88,chat:111,doe:[0,26,4,7,9,11,86,14,15,87,17,18,19,20,21,22,23,24,25,2,27,28,29,30,31,32,33,35,37,38,39,40,43,44,45,46,48,49,104,55,57,59,60,62,41,65,68,70,74,75,118,77,81,83,84,85,90,88,91,16,36,96,97,100,101,102,103,51,105,106,108,109,110,113,114,115,119,120,121,123,129,130,132,134,139,144,131,148,149],linkonceodrlinkag:101,tok_unari:[24,25,32,33],coder:134,intrepid:[125,22],xxxcodeemitt:65,flat_atomic_swap:38,ud2a:102,kwalifi:140,scrape:2,download_prerequisit:37,cleanupret:[139,105,83],gladli:[37,104],g_constant:68,attrlist:34,"0x000000000059c583":123,td6584414:134,gvn:[46,73,57,30,31,32,33,91,62,51,5,6,63,61],handleon:5,lang:28,mayalia:[83,57],lane:[68,83,93,38],land:[40,139,48,60,105,89,83],x86codeemitt:65,algorithm:[46,81,87,26,115,5,6,63,61,9,57,83,59,14,15,17,19,101,125,22,24,65,88,28,29,30,31,32,33,34,139,102,148],inaccuraci:83,type_code_function_old:144,discrimin:[81,102,83,129],v200:38,walker:115,fresh:[37,39,134],hello:[79,37,27,91,104,90,83,21,149],mustalia:[83,57],llvmcontext:[24,25,101,29,30,31,32,33,13,83,84],code:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,47,48,49,50,104,54,55,57,63,60,61,62,41,64,65,68,70,36,73,74,75,76,77,79,80,81,83,84,85,86,90,88,89,91,16,92,93,94,95,20,102,103,51,105,106,108,109,110,111,114,100,117,120,121,122,123,125,129,130,131,132,134,137,138,139,142,144,145,147,148,149],partial:[46,73,1,101,45,110,137,106,134,102,83],resultv:83,scratch:[38,65,83,102,91,101],personalityfn:144,risc:[102,136,51,65],setcc:[101,102,68],"7350b":38,globallisttyp:101,quarantin:52,printimplicitdef:65,young:101,send:[102,47,87,114,54,10,119,86,62,112,29,91,92,134,37,137,138,45,75,51,40,146,147],api:[102,113,114,115,52,81,5,6,63,61,9,54,136,11,121,117,16,101,23,25,88,68,28,29,30,34,134,74,38,45,57,118,76,77,40,106,42,43,39],byte_1:38,byte_0:38,byte_2:38,getprocesstripl:25,sent:[54,40,138,112,114,92,48,141],unzip:[47,37],flagscpumask:110,clearresourc:102,registeredarg:88,setmaxatomicsizeinbitssupport:51,tri:[46,74,65,27,39,102,30,91,83,87,147,20,21],bsd4:120,setconvertact:65,magic:[37,120,101,39,67,51,32,132,144,18,83],byte_n:38,float_mode_denorm_32:38,complic:[37,55,81,74,129,65,1,88,139,131,60,51,86,104,142,134,90,122,83],newoffset:83,scalabl:57,tre:46,blockquot:144,fewer:[88,48,38,46],"__llvm_covmap":79,race:[111,38,83,51,52,105,101],build_uitofp:[16,17,18,19,23],udiv:[68,83],evt:68,vehicl:[81,90],impli:[102,65,38,57,88,44,2,115,14,40,106,134,139,94,4,130,83,101],dclang_enable_bootstrap:[96,131],monospac:147,natur:[46,81,47,4,83,61,7,132,62,17,19,101,23,129,130,88,28,29,31,33,91,134,37,139,45,110,51,141,40,147,108,149],odr:83,psubu:86,rauw:[87,45,73,101],video:[101,111],tgid_z_en:38,instnam:46,odd:[28,40,83,81,75],skim:81,index:[102,48,114,83,117,79,54,120,57,13,62,101,25,65,130,88,89,28,67,132,69,34,35,93,70,37,38,139,110,141,105,106,144,148],twine:101,tdm:146,targetregisterclass:[102,68,65],asmwrit:[88,55,34],test_fuzz:39,henceforth:[69,103],paramti:144,image_scn_align_64byt:140,"_segment_buff":38,dyn_cast_or_nul:101,wireshark:39,lllexer:[55,84],leb:79,inspect:[144,130,83,125,102,132,91,62,134,101],dw_tag_gnu_template_param_pack:83,targetregisterinfo:[102,65],len:83,short_enum:83,bitstreamwrit:55,rglob:10,let:[102,0,48,49,26,115,125,82,7,8,79,68,129,11,83,132,14,15,87,16,17,18,19,101,21,22,23,24,25,65,130,27,28,29,30,31,32,33,91,134,67,138,108,75,76,105,131,146,147,44,149],ubuntu:[37,12,50],ptx30:102,ptx31:102,maken:5,great:[81,88,27,102,32,91,40,62,131,18,101,21],survei:[136,134],dllvm_enable_doxygen:74,force_off:74,technolog:[108,26,15],rdx:[48,102,106,8],flagshollow:110,global_end:101,ifloc:25,qualifi:[81,38,130,102,132,114,83,121],e_machin:38,firefox:114,sgt:83,pf1:87,pf0:87,sgn:83,llvm_enable_cxx1i:74,sugar:83,sge:83,movsx32rr16:102,"__________":101,getnumparam:101,eltti:[25,144],zip:37,commun:[81,0,111,114,4,5,83,85,54,11,121,123,14,105,62,101,91,134,73,57,40,106,108],my_fmad:11,doubl:[46,102,87,26,52,125,5,7,68,136,129,83,14,15,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,38,110,104,144,149],upgrad:[37,54,1,66,132,40,134],next:[81,47,87,114,104,125,131,82,6,83,61,9,85,86,63,129,7,132,84,13,142,68,16,17,18,19,20,21,22,23,24,25,65,130,88,27,28,29,30,31,32,33,91,134,37,67,38,101,45,40,144,139,108],zig:45,doubt:[147,129],optioncategori:28,commut:[46,102,65,57],fpregsclass:65,avx512:[45,83],disp32:102,p2align:38,"__xray_set_handl":118,hierchari:101,firstcondit:101,bunzip2:37,uvari:74,get_instrinfo_operand_enum:65,"__nv_truncf":11,receivedtermin:5,newti:83,devmajor:11,erasur:101,available_featur:[86,2],cumbersom:134,intregssuperregclass:65,thin:[133,101,74],optimizelay:[5,6,63,61],scatter:[83,132,1],statepoint_token:48,dw_form_data4:132,n2431:81,weaker:83,pienaar:14,dw_form_data1:132,dw_form_data2:132,n2437:81,process:[46,110,1,47,87,26,50,114,52,81,125,82,4,5,6,83,8,9,85,54,63,68,120,57,7,122,61,13,14,15,90,16,102,20,21,22,64,123,65,88,27,28,131,30,132,91,36,86,94,96,72,97,37,74,138,38,101,39,75,51,141,40,139,42,108,45,79],image_sym_class_sect:140,preformat:147,high:[46,102,1,142,48,26,114,115,81,4,83,85,54,55,120,11,63,121,122,123,86,14,105,15,62,19,101,41,79,65,130,88,89,67,132,33,96,97,38,139,57,118,40,144,131,149],wavefront_s:38,befor:[109,46,75,134,1,47,48,49,26,114,90,115,104,81,125,5,6,7,61,9,85,86,55,68,102,11,129,83,132,121,12,60,84,13,14,105,15,62,87,16,17,18,19,20,21,22,23,24,25,122,127,65,130,88,27,28,29,30,31,32,33,91,34,93,94,95,96,139,120,37,74,38,101,57,51,110,118,40,106,89,149],fprintf:[24,25,125,29,30,31,32,33],streamer:102,dw_ate_signed_char:83,msvc:[81,74,139,45,102,132,35,101,148],adc32mi8:8,visitsrl:55,delai:[87,52,0,101],infeas:73,allocainst:[24,25,81,101,33,19,83],cuda:[54,136,11,102,14,96],afl:39,nullpointerexcept:109,overridden:[37,65,57,87,39,83],singular:[81,101],add32ri:8,xc3:140,loc0:106,loc1:106,xc7:140,xc4:140,llvmsetdisasmopt:43,forese:40,x86registerinfo:[102,65],addri:65,dw_at_apple_property_attribut:132,dw_tag_class_typ:[83,132],alloc:[102,48,26,122,52,81,63,84,9,85,54,57,83,60,13,15,62,16,19,101,65,130,88,89,30,33,91,92,35,95,37,38,139,110,103,105,106],essenti:[65,88,87,127,68,51,144,44,101],install_prefix:74,sdiv:[68,102,83],seriou:[0,134,114],counter:[79,38,20,39,51,141,13,3,131,83,101],robot:54,element:[46,110,1,48,81,83,9,55,11,90,87,102,101,65,130,88,68,132,34,93,73,38,57,142,144,147,44,149],gfx7:38,gfx6:38,at_typ:132,unaccept:40,allow:[1,2,3,4,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,125,29,30,31,32,33,35,37,38,39,40,42,43,44,46,48,52,54,55,57,63,60,61,62,79,65,68,70,74,110,118,83,84,85,86,90,88,89,91,16,92,93,96,100,102,103,51,105,106,108,81,111,115,76,120,123,124,28,129,130,132,134,138,139,140,142,144,145,148,149],vxi64:45,retval:[24,25,139,29,30,31,32,33,83],gfx9:[45,38],gfx8:38,movl:[83,7,106,48],decltyp:[81,83,5,6,63,61,9],fstrict:83,movi:81,typecod:55,move:[46,81,48,26,114,5,6,63,8,9,54,120,57,83,61,105,15,124,17,101,24,25,88,68,125,29,30,31,32,33,91,134,97,37,98,74,38,45,102,51,40,106],stacksav:[83,60],vma:84,evolutionari:39,comma:[38,83,28,110,31,86,17,43,149,7,101],llvmpush:134,movw:[83,35],movt:35,ofstream:28,ldpxpost:89,movq:[48,106],perfect:[40,101,93],excp_en:38,define_abbrev:144,chosen:[102,88,2,68,81,93,83],c11size:69,enable_vgpr_workitem_id:38,infrastructur:[81,1,2,50,5,6,63,61,9,54,55,57,83,13,20,41,88,132,91,86,134,37,74,101,39,102,40,146,45],cond_tru:[19,33],lastinst:65,decad:8,therefor:[46,110,83,79,11,122,13,14,105,101,130,88,28,132,91,93,96,38,139,102,51,40,106,43],lpechacek:97,list_nam:90,recept:40,hainan:38,python:[37,2,47,101,39,26,12,86,88,104,105,15,44,49],initializenativetarget:[25,30,31,32,33,5],overal:[138,130,88,139,102,31,34,40,17,83,117],innermost:[122,1],facilit:[81,83,110,122,132,40,101,41],vc50:113,smovq:102,fcc_val:65,s_mov_b64:38,"__atomic_compare_exchang":51,loopinfobas:101,"7050b":38,hasexternallinkag:101,xvjf:37,buffer_wbinvl1:38,mnemon:[118,102,65],"0b111":149,llvminitializesparcasmprint:65,compute_xx:[14,11],idxmask:83,subset:[2,130,11,101,49,26,57,51,86,40,15,134,106,83,132],quarantinesizemb:52,denseset:101,"0x7fffffffe040":123,bump:[88,103,101],"0x400":132,meta:[88,83,45,102,132,114,106,101,8],"static":[46,110,48,80,142,52,81,83,9,85,55,129,57,145,132,121,12,60,105,68,62,87,16,102,20,125,41,23,24,25,65,130,88,27,28,29,30,31,32,33,91,34,95,97,37,73,74,101,45,75,51,118,92,108,39],uiuc:40,image_debug_type_fpo:148,differ:[0,1,26,3,4,5,7,8,11,13,14,15,87,17,18,19,20,23,24,25,28,29,30,31,33,34,35,37,38,39,40,44,46,47,48,49,52,53,54,55,57,58,59,61,62,63,79,65,68,70,72,74,110,118,82,83,84,85,86,90,88,89,91,16,92,93,95,96,101,102,104,105,106,108,81,111,114,136,121,129,130,131,132,134,138,139,144,145,148,149],unique_ptr:[24,25,11,101,125,29,30,31,32,33,5,6,63,61,9],variabl:[46,75,1,48,64,26,51,90,115,52,81,125,53,7,84,9,85,86,10,102,49,11,83,132,121,120,13,15,62,87,16,17,18,19,101,21,22,23,24,25,2,65,130,88,27,28,29,30,31,32,33,91,69,35,74,97,37,73,67,38,100,139,45,57,103,104,110,118,77,142,106,41,144,89,149,44,148,79],matrix:[88,102],contigu:[68,67,132,83,117,101],patch_statu:118,vextsh2w:45,deferrederr:101,type_code_struct_anon:144,tok_if:[24,25,31,32,33],src_shared_bas:38,vextsh2d:45,tok_in:[24,25,31,32,33],dw_tag_shared_typ:132,shut:[39,81,65],initializepass:57,bpf_dw:102,scratch_load:38,unpars:[125,2,22],async_op2:105,async_op1:105,tempt:[4,81,37],image_file_system:140,shortest:[87,44],shtest:2,spill:[38,65,48,102,68,105,106,95],runtimevers:[83,132],could:[109,46,102,124,48,26,90,115,52,81,82,4,83,61,9,86,63,68,129,57,7,132,121,12,60,13,105,15,62,87,16,17,19,20,125,22,24,2,65,130,88,67,28,29,30,31,33,134,70,96,37,74,138,38,101,45,110,51,77,40,106,146,147,149],lexer:[24,25,29,84,64,27,125,26,30,31,32,33,15,16,17,18,19,21,22,23],david:122,scari:[27,26,15,21],setact:68,enforc:[81,0,88,83,28,102,68,51,40,106,134,149,7,101],outsid:[46,81,111,47,48,49,4,83,61,9,54,57,142,87,101,23,130,28,29,91,73,38,39,51,118,77,105,106],inst:[46,101,65,149],scare:40,spilt:102,unexpectedli:86,"__profn_foo":79,denorm:[14,110,83,38],add_pt:82,spaghetti:[27,21],haskel:[83,26,15,101],selectiondagnod:65,fcontext:25,owner:[120,138,102,114,40,134],stringswitch:34,add_pf:82,featurev9:65,sparcgensubtarget:65,licens:[81,121,114,91,77,40,5,6,63,61,9],system:[75,134,47,48,49,26,50,114,104,81,95,4,5,6,83,8,9,54,55,68,136,102,11,63,132,121,12,92,61,15,117,90,16,106,19,101,21,41,24,25,130,66,88,27,28,29,30,31,32,33,91,34,93,74,96,118,97,120,37,73,67,138,38,39,57,51,76,77,40,84,131,42,108,45,149],parse_oper:[18,19],gcse:[46,101],termin:[46,81,87,2,52,3,4,83,10,119,120,11,59,122,86,62,112,17,20,65,28,127,31,132,91,99,38,101,102,144,139,148,149],f_inlined_into_main:94,returnindex:70,instraspect:68,ldrex:51,expraddr:5,gotcha:81,endexpr:[24,25,31,32,33,19],baseclasslist:44,third_parti:39,"12x10":83,arrayref:101,haven:[118,81,49,91,104,5,6,83,84,9],isdef:102,steen:57,bother:[19,61,33],arg_end:101,"__llvm_coverage_map":79,bitvalu:110,stricter:[7,51],f1f2:87,xxxregisterinfo:65,tdtag:34,steer:40,caller_pc:39,getzextvalu:101,internalread:89,viewer:[45,81,84],op_end:101,var_arg_function_typ:23,clearli:[115,81,40,106,132],sysadmin:134,optimis:16,issu:[110,111,48,26,50,114,81,83,68,102,11,132,86,15,62,90,16,17,19,101,21,2,27,28,30,31,33,91,34,35,93,37,57,51,40,134],llvm_install_sphinx_html_dir:74,"0x00002200":132,disassembl:[112,37,54,101,39,102,80,104,34,53,42,43,137,83,45],tramp1:83,accuraci:[46,83],add_llvm_unittest:74,executeremoteexpr:5,vc70dep:113,amdfam10:24,type_of:[16,17,18,19,23],vc110:113,courtesi:40,fidel:84,griddim:11,poison4:83,poison3:83,poison2:83,aarch32:136,setloadextact:65,ffi_include_dir:74,segment:[54,38,102,103,132,106,148],placement:[46,45,68,115,62,41],stronger:[48,83,51,38,101],parsevarexpr:[24,25,33],llvm_enable_dia_sdk:74,face:[81,103,91,34,62,4],isbranch:8,brew:101,stepexpr:[24,25,31,32,33,19],linkonc:[37,11,83,35,144,101],fact:[81,0,26,115,63,120,57,83,121,14,105,15,62,16,18,19,101,129,130,28,30,32,33,91,37,73,139,102,40,42,44,149],dbi:[69,148,117],movslq:106,hassideeffect:8,dbn:37,"_segment_s":38,truedest:83,dbg:[25,20,132,83,46],module_code_deplib:144,dw_op_llvm_frag:83,rough:[149,44,134,130],trivial:[46,81,134,26,125,4,83,55,57,121,60,15,90,16,19,101,21,22,65,130,27,28,68,132,33,30,93,91,138,38,102,51],redirect:[25,145,39,114,86,142,83],getdata:81,roots_end:88,nois:97,getelementptr:[79,142,102,130,11,88,48,26,53,57,60,105,15,83,87,7,121,101],image_sym_class_argu:140,should:[0,2,3,4,63,8,9,11,12,13,14,16,17,19,20,21,22,23,25,27,28,29,30,31,33,34,37,38,39,40,42,43,44,46,104,47,48,49,50,52,54,55,57,145,60,61,62,41,65,67,68,70,72,74,75,118,77,81,82,83,84,85,86,87,88,89,127,91,92,93,95,96,100,101,102,51,105,106,108,110,111,114,115,76,120,121,122,124,125,129,130,132,134,137,138,139,144,131,146,147,148,149],jan:[120,122],suppot:38,tape:37,workgroup_s:38,elseif:90,jag:67,opreand:101,nonzero:[144,149],hope:[81,88,87,39,76,40],meant:[79,44,0,37,47,87,127,115,104,54,147,83,149,101],insight:[79,83,84],notat:[37,120,38,44,28,110,83,149],familiar:[25,129,38,11,27,102,31,91,14,139,62,37,87,17,21,9],simplest:[110,65,28,29,61,104,84,125,131,16,102,39,22],targetmachin:[24,85,65,11,88,102,30,31,32,33,91,5,6,63,61,9],autom:[37,138,102,34,40,131,8,41],yaxxz:139,symtab:[101,38],machineconstantpool:102,reid:4,dw_ate_sign:[83,132],opencl_program:38,stuff:[24,25,102,149,28,110,30,31,33,91,147,90,16,17,19,101,49,121],booltmp:[24,25,29,30,31,32,33,16,17,18,19,23],tok_def:[24,25,27,125,29,30,31,32,33],movz:[83,93],widenscalar:68,type_code_arrai:144,unimport:[47,48],cmake_cxx_compil:37,frame:[46,48,26,83,85,60,15,62,101,65,88,89,132,92,134,94,73,38,139,45,102,103,105,106,148],packet:[102,34,38,137],rtdyldmemorymanag:[5,6,63,61,9],temporarili:20,binary_nam:94,oprofil:[76,74],movsx16rm8w:102,polymorph:[106,101],wire:121,op_iter:101,compute_factori:123,live_iter:88,sectionmemorymanag:[85,5,6,63,61,9],unrecurs:[24,25,19,33],instrprof_value_profil:83,email:[54,73,0,111,138,37,26,51,114,40,15,134,146],bisect_script:134,superword:[73,1],dislik:40,inferattr:91,diexpress:[83,132],memri:[102,65],endl:[24,81],use_iter:101,doxygen:[37,81,74,54,104,101],scalaropt:126,constexpr:14,ramp:105,koblenz:122,sdtc:65,etc:[46,81,0,47,87,49,26,51,115,52,131,4,7,8,54,55,68,57,83,132,12,13,105,15,16,17,18,19,101,21,22,23,24,25,65,130,88,27,125,29,30,31,32,33,91,69,34,134,70,114,118,37,73,74,138,38,39,102,104,76,40,144,145,107,108,148,149],"0fbf317200":11,amd_float_round_mode_near_even:38,preheader_bb:[17,18],position_at_end:[16,17,18,19,23],exprprec:[24,25,125,29,30,31,32,33],distil:86,bininteg:44,"66ghz":146,escudo:52,loadabl:88,chromium:[39,114],ocamldoc:74,regbankselect:[89,68],vptr:[101,83],v8p0f32:83,llvm_external_:74,triniti:38,insuffici:[65,50,132,14,4,83],va_arg:83,path_to_llvm:37,hottest:[83,141],immedi:[46,102,0,48,26,7,115,81,5,6,63,61,9,85,120,11,83,121,15,89,16,19,101,65,68,30,33,35,134,38,139,57,51,105,106,144,43,148,149],hex16:110,bdce:73,deliber:[115,81,106],image_sym_type_char:140,togeth:[46,81,134,1,87,49,26,125,127,83,79,120,57,7,86,105,15,17,18,20,21,22,23,24,2,88,27,28,29,67,31,32,132,91,36,93,139,72,99,38,101,39,102,141,40,145,42,148,149],allocationinst:101,"_vol":38,sphinx_output_man:74,my_list_of_numb:90,dataflow:[19,83,33],cvt:11,reloc_absolute_dword:65,sgrr:38,rbp:[102,8],llvm_tools_binary_dir:74,p0f_isvoidf:48,decreas:[95,52,83,114],sectioncontribentri:148,"__sync_fetch_and_sub_n":51,lto_module_create_from_memori:108,flat_atomic_cmpswap:38,"__sync_fetch_and_min_n":51,libxml2:[39,12],apfloat:[24,25,37,29,30,31,32,33,23],site:[46,139,57,88,48,45,2,60,86,115,104,142,106,90,83,101],sn_map:87,uglygep:130,archiv:[37,0,120,54,108,39,80,118,77,52,40,133,134,42,96,36,101,148,41],mybuilddir:74,tgid_y_en:38,createlambdaresolv:[5,6,63,61,9],incom:[65,101,102,68,31,33,40,17,18,19,83],em_amdgpu:38,surprisingli:[37,125,30,62,16,22],greater:[46,130,81,144,65,11,88,87,39,102,100,3,93,53,5,83,148],mutat:[24,25,81,46,88,39,68,32,33,18,19,101,61],onlyfailsforsomexvalu:101,referenti:46,basicblocklisttyp:101,matthew:134,lex_com:[16,17,18,19,21,22,23],android:86,dbgopt:132,preserve_mostcc:[83,144],phi:[24,25,81,1,139,102,68,31,32,33,115,105,144,53,46,17,18,19,83],sadd:83,kernarg_segment_align:38,expans:[79,102,65,83,39,90,51,100,62,70,44,89],upon:[85,65,88,101,127,132,40,83,41],foldmemoryoperand:[102,65],setbann:[5,101],php:138,expand:[81,87,100,53,7,8,79,55,83,121,86,102,65,68,70,71,110,51,118,40,137,149],"__sync_fetch_and_max_n":51,off:[81,0,48,26,50,115,83,8,9,120,11,61,86,14,15,16,17,18,19,20,21,23,24,25,27,29,30,31,32,33,37,74,38,101,102,76,40,84],mention:[144,54,81,0,129,38,48,28,102,103,132,69,93,87,42,74,149,83,134,101],colour:111,call2:7,argnam:[24,25,28,29,30,31,32,33,125],exampl:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,46,47,48,49,50,51,52,54,55,57,63,59,60,61,62,41,65,67,68,70,72,73,74,75,76,77,81,82,83,84,79,86,90,88,89,127,91,16,93,94,96,97,20,102,104,105,106,107,108,109,110,115,118,121,122,123,125,126,129,130,131,132,134,138,139,141,142,144,145,146,147,148,149],command:[102,1,47,48,49,2,131,80,114,100,104,81,125,53,5,123,7,8,54,10,119,120,57,83,84,13,14,133,90,16,17,18,19,20,21,22,23,24,25,127,65,27,28,29,30,31,32,33,91,146,34,86,134,70,94,95,71,36,99,97,112,37,74,138,38,101,39,75,141,77,92,106,96,145,42,137,108],filesystem:[24,96,2,12],outputfilenam:28,phab:134,newest:[35,30],ptrval:83,xec:140,"boolean":[46,81,74,65,38,101,28,102,31,86,92,144,42,17,105,83,149],sharedfnast:[5,6],et_rel:38,myregisteralloc:91,glue:[102,121],web:[45,40,138],makefil:[37,126,75,74,54,88,49,29,66,86,102,108,121,41,23],intscalarti:83,modfilecountarrai:148,openmp:[37,45,40,38],nonnul:[139,83,62,144],nvt:65,dw_at_align:132,globalopt:46,unintrus:83,dest:[24,83],clangcommentnod:34,fmt_repeat:101,s_memtim:38,placesafepoint:[88,48],sequentialtyp:101,amd_float_denorm_mode_flush_dst:38,cedar:38,tick:120,xe8:140,recurr:46,sht_symtab:38,desc:[65,91,5,28,38],addsdrm:149,resid:[144,38,11,88,39,67,132,91,105,93,83],emmc:50,type_code_vector:144,anyth:[46,81,48,104,83,8,121,14,16,17,101,23,129,30,67,31,132,92,134,95,96,37,102,51,40,106],isus:102,objectbuff:85,byteswap:55,resiz:81,nullunknown:83,"0x29273623":132,arcconfig:37,captur:[26,5,6,83,61,55,7,132,86,15,16,17,18,19,20,125,22,23,24,25,28,29,30,31,32,33,102,118,106,144],vsx:83,main_loop:[16,17,18,19,22,23],i64:[79,65,38,11,7,102,132,142,3,106,93,48,130,105,83,8],emitglobaladdress:65,flush:[24,85,81,38,11,50,118,14,16,17,18,19,83,22,23],guarante:[46,0,48,26,113,142,115,83,57,121,13,105,15,62,19,101,130,88,28,132,33,91,34,37,73,139,102,51,118,40,106,144],ltmp1:48,"__syncthread":11,avoid:[81,134,47,48,122,52,4,5,83,8,129,57,60,86,105,62,87,19,20,25,65,130,88,90,68,132,33,91,93,97,37,74,38,101,39,102,40,106,144,108,45,149],summar:[88,46,2,102,105],image_sym_class_fil:140,truth:[17,83,31,115],arg_siz:[24,25,88,29,30,31,32,33,101],barlist:81,symlink:134,isn:[46,81,0,111,115,4,83,121,14,68,89,16,17,20,21,22,23,24,25,130,27,125,29,30,31,91,134,94,90,101,102,51,141,40,131],cmake_minimum_requir:[74,90],stage:[54,74,65,11,47,87,28,102,68,131,114,100,14,125,145,146,96,108,84,22],"0x4200":132,c_str:[24,25,11,27,28,29,30,31,32,33,101,125],interven:[106,144,38],nullari:[125,22],amd_kernel_code_t:38,declcontext:129,uniquevector:101,dw_op_deref:83,enable_exception_fp_denorm:38,getbitwidth:101,ccinfo:[5,6],not_nul:109,handleextern:[24,25,125,29,30,31,32,33],s_ashr_i32:38,dw_tag_base_typ:[83,132],insidebundl:102,dereferenceable_byt:83,retcc_x86_32:65,takecallback:101,waterfal:146,mere:[46,138,130,48,29,104,83,23],merg:[46,1,47,87,114,115,83,79,54,57,7,132,14,16,17,18,19,101,22,23,24,25,88,68,125,29,30,31,32,33,134,74,138,100,39,102,141,40,131,108],ifuncti:83,createsubroutinetyp:25,relpo:120,assumpt:[25,102,7,92,26,81,132,40,15,139,96,83,9],valuesuffix:44,multidef:149,textfileread:81,p4i8:11,mandel:[18,32],mdnode:[3,83],"function":[1,26,3,4,5,6,7,61,9,10,11,13,14,15,87,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,37,38,39,42,43,45,46,48,52,53,54,55,57,63,59,60,62,64,65,68,69,70,72,73,74,75,76,77,79,110,80,82,83,84,85,90,88,89,127,91,16,36,93,94,96,100,101,102,103,51,105,106,108,81,115,118,120,121,122,123,125,129,130,132,134,139,141,142,144,148],reduc:[46,102,47,87,52,81,82,6,83,8,9,79,54,10,120,11,145,122,14,105,90,16,20,25,130,30,28,68,91,134,96,97,73,101,75,40],"8700b":38,documentlist:110,getenv:4,"8700p":38,dw_at_entry_pc:132,count:[46,1,49,100,3,7,84,79,55,120,57,83,122,90,20,125,22,65,88,28,132,134,70,38,101,39,141,106,139,148],inst_cal:144,data16bitsdirect:65,lookup_funct:[16,17,18,19,23],evidenc:130,lsampl:41,llvm_enable_project:74,otherwis:[46,110,0,139,48,2,50,114,100,81,125,53,7,61,117,79,10,119,83,59,12,13,14,62,87,16,17,18,19,20,21,22,23,24,25,126,127,66,88,27,28,29,30,31,32,33,91,92,95,71,72,131,112,73,74,99,38,101,39,75,51,105,108,144,145,146,107,137,44,148,149],problem:[46,102,134,48,26,113,50,114,104,81,4,7,54,57,145,132,121,12,60,13,15,62,124,17,18,19,20,23,25,130,88,28,29,68,31,32,33,91,86,93,37,73,101,45,75,148,76,40,39],"int":[110,139,1,48,26,104,81,82,5,123,7,8,9,79,102,11,83,132,121,60,84,14,15,87,16,17,18,19,20,125,22,23,24,25,65,130,88,27,28,29,30,31,32,33,93,94,37,101,39,57,140,51,77,105,108,145,147,44,149],jessi:12,ini:42,ind:25,insertdeclar:25,ing:[46,81,29,33,16,19,23],inc:[37,65,89,102,91,94,34,82,105],filenameindex0:79,bzip2:37,nonetheless:[63,5,6,83,61],optsiz:[68,83,144],libcxx:[47,37,74,134],preinstal:96,lookup:[101,37,29,65,46,87,26,68,132,32,81,15,117,18,19,83,61,9,23],eabi:92,varieti:[81,26,50,136,120,57,15,90,16,17,18,101,23,88,29,30,31,32,132,37,73,139,39,102,51,40,106,144,42,44,45],deadli:39,liblzma:12,sharir:122,"0f3fb8aa3b":11,repeat:[46,47,87,68,132,20,134,139,43,83],potenti:[46,81,0,48,2,115,52,125,83,84,57,121,122,142,62,17,20,21,22,27,28,68,31,134,37,139,39,102,40,106],zhou:122,kernarg_segment_byte_s:38,emitsymbolattribut:102,fexist:87,in0:83,in1:[102,83],in2:102,"85c1f5":79,eof:[24,25,27,39,29,30,31,32,33,125],header_data:132,cumemfre:11,orcremotetargetcli:5,dumpabl:91,rabfik:120,configmaxtest:101,hashes_count:132,sourceloc:25,corocleanup:105,sm_20:[102,11],sm_21:102,untrust:40,child:[129,83,32,139,18,101],shf_execinstr:38,show_bug:39,rapid:40,upsid:134,v_floor_f32_e32:38,oldest:30,"const":[102,87,52,81,5,6,63,61,9,79,55,129,57,132,60,84,13,101,125,24,25,65,88,28,29,30,31,32,33,91,38,39,110,118,108],lsda:[139,73],r8b:8,r8d:8,deviat:[81,102,35],binoppreced:[24,25,125,29,30,31,32,33],thefunct:[24,25,29,30,31,32,33],r8w:8,rowfield:82,emploi:[101,83,122],printnextinstruct:101,save1:105,my_list:90,getpar:[24,25,31,32,33,101],"__sync_fetch_and_or_n":51,ccmgrorerr:5,"7200p":38,type_code_numentri:144,llvm_enable_ffi:74,cmd:[138,97],upload:[138,114],reg:[65,11,89,102,7,106,43,101,149],pmbuilder:11,unmanag:[48,83],math:[81,11,27,28,1,30,132,32,14,92,62,90,95,18,83,21],add_rr:149,groupsegmentfixeds:38,add_char:[16,17,18,19,21,22,23],externally_initi:[83,144],callcount:101,cmp:[46,39,102,83,101],apertur:38,abil:[110,111,83,55,132,123,62,17,18,19,101,21,41,88,27,28,127,31,32,33,134,102,43],hork:149,mcstreamer:[88,102],consequ:[37,111,57,20,39,51,86,14,106,139,83,101],ilist:101,image_scn_mem_shar:140,llvmbuild:[42,54,66],g_sequenc:68,scalarenumerationtrait:110,alu:38,insid:[46,102,47,48,49,2,115,81,5,6,83,61,9,79,54,12,122,123,86,87,101,129,66,88,30,90,68,132,91,34,96,74,139,39,110,142,144,44,148,149],runfunctionasmain:123,loop_bb:[17,18,19],qux:83,majorvers:148,topolog:[7,97],told:81,ontwo:83,copysign:83,pandaboard:50,mcoperand:102,dw_op_bit_piec:83,clangattrspellinglistindex:34,standalon:[25,102,27,26,134,42],instructionselect:68,glc:38,addrorerr:5,dw_virtuality_pure_virtu:83,optzn:[75,30,31,32,33,16,17,18,19],thinlto:3,"9800p":38,aka:[113,83,117,57,16,17,18,19,101,21,22,23,24,25,27,125,29,30,31,32,33,39,102,131],werror:77,dcmake_cxx_link_flag:37,dw_tag_atomic_typ:[83,132],instr:[79,74,38,88,102,141,100,137,149],invas:[40,110],setgc:88,sspstrong:[83,144],privatesegmentbuffersgpr:38,total:[46,144,38,87,39,67,51,84,91,132,103,134,53,148,83,49,101],bra:11,highli:[88,83,39,102,33,14,62,19,63,45,41,101],bookkeep:[46,101],plot:[18,32],postincr:81,insult:111,deref_bytes_nod:83,gcfunctionmetadata:[88,106],instructionselector:68,greedi:[102,28,92,68],simplifycfg:[46,145,19,121,33],setreg:102,v_mul_i32_i24_e32:38,iscommut:8,main:[46,81,134,142,87,26,114,100,104,5,123,83,8,9,79,54,11,132,60,84,86,105,15,16,17,18,19,101,125,22,23,24,25,65,68,28,29,30,31,32,33,91,146,93,94,72,37,74,139,39,102,118,77,40,42,147,108,45,149],llvm_enable_p:74,numberofauxsymbol:140,filename1:79,valueenumer:55,rv770:38,armgenasmmatch:34,springer:14,word:[102,0,65,38,129,88,101,28,29,132,121,72,115,81,144,139,111,83,39,9,23],insignific:[106,59,83],err:[24,25,111,11,29,30,31,32,33,91,5,6,101],restor:[24,25,65,60,102,103,31,32,33,144,139,17,18,19,83],next_prec:[16,17,18,19,22,23],work:[0,26,4,7,8,12,86,14,15,87,17,18,19,101,21,22,23,24,25,2,27,125,29,30,31,32,33,34,37,38,39,40,42,46,48,49,104,53,54,55,57,63,60,61,41,79,65,66,68,72,73,110,118,77,75,83,84,85,90,88,89,91,16,92,95,100,20,102,103,51,105,108,81,111,113,114,115,136,121,28,129,130,131,132,134,138,139,141,142,145,146],foo_ctor:60,endmacro:90,respres:101,noreg:89,viewcfgonli:[101,31],"__atomic_fetch_xor_n":51,unnam:[46,81,83,28,89,44],"16gb":146,novic:74,autodetect:[95,92,100],dllvm_enable_assert:[37,39,50],u64:[38,11],coreclr:88,indic:[46,102,134,1,48,49,2,81,3,53,106,83,8,117,79,54,120,11,129,12,122,61,13,105,62,17,101,125,22,23,25,65,130,88,89,28,29,31,132,91,35,93,70,72,73,74,138,38,139,39,57,148,40,84,144,42,44,45,149],llvmcore:[47,41,114],liter:[109,81,125,83,120,89,16,17,18,19,101,21,22,23,24,25,27,28,29,30,31,32,33,90,110,144,43,44,149],unavail:[51,65],xxxkind:129,constantstruct:101,getloopanalysisusag:91,"03d516c6":84,createinstructioncombiningpass:[30,31,32,33,5,6,63,61],str2:149,ordinari:[79,101,110,83],length:[46,1,48,2,100,83,79,120,86,16,17,18,19,101,23,130,28,67,132,69,35,93,39,144,147,148,149],hihihi:101,fastisel:[68,34,83],libsupport:134,disappear:[37,121,50],stt_object:38,"__atomic_fetch_add_n":51,bindir:126,faq:[54,121,39,26,15,83],recogn:[101,25,49,46,27,28,102,31,108,87,17,83,21,97],superreg:65,rebas:[37,134],lad:28,chines:37,after:[0,26,4,7,8,9,11,12,86,15,87,17,18,19,20,22,23,24,25,125,29,30,31,32,33,34,37,38,39,40,43,44,46,48,49,50,52,57,145,60,61,41,79,65,68,72,74,110,118,83,85,90,88,89,127,91,16,93,95,96,97,100,101,102,51,105,106,108,81,111,112,114,115,120,121,28,129,130,132,134,139,142,144,131,146,147,148,149],hex32:110,lab:[146,54,39],createlocalindirectstubsmanagerbuild:[6,63],endcod:81,enable_exception_int_divide_bi:38,arch:[24,37,120,38,47,50,118,100,14,92,94,95],demonstr:[79,129,65,101,29,30,40,134,16,83,23],condmovfp:149,sparccallingconv:65,domin:[46,81,88,101,33,91,115,14,19,83],sgpr:[83,38],opaqu:[46,144,48,29,68,93,83,101],"000102030405060708090a0b0c0d0e0f":83,recompil:[109,57,31,106,93,17,63],icmpinst:101,buildslav:146,noitinerari:[8,65],order:[46,102,134,48,49,2,113,51,115,52,81,125,117,82,4,83,89,121,79,86,63,129,57,7,132,59,123,13,62,87,16,17,19,101,21,22,23,130,127,65,66,88,27,28,29,30,31,33,91,36,35,93,96,37,74,38,139,39,110,104,148,40,106,41,144,55,42,108,45,149],movhpd:7,ud2:102,softwar:[37,26,65,88,27,29,81,114,86,104,40,15,90,73,95,96,91,21],diagnos:[91,59,1],use_camlp4:[16,17,18,19,22,23],offici:[102,0,138,47,87,29,33,14,40,114,134,90,136,96,19,117],opnod:65,register_operand0:38,pascal:83,noimm:8,incid:0,blocksizex:11,getnexttoken:[24,25,125,29,30,31,32,33],flexibl:[91,102,129,88,83,28,2,32,86,115,80,42,18,149,7,8,101],getattribut:87,addrspacequ:38,maxflatworkgroups:38,inadvert:[4,7],row_bcast:38,isellow:[34,51],initialexec:[83,144],setoperationact:[102,51,65],induct:[37,1,29,31,33,57,62,46,17,19,91,23],them:[0,26,4,5,7,61,9,11,12,86,14,15,87,17,18,19,20,21,22,23,25,2,27,125,29,30,31,32,33,37,38,45,40,42,43,46,47,48,49,104,57,63,62,41,65,68,70,74,110,76,82,83,84,79,90,88,89,91,16,36,93,96,138,100,101,102,103,51,106,108,81,111,114,115,120,121,28,129,130,132,133,134,99,139,141,144,145,149],dw_apple_property_atom:132,thei:[0,1,26,4,6,7,8,9,86,14,15,87,17,19,20,22,23,2,125,29,30,31,33,34,37,38,39,40,42,43,46,47,48,49,50,104,53,54,57,145,59,60,61,62,41,65,68,73,74,110,77,82,83,84,79,90,88,89,127,91,16,36,93,95,96,101,102,51,105,106,109,81,111,114,115,120,121,28,129,130,132,134,138,139,141,144,146,149],fragment:[44,66,88,48,49,102,132,149,83,117,101],safe:[46,75,0,48,26,83,57,145,13,15,62,19,101,63,130,88,28,37,73,20,102,51,118,40,106,144],printccoperand:65,scene:101,"break":[46,81,1,114,3,125,83,55,17,18,101,21,22,24,25,65,88,27,28,29,30,31,32,33,91,93,70,74,139,102,76,40,146,43],bang:44,astread:34,selti:83,lifelong:54,bank:68,stdarg:83,addressis32bit:148,changelog:39,"8780p":38,"__cxa_rethrow":139,monolith:[103,40,68,134],"0x000003cd":132,jittargetaddress:[5,6,63],overflow:[38,130,39,52,40,62,83],sled:118,bruce:101,trap_pres:38,const_op_iter:101,s17:68,network:[39,102,101],fuzzinglibc:39,visiticmpinst:20,misoptim:3,addxri:89,lib64:[37,14,74],forth:[51,93],image_file_relocs_strip:140,multilin:[2,44,149],"_ty":55,registeralias:34,ms_abi_tripl:86,barrier:[88,48,83,51,11],multilib:[96,12],lltok:55,tian:122,nth:81,fixm:[37,96,0,65],shadowstackgclow:88,cuobjdump:14,debuglev:28,mvt:[102,68,65],topn:141,angl:[14,110,81],zerodirect:65,regress:[37,81,47,7,39,2,114,86,104,40,134,20,49,41],gcregistri:88,subtl:[130,39,26,31,148,15,90,16,17,125,22],boiler:[28,101],render:[83,102,32,18,101,84],refin:[102,101,9,57],subreg:65,lto_code_gen_t:108,i48:83,setcondcodeact:65,getmemb:101,llvm_build_32_bit:74,"0x00000000016677e0":123,ten:[67,130],ispredic:8,libllvmir:101,tag3:83,image_file_bytes_reversed_hi:140,fixedt:132,sortord:84,isalpha:[24,25,27,125,29,30,31,32,33],baseclasslistn:44,john:[40,81],"40th":[27,21],headerdata:132,getdatasect:88,inexact:[83,38],tee:20,vc98:113,registerpasspars:91,gcmetadataprinterregistri:88,happili:30,analyzebranch:65,blockdim:11,tex:49,llvm_build_root:74,target:[46,102,1,142,48,49,26,80,114,104,81,131,82,5,6,83,8,9,85,54,55,11,63,132,121,12,61,13,105,15,62,87,16,17,18,19,24,25,126,65,130,88,68,92,90,30,31,32,33,91,34,35,86,93,70,95,96,97,37,74,38,139,39,75,51,40,106,144,89,42,43,137,45],provid:[46,110,0,1,48,49,26,81,50,51,90,115,52,3,117,53,4,123,83,61,9,85,54,127,102,11,129,63,132,130,84,13,14,105,15,62,87,16,19,101,125,22,23,24,25,2,65,66,88,68,28,29,30,31,32,33,91,146,34,134,94,96,131,120,37,73,74,38,100,139,39,57,104,118,40,106,41,144,145,42,43,149,108,45,79],cppflag:41,minut:37,uint64_t:[87,110,70,5,83,72,117,101],hassse2:149,hassse3:149,s_and_b64:38,madd4:45,contenti:[40,81],consumeaft:28,frontend:[24,54,121,48,45,59,60,51,86,109,105,62,139,42,83,79],n1737:81,badfileformat:101,manner:[79,65,38,130,48,39,102,51,13,40,139,111,83,101],interfac:[46,102,87,26,81,125,82,4,63,61,9,54,136,11,83,121,123,15,16,101,21,22,23,2,65,88,27,28,29,132,91,34,70,37,74,138,38,139,39,57,77,40,106,42,108,45,149],vcc_lo:38,strength:[54,111,46,27,28,102,51,62,83,21,101],recreat:[37,110,83],is_nul:109,laden:[26,15],llvmaddbbvectorizepass:45,latter:[65,48,125,102,68,51,105,87,83,22,101],image_rel_amd64_secrel:35,enablecompilecallback:5,"0x400528":94,"__attribute__":[118,14,132],pop:[24,25,88,101,102,31,33,144,131,17,19,83],llvm_doxygen_qhp_namespac:74,smul_lohi:102,initializemoduleandpassmanag:[24,30,31,32,33],usernam:[37,40,134],iceland:38,cumodul:11,llvm_definit:74,lexic:[25,81,48,125,102,30,132,16,83,44,22,121],nummemb:101,phase:[65,1,47,145,125,102,68,32,114,13,88,92,108,139,18,83,61,22,101],"__scudo_default_opt":52,retcc_sparc32:65,passthru:83,inc32r:89,excus:111,valuerequir:28,instritinclass:8,bracket:[81,89,110,132,14,40,139,42,83],sun:91,unchang:[134,57,48,83,5,6,101],languagevers:38,notion:[81,129,68,102,30,31,132,91,40,16,17,83],uitofp:[29,31,33,17,19,83,23],bpf_jeq:102,confront:[62,130],md_prof:3,opposit:[73,101,120,110],pg1:87,freeform:28,overload:[55,129,65,11,48,68,32,91,14,18,83,101],buildbot:[54,39,2,114,86,40,134,146],op0:144,"80f351b51825":96,involv:[46,102,0,48,114,52,82,4,83,84,55,57,122,62,17,19,101,22,25,65,130,88,125,68,31,33,72,74,38,110,51],latent:39,just:[2,4,5,6,7,8,9,11,12,86,14,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,34,35,37,45,40,42,46,47,48,49,50,104,53,57,63,59,61,41,65,68,72,75,77,81,83,84,79,90,89,91,16,36,93,95,96,97,100,101,102,103,51,105,106,110,115,117,120,121,28,129,130,132,134,138,144,131,147,149],the_funct:[16,17,18,19,23],"41m":28,wzr:83,cv_cpu_type_:148,sroa:[46,73,51,33,13,14,62,19],baseopcod:[82,65],latenc:[95,102,83,84],callbackvh:101,hrf:38,instlisttyp:101,predecessor:[46,101,102,31,122,62,17,83,72],showdebug:123,likewis:[37,83],"0cleanup":139,llvm_include_tool:74,fp128:[87,83,144],didescriptor:132,numregionarrai:79,lit_arg:86,fomit:[45,102],isosdarwin:25,emb:[83,26,15,74,144],rcp_iflag_f32:38,bandwidth:83,filemag:67,cleanli:[91,81,40,83],ostream:[81,101],st_uid:120,septemb:45,commandlin:[54,5,2,28],memorywithorigin:74,chapuni:54,dw_ate_float:[25,83],miscompil:[37,145,75,20,40,83],eatomtypedieoffset:132,type_code_x86_mmx:144,awar:[37,81,74,129,57,48,28,102,51,132,14,40,134,90,42,130,7,101],sphinxquickstarttempl:147,dicompileunit:[25,83,132],unordered_set:101,awai:[46,81,134,129,72,88,27,132,61,91,14,105,108,83,7,21,101],type_code_struct_nam:144,getiniti:101,accord:[110,65,38,47,48,28,29,68,122,88,106,144,129,83,72,101],unsett:91,featurevi:65,preprocessor:[79,121,74,65,28,26,30,100,14,15,16,101],subfold:96,setsockopt:5,image_file_machine_armnt:140,easi:[102,47,87,49,26,81,63,61,9,83,132,12,86,15,16,17,19,101,21,22,23,2,129,88,27,125,29,30,31,32,33,91,34,134,37,74,39,110,77,40,144,42,147],cov:[79,100,39,80],ill:[83,120],bitwidth:[48,83,144,87],xmm0:[86,106,7,8,149],jitcompilerfn:65,calltmp:[24,25,29,30,31,32,33,16,17,18,19,23],ilp:1,themself:40,com:[37,81,138,64,39,133,52,40,134,101,97],ctxt:110,con:[44,93],dynsym:38,testcleanup:83,widen:[1,102,68,122,91,83],solari:37,resultti:83,i8086:24,trunk:[37,138,54,39,102,132,114,86,104,40,134,96,49],getbasicblocklist:[24,25,31,32,33,101],resumpt:105,push_back:[24,25,110,65,125,29,30,31,32,33,81,101,9],prologu:[25,38,65,88,103,144,83],wider:[55,68,51,38,130],guid:[46,0,111,47,49,2,113,50,80,114,104,3,83,79,54,136,11,86,14,20,125,22,24,64,65,130,89,28,132,96,37,74,138,38,101,45,102,51,40,41,131,42,39],"__builtin_longjmp":139,goodby:147,speak:[0,111,48,31,32,14,90,17,18],degener:[46,19,33],"__builtin_expect":3,terribl:131,hiddencompletionact:38,unop:[24,25,32,33,18,19],uint16:[109,106,67],"__nvvm_reflect":11,debug_info:132,subscrib:[40,138],xray_opt:[118,84],mallocbench:49,publicstreamindex:148,mainfun:5,compatible_class:102,debugprop:38,you:[0,2,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,39,40,44,45,46,104,47,48,49,50,52,54,55,57,63,61,62,41,65,67,68,70,74,75,76,77,80,81,83,84,79,86,90,88,89,127,91,16,94,95,96,97,100,20,102,51,110,111,112,114,115,117,118,120,121,123,124,125,129,130,131,132,134,138,144,145,146,147,149],machineblockfrequencyinfo:72,hoist:[46,38,57,45,51,91,115,106,101],unclutt:4,dwoid:83,amd_float_denorm_mode_flush_src_dst:38,binaryoper:[81,101],inhibit:[48,45,83,141],ident:[46,81,0,111,87,83,120,57,7,132,12,86,142,16,17,18,19,101,21,22,23,88,89,30,31,33,34,93,73,102,148,105,131,134],sht_dynam:38,aix:[102,136],gnu:[24,37,81,74,120,65,139,39,102,50,91,92,35,131,146,96,36,83,45,149],"_overflow":38,mitig:[88,52],properti:[46,81,134,48,26,115,104,82,83,8,89,79,57,15,62,87,19,101,65,88,30,28,68,132,33,91,34,93,38,102,51,105,106,144,42,148],cxx_statu:81,aim:[79,81,0,20,90,52,40,93,145,4,83,9,101],ain:38,pairwis:57,publicli:[101,40,0,132],aid:[88,101,83],vagu:40,keytyp:132,immigr:111,opt:[46,75,1,48,49,80,115,104,81,5,54,11,145,121,12,13,16,17,19,20,24,88,28,127,30,31,33,91,86,37,101,45,57,51,40],printabl:[83,120,65],conv:121,theexecutionengin:25,harddriv:50,sockaddr_in:5,extractloop:46,shadowstackgc:88,uint32x2_t:93,cond:[24,25,65,121,31,32,33,115,105,17,18,19,83,72],int_of_float:[18,19],dw_tag_label:132,dumper:[132,141],old_val:[17,18,19],issimpl:51,incorrectli:[27,29,83,23],perform:[109,46,102,134,1,47,48,49,26,50,114,90,52,81,127,4,63,61,9,85,54,55,120,11,83,60,13,105,15,62,87,19,20,41,23,24,142,2,65,130,88,89,28,29,68,132,33,91,92,86,93,122,96,131,97,37,73,74,38,101,39,57,51,141,118,40,139,42,108,45,149],descend:[139,83],doxgyen:74,addintervalsforspil:102,disubroutinetyp:[25,83,132],llvm_build_dir:37,foldabl:68,fragil:[86,68,7,134],raii:105,code_own:[40,138],evil:[101,8,93],hand:[46,102,0,47,87,115,81,4,8,129,15,89,16,18,101,21,22,23,65,130,88,27,125,29,68,32,30,34,70,110,51],fuse:[46,14,83,74,95],mdstring:[3,83],use_llvm_scalar_opt:[16,17,18,19],disassembleremitt:34,operandv:[24,25,32,33],kept:[73,0,38,57,81,91,40,105],undesir:83,scenario:[37,101,121,51,122,86,131,20],thu:[46,102,87,115,81,83,79,57,132,121,86,105,62,48,16,17,18,19,20,125,22,23,24,25,88,68,28,29,30,31,32,33,91,134,72,37,138,101,39,75,51,40,144,139,148],hypothet:[48,102,67,91,139,87,101],whizbang:81,word64:38,client:[81,5,61,9,85,54,129,57,142,16,19,101,65,66,88,28,30,132,33,91,134,74,102,40,106,144,42,43],wherebi:[67,134],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,145,59,60,61,62,63,79,65,66,67,68,69,70,71,72,73,74,75,76,77,81,82,83,84,85,86,90,88,89,127,91,16,92,93,94,95,96,97,99,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,125,126,129,130,132,134,136,137,138,139,141,142,144,131,146,147,148,149],gettok:[24,25,27,125,29,30,31,32,33],clenumvaln:28,value_load:83,"0x744e60":39,basetyp:83,elabor:[101,148],mandelbrot:[27,18,21,32],stack_loc:102,ifdef:[24,25,68,28,26,30,31,32,33,14,15,4,39,79],sparctargetasminfo:65,getkei:101,lowertypetest:142,initializealiasanalysi:57,builtin:[24,25,144,11,101,28,2,51,32,33,91,66,134,18,19,83,22],spread:[46,67],board:[12,40,0,50],parse_primari:[16,17,18,19,22,23],reloccrc:148,relwithdebinfo:[37,74],mayb:[55,39,26,118,34,15],basety1:83,stringwithspecialstr:132,basety2:83,sectioncontribentry2:148,fusion:[45,83],fsin:[92,65],xdata:148,mip:[37,136,65,45,102,12,51,118,62,83],ppc32:102,unused_preserv:38,bpf:[37,39,102],sectnam:28,parsetypetyp:55,bucket_count:132,bpl:8,rvalu:81,href:102,image_file_machine_ebc:140,openfil:81,prefixdata:144,vcsrevis:74,manual:[81,1,48,83,8,117,54,136,129,86,15,62,20,65,130,88,89,28,127,68,132,91,37,74,138,38,101,102,118,40,146],percentag:[101,53],cfrac:49,bork:[28,149],flatten:[96,102,83,1],rl247416:39,charscalarti:83,rl247414:39,pos2:28,"0x40000000":89,pos1:28,getmodulematchqu:65,forcibl:83,functioncompar:87,fpic:[52,74],min_dx10:38,x86isellow:84,dopartialredundancyelimin:28,peek:[16,17,18,19,22,23],plu:[144,65,38,88,101,125,31,132,40,93,139,17,148,83,61,22],"0x710":94,memdep:[46,57],someclass:44,pose:[88,73],confer:[88,102],"1cleanup":139,fastmath:11,repositori:[37,138,54,139,39,75,12,132,114,86,40,134,96],post:[54,0,111,138,46,89,102,68,40,134,95,83,41],bpf_mov:102,obj:[126,47,48,49,132,88,104,92,139,94,83],chronolog:134,literatur:102,image_scn_align_4byt:140,gc_transition_end:48,trophi:39,canonic:[46,7,102,91,83,101],s64:[68,11],looppass:[13,91],deltalinestart:79,nctaid:11,sames:83,curiou:87,xyz:[82,95,92],"float":[102,1,87,50,125,83,8,55,11,12,14,68,62,16,17,18,19,101,21,22,23,65,130,27,28,29,30,31,132,92,35,95,72,38,110,144],profession:40,bound:[65,11,88,48,110,60,130,149,83,101],emitinstruct:[102,65],getproto:[5,6],opportun:[46,65,1,68,30,105,62,134,16,83,61],accordingli:[88,101,67,134,139,82,83],wai:[1,26,7,8,9,11,12,86,15,87,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,37,38,39,40,42,46,104,47,48,49,52,57,145,60,61,62,41,65,68,70,75,118,110,83,84,79,13,90,88,89,91,16,94,96,101,102,51,105,106,109,81,114,115,120,121,122,123,125,129,130,132,134,138,139,141,142,144,131,149],callexprast:[24,25,125,29,30,31,32,33],type_code_half:144,n2764:81,swich:51,memorydependenceanalysi:[115,57],lowest:[24,25,81,125,29,30,31,32,33,79,93,51,16,17,18,19,83,22,23],asmwriternum:137,raw_ostream:[24,25,55,102,101,110,84,91,81,5,6,63,61,9],end_amd_kernel_code_t:38,maxim:[27,39,21,144,95],build_stor:19,argpromot:[46,57],"true":[46,110,87,81,50,52,3,82,5,6,83,8,9,102,11,129,63,132,12,61,86,142,117,90,16,17,18,19,101,125,23,24,25,65,130,88,89,28,29,30,31,32,33,91,134,94,95,37,38,57,51,141,118,77,105,84,145,44,148],reset:[74,139,39,144,5,6,101,149],absent:101,optimizationbit:28,legalizeop:55,arm_aapcs_vfpcc:144,attornei:40,inaccur:90,anew:132,absenc:[102,20],llvm_gc_root_chain:88,emit:[46,102,48,26,113,80,100,104,82,83,85,11,7,132,121,123,14,105,15,62,17,18,19,20,125,22,23,24,25,65,130,88,28,29,68,31,32,33,91,34,35,93,95,37,73,38,139,45,75,51,141,92,106,144,137,79],hotter:72,alongsid:[144,134],wcover:81,build_arch:41,thunderbird:40,"abstract":[46,102,48,81,4,83,8,129,132,121,122,13,62,16,17,18,19,101,21,22,23,24,25,65,88,27,125,29,30,31,32,33,91,73,139,110,40,144,108],xxxjitinfo:65,inline_hd1:14,inline_hd2:14,valuelist:44,function_entry_count:[3,83],encrypt:40,refactor:[40,19,73,134,33],instr0:87,instr1:87,instr2:87,entrypoint:[39,83],gfx810:38,test:[46,110,47,48,49,2,50,80,114,52,81,5,83,89,101,79,54,10,102,57,7,132,121,12,92,13,14,105,58,87,16,17,19,20,41,24,142,129,66,139,68,28,131,30,31,33,91,34,86,134,71,37,74,38,145,39,75,104,77,40,55,42,137],shrink:102,realiti:114,xxxtargetasminfo:65,fpreg:65,"2acr96qjuqsym":40,sanitizercoverag:39,debugflag:[28,101],outdat:12,clang_cl:86,pathnam:[37,126],manglednamestream:[5,6,63,61,9],set_value_nam:[16,17,18,19,23],libgcc1:12,concept:[81,124,48,4,83,61,9,79,54,11,8,62,87,17,101,23,129,130,29,68,31,132,91,93,45,102,144],mayload:8,consum:[50,104,53,83,117,132,130,16,17,18,19,101,125,22,23,24,25,66,67,28,29,30,31,32,33,69,34,139,39,105,106,43,148],dw_tag_inlined_subroutin:132,supplement:[136,0],mymachinefunctionpass:13,executable_format_error:101,subcompon:40,value_typ:110,middl:[81,88,48,121,67,60,90,83],zone:83,graph:[46,49,83,84,132,122,16,17,18,19,20,23,25,65,29,30,31,32,33,91,72,37,73,74,101,102,118,139,137,149],certainli:[46,88,26,51,15,62,134],jvm:[26,15],terror:131,borderlin:81,"0x200":132,exact_artifact_path:39,v2i64:83,munger_struct:130,fom:46,brows:[29,74,134,138,23],seemingli:65,dw_apple_property_readonli:132,avx1:86,avx2:86,image_debug_type_omap_from_src:148,administr:[146,114],bring:[81,88,48,39,26,15,62,134,101,9],gui:[104,81,74],libthread_db:123,pdbstreamvers:113,sparcinstrformat:65,"_e64":38,usescustominsert:8,sectionmaps:148,upper:[145,81,83,65,101],isvolatil:[83,38],brave:[125,22],paramattr_code_entri:144,bpf_jgt:102,alt_never_instru:118,discover:96,preservemost:83,cost:[73,65,1,87,45,26,68,122,76,108,15,134,139,82,81,102,83,101],fppassmanag:84,build_fmul:23,bpf_jge:102,f4ba70:79,liveonentri:115,after_bb:[17,18,19],gr16:102,comparis:45,r_amdgpu_abs32:38,scaffold:[125,22],"23421e":83,constantarrai:101,uniform:[13,81,101],isoptim:[83,132],outliv:[46,39,83],setter:[101,34,83,132],va_list:83,image_sym_class_funct:140,psabi:136,burn:50,defici:[88,27,124,8,21],caveat:[25,14,134],gener:[0,1,2,3,4,7,8,9,11,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,47,48,49,104,53,54,55,57,58,60,61,62,41,64,65,68,73,74,75,118,79,80,81,83,84,85,86,90,88,89,127,91,16,92,93,95,97,100,101,102,103,51,105,106,108,109,110,111,113,114,115,117,120,121,122,123,124,125,129,130,131,132,133,134,137,138,139,141,142,144,145,146,147,148,149],inputcont:110,satisfi:[109,38,57,51,33,40,114,4,19,83],vice:[48,67,51,86,105,83,101],isstor:102,fatbin:14,v_add_f32:38,offset1:[83,38],devirtu:[142,83],precursor:40,plotter:[18,32],shouldinsertfencesforatom:51,hash_data_count:132,mach_universal_binari:94,granulated_workitem_vgpr_count:38,behav:[109,54,81,57,139,83,75,51,100,14,40,90,105,63,61,9],myvar:130,triag:102,baselin:[102,114],regardless:[46,10,81,74,99,38,57,88,112,127,68,132,33,76,104,119,19,83],extra:[46,81,0,47,48,3,83,12,86,62,87,101,130,28,67,134,37,74,38,139,39,75,103,144,149],stingi:101,stksizerecord:106,marker:[102,48,28,2,81,40,83,101],type_code_void:144,mobil:38,emitt:[65,31,123,34,17,137,83,149],regex:[100,28,7,49],prove:[46,57,87,49,60,62,83],nothrow:51,naddit:28,sequentiallyconsist:51,subvers:[37,138,45,75,114,86,104,40,134],live:[46,102,134,48,104,81,83,57,60,14,89,19,101,23,88,68,29,30,132,33,91,93,37,73,74,38,139,45,75,118,106,108],jam:122,stackprotector:83,abs_fp64:8,lgtm:[73,138],"0x7fff":38,"0xl00000000000000004000900000000000":83,finit:[102,34,83],ctype:148,viewcfg:[101,31],geordi:54,shouldexpandatomiccmpxchginir:51,iffals:83,build_docker_imag:96,logarithm:[87,83,144,101],flat_store_dwordx3:38,ibm:136,vectortyp:101,at_nam:132,canconstantfoldcallto:55,prepar:[85,46,0,138,54,47,12,130,30,139,100,105,67,134,48,87,83],focu:[111,1,102,68,147,108,9],cat:[37,88,28,86,94,39],ctfe:45,can:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,58,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,63,59,60,61,62,41,79,65,66,67,68,70,72,73,74,75,118,77,81,82,83,84,85,86,90,88,89,127,91,16,92,93,94,95,96,97,100,101,102,104,105,106,108,109,110,111,112,113,114,115,117,120,121,122,123,124,125,126,129,130,131,132,133,134,137,138,139,141,142,144,145,146,147,148,149],debug_symbol:76,boilerpl:[16,88,28,34,129],heart:[48,66],underestim:83,raw_fd_ostream:24,basemulticlasslist:44,chip:[65,11,102,12,50,86,92,95],r285:38,topic:[64,81,74,27,26,15,147,101,21],spi:38,abort:[81,139,102,20,149,83,101],spl:8,"__llvm_memcpy_element_unordered_atomic_":83,occur:[46,102,0,48,2,81,3,53,4,83,10,119,120,7,86,112,101,41,24,126,130,88,125,127,68,91,92,134,73,99,38,139,75,40,106,22,144,145,137,44],multipl:[46,102,1,142,48,49,122,90,115,81,117,4,83,8,89,85,10,120,57,129,7,60,86,14,105,62,87,16,17,18,101,125,22,23,25,65,130,68,28,29,30,31,32,132,91,146,34,35,134,94,36,72,97,37,138,38,100,39,110,51,148,118,40,106,41,144,42,149,44,45,79],image_sym_class_regist:140,ge_missing_sigjmp_buf:81,modulenam:148,write:[46,110,64,48,49,26,113,100,104,81,53,4,83,8,89,54,10,68,119,120,11,7,121,60,84,86,14,15,62,87,16,17,102,101,21,41,24,25,130,65,66,88,27,28,127,30,31,132,91,34,134,94,96,112,37,137,67,99,38,39,57,51,118,40,106,147,148,149],regioninfo:[46,122],"0x80":[120,132],x86instrss:65,nonstop:84,product:[44,111,38,88,83,45,102,32,114,91,40,125,87,18,63,72,22],dive:[27,21,129],"__next__":105,southern:38,memcpi:[46,45,83,51,57],uint:92,drastic:4,lto_codegen_compil:108,breakag:[40,134],voidtyp:101,newlin:[81,120,2,32,141,100,144,18,7],autotool:[37,77],copyphysreg:65,getcalledfunct:101,assici:87,explicit:[109,81,0,111,87,26,83,9,11,121,122,15,48,16,17,18,19,101,24,25,129,130,88,28,68,31,32,33,91,35,37,73,102,51,141,40,42],dllvm_dir:74,device_onli:14,objectimag:85,dump_coverag:39,somewhat:[54,81,57,48,49,51,32,40,125,134,18,83,96,22,101],mapvector:101,ghc:[102,83],thread_loc:[48,102,83],approx:[14,11],arch_nam:94,approv:[40,138,114],graphviz:[46,101,84],brain:81,sanitize_memori:[83,144],enable_exception_address_watch:38,uuidcreat:113,machoobjectfil:101,cold:[83,62,144,72],still:[46,110,0,134,1,48,49,26,115,104,81,4,83,9,85,102,132,121,12,60,13,14,15,62,87,17,18,19,20,79,2,129,88,68,28,30,31,32,33,91,93,96,37,138,100,101,39,75,76,77,40,106,139,45],ieee:[120,38,14,92,62,83],dynam:[46,102,48,52,83,9,85,145,121,123,62,16,18,20,41,129,130,88,28,127,30,132,32,91,92,35,95,71,36,97,38,101,110,103,118,105,106,144,148],mypass:[91,101],conjunct:[74,66,47,83,141,4,7,149],precondit:81,yaml:[54,38,89,45,110,140,118,84],window:[81,113,104,4,83,117,54,136,60,86,14,17,101,28,29,30,31,32,132,91,35,37,74,139,45,102,105,146,39],addreg:102,curli:[86,101,81,83,149],val_success:83,llvm_doxygen_qhelpgenerator_path:74,has_asmprint:42,non:[109,46,110,139,47,48,26,113,50,149,115,81,125,53,82,127,83,101,85,10,68,119,102,11,129,7,132,59,60,86,14,15,62,87,16,17,19,20,21,22,24,25,126,2,65,66,88,27,28,90,30,31,32,33,91,92,134,95,130,108,131,120,112,37,74,99,38,100,145,39,57,51,148,77,40,106,144,55,137,44,45,79],evok:83,recal:[110,87,29,30,31,16,23],halv:[55,68],half:[81,38,65,83,39,102,100,144,147,101],recap:93,now:[102,111,48,49,26,114,115,52,81,89,7,61,9,54,63,120,11,83,132,12,60,84,14,142,15,87,16,17,18,19,20,125,22,23,24,25,2,129,139,67,28,29,30,31,32,33,91,134,96,37,98,74,138,101,45,110,40,106,55],nop:[118,83,35,106,48],discuss:[81,0,111,48,104,5,63,61,79,54,129,83,8,13,90,101,125,22,65,28,67,132,91,134,37,138,118,40,106,148],group_segment_align:38,introduct:[3,5,6,63,8,9,11,12,13,14,16,17,18,19,101,21,22,23,24,25,27,125,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,104,47,87,50,52,54,55,57,60,61,64,65,68,69,70,72,74,75,118,77,79,110,82,83,85,90,88,89,91,93,96,97,102,103,51,105,81,114,115,117,124,28,130,132,134,137,139,131,146,147,148,149],printformattedfil:101,drop:[81,138,89,40,83,101],reg1024:102,sjlj:139,reg1026:102,reg1027:102,image_scn_align_1024byt:140,dw_tag_vari:132,domain:[102,65,88,26,68,15,124,83,8],nomodref:57,z8ifx:40,replac:[46,48,49,142,115,4,6,63,61,9,54,120,11,83,13,14,105,62,87,19,101,65,88,68,28,30,139,33,36,86,134,96,37,73,74,100,108,45,102,51,118,77,40,89,44,149],arg2:[27,39,83,21],callgraphscc:[13,91],releasememori:91,degen:83,infecti:101,backport:12,reallyhidden:28,year:[81,8],operand:[46,81,48,115,3,53,83,55,7,87,18,19,101,23,24,25,65,130,89,29,68,32,33,34,35,38,139,45,102,106,144,149],rl4:11,happen:[109,46,102,0,111,48,7,115,81,83,85,145,121,105,87,16,17,101,22,23,25,130,88,125,29,30,31,132,91,34,134,37,138,38,110,51,40,106],rl6:11,rl1:11,rl3:11,rl2:11,shown:[49,2,115,104,83,8,79,129,11,105,18,101,65,89,28,132,32,93,71,100,39,110,141,142,106,147],accomplish:[46,129,88,27,113,40,101,21],"_e32":38,gdbinit:101,oldval:[24,25,31,32,33,83],s7100:38,indirectstubsmgr:[5,6],ldrr:65,release_34:37,release_31:37,release_30:37,release_33:37,release_32:37,release_39:134,release_38:134,argv:[79,11,101,28,132,123,39,90,95,5,20,84],quark:90,ldrd:51,lma:84,mandelconverg:[18,32],argc:[79,11,101,28,132,123,39,5,83,84],card:[48,50],care:[81,111,49,26,114,115,4,83,61,57,7,8,14,15,19,101,65,89,33,91,134,37,39,102,51,43,149],xor16rr:102,cv_signature_xx:69,couldn:[24,87,5,6,57],prettyprint:101,vec2:[101,83],coroutin:[54,105],gcmetadataprint:88,unwis:[83,120],adc32ri:8,lambda:[81,63,5,6,101,61,9],blind:102,zak:122,cpux:97,subrang:83,rint:83,xray_log_interfac:118,yourself:[37,55,74,138,101,115,40,83,149],cpun:97,stringref:[25,81,28,110,132,101,84],size:[46,110,111,1,48,49,26,100,52,81,53,5,83,8,79,118,55,68,102,11,145,132,61,86,142,15,62,58,87,106,19,20,125,22,24,25,2,65,130,88,67,28,29,30,31,32,33,91,36,35,93,96,148,97,120,73,38,101,39,57,103,51,141,76,105,84,144,149,108,45,124],sub_ri:149,yypvr:147,datatyp:[27,28,102,101,21],silent:[146,40,83,149,57],caught:[139,81,83],yin:110,type_block:144,himitsu:37,checker:[34,130,75],cumul:[102,84],tragic:134,friend:[121,83],editor:[37,40,81,147],nummeta:88,ariti:88,especi:[46,81,111,87,2,50,3,4,83,9,122,14,62,101,41,65,28,132,134,96,37,73,74,51,141,40],dw_tag_interface_typ:132,apple_nam:132,cpu0:64,cpu1:110,llvmtop:91,mostli:[25,73,65,37,48,28,26,68,31,51,115,14,15,87,46,17,102,45,132],stage1:[96,131],vgpr0:38,vgpr1:38,user_sgpr_count:38,maybe_instru:118,than:[0,26,3,63,61,9,86,14,15,16,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,37,38,39,40,42,43,44,45,46,47,48,50,53,54,55,57,60,62,41,65,68,70,72,74,110,75,83,79,87,88,91,92,93,96,97,100,101,102,103,51,105,106,108,81,113,114,115,120,121,122,28,130,132,134,139,141,144,131,146,147,148,149],png:[39,74],"0x432ff973cafa8000":83,elf64_rela:38,d02:142,gpgpu:14,"__atomic_load":51,spisd:65,postfix:81,optimist:[68,83],p0v4p0f_i32f:83,browser:[54,138],loweratom:46,sonnenberg:134,feat_asmpars:102,anywher:[147,111,139,7,125,33,86,108,62,87,19,83,8,22,101],delin:2,cc_sparc32:65,bitcast:[46,65,57,88,87,130,68,7,142,105,93,139,83],caus:[46,110,134,1,48,2,100,81,125,53,4,83,85,86,55,102,57,7,59,13,142,133,19,20,121,22,25,127,88,28,29,31,32,33,91,35,93,95,120,37,74,38,101,45,75,51,77,40,41,145,39],doorbel:38,feat_segstacks_x86:102,readcyclecount:83,fldcw:102,kernarg:38,mccodeemitt:[102,34],begin:[110,87,114,115,52,81,4,83,61,9,85,102,11,129,7,132,59,86,105,62,16,17,18,19,101,22,23,24,25,65,88,28,67,31,33,120,37,73,74,38,139,57,104,118,40,106,144,44,148],importantli:[17,40,81,31,57],numrecord:106,toplevel:[16,17,18,19,22,23],cstdlib:[24,125,29,30,31,32,33,5,6],neatli:61,"_global__i_a":121,renam:[37,6,47,101,45,132,33,81,5,19,83],cmpoper:87,whitepap:118,enable_sgpr_workgroup:38,gfx703:38,gfx700:38,gfx701:38,"_p1":132,"_p3":132,x86evex2vex:34,steadi:109,callinst:[3,101],amd_system_vgpr_workitem_id_x:38,llvm_libdir_suffix:74,femul:83,add_reassoci:[16,17,18,19],concurr:[54,74,38,88,101,45,51,83],image_file_bytes_reversed_lo:140,capston:39,fifth:[83,65,11],ground:111,onli:[0,1,2,3,4,7,8,9,11,12,86,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,35,36,37,38,39,40,42,44,46,48,49,50,104,53,54,55,57,63,59,60,61,62,41,65,66,67,68,69,71,73,74,110,118,82,83,79,90,88,89,127,91,16,92,93,94,95,96,100,101,102,51,105,106,108,109,81,113,114,115,136,120,122,125,129,130,132,133,134,138,139,141,142,144,131,137,148,149],ratio:72,image_rel_i386_dir32nb:35,"8500b":38,expr_prec:[16,17,18,19,22,23],llvm_enable_abi_breaking_check:101,grpid:144,"8500p":38,endloop:[24,25,31,32,33,19],overwritten:[106,102,83,139],llvminitializesparctargetinfo:65,bonair:38,vextuhrx:45,cannot:[46,81,0,111,1,49,26,113,7,100,104,3,4,83,9,85,57,145,60,14,105,15,90,20,65,130,88,68,28,29,67,91,35,93,74,138,38,101,102,51,141,118,40,139],foo4:[77,108],targetjitinfo:[102,65],truli:[101,63],mrm6r:65,inttoptr:[106,83,62,130],operandlist:149,seldom:[87,134],intermitt:37,object_addr:88,type_code_ppc_fp128:144,gettypenam:101,servaddr:5,rrinst:149,bugpoint:[91,37,10,46,54,75,80,13,40,145,20],"0x0000000000d953b3":123,sometest:49,vcc_hi:38,copycost:[68,65],istreambuf_iter:11,foo_test:86,concern:[130,88,48,40,134,42,83,61],"1svn":114,dityp:25,mrminitreg:65,printinstruct:[34,65],between:[46,110,47,48,49,114,115,52,81,82,4,83,121,85,54,55,11,7,59,92,60,14,68,87,16,17,102,101,21,79,65,130,88,27,28,90,30,31,132,91,69,34,93,96,37,73,138,38,108,39,57,51,141,118,40,106,144,139,43,44,148,149],"import":[46,110,111,1,47,87,26,81,50,51,134,52,3,82,83,61,117,54,57,59,12,148,15,62,90,16,17,18,102,20,125,22,23,25,2,65,88,67,28,29,30,31,32,132,91,69,93,114,37,74,101,39,75,104,141,118,40,106,144,45],modulelevelpass:91,foo3:[77,108],constantpoolsect:65,clang_cpp:86,lit_run_shard:2,dosomethinginterestingwithmyapi:39,typedef:[81,63,110,5,101,61,9],finalize_statu:118,blame:[134,111,138],"__text":102,intregssubclass:65,dw_tag_subrange_typ:132,mono:134,pertain:[139,40,83,132],"3340b":38,inputfilenam:28,nearbi:[109,87],inconsist:[81,132,130],doesnotaccessmemori:57,qualtyp:81,image_sym_type_struct:140,gr32:[102,8,149],actualacc:38,overview:[81,47,48,49,104,82,83,85,54,11,86,90,17,41,79,88,89,28,31,91,96,37,74,139,57,76,105,106,144,42,147],prefix1:7,dispatch:[38,83,125,106,139,101,22],exploit:[109,28,30,45,122],host_onli:14,caret:100,clarif:[136,40,81],resort:139,rebuild:[37,39,106,84,131],parent_scop:90,valuekind:[81,38],invers:[46,83],fixabl:62,sese:122,getentryblock:[24,25,101,33],derefer:[101,130,83,132,90],ircompil:9,normalformat:28,getpointers:88,rubi:88,getjitinfo:[102,65],thischar:[24,25,27,125,29,30,31,32,33],eip:8,thesi:122,module_code_vers:144,global_context:[16,17,18,19,23],pedant:74,fastemit:34,fneg:83,idxen:38,initializenativetargetasmpars:[25,30,31,32,33,5],"__xray_log_flushlog":118,dw_at_artifici:132,stdout:[37,39,2,140,100,104,16,17,18,19,83,22,23],metric:[91,39,72,114],henc:[37,38,44,28,108,106,83],globalstreamindex:148,valgrind:[86,145,2,75],erat:68,onlyreadsmemori:57,eras:[24,25,28,31,32,33,51,101,132],ship:[37,88,48,26,51,123,15,131],bigblock:95,antisymmetri:87,develop:[102,0,111,1,48,49,50,80,114,104,81,4,5,6,63,8,54,136,122,61,86,14,62,90,19,41,64,130,88,28,132,33,146,134,96,37,74,138,38,139,45,75,118,76,40,84,42,108,39],proto:[24,25,19,125,29,30,31,32,33,16,17,5,6,18,22,23],"__nv_powf":11,sizeofimm:65,bpf_lsh:102,p0v16f32:83,epoch:[110,120],cindex:65,externalstorag:28,document:[46,75,0,111,110,47,48,49,50,80,114,90,115,104,81,82,4,83,8,89,85,54,55,136,129,11,12,84,86,14,142,62,87,16,102,101,149,25,65,130,88,68,28,29,30,132,91,146,34,35,93,96,118,72,37,98,73,74,38,108,45,57,51,76,40,106,144,139,42,147,44,134,79],work_group_size_hint:38,finish:[1,47,87,83,84,85,123,16,17,18,19,20,22,23,24,25,29,30,31,32,33,91,96,74,138,139,102,105,131,147],closest:[25,83],ssub:83,preassign:102,someon:[55,102,0,111,138,88,26,81,40,15,62,134,96,147],vk_basicblock:81,removebranch:65,addressofreturnaddress:83,freeli:[40,51],tradition:[102,57],pervas:[101,129],whose:[81,2,83,79,57,122,18,19,20,22,65,125,132,32,33,36,38,101,39,102,40,144,44,45,149],createstor:[24,25,33],destreg:102,ds_cmpst_f32:38,ccc:[83,144],comment:[46,102,87,26,115,81,83,8,7,61,86,15,16,17,18,19,101,21,22,23,24,25,129,66,88,27,125,29,30,31,32,33,34,138,38,45,110,40,42,44,149],souther:38,neon:[54,102,12,34,93,83],bitmap:144,tpoff:48,touch:[46,81,0,101,132,91,134,83,97],speed:[37,81,74,39,33,86,115,14,40,19,61,28],create_modul:[16,17,18,19,23],death:39,struct:[102,1,26,113,115,81,83,7,60,14,142,15,62,19,101,25,65,130,88,28,67,132,33,91,69,38,139,110,118,105,144,148],bb0_29:11,bb0_28:11,getx86regnum:65,bb0_26:11,filecheck:[145,132,80,86,89,71,7],v110:148,desktop:[76,86],identif:[83,12,132,37],gettoknam:25,treatment:[88,101,65,38],versa:[48,67,51,86,105,83,101],suitabl:[85,46,11,88,48,28,102,132,86,100,105,144,90,83,101,79],endcatch:139,"_aligna":132,imul16rmi8:102,frown:40,"0x82638293":132,read:[109,46,75,134,1,48,100,104,81,125,117,53,123,7,8,89,121,54,10,119,102,11,83,132,59,61,86,136,105,15,90,87,16,18,19,20,21,23,24,25,127,65,88,27,28,29,30,31,32,33,92,35,93,94,95,71,108,120,112,37,137,74,138,38,141,101,39,57,51,110,118,40,106,96,144,55,147,44,148],cayman:38,amd:[136,38,45,102,12,34],googletest:2,amp:[78,136],bangoper:44,"9700p":38,jsonnrevnum:134,funcresolv:101,benefit:[24,46,81,57,88,101,39,130,30,132,52,62,6,63,61,9,41],"24e8":101,lex_numb:[16,17,18,19,21,22,23],output:[46,75,110,47,102,49,2,131,115,104,81,53,82,83,8,101,54,10,119,120,11,7,132,59,122,61,86,14,133,58,112,16,17,18,19,20,125,22,24,25,65,88,89,28,127,30,31,32,33,91,34,94,95,71,36,72,97,37,137,74,99,38,100,145,39,57,140,141,118,92,84,55,43,147],downward:83,module_code_sectionnam:144,funcid:84,debug_pubtyp:132,targetloweringopt:84,matur:[88,28,62],gcread:[88,83],initid:144,s9300x2:38,cmake_install_prefix:[37,104,12,74],viral:40,libstdc:[37,14,81,12,96],debug_with_typ:101,inresumepart:105,blockidx:11,lto_codegen_set_debug_model:108,exeext:86,n64:45,raw_string_ostream:[5,6,63,61,9],tok_binari:[24,25,32,33],sixth:65,objectbufferstream:85,asan:[52,39],flagprototyp:25,"throw":[46,63,102,60,91,14,105,62,139,4,83,101],dw_tag_subprogram:132,comparison:[46,63,129,1,47,48,125,130,68,51,32,3,35,62,87,18,83,22,101],sra:[44,149],central:[4,132,139],greatli:[48,101,62,132],underwai:45,shadowbyt:106,srl:[44,149],numbit:101,chop:132,degre:[146,96,51,62,1],dw_tag_subroutine_typ:132,accqual:38,sixkind:83,backup:77,processor:[24,37,74,65,38,1,88,136,28,102,132,34,93,95,83,8],valuecol:82,bodylist:44,mergereturn:46,op3val:65,llibnam:28,typeidx:68,localaddress:83,xxxbegin:101,outloop:[24,25,31,32,33,19],yout:110,your:[75,0,111,110,47,48,49,26,50,51,115,52,81,7,8,9,79,54,55,102,11,129,83,121,12,84,86,14,15,62,16,17,18,19,20,21,41,24,25,65,130,88,27,28,29,30,31,32,33,91,134,74,96,114,118,97,120,37,98,73,67,138,100,101,39,57,104,76,77,40,131,146,147],parsebinoprh:[24,25,125,29,30,31,32,33],verifyfunct:[24,25,29,30,31,32,33],loc:[25,107,132,65,48],keycol:82,log:[37,138,1,20,39,2,57,84,118,40,134,87,46,83,49,101],"__xray_remove_handl":118,opengl:[81,26,15],aren:[46,81,111,26,104,83,61,57,14,15,89,16,101,130,88,30,68,31,134,37,102,40],json:[100,49],format_int_custom:101,start:[46,110,1,47,48,64,26,114,100,104,81,125,131,123,7,61,9,101,79,54,63,68,102,49,11,83,132,121,12,84,13,105,15,62,87,16,17,18,19,20,21,22,23,24,25,2,65,130,88,27,28,29,30,31,32,33,91,146,35,86,134,96,120,37,74,138,38,145,39,57,141,118,40,144,55,42,147,149],low:[81,48,53,4,83,54,55,11,122,87,18,19,101,125,22,65,130,88,68,28,67,32,33,71,97,38,102,144,149],lot:[46,102,49,26,50,81,125,63,8,89,118,55,129,83,121,15,90,16,18,19,20,21,22,23,25,65,130,88,27,28,29,30,132,32,33,91,134,70,37,101,110,76,40,131],colder:72,submiss:40,branchinst:3,typeid2:142,typeid3:142,typeid1:142,satur:[18,32],llvm_cmake_dir:74,addtypenam:101,customalloc:105,"default":[110,1,48,49,2,81,51,115,52,3,131,106,7,8,9,85,118,10,120,11,129,83,132,12,60,92,61,86,14,105,62,89,16,17,18,102,101,125,41,23,24,25,126,65,149,88,68,28,29,30,31,32,33,91,34,35,134,94,95,36,112,37,74,138,38,100,145,39,57,104,141,76,77,40,84,144,55,146,107,43,137,45,79],inlni:94,start_bb:[17,18,19],bucket:[101,132],visibil:9,v31:83,v32:11,issafetospecul:48,scanner:[27,21],f6d55d:79,opnam:65,value_1:42,prepend:[101,83,132,100],valid:[46,102,47,48,114,83,84,85,54,11,7,132,121,86,142,68,87,16,17,18,19,101,125,22,23,24,25,126,130,67,28,29,30,31,32,33,91,92,134,95,72,37,74,139,39,110,40,106,44],release_19:37,release_18:37,release_17:37,release_16:37,release_15:37,release_14:37,release_13:37,release_12:37,release_11:37,poor:[111,17,81,31,48],polar:110,lowerbound:83,registri:[24,88,91],base_offset:48,valuet:101,bpf_st:102,multidimension:83,binfmt:37,s_nop:38,pool:[65,102,91,106,144,53],namedvalu:[24,25,29,30,31,32,33],bulk:[102,40,19,101,33],ipsccp:46,adc64mr:8,value_n:42,sectionmapentri:148,osx:120,messi:102,xray_log_flush:118,month:[54,40,114],correl:[88,83],"__cxa_end_catch":139,getglob:65,somefunc:[81,101],paramidx:144,mrmsrcmem:65,getnullvalu:[24,25,31,32,33,101],"_ri":149,cpufrequtil:50,sparcinstrinfo:65,articl:[46,37,87,31,33,134,17,19],sdisel:73,foster:[4,40,134],phielimin:102,"_rr":149,amd_float_round_mode_minus_infin:38,dllvm_external_project:74,datalayout:[19,65,11,88,63,45,102,61,142,144,16,17,5,6,83,18,9],verb:81,mechan:[81,0,1,48,49,2,4,83,9,85,54,11,62,101,23,88,132,91,73,38,139,102,77,142,144,42,44],verd:38,veri:[46,102,1,48,49,26,50,114,90,115,81,125,83,8,89,121,54,63,68,57,7,132,59,61,86,15,62,87,16,17,18,19,20,21,22,23,129,130,88,27,28,29,30,31,32,33,91,34,134,96,97,37,101,39,110,51,118,40,144,139,43,149,124],passmanagerbas:65,targetregisterdesc:[102,65],methodbodi:65,rbx:[102,8],eatomtypetag:132,emul:[55,81,101,102,62,134,95,83],managedstat:101,lldb:[37,81,74,45,132,123,40,134,42,101],cosin:[83,65],nomicromip:45,smith:81,inaddr_ani:5,dimens:[83,38],unnorm:83,unreview:40,r_amdgpu_rel32:38,preserveal:83,casual:40,heartble:39,kistanova:146,nano:38,advanc:[79,25,81,74,65,64,88,101,28,131,91,40,125,90,16,147,83,39,22],nand:83,fpformat:[8,149],isobjcclass:132,consecut:[44,38,1,7,122,132,91,52,142,93,83],"0x00000100":132,signextimm:102,essenc:40,hierarch:[46,122,144],max_flat_workgroup_s:38,endfunct:90,getanalysisusag:[91,57],errorlist:101,modular:[81,57,127,68,91,42],minor:[102,38,87,26,81,114,76,40,15,134,148,9],excess:[95,39,92],mclabel:102,strong:[7,121,51,40,62,87,83],modifi:[46,102,48,49,115,104,81,82,5,83,84,9,55,120,11,129,121,122,13,105,90,19,20,65,88,67,28,30,132,33,91,37,74,138,38,101,39,57,51,40,139,42,43],ignor:[109,1,87,113,125,53,83,9,54,57,7,132,59,105,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,133,72,37,38,39,102,40,144,42,43,148],trunc:[83,1],cve:39,divisor:[14,83],ahead:[25,75,37,27,125,26,81,91,104,40,15,9,134,139,21,22],dform_1:102,xstep:[18,32],giselaccessor:68,noimplicitfloat:[83,144],amount:[46,102,111,48,52,81,83,8,55,63,121,87,16,20,21,88,27,28,127,30,91,92,134,95,38,101,39,75,103,118,34,106,139],samplepgo:3,"_underflow":38,module_code_datalayout:144,sphinx_warnings_as_error:74,n1757:81,ask:[0,111,47,48,26,114,104,63,54,55,57,132,121,14,15,62,87,17,19,101,22,25,129,88,125,124,31,33,91,134,37,40,44,149],"_sdwa":38,famili:[111,38,83,26,132,15,48,101],sequencetrait:110,dangl:[17,101],abs8:35,aggress:[109,37,73,1,88,45,57,31,132,14,81,46,17,102,83,125,22],is64bitmod:65,isimmedi:65,tonearest:83,zorg:146,massag:81,formul:4,asm:[11,139,102,92,144,95,137,83],auxiliarydata:140,taken:[46,47,48,26,115,3,4,83,8,120,57,122,15,62,87,101,65,89,28,139,102,142],zork:149,vec:[101,83],turbo:97,s_wqm_b64:38,cbtw:102,valuetyp:[65,55,102,8,38],grid_siz:38,statepoint:[88,48,83],axpi:14,regoffset:43,oblivi:93,x01:140,targetcallingconv:65,"0b000111":65,x00:140,x86instrmmx:65,histori:[134,37,40,117,138],ninf:83,"0x40054d":94,indirectbr:83,reindent:81,addrspacecast:83,templat:[46,81,87,100,4,5,83,61,54,65,57,8,14,101,129,28,29,91,34,45,110,147,44,149],fiddl:[101,147,12],unreli:[39,57],partner:101,parsabl:[48,141],phrase:[81,90],uncheck:101,anoth:[46,110,111,48,26,50,115,104,81,117,82,4,7,8,9,79,55,102,11,83,132,121,12,60,61,86,105,15,90,87,16,17,18,19,101,125,22,24,25,127,65,88,68,28,29,30,31,32,33,91,35,93,97,120,37,73,74,38,100,139,39,57,51,106,118,40,84,144,42,147,108,134,149],disclaim:[134,90],llvm_enable_rtti:74,snippet:[88,40,101],sht_strtab:38,reject:[121,83,28,26,114,15,16,17,18,19,7,23],threat:[0,111],rude:139,personlist:110,embrac:40,secondlastopc:65,enable_sgpr_workgroup_id:38,furyx:38,unlink:[37,101],retcc_x86common:65,logerrorp:[24,25,125,29,30,31,32,33],"0x00003500":132,stabil:[40,134],lifetim:[118,88,83,102,60,132,91,40,62,105,63,101],machinepassregistri:91,definingaccess:115,inline:[83,132],egg:49,help:[110,0,111,47,48,49,26,50,80,114,115,52,81,53,4,83,8,9,54,10,119,57,7,121,84,86,14,105,15,62,87,134,20,21,41,24,25,126,2,66,88,27,28,127,55,132,91,146,92,93,70,95,71,36,112,37,74,99,138,100,101,39,75,51,141,40,96,145,42,107,43,137,108,149],memoryus:115,mbbi:102,soon:[47,39,31,91,40,125,17,108,61,22],mrmdestreg:[8,65],ffp:14,held:[40,83,138,93],ffi:[121,74],hierarchi:[37,55,2,129,54,101,29,142,83,75],xdemangl:100,ffc:102,foo1:[77,108],foo2:[77,108],paramet:[46,102,48,2,81,3,83,8,85,11,14,90,87,101,23,65,130,88,28,29,91,34,70,74,139,39,110,105,144],sanitizerlist:84,obviou:[46,81,134,87,26,113,83,57,121,15,16,18,20,125,30,132,32,34,93,102,51,40,106],overhead:[88,30,121,68,122,82,134,16,83,63,101],"0x7ffff7ed404c":123,addregbankcoverag:68,eatomtypecuoffset:132,tok_els:[24,25,31,32,33],wasincrementallylink:148,perserv:83,mergebb:[24,25,31,32,33],systemz:[37,102,83,136,89],finer:[13,68,57],cee:101,dexonsmith:132,sentenc:81,foof:14,"__xray_set_log_impl":118,wideaddr:83,ninja:[37,74,39,12,50,134,131,84],libllvm:[76,37,74],stopper:47,addenda:136,globalvalu:[101,68],iff:83,scalarevolut:[46,130,57],fulli:[46,81,1,48,26,104,83,61,9,8,14,15,90,18,19,22,130,125,68,132,32,33,95,72,37,74,45,102,144,131],radare2:39,dir2:39,dir1:39,unknownvalu:83,heavi:[48,101,61],llvm_build_tool:74,longjmp:[83,26,15,139],beyond:[137,38,130,101,102,115,62,139,43,147,83,8],todo:[46,55,47,68,102,12,91,34,124],ific:28,isunaryop:[24,25,32,33],ppcinstrinfo:55,safeti:[109,0,45,26,118,15,62,83],robert:14,publish:[47,14,81,101,117],debuglevel:28,astnod:34,aminicheri:134,mytarget:39,labf:28,ast:[64,26,5,6,63,9,14,15,16,17,18,19,21,22,23,25,27,125,29,30,31,32,33,34,73],dw_tag_volatile_typ:[83,132],mystruct:130,pub:132,mips64:[118,45],reason:[109,81,0,48,90,115,3,125,4,83,9,55,57,63,132,12,86,105,68,62,87,16,17,19,101,21,22,23,25,129,130,88,27,28,29,30,31,33,91,34,37,74,139,39,102,103,51,40,42,147,149],base:[0,1,2,3,4,5,6,63,8,9,11,12,13,14,87,17,18,19,20,22,23,24,25,125,29,30,31,32,33,34,35,37,38,39,40,44,45,46,47,48,49,50,52,53,54,57,60,61,41,79,65,66,68,71,73,74,75,118,110,82,83,85,86,90,88,89,91,16,92,96,100,101,102,105,81,111,114,115,120,121,122,28,129,130,132,134,138,139,141,144,131,149],put:[109,46,102,111,87,26,114,81,83,79,57,7,132,123,86,15,27,17,19,20,21,24,25,88,30,28,68,31,33,91,134,96,97,37,138,38,101,110,51,139,147],asi:65,targetopt:24,intermodular:[54,108],wglobal:81,bash:[4,96,147],basi:[38,115,88,27,28,53,32,13,96,45,134,48,18,83,21,101],n2439:81,launch:[14,63,11],bitconvert:93,clangattrparsedattrkind:34,struct_anon:144,speculat:[45,83],warpsiz:11,undergo:[46,83],driven:[46,102,65,57,28,26,30,33,86,105,15,16,19,7,21],assign:[46,102,87,52,3,82,83,11,121,13,19,101,21,23,24,25,65,130,27,28,29,68,33,72,73,38,139,110,51,141,40,144,44,149],myawesomeproject:83,singleton:9,dfpreg:65,ultrasparc3:65,islazi:65,s_add_u32:38,isregist:102,placehold:[139,96],add_dep:90,uninterest:[27,21],live_end:88,module_block:144,implementor:[16,17,30,8,31],miss:[81,1,83,49,132,12,51,32,33,77,62,48,18,19,20,125,22,101],enable_sgpr_dispatch_id:38,st6:8,st4:8,st5:8,nodetail:53,transcendent:14,st0:[8,65,149],st1:[102,93,8,65],st2:8,st3:8,scheme:[63,6,65,88,48,131,70,33,81,53,19,83,9,101],disagr:[68,111],reg1025:102,schema:[110,2,140,132,66],adher:[111,40,124,4,101,8],formattedfil:101,xxxgencodeemitt:65,tfe:38,make_error:101,getter:[101,34,83,132],bidirect:101,newabbrevlen:144,sign:[108,102,136,138,65,130,89,28,26,68,40,35,62,144,111,15,81,149,83,39,101],adc32ri8:8,std:[81,1,87,52,5,6,63,61,9,120,11,129,121,84,14,68,101,125,24,25,127,65,27,28,29,30,31,32,33,139,110],grep:[24,37,74,28,102,50,86,52,134,7,49],ffmpeg:39,stl:[37,81,46,39,110,101,121],stm:83,sparsebitvector:101,do_something_with_t:109,rootmetadata:88,store:[109,46,102,134,48,49,122,115,52,125,83,89,85,120,11,7,121,60,142,62,87,19,101,21,22,24,25,65,130,88,27,28,68,132,33,93,70,94,96,72,37,73,74,38,100,139,39,57,103,51,148,105,106,41,144,45,79],fpform:8,consumpt:[91,39,102],aliaseeti:83,toward:[54,74,38,101,40,83,72],initi:[46,110,0,87,2,52,81,53,5,6,83,61,9,85,55,102,11,129,63,121,122,16,17,18,19,101,23,24,25,65,88,68,28,29,30,31,33,91,34,134,95,72,37,74,138,38,139,39,57,103,118,105,144,149,44,45,79],grei:47,randomli:[118,58],tailcallelim:46,gofmt:81,dw_op_swap:83,first_wav:38,sectioncontrsubstreamvers:148,"null":[109,46,81,48,83,9,11,132,13,62,87,17,101,24,25,65,130,88,89,125,29,30,31,32,33,91,92,95,38,139,45,110,57,105,106,144,148],dllvm_target_arch:12,attrimpl:34,imagin:[87,68],mips32:51,unintend:46,bz2:37,lib:[87,80,104,53,4,5,6,63,61,9,54,55,132,12,123,14,133,101,41,24,25,126,65,88,89,28,29,30,31,32,33,91,34,71,37,74,38,39,102,52,77,96],lic:46,ourfunctionpass:101,undeclar:[29,83,23],unintent:40,useless:[26,31,132,15,93,17],numfunct:[109,106],clangdeclnod:34,mixtur:149,setjmp:[83,26,15,139],c_ctor_bas:7,maco:[13,37,14,121,101],alpha:[45,83,65],mach:[94,136,83,132,144],tonga:38,isbarri:[8,149],changebyt:39,appertur:38,clear:[81,48,83,7,60,16,17,18,19,101,22,23,24,25,29,130,88,30,125,127,67,31,32,33,134,40,42,148],implicitdef:102,clean:[46,75,138,37,145,11,114,91,40,108,139,102,101,9],latest:[37,74,138,47,45,104,96,7],v4f64:83,test1:[86,48,147],"__clang__":14,clangattrparsedattrlist:34,unsimm:102,v16:11,v15:83,instrins:[83,132],i32imm:[65,149],"3x4":83,image_debug_type_except:148,uncov:[39,74,45],get_instrinfo_named_op:65,test5:7,operandti:102,paus:[88,61,134,57],coerc:87,pretti:[46,87,49,115,4,16,17,18,19,101,21,22,23,130,27,125,29,30,31,32,33,91,70,94,97,39,43,147,44,149],setnam:[24,25,29,30,31,32,33,101],less:[46,81,134,47,48,26,50,122,100,125,83,8,79,120,57,132,121,60,86,15,62,87,16,17,18,19,101,21,22,23,24,25,2,88,27,28,29,30,31,32,33,93,97,37,38,39,102,40,144,147],lastopc:65,lattnerrevnum:134,createfsub:[24,25,29,30,31,32,33],suspect:127,darwin:[109,25,102,106,94,83],ymm:83,defaultdest:83,dinod:25,image_debug_directori:113,parenexpr:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],instrprof_increment_step:83,has_asmpars:42,kind:[109,46,81,0,111,87,115,3,53,83,8,9,79,55,120,121,92,84,142,18,19,101,24,25,129,88,89,28,68,132,32,33,34,70,73,38,139,39,102,51,40,106,144,42,147,108,148],radamsa:39,nativ:[110,102,49,26,104,5,6,83,61,9,55,120,11,63,132,121,12,15,62,90,16,17,18,19,20,23,24,25,126,65,130,29,30,31,32,33,92,134,96,37,74,101,45,75,51,77,139,106,144,145,42,108],same_cont:35,"133700e":[29,23],externalfnconst:46,setdata:81,rejit:16,memmov:83,whenev:[115,25,145,81,57,83,28,90,131,123,86,82,106,27,42,7,61,101],image_scn_lnk_oth:140,dw_macinfo_start_fil:83,kawahito:102,userspac:139,remov:[46,102,48,26,114,115,81,4,83,61,9,86,10,120,11,129,7,132,121,13,105,15,62,87,16,17,20,63,24,25,127,65,139,68,28,29,30,31,32,33,91,92,70,96,112,37,73,74,100,101,39,57,118,76,40,144,89,108,45],ctaid:11,blockscalartrait:110,seventeen:89,isxnacken:38,compute_pgm_rsrc1_sgpr:38,xword:65,myblock:89,v_sin_f32:38,close:[46,81,47,114,83,54,130,101,22,23,66,125,29,91,134,37,73,138,39,102,105,45],"0x0b17c0de":144,whatsoev:83,dwarf:[79,25,73,38,65,88,101,45,102,132,80,123,108,15,107,106,139,83],libcmt:104,particip:[38,138,83,86,40,101,111],parse_unari:[18,19],dynamicsharedpoint:38,pifft:49,won:[25,102,130,57,47,30,49,29,12,132,86,14,40,134,70,16,81,147,83,9],isprefix:28,srcloc:83,emitint32:88,end_block:144,oversimplifi:101,str:[24,25,110,11,63,125,29,30,31,32,33,101,140,93,5,6,83,61,9,79],memalign:52,enable_exception_ieee_754_fp:38,isol:[101,64,6,74,149,83,102,33,86,81,96,134,48,5,19,20,72,9,97],lowercas:[16,30,65],numel:83,distinguish:[79,144,88,48,26,68,105,15,93,4,83,101],both:[46,102,0,111,1,48,26,81,114,90,100,3,131,106,113,7,8,85,68,136,120,57,129,83,132,121,12,122,133,61,86,14,15,62,87,16,17,19,20,125,22,23,25,2,65,130,88,67,28,29,30,31,33,91,34,134,96,37,74,38,101,39,110,103,51,141,76,40,84,144,139,149,44,79],clang_attr_identifier_arg_list:34,delimit:[37,139,90,43,83,44],fancyaa:91,lako:81,inalloca:[54,105,83,60,144],debug_typ:101,sty:8,forgotten:24,getnumvirtreg:102,prng:39,ecma:148,lexidentifi:[55,84],block_par:[17,18,19],"__objc":83,jeff:4,byval:[102,83,144],format:[109,46,102,134,48,49,2,113,149,100,104,81,53,82,123,83,8,117,85,54,55,136,120,11,59,92,84,89,101,121,25,65,66,88,68,28,127,67,132,148,69,34,35,93,95,71,36,37,138,38,139,39,110,141,118,40,106,144,42,147,45,79],strtab_blob:144,blockfrequencyinfo:[54,72],header:[109,46,81,49,113,51,52,4,63,84,9,85,54,120,129,83,132,121,12,14,62,17,18,19,101,41,24,25,126,65,28,31,32,33,133,34,94,71,37,74,38,140,104,106,96,144,42,148,79],instrsch:101,hasdelayslot:8,linux:[81,50,83,54,136,12,123,86,14,24,29,30,96,97,37,74,139,39,102,51,118,77,45],isrestrict:38,bridg:[68,134],forgiv:87,llvm_enable_thread:74,addfunctionast:[5,6],stamp:[113,120],territori:37,empti:[81,48,2,52,83,86,90,87,17,101,125,22,23,25,65,88,89,28,29,31,132,94,74,38,139,39,110,40,44,149],destructor:[81,83,121,91,14,105,139,101],newcom:[124,19,8,33],sslverifi:37,newinst:101,as_float:[16,17,18,19],threaten:111,v8p0p0f32:83,adc:[46,73,101,38,57],xray_log_fin:118,x86dagtodagisel:84,lattner:[26,15,134],imag:[85,38,102,113,32,36,35,18,83,96],exempt:81,imac:1,"_sourc":38,modrefv:149,unpatch:[118,114],imap:37,pact:122,look:[46,110,139,142,48,2,114,90,115,104,81,117,5,6,7,61,9,79,54,63,102,11,129,83,132,84,13,14,105,15,62,87,16,17,18,19,101,125,22,23,24,25,123,65,130,88,67,28,29,30,31,32,33,91,34,86,134,94,37,73,74,138,108,57,103,51,118,77,40,106,41,144,55,42,147,44,148,149],fptosi:83,flat_store_dword:38,canadian:37,ramif:130,"while":[109,46,81,0,111,1,47,48,26,113,131,115,52,125,127,82,4,5,7,8,117,54,68,57,83,132,12,60,123,13,105,15,90,87,17,19,20,21,22,24,25,2,130,27,28,29,30,31,32,33,91,86,134,96,37,73,67,138,38,101,39,102,118,76,40,106,144,139,149,108,148,124],smart:[81,83],shift:[46,55,73,38,87,45,102,8,72,62,144,83,28],fleet:96,loos:8,loop:[46,81,1,48,26,90,83,54,57,122,13,14,15,62,87,16,17,18,19,101,21,22,23,24,25,65,88,27,125,29,30,31,32,33,91,72,37,73,38,39,102,51,105,45,149],pack:[29,47,102,114,105,62,144,83,23],malloc:[54,88,39,26,91,52,105,15,101],pragmat:45,readi:[87,114,125,9,85,132,105,16,17,18,19,21,22,23,24,25,27,28,29,30,31,32,33,91,77,40],readm:[86,37,40,147],jpg:39,"__gcmap_":88,threadlocalquarantinesizekb:52,hideaki:102,"0x00001203":132,quadrat:[115,92,101,102],targetlow:[55,65,102,68,20,84],jitsymbolresolv:9,fedora:96,grant:[87,40,9],tokinteg:44,belong:[142,87,28,33,52,105,83,139,101],llvm_site_config:[86,104],indvar:[91,46,83,101],flat_stor:38,octal:[28,36,120],curloc:25,sanitizer_termin:52,goingn:101,conflict:[37,38,149,101,102,86,115,40,134,16,17,18,19,83,8,23],"0b10":149,goodwil:40,lie:[48,28],optim:[1,26,3,5,6,7,61,9,11,13,14,15,16,17,18,19,20,21,23,24,25,27,28,29,30,31,32,33,37,38,145,45,40,42,46,48,49,104,54,55,57,63,60,62,41,64,65,68,73,74,75,76,77,80,82,83,79,86,87,88,127,91,92,93,95,100,101,102,51,105,106,108,109,81,115,121,122,129,130,132,139,141,142,144,131,146],quad_perm:38,symbytes:[69,148],piec:[102,114,104,81,83,132,86,62,90,17,18,19,20,21,22,23,25,130,27,125,29,31,32,33,37,39,75,40,144,42,149],va_copi:83,temporari:[46,73,0,110,101,49,2,68,86,81,134,102,83,121],user:[46,110,111,1,48,64,26,131,114,115,52,81,125,117,53,83,8,9,79,54,68,136,102,49,11,145,132,137,92,61,86,105,15,90,87,16,17,18,19,20,21,22,23,24,25,2,65,88,27,28,29,30,31,32,33,91,34,134,72,120,37,73,74,138,38,101,39,57,51,76,40,139,146,43,147,108,45,149],function_block:144,"3gb":104,vreg:[102,68],faultingstor:109,numarg:[25,106],sha1:39,"0x16677e0":123,older:[37,65,38,88,28,50,51,40,62,43],mctargetstream:102,cmake_toolchain_fil:[37,74],pointtoconstantmemori:57,without:[46,81,0,134,1,48,49,115,125,4,7,8,117,79,86,120,83,132,121,123,13,14,68,62,87,16,17,18,19,20,21,22,24,25,126,65,130,88,27,28,90,30,31,32,33,91,34,93,70,95,139,72,37,73,74,138,100,101,39,102,51,141,76,77,40,106,41,144,145,43,147,108,148],v_min_u32:38,reclaim:[73,83],use_:101,five:[139,28,102,101,61],docker:96,basiccg:46,weakest:[102,51],predetermin:57,violat:[81,0,111,38,130,88,101,31,40,17,83],safestack:[83,144],cout:[24,110,81,121,11],allocator_may_return_nul:52,isunord:51,emissionkind:[83,132],wavefrontprivatesegmentoffsetsgpr:38,afre:60,mubuf:38,elect:40,modulesethandlet:[63,61,9],dw_ate_unsigned_char:83,lit:[74,49,2,132,80,86,104,134,131,41],xray_naive_log:118,dictionary_fil:39,recurs:[101,46,29,88,27,125,2,31,32,33,34,15,134,48,17,18,19,83,21,22,23],shortcut:[27,21,22],supersparc:65,"__apple_objc":132,unknownptr:83,gettargettripl:[5,6,63],e_entri:38,coheren:38,gnueabihf:12,march:[24,75,12,122,132,92,95,7],arm_aapcscc:144,mcsectionelf:102,xterm:81,game:40,optimizationlist:28,atomic_cmpxchg:51,characterist:[55,65,83,102,140,148,63,61,101],isproto:144,pcmarker:83,outright:130,signal:[109,38,139,28,51,123,83,39],resolv:[0,111,2,5,6,63,61,9,85,83,8,14,90,16,17,101,23,29,30,31,91,38,102,40,108],"______________________________________":101,"32bit":24,byproduct:68,popular:[37,57,102,50,90,96,83],dcmake_c_flags_releas:84,bpf_alu:102,sketch:105,parameterless:89,regionsforfile1:79,regionsforfile0:79,cttz:83,some:[0,1,2,3,4,5,6,7,8,9,12,86,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,42,44,45,46,47,48,49,50,104,54,55,57,63,60,61,62,65,68,70,73,74,110,76,75,82,83,84,90,88,89,91,16,92,93,96,97,100,101,102,103,51,105,106,108,109,81,111,114,115,117,118,120,121,124,125,129,130,132,134,138,139,36,144,131,147,148,149],urgent:40,unused_pad:38,"__llvm_faultmap":109,mnemonicalia:102,shlib:37,mem_address:102,uselistorder_bb:83,addpreserv:[91,57],"__sync_fetch_and_umin_n":51,printinlineasm:65,pathsep:[86,2],torvaldrevnum:134,n2930:81,slash:[83,120],castinst:101,bcanalyz:[144,80,53],rapaport:122,cgi:39,originput:28,cgo:[14,122],jit_serv:5,sourcefilecount:148,stem:[14,101],step:[46,110,64,47,87,49,114,104,131,82,5,6,83,84,55,102,11,129,12,122,14,142,17,18,19,20,24,25,65,130,88,68,29,30,31,32,33,91,34,134,96,37,74,38,101,39,57,105,139,146,108],investig:[49,26,68,15,96,9],copyvalu:57,curtok:[24,25,125,29,30,31,32,33],machinebasicblock:[102,101,65],subtract:[79,45,102,83,55],"_ztid":83,faith:139,blocksizei:11,idx:[24,25,81,130,89,29,30,31,32,33,83,84],nnnnnn:102,inaccessiblememonli:[83,144],shini:91,blocksizez:11,f31:[83,65],f32:[38,65,11,102,68,14,83],shf_write:38,block:[46,110,1,47,87,81,114,115,3,117,53,5,6,83,89,54,102,11,7,132,59,60,122,105,68,62,90,16,17,18,19,101,22,23,24,25,142,65,66,88,67,125,29,30,31,32,33,91,69,34,95,72,73,100,139,39,57,103,141,40,106,144,147,45,149],nvvm:[83,11],compactli:[105,149],gcroot:[88,48,83,106],aq2:83,within:[46,110,0,111,48,49,2,52,81,83,9,102,11,7,132,13,14,142,68,117,87,16,17,18,19,20,41,24,25,127,129,130,88,27,90,30,31,32,33,91,93,37,73,67,38,101,57,148,105,106,144,139,134,149],loadsdnod:101,openformattedfil:101,proj_install_root:41,ensur:[109,46,81,111,1,48,114,3,53,83,84,57,7,121,86,62,19,101,23,25,126,65,88,28,127,132,32,33,91,35,134,37,74,38,139,102,51,40,106,144],llvm_package_vers:74,skipfunct:13,scaling_governor:97,"0x3039":101,customfre:105,cmp32ri8:102,loopunswith:62,use_count:39,pwd:[37,52,12],vfprintf:83,newer:[37,104,123,14,40,51],cmpxchg:[83,51],flagsfeatureb:110,aql:38,flagsfeaturea:110,specialti:101,g_fconstant:68,info:[46,102,0,1,49,26,113,83,117,12,123,13,15,89,16,17,18,19,101,21,25,2,65,88,27,68,132,32,33,91,69,34,134,94,37,73,74,38,139,39,110,40,144,137,108,148,149],image_debug_type_omap_to_src:148,fde:[102,73],"0xc3":149,"__bitcod":144,hipe:[102,83],clangattrpchread:34,similar:[46,102,1,87,50,52,81,4,83,61,89,120,11,7,122,84,86,14,105,68,90,16,17,18,101,21,41,23,25,126,65,130,88,27,28,29,30,31,32,91,34,35,134,37,139,39,110,51,118,40,144,148,149],createdefaultmypass:91,obviat:41,doesn:[110,111,124,48,26,81,114,115,3,125,4,7,61,89,79,68,102,57,83,121,84,86,14,15,62,90,16,17,18,19,20,21,22,23,24,25,2,129,130,88,27,28,29,30,31,32,33,91,93,96,120,101,39,75,51,77,40,106,139,134,149],repres:[109,46,110,134,48,2,81,115,3,117,5,6,83,8,9,79,55,102,11,63,132,121,122,61,142,68,62,90,16,17,18,19,101,125,22,23,24,25,65,130,88,67,28,29,30,31,32,33,34,93,70,72,120,38,139,57,51,118,105,144,89,44,148,149],arg_iter:101,incomplet:[81,101,121,61,96,6,63,5],nextvari:[31,32],installeddir:96,minsiz:[83,144],titl:[40,138],speccpu2006:49,nan:[95,92,83,132,38],compileondemandlay:63,proxi:102,msse4:52,"0x00007fff":102,filenotfound:101,draw:134,dosometh:81,resign:40,xtemp:51,dw_op_xderef:83,converttoerrorcod:101,eval:[46,57],parseenvironmentopt:28,canfoldasload:8,rnnnn:40,svn:[37,74,138,1,54,39,114,76,104,40,86,62,134,106,96,49,23],typeid:[87,55,142,139],infrequ:91,svg:[74,84],sve:45,addmbb:102,dagarg:44,devminor:11,depth:[46,87,28,102,31,61,77,17,83,8],loadobject:85,unconnect:130,intervalmap:101,parentti:83,mystringtyp:110,msbuild:[104,74],thetargetmachin:24,getkind:[34,129],deletesizemismatch:52,image_scn_mem_preload:140,compact:[25,102,88,139,26,105,15,53,106,101],friendli:[54,81,111,39,118,40,134,124,43,125,22],stackprotectorcheck:83,breakcriticaledg:91,aris:[101,40,83,130],instr_iter:102,yoyodyn:40,findstub:[5,6],webhook:134,wave:38,then_bb:[17,18,19],roots_siz:88,postcal:88,runnabl:37,nonatom:132,llvmdisasminstruct:43,weakvh:[45,101],gender:111,button:138,llvm_enable_doxygen:[37,74],use_llvm_target:[16,17,18,19],monorepo:[37,134],dw_tag_const_typ:[83,132],ccifnest:65,amdgpu_hsa_kernel:38,lazier:[61,9],relink:[126,20],vgpr:[83,38],v70:148,calleef:[24,25,29,30,31,32,33],jump:[25,102,65,46,63,28,75,31,142,105,35,144,17,83,41],imper:[81,88,31,33,17,19],download:[74,65,47,45,12,114,86,77,104,146,96,101],click:[104,138],vgpg:38,hasoneus:81,poke:144,"64k":148,image_scn_lnk_nreloc_ovfl:140,espresso:49,sgprn:38,cell:65,vega:38,s_load_dwordx16:38,numstream:67,registerschedul:91,rs880:38,ramsei:102,init_v:19,legalizeact:65,row_half_mirror:38,becom:[46,81,1,50,83,61,129,8,86,14,62,90,17,19,101,125,22,65,130,28,68,31,33,91,93,38,102,40,106],accessor:[91,125,102,132],"_source_dir":74,startexpr:[24,25,31,32,33,19],convert:[109,46,102,87,26,80,100,83,84,55,11,15,62,112,16,17,18,19,101,21,23,24,25,2,65,130,27,28,29,30,31,32,33,91,34,93,70,94,38,45,110,140,51,118,44,149],northern:38,vacat:0,value_kind:83,sgpr1:38,vbr:[120,144,53],solaris2:91,findings_dir:39,pdbstreamhead:113,chang:[46,110,111,1,47,48,49,2,81,114,104,3,5,6,7,61,85,54,55,119,102,11,129,83,132,59,60,13,14,105,62,87,16,17,18,19,20,121,63,23,24,25,126,113,65,66,88,68,28,29,30,31,32,33,91,146,93,70,130,37,98,73,74,138,38,101,45,57,76,40,106,144,145,42,108,134,149],hexagon:[37,136,34,83,102],epilogu:[88,83,65],chanc:[3,85,27,110,21,118,40,62,105,83,8],testcase_dir:39,selectinst:81,n3272:81,although:[81,48,2,113,104,83,55,86,14,90,101,23,129,66,88,89,28,32,91,37,39,102,51,40,144,42,147,148],claim:51,revok:40,realloc:57,build_dir:134,dyn_cast:[54,81,65,129,34,101],wit:[0,38],llvmtyperef:55,wip:38,dinamespac:83,externallyiniti:83,getrawsubclassoptionaldata:87,implic:[102,40,148],recordid:144,fibi:[19,33],queu:38,simpler:[46,55,101,102,132,32,33,18,19,83,9],remaind:[79,37,55,65,102,86,42,83],llvm_enable_warn:74,"0x00ff0000":102,gc_transition_start:48,numelt:144,mismatch:[24,25,121,141,29,30,31,32,33,52,93,16,17,18,19,83,43,23],enable_sgpr_flat_scratch:38,landingpad:[46,105,83,139],debugloc:[25,102],nvptx:[37,136,54,102,11,83],machineverifi:68,"8600p":38,"_segment_wave_offset":38,callvoidvoid:5,retriev:[85,120,138,11,48,28,110,91,106,139,101,39],image_scn_gprel:140,perceiv:[26,15],memory_order_acq_rel:[83,51],linearscan:[91,95,102],jitsymbol:[5,6,63,61,9],meet:[37,0,111,38,87,102,122,91,40,134],machine_kind:38,control:[109,46,81,1,142,48,64,26,122,104,125,83,84,9,85,54,55,68,11,132,59,60,86,14,105,15,62,90,16,17,18,19,20,21,22,23,24,25,2,65,27,28,29,30,31,32,33,91,92,134,95,96,37,73,74,38,101,39,102,103,51,118,40,106,139,108,45],malform:[46,14,20,39,101],c13:[69,148],sudo:[37,49,50],typeprint:55,calcul:[91,46,73,65,38,57,101,49,102,31,132,86,17,130,83,72],llvm_use_intel_jitev:74,myfooflag:110,int_get_dynamic_area_offset:83,tarbal:[54,12,114],emitepilogu:65,clang_attr_arg_context_list:34,egrep:37,prolang:49,narr:87,addpreemitpass:65,tag_base_typ:132,templatearglist:44,circular:118,lto_module_is_object_fil:108,live_s:88,farm:2,threadgroup_size_in_wav:38,space:[102,0,111,48,26,113,100,104,81,82,4,83,85,54,120,11,7,60,14,15,87,16,19,101,41,65,130,88,68,30,132,33,91,36,134,97,37,74,38,139,45,110,103,106,144,42,149],aliasanalysiscount:57,targetdata:46,"0x3feaed548f090ce":30,filterclass:82,indirectionutil:[5,6],syscal:102,image_scn_lnk_info:140,vsetq_lane_s32:93,pseudolow:34,subtyp:[139,65],primaryexpr:[125,22],r11b:8,creation:[85,65,88,101,114,105,70,83],sizabl:101,isdynamiccallstack:38,irtest:74,jne:102,onzero:83,newptr2:83,objectlay:[5,6,63,61,9],outer:[24,25,81,60,110,31,33,91,122,139,17,19,83],consensu:40,pushfl:102,perf:[131,97],vextubrx:45,foreach:[81,134,90,44,8,149],build_alloca:19,label_branch_weight:3,handl:[46,102,0,134,1,48,26,122,125,95,4,83,61,9,54,129,11,132,60,13,105,15,62,90,17,18,19,101,21,22,23,24,25,65,88,27,28,29,30,31,32,33,91,35,93,70,74,96,139,133,67,38,108,45,110,51,118,40,106,89,42,44,149],auto:[81,1,100,5,6,63,61,9,54,132,101,24,25,66,125,29,30,31,32,33,102,141,118],handi:[147,29,101,61,23],ctor:[81,83,60,121],memberlist:65,armgenregisterinfo:34,p15:11,p16:11,p17:11,front:[46,102,26,104,81,83,61,54,63,132,121,13,15,16,17,18,19,101,21,41,25,130,88,27,30,31,32,33,37,139,75,40],p19:11,csk_none:83,modr:102,somewher:[91,129,7,49,29,32,86,139,18,83,23],faultkind:109,slide:[14,101,111],ourfpm:25,mode:[47,2,50,100,52,3,83,8,54,120,7,14,19,101,24,25,126,65,28,68,33,93,97,74,99,38,39,102,141,118,40,144,45],modi:69,basicblockpass:[13,91],acquirereleas:51,unwind:[46,73,65,63,102,60,105,35,62,139,71,83],globl:[48,35,38,11],selectiondag:[46,55,65,102,68,51,34,101],map:[109,110,1,48,2,115,81,82,83,117,85,54,55,102,11,132,87,16,17,18,19,101,125,23,24,25,65,88,68,28,29,30,31,32,33,69,34,35,134,73,38,100,57,140,118,142,106,144,148,79],chunk:[46,81,144,39,102,103,132,52,93,23],exctypen:139,special:[109,46,75,134,1,87,26,115,4,83,8,89,54,102,11,12,123,86,14,15,117,90,19,101,21,24,25,2,65,130,88,27,28,68,132,33,91,93,96,37,38,139,39,57,51,110,40,106,144,42,44,148,149],image_sym_type_byt:140,s_cbranch_g_fork:38,influenc:[91,73,83,132,93],row_rol:38,discharg:62,resume1:105,resume2:105,row_ror:38,hardwar:[37,73,136,65,38,11,45,102,14,51,52,40,62,95,104,83],skipscc:13,armhf:[52,12],iostream:[24,121,81,84,11],spec95:49,lcssa:[46,73],"__cuda_ftz":11,manipul:[37,121,66,142,101,45,102,122,33,105,70,19,83],undo:93,typebuild:[55,101],rcx:[102,83,8],wineh:105,ecx:[102,35,8,149],image_scn_mem_writ:140,jacqu:14,eh_fram:139,smallstr:101,timer:97,keep:[46,81,1,87,26,115,52,125,4,7,8,54,63,68,57,83,132,121,86,14,105,15,18,19,101,21,22,23,24,25,129,27,28,29,30,31,32,33,91,134,96,102,118,40,108],counterpart:83,bpf_and:102,wrote:[24,25,55,83,130],dumpmymapdoc:110,svptr:83,float_mod:38,linkallcodegencompon:91,qualiti:[91,37,83,102,50,114,86,40,62,48,63,9],arr:[101,83,130],fmul:[102,11,29,30,16,83,23],lshr:83,checkformat:101,art:88,find_a:101,atomic_f:51,rs1:65,rs2:65,machineirbuild:68,scalartrait:110,perfectli:[81,130,7,125,102,83,121,22],mkdir:[37,74,39,84,77,134,49],wrapper:[85,46,65,87,13,14,144,90,4,101,61],second_end:83,attach:[37,81,123,138,11,142,101,132,29,30,31,32,33,105,40,146,19,83],attack:111,regionpass:91,functionpassctor:91,createparametervari:25,"final":[81,47,87,26,113,114,125,83,8,9,85,120,129,63,132,12,60,86,105,15,124,17,18,19,20,21,22,23,24,25,2,65,88,27,28,29,30,31,32,33,91,69,34,134,122,96,37,38,101,39,102,51,118,40,108,41,144,139,149,44,148,79],prone:[28,102,101,8,50],porpoda:122,my_valu:81,rsi:[102,8],deconstruct:102,methodolog:139,enqueu:38,rst:[102,34,147],not_inline_hd:14,exactli:[46,81,0,134,48,2,4,83,84,57,7,61,87,16,101,129,88,30,28,67,132,91,35,93,74,138,38,139,39,110,141,105,144,42,148,149],rsp:[48,102,103,8,106],rss:39,ehashfunctiondjb:132,bloat:81,a_ctor_bas:7,instvisitor:[55,101],"6th":83,dubiou:120,bare:[126,65,83,106,101,9],f16:[83,38],exhibit:[83,20,51],multhread:101,mergetwofunct:87,xor8rr:102,reg2:7,procnoitin:8,reg1:7,goldberg:88,lightli:[47,83],tabl:[46,102,134,1,48,64,26,80,125,53,82,83,8,9,85,54,120,57,129,132,142,15,117,87,16,17,18,19,101,49,22,23,24,25,65,66,68,28,29,30,31,32,33,133,34,93,94,71,36,37,38,139,39,110,105,144,89,108,148,149],need:[0,26,3,4,5,6,7,8,9,11,12,86,14,15,87,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,37,38,39,40,42,43,44,46,47,48,49,50,104,54,55,57,63,60,61,62,41,65,66,67,68,70,71,72,74,75,118,77,81,82,83,84,90,88,89,127,91,16,92,93,95,96,100,101,102,103,51,105,106,108,109,110,114,115,120,121,122,123,125,126,129,130,132,134,137,139,142,144,131,146,147,149],altivec:[102,73,83],border:102,ind4:83,createfunctiontyp:25,"0x08":[132,38],unexpect:[81,87,49,33,104,40,90,19,101],"0x04":132,"0x05":106,"0x06":106,"0x07":[106,38],"0x00":[79,106,120,38],"0x01":[79,8,38,132],"0x02":[79,132,38],fileit:28,unawar:[14,83],identifycudaprefer:14,llvmgold:77,detector:87,equal_rang:101,singl:[46,102,134,1,47,48,49,26,122,115,81,131,83,61,9,79,86,55,68,120,11,7,60,13,14,15,90,87,16,139,19,20,41,23,25,2,65,130,88,27,28,29,30,132,33,91,69,93,70,74,96,148,37,73,67,99,38,100,101,39,110,51,141,40,144,89,45,149],parseidentifierexpr:[24,25,125,29,30,31,32,33],ds_store:38,discop:25,discov:[102,88,39,2,31,33,105,114,17,4,19,132],rigor:102,x86_ssecal:65,deploi:[96,138],x86_fp80:[87,83,144],promoteop:55,versionsignatur:148,url:[40,134,138,147],hasrex_wprefix:8,"0xe8":149,yaml2obj:140,indx:110,brought:87,bui:50,llvm_parallel_link_job:74,unoptim:[37,92],"0x0d":106,"0x0e":106,constrain:[37,121,38,86,139,29,68,76,149,83,23],disable_assert:76,"0x0a":[106,120],"0x0b":106,"0x0c":79,cute:[26,15],verbos:[110,120,99,145,2,89,101],objc:[54,147,132],molest:83,anywai:[115,83,81,12,46],scudo_opt:52,tire:[18,81,8,32],losslessli:87,bpf_alu64:102,envp:123,function_old:144,x86_thiscal:102,ordered_append_term:38,wave_rol:38,add_to_library_group:42,llvmtypekind:55,comdat:[83,35,144],bbvector:45,q31:83,tba:38,tbb:65,tbd:[134,38],wave_ror:38,coalesc:[95,59,68,102,101],shr:81,enabl:[109,102,134,1,112,2,7,115,81,5,123,83,61,9,79,86,10,119,63,121,122,8,13,14,105,62,90,101,24,65,88,68,28,127,30,132,91,92,93,95,37,74,99,38,100,39,110,103,118,76,40,84,145,43,108,45],dpp:38,bitcodewrit:[55,101],d15:65,base2:83,she:[146,8],contain:[1,2,3,5,6,7,8,9,11,12,13,14,87,17,101,22,23,25,125,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,104,47,48,49,50,52,54,57,63,61,62,41,79,65,67,68,69,72,73,74,75,118,77,110,82,83,85,86,90,88,89,91,16,36,93,94,96,100,102,51,105,106,108,81,114,115,117,119,120,122,123,28,129,130,132,133,134,139,141,142,144,131,146,137,148,149],shapekind:129,grab:[47,114,34,17,18,19,101],image_file_local_syms_strip:140,shl:[46,81,87,83,44,149],legaci:[24,74,63,30,31,32,33,84,144,5,6,83,61,9],pni8:139,nolink:28,flip:81,vectorize_width:1,target_link_librari:74,image_scn_mem_16bit:140,danger:[7,0,83,101],mileston:87,statu:[111,48,2,100,53,7,54,10,119,120,58,59,112,134,126,66,127,92,83,94,95,71,36,74,99,138,45,141,40,106,145,146,107,137],correctli:[110,48,81,83,121,86,87,17,101,125,41,130,28,31,132,91,74,139,102,103,51,40,22],writter:28,sectvalu:28,lua:88,state:[109,46,102,134,48,114,115,52,81,5,6,83,57,105,87,101,125,25,88,89,28,68,132,91,93,96,38,138,139,39,110,51,40,106,147],cxx_flag:50,neither:[46,144,134,57,87,39,104,106,62,93,139,83,148],tent:83,vfp3:12,kei:[102,144,129,38,48,110,68,61,91,40,134,87,82,83,8,89,101],header_data_len:132,parseabl:[48,83],lowercal:84,popcnt:39,crc32:52,group:[46,81,0,87,49,26,4,83,8,79,54,120,7,122,86,15,125,22,65,28,91,34,134,71,38,102,40,144,42,148,149],enable_sgpr_dispatch_ptr:38,monitor:[83,134,57],islandingpad:89,xxxreloc:65,admin:146,handledefinit:[24,25,125,29,30,31,32,33],behaviour:[81,1,89,28,86,35,93,83],dw_tag_inherit:83,test_format:2,unglamor:40,accessty1:83,accessty2:83,outfil:58,multi_v:28,isectcoff:148,orig:83,quit:[87,26,4,63,54,55,57,83,123,14,15,62,17,101,23,130,88,29,68,31,37,102,106,147],slowli:[37,40],addition:[115,37,102,46,88,48,28,57,68,51,77,40,134,42,83,117,101],classnam:[137,148],load_acquir:45,libdir:126,ssa_copi:83,treat:[81,48,26,82,83,9,7,86,15,87,101,23,65,130,89,28,29,93,70,74,38,139,45,102,51,106,144,108,39],br_cc:68,parse_fail:101,cputyp:144,alphacompilationcallback:65,otp:83,createcal:[24,25,29,30,31,32,33,101],acq_rel:[83,51,38],replic:[110,75,122,13,134,108,149],novel:[88,101,83],dw_tag_typedef:[83,132],harder:[46,48,39,121,4,83,125,22],contextu:43,harden:[54,52],v50:148,dir_to_mount:97,print_str:[16,17,18,19,22,23],engag:40,demo:[121,28,29,114,5,9,23],rootstackoffset:88,blissfulli:[14,28],povray31:49,revis:[37,81,74,138,132,114,40,106,62,134,96,101],inf:[95,28,92,83,132],so_reuseaddr:5,welcom:[111,87,26,104,5,6,63,61,9,136,15,16,17,18,19,21,22,23,24,25,27,125,29,30,31,32,33,91,37,39,40],parti:[81,0,48,40,62,41],began:134,reloc_picrel_word:65,freeblockmapblock:67,sqrt:[110,83,1],ro_signed_pat:8,llvm_all_target:[37,65],setcategori:28,smarter:28,nightli:[54,47,49,114,86,40],http:[37,81,74,138,64,47,54,39,12,104,114,86,132,52,40,133,134,146,49,97],context:[110,0,87,81,83,8,9,11,121,86,62,16,17,18,19,101,125,22,23,25,129,130,28,33,91,34,73,138,139,57,51,146,43,44,149],hsatext:38,tokprec:[24,25,125,29,30,31,32,33],effect:[46,81,48,49,50,52,4,83,54,57,7,122,86,14,62,17,18,101,63,65,130,88,28,68,31,32,132,91,134,74,45,102,118,144,43,44],isopt:28,llvm_use_oprofil:74,global_s:101,sooner:146,appendinglinkag:101,dllvm_enable_p:12,protector:[83,132],dw_form_strp:[7,132],do_on:105,shouldexpandatomicloadinir:51,sibl:102,distanc:[64,130,101,110,52,5,6,83],memory_order_consum:51,createindirectstubsmanag:5,mistaken:[16,30],mem_not_nul:105,diflagartifici:83,aform_1:102,aform_2:102,"0x000000c9":7,xs1:136,size1:83,size2:83,"__atomic_stor":51,outstream:88,dcmake_build_typ:[37,39,96,50,84],densiti:[18,81,32],"9730p":38,warrant:[55,148],kick:[18,32],nodebuginfo:28,takelast:101,bpf_xadd:102,howto:[64,34,12,147],mcsectioncoff:102,add_gvn:[16,17,18,19],burden:[115,40,83],getopt:28,n2343:81,lbar:102,n2346:81,n2347:81,loss:[88,101,134],computearea:129,lost:[83,26,15,121,139],aliasresult:57,ldflag:[24,25,126,29,30,31,32,33,5,6,63,61,9],necessari:[102,142,48,113,114,100,52,81,4,83,117,85,55,120,57,7,12,123,105,62,101,24,25,65,88,89,28,29,68,91,93,70,72,37,73,74,138,38,139,39,75,51,40,106,147,108,79],fp5:[8,149],lose:[26,68,132,91,15,134],async:105,profraw:[79,100,131],page:[109,81,1,48,80,114,104,117,85,54,136,121,86,101,88,28,29,67,132,35,37,98,74,138,45,40,131],"9830p":38,didn:[101,102,87,45,29,132,33,91,14,81,62,19,83,22,23],isnul:81,"04e":83,enable_sgpr_workgroup_info:38,notfp:149,"__cxa_allocate_except":139,vset_lan:93,enable_sgpr_priv:38,home:[37,49,50,123,86,62,101],librari:[46,75,1,26,80,51,100,52,81,125,53,4,83,84,9,54,68,136,120,11,145,132,121,12,123,13,96,14,15,62,90,18,101,21,22,23,24,25,126,127,65,66,88,27,28,29,30,31,32,33,133,69,86,95,71,118,97,37,130,74,99,39,57,104,110,76,40,41,144,42,137,108,45],win32:[37,102,113,86,104,4],makelight:81,broad:[88,27,28,30,40,16,101,21],trickrevnum:134,createexpress:25,overlap:[102,57,1,60,91,106,90,83],outgo:[83,72],exitonerror:[5,101],overlai:[96,148],combinedalloc:52,asmstr:[8,65,149],myfunct:11,encourag:[37,75,111,46,26,81,40,15,134,101],workgroup:38,journal:122,usag:[46,81,1,48,50,52,83,8,89,79,54,120,11,145,60,13,87,20,21,27,28,68,91,34,86,96,74,38,101,39,102,141,77,105,106,42,148],codeprop:38,llvmcontextimpl:84,nutshel:101,offset:[48,26,113,52,83,8,120,7,86,105,15,87,101,65,130,88,67,132,38,102,103,142,106,144,148],zeroormor:28,sk_squar:129,image_file_32bit_machin:140,testsuit:[2,7],bcreader:126,freedom:[101,83],viewvc:[54,134],bodyitem:44,metadata_attach:144,nt_amd_amdhsa_metadata:38,cocoa:83,cmake_cxx_flag:74,caml:[64,21,22],attrtemplateinstanti:34,pointless:[48,139,115],v16p0f32:83,libomp:[47,37],gcov_prefix:100,image_file_removable_run_from_swap:140,"_cuda_ftz":11,printoperand:65,inner:[54,81,145,110,60,122,139,90,83,101],global_iter:101,interleave_count:1,feat_segstack:102,eao:101,movsx32rm16:102,addpassestoemitfil:[24,91],liveintervalanalysi:102,eax:[65,83,102,35,89,7,8,149],gain:[87,28,40,0],spuriou:[81,83],mistyp:81,highest:[24,25,125,29,30,31,32,33,93,16,17,18,19,83,22,23],eat:[24,25,27,28,29,30,31,32,33,125,16,17,18,19,21,22,23],liblto:[77,108],dmb:51,displac:[102,83],displai:[79,46,102,65,49,71,27,28,2,81,141,146,100,40,90,53,129,43,36,21,111],sectiondata:140,asynchron:[105,83,51,38],w30:83,cruel:147,"0xffbef174":91,limit:[46,102,0,111,48,115,81,83,54,57,145,130,13,142,62,16,17,18,20,25,66,88,89,28,30,31,32,132,91,35,134,70,37,38,101,39,110,103,51,40,106,148],indefinit:39,llvm_enable_assert:[101,74],add_llvm_loadable_modul:[91,74],bpf_op:102,xray_logfile_bas:118,atyp:130,isconvertibletothreeaddress:8,reciproc:83,evalu:[46,81,87,26,122,5,83,79,55,11,60,15,90,16,17,18,19,22,23,24,25,65,130,88,125,29,30,31,32,33,74,39,57],lastchar:[24,25,27,125,29,30,31,32,33],twist:9,intregsregclassid:65,fourinarow:49,rule:[81,111,47,87,49,114,52,4,83,8,119,7,130,12,60,86,14,105,124,17,101,41,23,129,66,29,30,31,132,91,38,102,51,40,149],quot:[74,38,89,28,110,132,86,42,83,39,149],eor:83,dloc:7,pr26161:68,arctan:110,hash_set:101,getjmp_buftyp:81,futur:[81,1,47,48,83,60,123,68,89,17,19,101,21,23,130,88,27,29,30,31,132,91,134,70,37,74,38,39,102,118,40,106,144],rememb:[81,111,48,49,50,104,83,9,121,12,17,19,101,125,22,24,25,130,28,31,33,91,37,39,40],parse_id:[16,17,18,19,22,23],iplist:101,tmp2:[19,33],stat:[120,57,101,49,127,91,92,95,4,20,97],addrequir:91,cmake_build_typ:[37,74,90],ctlz:83,dw_tag:132,stab:132,same_s:35,dyld:85,stai:[54,87,110,40,134,105,108],sphinx:[37,147,74,54],object_error:101,coordin:[88,48,110,83],"_ztv3foo":7,indirectli:[81,38,2,51,83,149],bcc:65,portion:[79,37,102,65,46,139,83,28,90,30,115,40,145,16,43,20,89],image_file_machine_sh3dsp:140,perhap:[81,57,88,87,68,113,83,101],"7ykb2k5f":133,callingconv:[34,144,65],getpointertofunct:[85,25,101],tcpchannel:5,enable_sgpr_kernarg_segment_ptr:38,secondli:[25,134],use_bind:[16,17,18,19],accur:[25,46,88,108,26,68,57,132,100,3,15,134,83],unaryexprast:[24,25,32,33],fileinfosubstream:148,movsx64rr32:102,stellard:114,sorri:[26,15],sanitizercoveragetracedataflow:39,swap:[67,51,50,115,93,83],getllvmcontext:81,preprocess:[75,121],aux:101,doubleword:83,errorortoexpect:101,nt_amd_amdgpu_isa:38,downstream:[59,72,134],"void":[109,46,110,1,87,7,115,81,5,6,63,61,9,79,55,11,83,132,121,60,84,14,142,48,102,101,125,24,25,65,130,88,89,28,29,30,31,32,33,91,93,72,139,39,57,51,118,77,105,106,144,108],llbuilder:19,s_bitcmp1_b32:38,govern:83,appar:[19,33],x86_stdcallcc:144,theier:46,bpf_x:102,stageselectioncat:28,image_file_machine_m32r:140,bpf_w:102,uint32:[109,106],scalarbitsettrait:110,vector:[46,102,1,87,26,81,5,6,63,61,9,54,11,83,122,15,62,19,101,125,23,24,25,65,130,68,28,29,30,31,32,33,93,73,38,45,110,142,144],bpf_h:102,bpf_k:102,llvm_build_test:74,mllvm:[13,1],initialis:[24,118,28,8],bpf_b:102,whirlwind:[125,22],likeli:[3,83],cpu_x86:110,"10m":39,"00000000041516c6":84,msdn:[133,81],"__cuda__":14,"10x":14,aggreg:[46,73,65,101,68,60,81,62,139,83],binop_preced:[16,17,18,19,22,23],bpf_imm:102,"goto":[24,25,81,1,87,31,32,33,19],even:[109,102,111,1,48,49,26,113,50,81,4,5,83,8,117,68,120,57,7,61,86,14,15,62,87,16,18,19,101,21,63,2,129,88,27,124,30,31,32,33,91,34,134,95,36,72,97,37,67,138,38,39,110,118,40,144,43,147,108,149],rope:101,fcur:87,addllvm:[74,90],neg:[65,38,130,7,122,132,52,40,62,144,139,105,83],s_endpgm:38,transcrib:[29,23],evex:34,libpo:28,"new":[26,4,63,61,9,11,12,13,15,87,17,18,19,20,22,23,24,25,2,125,29,30,31,32,33,34,37,39,40,43,44,45,46,47,48,49,52,54,55,57,145,60,62,65,66,67,68,70,73,74,75,77,81,82,83,85,86,90,88,89,127,91,16,96,101,102,103,51,106,108,110,114,115,120,122,123,28,129,132,134,138,139,144,131,147,148,149],net:[109,54,146,114],add_depend:90,hasglobalalias:87,metadata:[109,46,87,3,83,54,11,86,40,62,89,21,25,130,88,27,68,132,134,72,37,73,38,142,144],med:84,elimin:[46,102,48,81,63,11,83,132,121,13,62,16,17,18,19,20,125,22,65,88,68,28,30,31,32,33,92,37,73,38,101,57,77,40],centric:83,behavior:[46,102,0,111,1,2,7,81,125,83,61,55,57,145,59,13,14,105,62,90,17,19,101,121,22,65,88,28,31,33,91,139,39,75,51,40],old_bind:19,mem:[46,105,16,17,18,19,83,43,22,23],henrik:4,restat:81,q15:83,met:[88,87,52,102,83],valuemap:101,ccassigntostack:65,image_scn_cnt_initialized_data:[140,35],interpret:[48,26,83,8,79,145,132,59,86,14,15,16,17,18,19,101,125,22,23,24,25,126,2,68,28,29,30,31,32,33,93,95,37,74,102,141,76,106,144,42,44],dequ:101,dcmake_crosscompil:12,gcname:144,bitpack:86,credit:40,ebenders_test:123,omap:148,parlanc:[27,142,21,115],prolog:[102,73,65,38],modinfos:148,fsub:[19,83,33],immin:114,firepro:38,bpf_jset:102,avenu:0,machineregisterinfo:[102,68],quickcheck:101,fcoverag:[79,100],handlerpcoffset:109,lwp:45,leaki:39,dimacrofil:83,subregist:[89,106,65],icc_n:65,disambigu:[115,62,57],calm:[19,33],recommend:[81,48,2,83,11,60,86,14,62,90,16,19,22,24,130,88,125,30,33,91,134,37,74,138,39,102,76,40],icc_g:65,type:[1,26,3,8,9,10,11,12,86,14,15,87,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,35,37,38,45,40,42,43,44,46,104,48,49,50,52,53,54,55,57,145,60,61,62,41,79,65,68,70,36,73,74,75,118,110,83,84,85,90,88,91,16,92,93,101,102,51,105,106,81,113,114,115,117,120,121,28,129,130,132,138,139,140,142,143,144,148,149],tell:[81,87,49,26,83,9,79,55,57,145,86,15,19,20,125,41,23,25,130,88,28,29,132,33,37,74,101,102,76,40,22,108,149],esi:[89,102,8],"__eh_fram":102,columnend:79,warn:[46,81,48,49,104,83,8,55,120,7,14,105,90,101,25,89,28,68,34,37,74,38,102,40,42,44,149],all_build:104,wari:62,align_nod:83,jitcompilerfunct:65,uninstru:148,dw_tag_apple_properti:132,room:[91,125,22,70],rightr:87,floattyp:101,dw_apple_property_nonatom:132,arm7:118,setup:[25,131,26,65,38,129,68,49,29,30,132,86,77,15,134,89,35,101,9,23],worth:[81,129,101,68,50,118,115,62,20],frequenc:[54,97,3,72,84],g_extract:68,librarygroup:42,root:[101,37,126,2,74,66,88,67,40,29,12,86,146,34,73,42,96,102,83,41,23],clang_cc1:[86,7],defer:[85,87,30,16,63,61,9],give:[46,110,48,26,115,83,61,79,11,63,12,84,14,15,62,87,18,102,20,21,23,24,25,65,27,28,29,30,132,32,91,37,101,39,57,118,40,144,146,43,147,44,148],dlsym:[16,30],dw_at_loc:7,binpath:123,subtmp5:[19,33],force_on:74,dragonegg:[54,40,102],unsign:[110,1,87,81,3,83,84,79,11,132,89,102,101,23,24,25,65,130,88,68,28,29,30,31,32,33,34,57,144,108],secidx:35,gcn:38,symaddr:[5,6,63,61,9],g_load:68,vasileio:122,sata:50,tbaa:[115,73,83,62],answer:[46,81,129,54,87,28,57,30,31,33,115,40,62,147,16,17,130,19,83,61,121],registerlist:65,config:[2,80,4,5,6,63,61,9,86,101,41,23,24,25,126,65,66,29,30,31,32,33,146,134,37,74,40,131,42],save2:105,polit:[102,111],sht_nobit:38,minimize_crash:39,reloc_absolute_word:65,"__xray_log_fin":118,ovl:148,attempt:[46,81,0,48,4,5,6,83,84,85,57,145,61,62,20,63,65,127,91,37,101,39,102,40,106,144,139],unnamed_addr:[83,144],dbgstreamarrai:148,maintain:[81,87,114,52,4,83,8,55,57,90,101,88,28,68,132,91,134,96,38,102,51,40,106,144],yourregex:7,i65:83,vfp:[83,93],decl:[29,8,129],sht_progbit:38,stlextra:[24,25,125,29,30,31,32,33,5,6,63,61,9],privileg:[4,83,38,9],gcda:100,never_instru:118,copyright:[91,40,121],clangstmtnod:34,simplifydemandedbit:84,"_except_handler3":139,foo_in_a_cc:3,"_except_handler4":139,better:[46,102,1,87,49,26,50,115,81,123,83,61,9,54,7,84,15,17,19,101,22,125,68,31,33,91,134,73,139,39,75,51,40,45],argti:83,persist:[39,101,111,90],erlang:[88,83],isload:102,vmcnt:38,gpucc:14,ircompilelay:[5,6,63,61,9],newtoset:81,dummytargetmachin:65,processformattedfil:101,addit:[46,75,111,1,48,49,26,131,51,90,115,52,81,53,4,127,7,8,117,79,86,10,136,102,11,83,12,60,13,14,105,15,62,87,16,18,19,20,125,22,23,24,2,65,130,88,68,28,29,30,132,32,33,91,92,35,134,122,114,139,37,73,74,38,100,101,39,57,104,148,40,106,41,144,145,42,43,45],promin:[86,49],overestim:83,pdb:[54,74,56,113,45,67,132,69,116,128,148,117],promis:[118,105,40],then_:[17,18,19],dominatortreebas:101,"818b4c1539df3e51dc7e62c89ead4abfd348827d":132,"0x7f":[83,149],mapsectionaddress:85,isel:[73,65,45,102,68,137,149],"instanceof":101,grammat:[49,125,22],grammar:[55,125,32,90,18,22],meat:16,build_for_websit:114,setdescript:28,getvalu:[81,101],somefancyaa:91,dbistreamvers:148,went:[17,30,31],thenv:[24,25,31,32,33],side:[46,81,48,57,83,11,86,14,87,17,18,101,22,23,88,125,29,68,31,32,134,74,45,102,51],bone:[106,65,9],mean:[46,102,0,111,124,48,26,113,114,90,115,52,81,4,7,8,9,120,57,129,83,132,12,60,61,13,15,62,87,16,17,139,19,101,21,41,23,25,2,65,130,88,27,28,29,30,31,33,91,69,36,35,93,74,148,97,37,67,138,38,108,39,110,141,77,40,144,89,44,134,149],rev64:93,lcudart:14,add_ri:149,oppos:[37,73,83,28,68,114,69,36,35,17,44,41],taught:102,f108:11,f107:11,extract:[79,46,10,120,65,139,7,68,132,80,118,104,34,48,149,83,8,101],getsextvalu:101,unbound:[102,83,65],vectypehint:38,"5rqxku":84,ccif:65,crucial:[83,138],bpf_end:102,content:[109,46,81,134,87,49,80,100,52,53,83,8,117,54,120,57,129,7,122,84,86,16,17,18,19,101,21,22,23,64,65,66,28,132,91,35,93,74,38,108,45,102,148,40,144,145,42,107,147,44,39],dw_lang_c99:[83,132],mtripl:[83,92,7,95,89],rare:[109,81,111,65,88,83,102,12,62,144,139,149,7,61,101],dfpregsregclass:65,reader:[55,81,87,125,110,80,141,9,144,71,148,83,61,22,121],die_offset_bas:132,end_cond:[17,18,19],umul:83,parseforexpr:[24,25,31,32,33],nodetyp:65,linear:[37,130,57,102,122,91,92,134,95,101,148],parse_definit:[16,17,18,19,22,23],current_corpus_dir:39,wherea:[83,102,68,122,115,105,62,93,139,101],verif:[46,38,48,28,142,83,39],situat:[46,0,129,65,1,63,28,102,30,51,91,77,14,139,87,16,130,83,101],infin:[83,38],parenthesi:[125,81,22],doublescalarti:83,f89:11,"7400p":38,getfunctiontyp:101,retcc_x86_32_fast:65,dw_at_rang:132,nummodulevalu:144,xue:122,ish:[18,32],fptoui:83,ism:5,anotherbranch:134,isa:[54,81,136,38,65,88,45,102,51,40,62,129,101],tgid_x_en:38,getinstrinfo:[102,65],suppos:[102,129,87,110,67,91,139,42,4,83,148],cpuinfo:50,symbollookup:5,floorf:1,my_kernel:11,thereof:111,targetregistri:[24,102,65],hook:[139,102,31,134,20,41],unlik:[46,81,48,50,115,83,63,14,90,16,19,101,129,88,30,33,91,37,139,102,51,77,40,106,144,44],featureb:110,featurec:110,featurea:110,agre:[46,40,111,110],payload:[102,83],hood:[79,37,86],global_empti:101,create_funct:[16,17,18,19],acquaint:9,sevenkind:83,specialis:83,ieee754:83,sometim:[37,40,144,129,65,46,7,28,110,81,14,34,83,87,134,130,102,20,39,101],sphinx_output_html:74,arm_apcscc:144,memcmp:45,dwell:29,filepo:28,llvm_enable_pedant:74,bodyv:[24,25,33],a32:93,namespac:[81,5,6,63,84,9,83,132,61,14,101,125,24,25,65,88,28,29,30,31,32,33,91,96,74,144,8],build_cond_br:[17,18,19],isascii:[24,25,125,29,30,31,32,33],buildmod:86,dllvm_tablegen:12,bitpattern:83,ri_inst:149,symptom:37,xray_always_intru:[118,84],enjoi:146,r14d:8,silli:[27,121,81,21,57],r14b:8,keyword:[81,1,83,8,79,57,132,86,17,18,19,21,24,25,130,27,28,31,32,33,91,39,102,44,149],mcdesc:65,r14w:8,matter:[55,81,51,91,40,106,16,83],emitjumptableaddress:65,onlyfailsforsomexvalues2:101,image_sym_class_type_definit:140,pointkind:88,hiddendefaultqueu:38,inconvertibleerrorcod:101,modern:[37,81,136,1,27,26,113,50,123,86,14,15,90,69,101,21,121],mind:[81,125,33,40,19,101,22],stackar:88,bitfield:[67,51,148],"7th":83,signature_invalid:37,pdbdump:45,seen:[68,65,48,28,26,30,32,141,91,115,81,15,87,18,102,83,63,101],seem:[102,74,134,129,57,88,87,28,59,115,14,93,130,20,148,9],seek:[46,40,35,130,54],minu:[103,83,38],ty2:83,memcheck:[86,2],image_sym_class_register_param:140,preincrement:81,binaryformat:45,amd_queue_t:38,rethrow:[48,139],myset:81,myseq:110,cudevic:11,regular:[37,10,2,120,49,110,83,28,26,51,133,100,14,81,15,134,87,7,39,89],ccassigntoreg:65,secrel32:35,tradit:[46,37,27,102,132,91,36,131,101,21,9],simplic:[88,27,29,68,106,101,23],don:[46,75,0,111,1,47,48,49,2,50,114,90,115,81,125,4,5,6,7,9,79,102,11,83,132,121,86,14,15,62,87,16,17,18,19,101,21,22,23,24,25,26,129,130,88,27,28,29,30,31,32,33,91,134,95,96,37,74,138,39,57,76,40,147,45],pointe:[83,144,38],dom:46,pointi:110,obtus:130,dog:28,expandinlineasm:65,digress:[18,32],isatleastorstrongerthan:51,my_str:90,dot:[46,138,132,114,118,101,84],"0xffff000000000002":106,hunger:[26,15],visitor:[55,88,27,29,34,20,21],esoter:149,probe:[83,102,35,101],speedup:45,syntax:[102,48,52,81,125,7,8,89,54,11,83,132,121,13,105,90,16,17,18,19,101,21,22,23,24,25,130,27,28,29,30,31,32,33,34,35,86,95,37,73,38,39,110,140,92,106,43,147,44,45,149],float_mode_round_16_64:38,group_segment_fixed_s:38,image_sym_class_weak_extern:140,vec_type_hint:38,istruncatingstor:65,despit:[48,28,102,51,132,91,134,124,83,8,149],acquir:[38,101,39,51,115,83],machineinstr:[109,65,102,68,86,34,92,95],explain:[54,81,74,120,138,57,87,102,103,33,91,93,27,96,19,101,21,121],foldingsetnod:101,regnum:106,safepoint_pol:48,accumulateconstantoffset:87,pinst:101,hasgc:87,stop:[37,55,81,74,111,88,89,39,59,114,91,115,40,139,105,83,125,22,101],llvm_enable_lto:74,vpregionblock:122,sockfd:5,smul:83,symmetr:14,earn:134,bar:[102,1,48,2,81,83,79,11,7,121,60,86,14,142,90,17,101,23,28,29,31,132,35,74,110,141,105,44],x86_mmx:[83,144],lit_filt:2,sacrific:[87,83],bpf_div:102,baz:[81,1,101,28,31,132,142,90,17,141,44],reload:[24,25,73,88,39,102,68,33,105,19],bad:[25,145,81,47,20,110,132,32,87,4,18,83,101],memorysanit:[39,83],ban:0,x0c:140,bam:81,addinstselector:65,flagpointi:110,cstdio:[24,25,125,29,30,31,32,33,5],instalias:102,"0x40":132,"0x42":144,"0x43":144,v8f64:83,source_filenam:83,subject:[110,38,138,102,81,40,101],globalref:69,p1i8:[48,11],said:[81,83,26,132,115,52,15,139,101],myinitprng:39,valuedisallow:28,xarch:37,ld64:13,diderivedtyp:83,print_coverag:39,attribut:[46,48,82,83,84,54,11,59,92,60,8,13,14,87,101,65,88,89,28,68,132,91,34,70,95,138,38,139,45,103,118,40,144,108],add_memory_to_register_promot:19,triplet:[28,83],howtousejit:126,manpag:90,leb128:79,diflagprototyp:[83,132],abs_fp80:8,"0x12345678":132,format_provid:101,add_custom_command:90,lcpi0_0:86,against:[46,111,49,52,3,7,120,11,83,121,60,86,142,62,101,126,129,29,68,37,74,139,39,110,76,40,131],fnf:101,fno:[39,1],uni:11,readnon:[46,11,48,132,142,62,144,83],mcexpr:102,constantindex:106,uno:83,foobaz:81,createload:[24,25,33],devbufferc:11,devbufferb:11,devbuffera:11,foobar:[89,110,81],int32_t:[88,118,110,148],rcmemorymanag:5,"16b":93,loader:[37,30,38,89],theoret:[4,101],formatstr:38,"__________________________________________________________":101,ayal:122,three:[109,46,47,48,49,115,7,86,145,121,122,13,90,87,20,125,22,65,130,89,28,131,68,31,91,34,83,37,101,102,141,118,105,144,139],objc_properti:132,specul:[57,48,51,13,14,62,139,83],trigger:[85,10,110,74,57,88,83,39,75,30,61,86,105,106,89,81,20,49,63,101],interest:[46,102,134,48,49,26,113,80,104,81,125,53,83,61,9,85,54,68,57,7,132,121,84,86,15,62,89,16,17,18,19,101,21,22,23,25,2,129,88,27,28,29,30,31,32,33,91,93,37,38,139,39,110,51,40,145,146],basic:[46,102,1,48,49,26,80,114,90,115,104,81,125,117,53,4,83,8,9,121,79,68,120,11,129,132,59,122,61,14,105,15,62,87,16,17,18,19,101,21,22,23,24,25,65,130,88,27,28,29,30,31,32,33,91,92,70,96,72,37,73,74,100,139,45,75,51,106,141,118,40,84,41,144,89,147,44,124],mo_registermask:102,s_cbranch_join:38,tini:[87,129],llvmpassnam:74,build_load:19,s_bfe_i64:38,deeper:[147,129,9,90],suppress:[81,110,88,2,105,83],mce:65,sparsemultiset:101,multithread:[88,91,101],lpae:51,lpad:[139,105,83],argumentexpr:[16,17,18,19,22,23],getsubtargetimpl:[84,65],llvm_include_test:74,ugli:[18,121,7,32],codegener:75,intregsvt:65,itinerari:[102,8,65],noredzon:[83,144],slt:83,lcudart_stat:14,servic:[38,57,121,134,4,97],lex_id:[16,17,18,19,21,22,23],slp:[45,73,122,1],splitdebugfilenam:83,sln:104,neat:61,buffer_wbinvl1_vol:38,typeflag:132,justifi:[108,120],occas:81,sle:83,max_dx10:38,anchor:[81,132],slc:38,r600:38,gninja:[37,39,84],gfx804:38,dw_macinfo_undef:83,matthewsrevnum:134,sever:[46,81,0,47,87,49,26,52,53,4,83,8,79,54,55,120,57,122,86,15,90,17,20,41,23,2,65,88,89,28,29,68,31,132,91,34,70,37,74,99,138,101,39,102,141,105,144,139,108,149],grown:[18,26,15,32],receiv:[85,0,63,39,102,139,62,144,90,146,83,8,22,101],make:[0,1,2,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,37,38,39,40,42,45,46,104,47,48,49,50,52,54,57,63,60,61,62,41,65,66,68,73,74,75,76,77,110,83,84,79,86,90,88,91,16,92,93,96,100,101,102,51,105,106,108,109,81,111,114,115,120,121,123,124,125,126,129,130,131,132,134,137,138,139,144,145,146,147,148,149],bitmask:83,isspac:[24,25,27,39,29,30,31,32,33,125],globalbuff:38,kevin:102,codeemitt:34,"0x5cf8c24cdb18bdac":79,zlib1g:[86,12],kib:28,overs:101,studi:[62,41],binopprototyp:[18,19],qualif:114,vehiclemak:81,ea_r:102,addrawvalu:70,inherit:[91,81,129,57,101,28,102,142,76,34,4,44,8,149],llvm_dir:[87,74],endif:[24,25,81,28,26,30,31,32,33,14,15,90,61,4,5,6,63,39,9,79],some_crash_test:134,programm:[91,25,102,136,129,38,1,88,44,28,127,51,32,54,14,81,15,18,20,45,101],paradigm:[45,101,130],left:[46,102,1,87,49,81,83,8,9,120,62,90,17,101,22,23,25,65,125,29,31,38,20,110,40,144],identifi:[46,81,111,1,47,48,2,113,125,7,61,120,11,83,122,142,89,16,17,18,19,20,21,22,23,24,25,65,130,88,27,28,29,30,31,32,33,91,34,35,134,73,74,101,102,105,106,144,139,43,44,148],op1:[83,144],op2:83,op3:65,cstdint:[5,30,31,32,33],human:[112,37,81,119,111,99,46,87,110,141,91,100,53,94,107,83,8,89],nowadai:[12,134],yet:[46,81,48,49,5,6,63,61,9,85,83,60,87,16,17,18,101,126,65,88,89,28,29,31,32,91,146,139,102,51,141,118,42],languag:[109,46,102,111,1,48,64,26,81,125,7,8,9,54,10,119,11,83,132,121,122,61,86,14,105,15,62,90,16,17,18,19,101,21,22,23,24,25,127,65,130,88,27,28,29,30,31,32,33,92,136,96,112,37,73,74,99,38,139,39,110,51,40,106,89,149,44,45,124],discriminatori:111,bank_mask:38,character:83,macport:76,save:[102,1,104,53,83,85,55,11,132,60,14,16,17,18,19,101,24,25,65,28,30,31,32,33,93,37,74,138,139,39,75,76,105,106,144,149],vpsubusw:86,u999999:138,applic:[109,81,48,49,26,100,83,8,85,54,136,120,84,86,15,62,87,16,18,101,21,126,65,88,27,28,30,32,91,93,74,38,139,39,102,118,40,106,144,42,149],segnam:28,background:[79,147,111,129,139,102,132,84,34,90,123,101,61],opc:[24,25,149,32,33],wojciech:46,fact1:87,fact0:87,getinstlist:101,negat:[18,102,83,144,32],dindex:65,noth:[91,46,0,38,130,88,27,102,33,86,105,114,134,4,19,83,21,101],machinepassregistrynod:91,choic:[112,37,55,81,138,27,39,26,31,50,106,92,15,48,17,83,61,101],unnecessari:[46,81,65,89,102,68,62,134,63,101],cxxflag:[24,25,126,29,30,31,32,33,5,6,63,61,9],printd:[24,25,26,30,31,32,33,15,18,19],www:[114,74,134,97],sancov:39,deal:[109,46,81,144,111,129,139,132,68,51,33,118,34,40,93,134,122,19,101,61],enable_sgpr_:38,global_ctor:[121,83],interv:[46,102,67,101],somehow:[91,101,148],dead:[37,73,11,48,28,57,68,132,13,108,62,89,46,102,83,121,101],type_code_fp128:144,intern:[46,110,48,49,2,81,117,4,83,8,9,85,54,102,11,145,121,13,14,142,62,90,19,101,23,25,65,130,89,28,29,67,33,91,34,94,37,74,139,57,118,105,144,149,108,79],insttoreplac:101,hd6xxx:38,f3_2:65,make_pair:[24,25,87,33],ftoi:65,ldststoreupd:102,insensit:57,collect:[46,81,1,48,49,26,100,3,83,84,9,85,54,136,57,122,15,62,101,21,88,27,28,134,70,72,73,74,39,106,108,45,149],henderson2002:88,tracker:[134,40,111,138],hasopsizeprefix:8,ehcleanup:105,newversionformat:148,xmm15:8,creatur:[27,18,21,32],burg:73,idiomat:[86,81,101],bold:147,identifierexpr:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],uncompress:[37,74,101],mappingnorm:110,buri:81,strippointercast:81,promot:[25,55,73,102,65,46,48,57,122,33,13,14,40,62,19,83,101],burr:95,"super":[102,108,65],fnty:83,unsaf:[26,51,132,106,92,15,95,83],movsd:7,argv0:95,culaunchkernel:11,ppcf128:83,simul:[68,40,83,102,93],dissassembl:39,movsx:102,commit:[37,73,138,54,48,67,114,86,40,62,134,146,81,147],marshal:106,movsq:102,errc:101,mrm7m:65,contriv:[121,149],f128:[83,65],down:[46,102,111,87,26,115,3,63,8,9,79,54,129,57,83,122,61,13,15,134,17,18,20,125,22,24,25,65,130,139,27,28,68,31,32,132,91,92,93,95,37,138,101,39,75,118,76,40,145],pair:[46,102,48,7,115,81,63,57,83,87,17,101,22,24,25,65,125,31,33,93,70,97,38,139,39,110,51],indexreg:102,mrm7r:65,formerli:101,isrematerializ:8,contrib:37,subl:[102,7],parsesubtargetfeatur:65,precomput:57,perldoc:37,frameinfo:[89,65],xpass:2,imit:[147,44],r173931:34,fraction:[82,39,72,129],amazingli:[17,31],stage2:[96,74,131],stage3:131,analysi:[46,1,49,115,3,53,82,83,84,79,54,55,57,121,122,13,62,16,19,25,130,88,89,127,30,132,33,91,72,37,73,108,102,51,118,44],numxform:101,"0x744ea0":39,form:[46,75,0,139,110,48,49,26,90,115,81,125,131,82,83,8,85,54,102,11,129,7,132,130,122,61,86,15,62,87,16,17,19,101,21,22,23,24,65,66,88,27,28,29,30,31,33,91,35,134,120,37,73,74,138,108,39,57,141,118,40,106,144,145,107,44,148,149],sub1:7,forc:[81,1,48,50,83,61,79,12,60,14,90,101,28,132,91,134,95,37,74,38,139,110,106],retarget:[54,102],llvm_:90,nounwind:[11,7,132,86,142,62,144,139,83],allevi:[101,28,102,83],emitbyt:65,shufflebyt:39,err2:101,autoinsert:101,addmoduleflag:25,bugfix:45,writeattribut:34,processrelocationref:85,multisourc:[86,49,40,132,75],f88017:102,"__i386__":[26,15],unrel:[65,132,114,40,134,101],classid:44,classif:[4,83],featur:[46,102,1,47,48,49,26,114,52,81,82,4,83,8,9,79,54,86,132,60,84,13,15,87,17,18,19,101,125,22,24,2,65,88,68,28,90,30,31,32,33,91,34,134,37,74,138,38,39,110,76,40,41,108,45],semicolon:[24,25,74,37,125,29,30,31,32,33,16,17,18,19,149,22,23],shim:46,visitgcroot:88,diagnost:[59,1,101,39,2,34,45,7,8],flat_scratch:38,glanc:[81,26,15],dw_form_sec_offset:7,dwarfnumb:65,tidig_cmp_cnt:38,password:[146,40,134],getfunctionlist:101,excel:[37,90,101,65,57],image_scn_align_2048byt:140,a15:50,stackrestor:[83,60],journei:[19,33],a10:38,a12:38,subdivid:[49,83],why:[81,111,48,113,115,3,83,61,57,132,121,14,124,87,17,19,101,21,22,25,129,130,27,125,29,31,33,91,34,134,96,138,38,39,110,77,40,147],"0fc2d20000":11,iteri:[16,17,18,19,23],libffi:[76,74],s_sethalt:38,axi:1,furthermor:[46,130,7,68,134,48,83],pseudo:[79,137,65,89,102,132,91,34,93,42,105,83,72,101],dcommit:[37,134,138],sectioncontr:148,image_sym_type_int:140,include_directori:74,xderef:38,value_2:42,skip:[81,134,1,48,83,79,132,13,14,68,90,16,17,18,19,101,21,22,23,24,25,65,88,27,125,29,30,31,32,33,93,102,141,105,144],invent:117,"0x00000150":132,inlineasm:87,customari:[28,40,83],createvirtualregist:102,mill:28,primer:[147,74,90],pldi:[88,122],enable_ieee_mod:38,filenameoffset:148,misread:81,libit:28,depend:[46,102,111,1,47,48,49,2,81,131,115,52,3,53,82,4,83,9,85,86,120,11,145,121,12,13,14,105,62,87,19,101,125,22,23,126,127,65,130,88,68,28,29,67,33,91,146,92,35,134,70,96,97,37,74,38,139,39,57,51,141,76,40,106,41,144,89,42],"7150b":38,fancier:[91,147],intermedi:[54,10,127,74,99,65,47,48,125,89,68,60,88,14,139,144,70,83,121,22,101],isgroup:148,targetinstrformat:65,hasinternallinkag:101,image_scn_align_2byt:140,letitem:44,memorymanag:9,llvmbuilder:16,aspx:81,fnir:[24,25,29,30,31,32,33],string:[46,102,48,2,81,52,3,125,95,82,4,5,6,7,8,9,79,63,120,11,83,132,61,117,90,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,91,34,70,94,74,37,67,38,45,110,141,118,92,144,89,42,43,44,148,149],bpf_add:102,create_argument_alloca:19,kernel_param_2:11,kernel_param_0:11,kernel_param_1:11,hiddenprintfbuff:38,print_endlin:[16,17,18,19,22,23],dil:[35,8],swizzl:38,did:[68,129,57,87,121,26,30,32,33,91,105,15,81,139,16,18,19,83,61,101],die:[25,132,46],dif:46,dig:[27,21,149],dia:74,iter:[46,102,1,87,81,83,85,57,105,90,17,18,19,20,125,22,65,88,108,28,68,31,32,33,72,73,74,101,45,110,40,44,39,149],item:[37,110,144,120,38,149,48,28,53,132,33,90,62,93,87,42,19,83,39,101],s_load_dword:38,div:[102,101],kernel_code_version_major:38,overlaid:115,round:[79,102,38,39,110,32,114,14,93,18,83],dir:[37,74,47,39,2,12,132,100,131,83,49,41],initializealltarget:24,add_:90,sparclit:65,max_len:39,benefici:[105,68,1],run:[1,2,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,34,37,38,39,40,42,46,47,48,49,50,104,54,57,63,61,62,41,79,65,68,74,75,118,77,83,84,85,86,90,88,89,127,91,16,93,96,97,100,101,102,51,105,106,108,109,81,114,115,76,121,123,28,126,131,132,134,138,139,141,145,146,149],nozero:95,sideeffect:83,builddir:146,addq:106,insertbranch:65,favour:[8,124],addx:149,wors:[81,102,83,93],rephras:130,addi:[83,149],xml:144,deriv:[46,81,48,82,83,8,85,55,120,101,21,129,88,27,132,91,73,38,138,102,40,42,44,149],livein:89,makeup:101,elsev:[24,25,31,32,33],slow:[91,37,101,39,61,76,92,83,45],enable_trap_handl:38,ttmp1:38,ttmp2:38,ttmp3:38,wait:[81,38,47,125,30,146,4,61,22],patleaf:65,insan:81,invit:[5,6,63,61],avx512vpopcntdq:45,max_total_tim:39,bot:[54,40,81,134,131],"_ztii":83,membership:[139,142,101],storeregtoaddr:65,extrem:[109,46,82,6,83,57,63,19,20,64,65,132,33,91,37,101,39,102,51,40,144,44,149],bob:110,else_:[17,18,19],bof:134,opcstr:65,stb_local:83,overrid:[46,102,87,100,52,81,83,129,11,132,14,90,101,24,25,65,68,28,29,30,31,32,33,91,34,95,112,74,39,57,51,92,44,149],modud:45,maxnum:83,modul:[46,102,48,49,2,80,114,90,81,117,53,5,6,83,61,9,85,86,10,11,63,132,59,84,13,62,87,16,17,18,19,20,121,23,24,25,127,65,88,89,29,30,31,32,33,91,69,37,73,74,101,39,57,142,106,144,108,148],kernarg_address:38,moduw:45,"__jit_debug_register_cod":123,movsx64rr8:102,globalvari:[91,101,26,15,130],patchabl:[48,83,106],"0baz":101,"0x60":120,"0x800":132,sake:[91,101],bewar:[88,81],allocinst:19,use_llvm:[16,17,18,19,23],visit:[88,101,55,20,61],tokidentifi:44,deplib:144,perl:88,everybodi:[87,40],numfaultingpc:109,zeroargfp:149,throwntyp:83,dict:39,checkout:[37,74,138,86,47,76,134,96],rpath:37,fcomi:102,oom:39,com_fir:102,"__atomic_fetch_and_n":51,appel:88,oop:48,examin:[85,65,20,28,102,114,86,100,105,48,83,61,9,101],effort:[85,46,55,81,29,68,132,118,40,106,62,4,121,23],appli:[46,102,111,47,26,114,100,81,4,83,61,85,120,57,122,13,105,15,62,90,16,18,19,20,65,130,68,28,127,30,132,32,33,91,35,93,37,74,138,38,101,110,51,148,40,108,146,44,134,149],fly:[125,102,30,9,16,22],reviewe:40,ulp:83,uniqu:[102,1,48,2,113,82,83,8,7,13,87,101,23,29,30,132,146,35,134,70,38,110,106,144,42,108,148],ult:[31,33,16,17,18,19,83,23],"_ztv1d":142,sourcewar:[77,39],imped:83,nextvar:[24,25,31,32,33,17,18,19],gfx601:38,gfx600:38,nearest:[79,25,83,115],basic_block:23,predict:[91,54,3,81,62],agent:[83,38],crazi:[27,28,26,15,21],subregion:83,fp16:83,agenc:0,exctype1:139,strikingli:[18,32],delete_funct:[16,17,18,19,23],subnorm:[83,11],binarypreced:[24,25,32,33],"0x000034f0":132,targetsubtarget:[102,65],ping:[87,40],idl:61,idiv:102,till:[146,101,123],getdatalayout:[25,65],purg:81,attrparserstringswitch:34,pure:[46,73,65,48,29,68,51,122,40,42,102,44,23],ptr_is_nul:109,tile:122,doclist:110,testingconfig:2,grok:[29,121,23],"__atomic_fetch_sub_n":51,max:[79,38,28,2,14,83,84],tmp9:[7,130],usabl:[65,28,102,132,92,101,84],intrus:[101,83],mac:[91,37,101,120,123],mag:83,mai:[0,1,2,3,4,5,6,7,8,9,10,11,86,14,15,87,17,18,19,101,21,23,24,25,26,27,28,29,30,31,32,33,37,38,39,40,42,45,46,104,48,49,50,52,55,57,63,60,61,62,41,65,67,68,70,36,73,74,110,118,77,83,84,85,13,90,88,91,92,93,95,96,100,20,102,51,105,106,108,81,111,114,115,117,120,121,122,123,130,132,134,139,141,142,144,145,146,148,149],end:[0,1,26,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,35,37,39,40,44,46,47,87,49,50,104,54,57,63,59,61,62,41,65,67,68,73,74,75,110,83,84,79,86,88,91,92,93,101,102,105,106,108,109,81,111,114,115,119,120,121,124,28,129,130,132,134,138,139,144,131,147,148,149],underscor:[89,81,132],maj:47,grow:[111,101,28,102,31,60,17,43,83,39,9],myalloc:105,man:[37,74,54,28,86,134],noun:81,"0x00001000":132,"switch":[46,81,1,48,50,114,3,82,83,55,129,16,17,101,125,23,24,25,65,68,28,29,30,31,32,33,34,134,37,74,138,139,110,77,105],myglob:132,getinstrmap:68,targetframeinfo:65,purifi:75,containingtyp:83,talk:[81,0,26,83,9,55,14,15,16,17,19,101,21,22,23,27,125,29,30,31,33,91],image_sym_class_automat:140,abbrevop0:144,abbrevop1:144,lsb:102,shield:[4,52,102,97],iptr:[68,83],"_init":38,lexloc:25,goldmont:45,"123kkk":28,recoup:144,nbsp:102,gcmetadata:88,pointer:[109,46,110,1,48,26,142,52,81,5,6,83,9,85,68,102,11,63,132,121,60,14,105,15,62,87,16,17,18,19,101,21,22,25,65,130,88,27,125,30,31,33,91,34,73,38,139,45,57,51,118,92,106,144,108],entiti:[81,83,113,106,144,101,149],armneontest:34,setgraphcolor:101,thank:[52,75],polici:[37,81,144,57,54,40,134,101],gen:[25,137,61,11],build_shared_lib:74,mail:[37,81,0,111,138,54,47,48,45,26,114,118,40,15,146,147,84,41],inlinehint:[83,144],image_file_machine_arm64:140,irbuild:[24,25,29,30,31,32,33,16,17,101,23],recoveri:[24,25,125,29,30,31,32,33,16,17,18,19,101,22,23],parseunari:[24,25,18,32,33],amdkernelcodet:38,remateri:51,synopsi:[112,2,7,100,53,58,10,119,120,145,59,126,66,28,127,133,92,94,95,71,99,141,36,107,137],financi:134,clang_enable_bootstrap:131,initv:[24,25,33],verifi:[46,48,113,80,114,53,83,84,7,132,121,86,17,18,19,20,41,23,24,25,127,66,68,29,30,31,32,33,91,134,37,39,102,40,106,144,131,147],freez:114,possess:[79,101],lo16:102,subproject:[37,81,54,45,40,134],image_section_head:148,xlc:37,crypto:39,rocm:38,careless:81,x11:101,myflag:110,misbehav:47,loopunswitch:46,compilecallbackmgr:[5,6],ndebug:[76,28,74],continu:[81,49,26,7,114,5,6,83,57,145,123,86,40,15,101,125,22,129,28,134,38,138,139,39,102,103,105,144,108],ds_min_rtn_f64:38,redistribut:[40,121],dx10:38,libgcc:103,tmp8:130,bpf_or:102,nummodul:148,r123456:134,tmp7:[7,130],tmp6:130,tmp1:[81,7],tmp3:7,lai:[25,73,130,101,102,142,81,16,17,18,19,83],simplecompil:[5,6,63,61,9],getbinarypreced:[24,25,32,33],catchret:[139,83],stitch:67,"3rd":[39,83,9],mess:[37,46],bespok:88,numval:[24,25,27,125,29,30,31,32,33],dw_tag_unspecified_typ:[83,132],arminstrinfo:65,correct:[46,102,1,47,48,49,113,114,81,4,83,86,55,57,12,13,14,105,62,16,101,28,30,132,91,93,37,73,74,38,45,75,103,51,118,77,40,146],earlier:[79,81,65,38,67,29,30,51,105,62,144,42,83,61,9],dw_apple_property_unsafe_unretain:132,tmpf:97,orr:83,tmpb:[24,25,33],ori:102,org:[81,0,111,47,49,114,104,54,12,86,89,29,132,134,37,74,138,39,110,77,40,146],ord:83,orc:[25,64,30,31,32,33,5,6,63,61,9],may_throw:139,v8deprecatedinst:65,rv670:38,"_flags_":90,sn_mapr:87,createasmstream:102,thing:[46,110,111,87,49,26,114,115,104,81,125,4,7,61,9,79,102,57,83,132,121,12,84,86,14,15,62,90,16,17,18,19,20,21,22,23,24,25,2,130,27,28,29,30,31,32,33,91,34,93,37,101,39,75,76,40,41,144,139,42,43,147,134,149],sn_mapl:87,deletevalu:57,principl:[81,136,87,27,4,21],think:[102,26,115,81,82,4,83,9,79,55,11,15,17,101,21,24,129,130,88,27,31,73,74,138,57,118,40],frequent:[46,81,48,104,4,5,6,83,61,54,63,121,124,101,25,130,88,28,134,37,74,40],first:[0,2,3,4,6,7,8,9,11,86,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,37,38,39,40,43,44,46,104,48,49,52,57,63,60,61,41,79,65,67,68,73,74,75,118,81,82,83,84,85,90,88,89,127,91,16,93,95,96,100,101,102,51,105,106,108,110,112,114,115,120,121,28,129,130,132,134,138,139,144,146,147,149],carri:[120,130,83,134,43,101,61],acquisit:101,fast:[92,81,137,65,87,39,102,68,50,33,91,132,14,34,62,19,83,147,117,101],polaris10:38,polaris11:38,crit:46,getfoo:83,fiji:38,tiebreak:14,numblock:67,numop:[144,65],const_iter:101,indiviu:102,indivis:60,numindic:79,averag:[24,17,39,31,53],daunt:74,devmtg:134,clangsacheck:34,"0f42d20000":11,broadcast:[73,83],my_kei:81,attrkind:[34,70],unpoison:83,getpredopcod:82,vbr6:144,vbr4:144,vbr5:144,vbr8:144,x86targetlow:84,redefinit:[29,33,14,16,17,18,19,9,23],versionhead:148,exclusionari:111,were:[46,102,0,134,1,48,26,114,115,104,81,83,61,9,79,7,60,8,14,105,15,62,87,101,2,66,28,127,132,93,96,37,100,139,39,75,51,148,40,84,107,45],createlocalcompilecallbackmanag:[6,63],imagmag:[18,32],top_level_dir:37,mrm5m:65,dw_tag_set_typ:132,licm:[46,73,57,101,51,91,62,83],randomize_va_spac:97,dash:[28,110,39],properli:[54,81,57,83,28,102,30,51,33,86,14,35,42,19,20,49],greet:149,gettargetlow:65,remotejit:5,exclud:[37,145,102,7,40,82,83,97],mrm5r:65,repeatedli:[109,83],unadorn:83,stopgap:101,llvm_build_llvm_dylib:[37,74],squar:[42,40,83,129,110],advic:[54,138,88,145,50,76,40,62,20],cumoduleloaddataex:11,llvm_target:[16,17,18,19],strtab_block:144,"_crit_edg":83,coroelid:105,advis:[120,70,31,114,90,17],interior:[88,48,73,129],immsext16:102,channel:[54,5,111,38],sparciseldagtodag:65,llvm_analysi:[16,17,18,19,23],ptrloc:[88,83],pain:[14,101,28,138,123],norman:102,trace:[118,73,48,45,132,84,91,39,83,28],normal:[109,102,134,1,48,2,114,100,81,4,83,84,9,86,10,119,120,7,13,14,105,62,112,18,101,88,28,127,132,32,91,34,93,96,36,99,37,74,138,38,139,110,103,51,40,106,144,43,108,149],track:[46,102,87,2,115,81,83,8,57,145,121,13,62,48,18,19,20,23,25,88,29,68,132,32,33,91,134,96,37,73,101,39,75,40,106,45],c99:[83,35],nestabl:[44,149],et_dyn:38,beta:45,cucontext:11,f3_12:65,r31:[102,83],isphysreg:101,isglobaladdress:65,synonym:120,cumodulegetfunct:11,dw_form_:132,rev128:93,"0xeffe0000":148,sgpg:38,maskedbitset:110,defaultconfig:101,gracefulli:101,lexicon:[54,73],serializ:68,show:[102,1,47,2,137,100,3,125,5,6,7,84,9,85,63,11,83,132,121,123,142,15,89,16,17,18,19,101,21,22,23,24,79,26,65,130,27,28,29,30,31,32,33,91,36,134,37,73,138,110,141,77,105,106,147,149],shoe:110,xdref:38,flagsfeaturec:110,threshold:[118,46,83,84,100],corner:106,getadjustedanalysispoint:57,emitexternalsymboladdress:65,globalsmodref:[46,57],dice:101,fenc:[81,38,51,115,62,83],cmov:45,behind:[54,102,11,48,75,81,132,7,91,40,70,82,83,9,101],argidx:25,frexp:83,adc64mi32:8,parametr:44,ftest:100,black:118,customwritebarri:88,dword:38,hello_world:38,llvm_revis:74,memmgr:[5,61],sparcisellow:65,intptr_t:[25,1,30,31,32,33],gep:[54,130,46,87,121,62,48],variou:[46,110,49,2,115,52,81,82,83,8,117,85,136,11,145,133,84,86,68,62,89,16,17,102,20,21,22,25,65,27,125,127,30,31,132,91,34,134,37,74,138,101,39,57,51,148,118,144,139,42,108,45,79],smash:83,mung:[46,130],secondari:[139,40,106],repo:[37,96,134,117],x86targetmachin:[102,84],repl:[5,30,61,9],type_code_opaqu:144,inreg:[102,83,144,65],build_mul:[16,17,18,19,23],r10b:8,busiest:138,nullptr:[24,25,81,63,125,29,30,31,32,33,5,6,83,61,9],yield:[46,49,130,48,28,84,105,144,83,61,101],r10d:8,appear:[46,81,48,2,113,83,61,117,79,120,57,59,122,20,65,130,28,132,35,134,101,51,40,44,148],stupid:20,mediat:[0,57],cmpconstant:87,r10w:8,summari:[46,81,112,49,2,100,53,7,117,10,119,145,48,19,25,126,130,28,127,33,92,93,95,71,37,99,138,141,36,144,137],wiki:[37,52,74,12,39],kernel:[54,102,65,38,11,1,39,26,50,51,14,15,95,96,83,97],setpreservesal:91,llvm_reverse_iter:[45,74],"__builtin_setjmp":139,intrinsicsnvvm:11,box:[118,45,102,132,138],lfunc_end0:38,fcmp:[29,31,33,16,17,18,19,83,23],testcas:[145,29,40,83,101,23],patent:40,"0b1001011":149,infinit:[46,39,102,83,57],expandatomicrmwinir:51,timeit:49,innov:45,system_error:24,datalayoutpass:25,enumer:[102,38,65,149,88,87,28,110,81,132,34,144,137,83,148,101],label:[109,46,81,87,115,83,84,11,7,121,60,17,19,101,65,88,68,31,33,72,38,139,102,105,144],innoc:[17,31],enumem:65,volatil:[46,121,38,65,57,88,102,51,115,83],dockerfil:[54,96],across:[46,134,1,48,26,113,53,83,8,11,13,14,15,62,90,16,101,67,28,68,132,30,93,37,73,139,39,102,51,105,106,42,91,45],arm64:37,amd_float_denorm_mode_flush_src:38,august:85,parent:[37,81,101,2,31,139,90,42,17,83,72],fpregsregisterclass:65,vextsb2w:45,bodyexpr:[24,25,31,32,33,19],frameaddress:83,dimacro:83,rfunc:10,parseprototyp:[24,25,125,29,30,31,32,33],copyabl:101,false_branch_weight:3,llvm_enable_sphinx:[37,74],blocklen:144,audienc:[54,62,65],library_nam:42,litloc:25,p0i64:7,improv:[46,48,26,114,63,9,57,83,15,62,87,16,101,2,65,88,30,68,132,91,134,37,138,38,139,39,45],sizeclassalloc:52,peephol:[55,102,30,31,32,33,91,16,17,18,19,101],among:[37,108,102,11,87,39,57,81,14,34,35,62,134,46,101],acceler:[26,15,132,38,114],undocu:[81,148],colspan:102,unittest:74,paramattr_grp_code_entri:144,tsflag:65,getnumsuccessor:81,cancel:139,iscal:[8,149],bytecod:144,mctargetdesc:34,xadd:51,ultim:[81,47,2,30,115,40,16,83,8],cleargraphattr:101,p0i8:[83,11],mark:[109,46,81,48,2,83,8,79,11,123,86,14,62,87,101,65,88,37,38,139,102,51,105,106,144,131,43],certifi:121,"0x4004f4":94,basicaa:[91,46,57],"0f0":102,fadd:[55,102,65,11,68,29,30,31,33,16,17,19,83,23],squash:[37,96,134,93],thost:104,f92:11,f93:11,f90:11,f91:11,f96:11,f97:11,f94:11,f95:11,univers:[79,81,83,121,100,40,90,94,5,6,63,61,9,101],f98:11,f99:11,those:[46,102,0,111,48,2,50,115,52,81,53,4,83,8,117,79,54,120,57,7,59,12,61,86,142,87,106,19,20,24,25,65,130,88,28,90,68,132,33,91,134,96,37,73,100,101,39,110,51,118,40,84,139,42],llvm_executionengine_orc_kaleidoscopejit_h:[5,6,63,61,9],sound:[39,9,57],isvararg:101,interoper:[88,101,26,51,15,139,83,117],enable_sgpr_kernarg:38,invok:[46,81,48,100,3,83,9,85,86,57,7,60,13,14,62,87,16,19,20,125,22,65,88,89,28,68,33,91,37,74,38,101,39,102,118,105,106,144,139,108],"0x3feb":132,invol:139,"0x3fea":132,invoc:[91,37,74,7,39,102,118,141,13,105,83,145,96,20,84,131],hdl:105,isdoubl:149,gvneedslazyptr:65,advantag:[81,93,26,83,40,15,18,19,101,130,88,28,68,32,33,134,70,39,102,51,105,108],mfloat:12,destin:[24,25,65,38,139,102,33,86,3,62,19,83,120],mergefunc:46,variable_op:149,add32mr:8,cudeviceget:11,do_safepoint:48,reservedfirstvgpr:38,liveoffset:88,same:[1,26,4,5,6,7,8,9,11,13,14,15,87,17,18,19,101,22,23,2,27,28,29,30,31,32,33,34,35,37,38,39,40,42,46,47,48,50,52,53,55,57,63,60,61,62,41,65,68,73,74,75,118,77,110,82,83,84,79,90,88,127,91,16,93,95,100,20,102,103,51,105,106,109,81,113,114,115,117,76,119,120,122,124,125,130,132,134,138,139,142,144,145,147,148,149],image_file_machine_unknown:140,pad:[79,120,38,89,68,60,105,106,144,139,83,148],emitloadlink:51,testrunn:2,corospit:105,oneargfp:149,fixup:148,ds_add_u32:38,add32mi:8,exhaust:[37,111,46,88,102,62,101],addressspac:68,assist:[81,75,32,13,62,18,137],executionengin:[37,19,123,101,102,61,16,17,5,6,63,18,9],capabl:[102,26,113,115,83,55,136,11,14,15,16,18,19,101,23,65,28,29,30,32,33,91,37,38,57,108],value_symtab_block:144,selecttarget:[5,6,63,61,9],sh_link:35,kernel_code_entry_byte_offset:38,executeprogramandwait:4,runonmachinefunct:[13,91,102,65],v_mov_b32_e32:38,flat_load_dword:38,macro:[79,127,110,74,65,101,28,2,30,81,91,100,14,34,39,90,16,45,83,8],markup:[39,81,43,38,147],v4p0f64:83,spadini:46,getobjfilelow:88,asmnam:65,dllvm_include_test:37,roughli:[73,129,139,39,102,51,114,14],emitleadingf:51,execut:[109,46,75,139,1,48,49,26,81,80,100,104,3,127,4,5,6,83,61,9,85,54,136,102,11,63,132,122,123,13,14,105,62,90,16,17,19,20,125,22,23,25,2,113,65,88,27,28,29,30,31,32,33,91,34,35,86,95,96,36,72,148,37,73,74,38,101,39,57,103,51,141,92,106,41,145,45,79],speccpu2000:49,mo1:65,mul_ri:149,mygcprint:88,subblock:144,aspect:[26,113,52,83,15,17,101,22,23,25,88,67,125,29,68,31,132,134,74,102,40,44],mul_rr:149,asmmatch:34,flavor:[101,83,132,149],runtim:[109,46,102,1,48,26,113,100,3,4,5,6,83,84,79,136,63,123,14,15,18,20,65,88,28,131,30,32,91,134,37,73,38,101,39,110,103,51,118,40,106,139],"125000e":83,xxxtargetmachin:65,param:[81,11,88,2,146,104,105,16,17,18,19,101,23],cumoduleunload:11,sparcregisterinfo:65,heavier:134,"__cxa_throw":139,unistd:4,rcindirectstubsmanag:5,dclang_tablegen:12,compiland:[69,148,117],setrequiresstructuredcfg:65,mcregaliasiter:102,mov:[11,83,102,51,35,7],grid:38,sk_specialsquar:129,va_start:83,libsfgcc1:12,mod:[46,65,57,83,101,149],cast_or_nul:101,is_ptr64:38,ifstream:11,ei_osabi:38,qnan:83,server:[5,101,148,134,114],bb0_4:11,bb0_5:11,prologuedata:144,either:[46,75,0,134,48,49,26,115,81,125,127,106,83,8,9,85,86,55,120,11,61,13,142,15,62,87,16,17,139,102,20,21,22,25,126,2,65,130,88,27,28,29,31,92,93,94,37,73,74,38,101,39,57,51,118,77,40,84,144,89,148,149],dilexicalblockfil:83,skiploop:13,physreg:102,nice:[46,81,26,115,125,7,15,16,17,18,19,101,21,22,23,27,28,29,68,31,32,33,30,37,105,91,149],mappingnormalizationheap:110,fulfil:[4,129],exitcod:2,createremotememorymanag:5,vec_splat:73,fastcal:[102,83],ascend:[79,83],substitu:86,llvm_enable_doxygen_qt_help:74,adequ:[88,104,74,65],confirm:[39,81],llvmscalaropt:41,recomput:[91,101,57],ffi_library_dir:74,"__llvm_stackmap":106,getchar:[24,25,27,125,29,30,31,32,33],inject:[105,81],dw_op_plu:[83,132],extractvalu:83,lto_module_is_object_file_in_memori:108,ret_val:[16,17,18,19,23],overli:40,blocksiz:67,gratitud:117,broken:[91,54,121,134,65,48,45,2,86,40,93,146,149,83,101],fpmath:83,cuinit:11,selectaddrrr:65,regexp:2,cornerston:130,x32:7,x30:83,dw_ate_address:83,release_test:114,island:38,loadinst:81,drag:138,image_scn_align_4096byt:140,deopt:[48,83],faultmap:[109,54,83],llvm_targets_to_build:[37,104,74,96],elfosabi_amdgpu_hsa:38,bpf_ab:102,terminolog:[25,38,54,90,3,37,72],element_s:83,llvm_dylib_compon:[37,74],strip:[46,108,28,127,132,86,100,101,61],"0x3fe9":132,btver2:45,ymax:[18,32],mingw32:[86,146,102],"__cudacc__":14,overwrit:[118,28,106,41],tobia:122,compliant:[14,38],legalact:65,savethi:7,x86inst:8,dllvm_default_target_tripl:12,addrequiredtransit:91,source_x86_64:94,uintptr_t:5,dw_ate_boolean:83,jite:[64,54,123,5,6,63,9],getmodrefinfo:57,numdirectorybyt:67,gori:40,buggi:75,xxxtrait:110,stringmapentri:101,gprc:102,reappli:40,possibl:[46,75,0,134,110,47,48,26,122,149,115,81,125,4,83,89,85,55,68,102,11,132,121,12,60,86,14,105,15,62,87,16,17,19,20,21,22,25,2,129,130,88,27,28,30,31,33,91,34,35,93,74,96,97,37,67,138,38,101,39,57,103,51,148,77,40,144,146,43,147,108,45,79],optnum:28,poolalloc:57,unusu:[102,88,26,103,15,101],sanitize_address:[83,144],embed:[79,46,74,88,89,136,31,32,132,40,144,17,18,83,148,101],i32mem:149,emitpseudoexpansionlow:34,filt:100,machinefunctioninfo:[89,102],cmpb:35,emitloc:25,threadloc:[83,144],subprogram:[25,83,132],deep:[46,81,129,147],orbit:[18,32],simpletyp:140,"__sync_fetch_and_add_n":51,calledcount:20,file:[0,1,2,3,4,5,6,7,8,9,10,11,12,86,14,87,19,101,21,24,25,27,28,29,30,31,32,33,34,36,37,39,40,41,42,43,44,45,46,47,48,49,104,53,54,55,58,59,61,63,79,65,66,67,69,71,73,74,110,118,77,75,80,82,83,84,85,90,89,127,91,16,92,94,95,96,99,100,20,102,107,108,81,112,113,114,115,117,119,120,121,123,124,125,126,131,132,133,134,136,137,138,140,141,142,144,145,146,147,148,149],emitvalu:102,proport:[28,141],vop_dpp:38,fill:[81,110,114,83,57,132,14,101,125,24,25,27,28,29,30,31,32,33,91,96,38,75,146],denot:[37,102,88,110,144,83],mangler:[65,5,6,63,61,9],prime:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],hybrid:134,field:[102,48,2,113,115,52,82,83,117,79,120,57,15,62,90,87,101,22,26,65,130,88,125,67,132,34,138,38,110,36,106,144,44,148,149],"_cxxthrowexcept":139,xxxgeninstrinfo:65,"0xc0de":144,riinst:149,architectur:[47,48,2,50,51,100,104,5,83,8,54,136,11,7,12,122,86,14,142,62,24,64,65,89,34,93,94,95,114,37,74,38,139,45,102,52,118,92,106],fork:[4,122,134],reextern:[16,17,18,19,23],formed:83,"0th":130,sequenc:[46,102,134,1,87,81,83,79,57,7,122,13,62,48,18,19,101,22,65,130,88,125,68,132,32,33,91,34,93,95,38,139,39,110,140,51,105,106,44,45,149],ilist_trait:101,sanitizer_common_nolibc:52,arrayidx:83,unload:[91,83],getthesparctarget:65,descript:[46,75,87,2,7,100,52,81,53,83,8,79,54,10,119,120,11,129,145,59,61,58,90,102,20,24,25,126,65,66,88,28,127,68,132,133,146,34,80,94,95,71,36,99,112,37,73,138,38,101,57,140,51,141,118,92,106,144,139,42,107,137,108],v2f64:83,vpbasicblock:122,version_less:74,escap:[37,57,44,7,32,86,88,108,139,18,83,43],getreturntyp:101,unset:[25,44,74,90],symrecordstream:148,represent:[102,48,26,81,83,8,9,79,54,55,57,121,84,15,90,16,18,101,125,22,23,65,88,30,28,29,68,132,32,91,93,72,73,38,139,110,141,118,105,106,89,43,149],insertbefor:101,forget:[25,81,111,138,88,129,101],mrm3m:65,forbidden:[91,4,81],dollar:50,dw_form_ref2:132,sunk:[38,57],llvmdummyasmprint:65,dw_form_ref1:132,regno:102,mrm3r:65,dw_form_ref8:132,children:[101,129],edg:[46,54,88,7,39,102,118,84,91,14,83,139,122,20,72],image_sym_class_clr_token:140,your_lib:39,at_byte_s:132,insertion_block:[17,18,19],gcn3:38,brtarget8:65,instruct:[109,46,75,0,134,1,142,48,26,81,114,115,3,53,82,7,8,89,54,55,136,102,11,83,132,121,92,60,84,13,14,105,15,62,58,87,16,17,19,20,23,24,25,122,65,130,88,68,29,30,31,32,33,91,34,35,86,93,95,96,120,37,73,74,138,38,101,39,57,103,51,141,118,77,40,106,144,139,43,137,45,149],immt:8,vadv:49,r14:[102,8],r15:[89,102,83,8],r12:[83,102,35,8],r13:[102,8],straightforward:[102,129,65,132,29,30,31,32,33,91,134,15,93,16,17,18,19,101,121,23],r11:[103,83,8,106],fals:[46,81,87,2,52,3,82,5,6,83,61,9,129,57,63,132,121,12,13,17,20,24,25,65,28,29,30,31,32,33,91,34,94,95,37,38,101,141,118,105,145,108,148],offlin:[102,11],util:[46,1,47,48,49,80,114,104,53,63,8,9,54,120,57,83,101,24,65,66,88,28,68,33,34,134,95,96,36,37,74,45,110,141,40,131,42],seprat:39,fall:[24,25,81,65,46,88,83,28,30,31,32,33,48,16,17,18,19,7,72,9,101],type_code_integ:144,basereg:102,sin_port:5,run_funct:[16,17,18,19],memoryssa:[115,54,57],egg_info:49,ei_class:38,"_zero":38,instrprofvaluekind:83,gcno:100,use_end:101,stderr:[24,25,46,145,39,29,30,31,32,33,13,101,125],further:[81,87,2,7,114,115,104,63,84,9,83,61,13,105,68,62,101,41,65,130,88,30,67,132,134,37,74,139,39,51,40,144,148],fuzzerinterfac:39,macrofus:45,"7fca9f":79,webkit_jscc:[83,144],"0x8664":148,rawfrm:[65,149],globalalia:91,vc140:113,lawyer:40,val3:83,log2:[83,1],val1:[39,105,83],val0:[105,83],val7:83,excit:[26,15,114],"90p":84,abc:83,parsedattrinfo:34,close_fd_mask:39,abi:[46,142,26,114,83,136,120,11,121,12,60,86,105,15,16,101,24,25,65,68,30,132,35,93,37,74,38,139,45,102,76,40,106],worthwhil:101,abl:[110,0,1,48,26,122,83,61,117,79,54,120,57,7,121,12,60,14,15,62,87,16,17,18,102,20,25,65,130,88,68,28,30,31,32,132,91,134,97,37,73,38,101,39,75,118,40,106,42,147,108,149],"0x3fed":132,torerr:101,cont6:139,abu:120,g0l6pw:37,hurdl:121,"public":[81,0,47,114,5,6,63,61,9,54,129,56,11,132,14,117,90,101,125,24,25,65,88,28,29,30,31,32,33,91,146,37,110,40,42,148],exit5:11,cumemcpydtoh:11,logerrorv:[24,25,29,30,31,32,33],valc:11,variat:[102,65,57,1,139,39,2,4,147,9,97],vala:11,sophist:[88,49,102,91,147,83],analysisusag:[91,57],memory_order_acquir:[83,51],writetypet:55,pdbdllrbld:148,variad:[81,101],standard:[109,46,102,1,48,26,131,136,104,81,125,53,4,127,7,8,54,10,119,120,11,83,132,121,61,86,14,105,15,62,89,16,17,18,19,101,21,22,23,24,25,2,65,88,27,28,29,30,31,32,33,91,92,35,93,94,95,71,36,112,37,99,38,139,45,57,51,141,40,144,145,137,108],valu:[1,26,3,7,8,10,11,13,15,87,17,18,19,101,21,22,23,24,25,2,27,28,29,30,31,32,33,34,37,38,39,40,42,44,45,46,104,48,49,52,53,54,55,57,145,59,60,62,41,65,66,67,68,69,70,73,74,110,118,82,83,79,86,90,88,89,127,91,16,92,93,95,100,102,103,51,105,106,81,112,113,115,117,119,120,121,123,125,126,129,130,132,99,139,140,141,36,144,137,148,149],getint32ti:81,search:[46,1,48,2,7,82,5,6,63,61,9,54,83,132,87,17,20,41,88,68,28,29,30,31,32,33,37,73,74,101,39,40,139,42],unabbrevi:144,image_rel_amd64_sect:35,createfcmpon:[24,25,31,32,33],r12w:8,p0v8p0f_i32f:83,r12b:8,val_:19,r12d:8,codebas:[81,138],narrow:[37,55,81,130,57,145,39,75,68,51,20,101],iuml:102,quotient:83,primit:[81,130,87,28,26,51,32,15,144,89,18,149,83,101],transit:[38,115,48,102,91,42,82,139,87,16,83,9],x86iseldagtodag:84,elfclass64:38,inappropri:0,establish:[65,88,48,102,40,62,134,139,16,105,83],memor:81,regallocregistri:91,memop:141,replacedirectcal:87,distinct:[101,46,102,144,130,57,7,29,68,122,132,86,52,105,134,139,42,83,23],liber:[40,81],parse_expr:[16,17,18,19,22,23],tackl:[16,19,30,121,33],two:[1,26,3,4,7,8,9,11,13,14,15,16,17,18,19,20,22,23,2,125,30,31,32,33,35,37,38,39,40,44,45,46,48,49,52,54,57,63,59,60,61,62,41,79,65,67,68,72,73,74,75,110,82,83,84,85,86,87,88,89,90,91,93,95,96,101,102,51,105,106,109,81,115,120,28,129,130,132,134,138,139,142,144,131,146,148,149],unwindless:46,dienumer:83,a57:45,"_ztv3bar":7,desir:[46,81,0,48,26,82,83,8,85,13,7,86,15,62,20,2,65,88,28,132,91,35,74,101,39,51,106],expectedtoerroror:101,upper16:35,modistream:69,penultim:65,reconfigur:[42,146],particular:[46,75,0,87,49,2,113,122,115,81,83,8,85,102,11,129,60,86,142,68,62,48,16,19,20,125,22,79,65,130,88,67,28,30,132,33,91,34,97,37,74,100,101,39,57,51,148,118,105,106,144,139,42,44,45,149],ultrasparc:[37,65],dictat:[103,81,101],none:[102,48,2,82,4,83,120,13,16,17,18,19,101,22,23,130,88,28,91,94,95,97,37,38,139,75,105,149],stringerror:101,hour:[0,131],dep:[16,17,18,19],elsebb:[24,25,31,32,33],dev:[81,48,26,84,54,55,12,122,86,15,62,101,24,88,132,91,92,134,95,138,51,40,44,149],remain:[46,81,0,48,114,83,9,79,13,120,7,86,40,18,19,101,88,89,68,132,32,33,134,74,139,51,105,106,149],paragraph:[87,81,147],abandon:[101,68,138],deb:12,binfmt_misc:37,def:[115,82,8,55,68,89,16,17,18,19,101,21,22,23,24,25,65,27,125,29,30,31,32,33,36,73,102,105,44,149],global_atom:38,llvm_gcc_dir:49,emiss:[25,65,88,102,33,35,106,19,83],shard:2,loopend:[24,25,31,32,33,19],mcobjectstream:102,minimum:[37,55,81,74,65,38,83,125,75,132,114,40,106,145,63,84,22],image_file_executable_imag:140,dw_ate_unsign:83,strlen:101,retcc_x86_32_ss:65,calltmp1:[17,29,31,23],calltmp2:[16,30],awkward:[28,81,130],secur:[46,28,30,54],cse:[55,73,30,51,13,16],immutablemap:101,comfort:[87,0],global_load:38,cst:83,csv:[118,49,84],bar_map:81,regener:[75,114],redwood:38,emac:[37,81,8],objdump:84,"0x0000000000000002":123,number2:87,cmpvalu:87,pat:[102,8,65],memory_order_seq_cst:[83,51],bloom:102,ccpassbyv:65,sse4:1,binloc:25,sse2:[86,83],ryzen:45,mislead:81,hfc:109,cs1:[83,57],image_sym_dtype_arrai:140,takeerror:[5,101],rotat:[46,45,102,55],heartfelt:117,intermediari:101,proportin:96,"0x00002023":132,mydoctyp:110,localexec:[83,144],constants_block:144,vextsw2d:45,suffer:88,llvm_src_root:[49,41],patfrag:65,late:[105,102,62,65],pch:132,pend:[24,25,123,37,125,29,30,31,32,33,9,16,17,18,19,22,23],clangcommenthtmltag:34,amd_float_round_mode_zero:38,realpr:83,independ:[81,1,26,4,83,8,54,7,121,12,60,15,62,101,65,130,28,68,91,134,70,95,37,38,102,51,40,106,42,43,108],wake:134,timestamp:[113,134],pollut:81,p_arch:14,compound:79,nor:[46,81,130,88,87,39,102,148,104,106,144,139,4,83,121],revector:[46,101],adventur:101,complain:[37,104,77,11],cmpflag:87,sht_hash:38,mysteri:130,easili:[24,37,75,46,88,48,28,66,132,110,91,115,81,106,62,134,87,42,4,102,101],token:[102,48,83,55,68,16,17,18,19,21,22,23,24,25,27,125,29,30,31,32,33,134,139,110,105,43,44,148,149],findsymbol:[30,31,32,33,5,6,63,61,9],looputil:91,out:[0,2,4,5,6,63,8,9,12,86,14,15,87,17,18,19,20,21,22,23,24,25,26,27,125,29,30,31,32,33,34,37,38,39,40,45,46,104,47,48,49,50,52,53,55,57,61,64,65,66,67,68,69,73,74,110,118,77,75,82,83,84,90,88,89,91,16,93,94,95,96,97,100,101,102,51,105,81,114,115,117,120,124,28,130,132,133,134,139,142,144,131,149],clamp:38,harm:102,interleav:[83,122,38,1],offset0:38,mental:[105,101,111],offset2:83,mm5:[8,149],unequ:83,mm7:[8,149],mm6:[8,149],mm1:[8,149],idea:[46,81,47,87,49,26,50,83,84,9,55,132,105,15,62,16,17,18,19,125,22,23,28,29,30,31,32,33,72,139,40,144,131,149],functor:[81,61],mm2:[8,149],image_file_machine_thumb:140,connect:[46,73,138,122,146,5,101,9],wennborg:114,jingl:122,orient:[81,111,129,26,132,15,101],sparcgenregisterinfo:65,streamblock:67,usedlib:41,s_lshr_b64:38,handleerror:101,dw_tag_xxx:132,isref:149,print:[46,110,1,102,49,2,80,114,115,104,81,53,7,8,89,10,119,120,57,83,132,121,13,105,90,16,17,18,19,101,125,22,23,24,25,126,127,65,66,88,27,28,29,30,31,32,33,91,34,94,95,71,36,112,37,99,100,145,39,75,141,92,55,107,43,137,149],variable_nam:74,host_fn:14,dagcombin:55,use_llvm_analysi:[16,17,18,19,23],cconv:83,v_max_f16:38,intregssubregclass:65,suspici:4,b32:11,cuctxdestroi:11,test_host:14,mmi:89,intric:96,begincatch:139,dw_tag_union_typ:[83,132],omit:[46,112,53,83,10,119,14,17,22,125,127,31,91,92,94,71,38,39,102,141,36,106],intermingl:83,buildmast:146,testfnptr:83,postdomtre:46,vmov:7,perman:[63,0],clangcommenthtmlnamedcharacterrefer:34,"__c_specific_handl":139,callon:101,registerasmstream:102,printsth:46,exchang:[37,101],word_1:38,word_0:38,harfbuzz:39,argstart:28,tsvg:84,done:[46,102,47,48,49,50,114,115,81,82,4,5,6,83,61,85,55,120,63,132,123,86,105,87,16,17,18,19,20,125,22,23,24,25,142,127,129,88,68,28,29,30,31,32,33,91,134,97,74,138,38,101,39,110,103,51,40,108,139,44,149],dylib:[86,76,5,6,63,61,9],stabl:[65,108,59,114,13,40,96,101],rootnum:88,functionindex:70,image_sym_type_uint:140,somewhatspecialsquar:129,"5th":83,expansionregiontag:79,least:[46,81,134,47,48,2,50,115,83,120,57,12,16,17,18,19,101,125,22,23,24,25,65,68,28,29,30,31,32,33,34,93,97,38,139,39,102,51,118,40,106,144,149],statement:[46,81,0,1,3,83,79,55,14,90,17,19,101,25,65,130,29,132,31,34,33,73,139],createpromotememorytoregisterpass:[25,33],unalign:[62,51],memset:[46,5,83,51],binop:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],selector:[37,65,139,102,68,132,34,137,83,148],appropri:[46,110,0,134,47,48,2,114,100,81,82,4,63,8,9,55,102,11,129,83,12,84,14,105,62,18,19,101,125,22,65,88,28,68,132,32,33,91,93,70,37,138,38,139,57,51,141,40,146,108],pars:[102,48,2,52,125,82,83,8,89,85,54,55,132,121,14,90,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,34,73,108,39,110,106,144,107,44],word_m:38,toolset:[118,104,74],contrari:[102,83],cyclic:37,i32:[109,46,48,26,3,82,83,8,79,11,7,121,60,86,142,15,87,19,101,65,130,88,89,68,132,33,93,72,38,139,102,118,105,106,147],"_tag":[16,17,18,19,22,23],horizont:[83,7],i8mem:102,"_runtim":106,fpinst:8,constval:101,timeout_exitcod:39,hiddenglobaloffsetz:38,hiddenglobaloffsetx:38,uncontroversi:88,compileutil:[5,6,63,61,9],char6:144,hiddenglobaloffseti:38,debug_loc:107,consol:[54,102,30,118,16,147],writeonli:[83,144,38],built:[46,102,49,26,114,115,52,3,125,117,83,8,9,68,129,132,130,12,122,84,86,15,62,90,16,17,18,19,101,21,22,23,25,126,65,66,88,27,28,29,30,31,32,33,146,134,96,37,73,74,100,139,39,110,104,77,40,41,144,131,42,148],trip:[46,81,1,39,122,93,83],build:[126,46,81,64,47,49,2,50,80,114,115,52,125,127,5,6,83,8,9,54,68,120,57,63,121,12,122,61,13,14,105,15,124,90,16,17,18,19,101,21,22,23,24,25,142,26,123,65,66,88,27,28,29,30,31,32,33,91,146,34,86,134,96,118,37,74,100,139,39,102,104,76,77,40,84,41,144,131,42,108,148,149],extractel:[83,93],condbranch:65,cleanuppad:[139,105,83],gettransform:61,distribut:[81,134,49,2,114,104,5,6,63,61,9,54,11,145,121,12,8,86,90,123,91,83,96,72,37,118,40,131],significand:83,previou:[102,47,48,7,114,81,63,9,79,55,120,11,83,105,117,87,17,18,19,101,22,23,24,25,65,125,29,30,31,32,33,91,93,38,45,110,103,51,141,40,144,42,147],chart:1,xuetian:14,most:[46,75,134,47,48,49,26,50,114,90,115,81,53,4,123,7,8,9,85,54,55,102,11,129,83,132,121,12,84,86,14,105,15,62,87,17,18,19,101,125,22,23,127,25,126,2,65,130,88,68,28,29,30,31,32,33,91,93,70,37,137,74,138,139,39,57,51,148,76,40,106,41,131,42,43,147,44,45],valuetrack:48,cygwin:[37,104,102],undetect:39,charg:102,dimension:[18,130,32,11],addsdrr:149,emitandfin:61,"234000e":[29,23],resolvereloc:85,t2item:87,query_sampl:38,sector:4,visitbasicblock:101,runonmodul:[91,87,84],carefulli:[88,132,33,40,62,19,83],"__sync_val_compare_and_swap_n":51,"__try":139,particularli:[81,65,7,51,91,62,134,146,83,101],fine:[81,129,130,27,28,68,33,104,62,93,4,19,101,21],find:[46,110,0,47,48,49,2,50,114,115,104,81,131,4,5,6,83,8,9,79,54,55,102,57,63,132,59,12,61,62,87,16,17,18,19,20,125,22,23,24,25,65,130,139,108,28,29,30,31,32,33,91,134,96,37,137,74,138,100,101,39,75,106,77,40,84,41,145,42,147,44,149],realmag:[18,32],merger:87,experiment:[54,55,48,39,40,106,146,96,83,45],filesizepars:28,printmemoperand:65,unhappi:14,hasctrldep:[8,149],unus:[46,10,73,11,48,102,81,132,13,52,105,42,4,101,148],express:[46,102,111,26,100,81,125,5,7,8,9,79,10,57,83,132,121,61,86,15,62,89,16,17,18,19,101,21,22,23,24,25,2,65,130,88,27,28,29,30,31,32,33,91,37,73,38,139,39,110,105,106,55,45,149],cheaper:[109,101,68],"__cuda_arch__":14,wrinkl:[60,61],restart:[91,146,39,101,51],misnam:102,uncomfort:111,detect_leak:39,mycustomtyp:110,image_file_machine_arm:140,findanalysispass:84,vextuwrx:45,diloc:[83,7,132],common:[46,110,134,124,48,26,51,115,52,81,4,83,8,9,85,54,55,102,11,129,132,121,14,105,15,62,87,16,17,18,19,101,125,22,65,130,88,68,28,90,30,31,32,33,91,36,93,120,37,73,139,39,57,104,40,106,41,144,131,42,147,148,149],target_compile_definit:90,knownsafevalu:101,intptrsiz:88,clangattrpchwrit:34,"__nv_isnanf":11,printout:[127,101],decompos:[55,40],atomtyp:132,reserv:[109,38,65,48,39,102,114,106,144,83,148,97],mrm1m:65,ccdelegateto:65,dispatch2:[139,83],someth:[46,110,48,26,113,115,104,81,82,4,83,84,55,102,57,129,7,105,15,87,16,17,18,19,101,125,22,23,24,25,65,68,28,29,30,31,32,34,134,36,37,138,39,75,40,131,147,44,149],someti:83,passmanagerimpl:84,initializemodul:25,debat:81,smallest:[96,75,83],subscript:[46,83,57],experi:[74,111,48,30,50,132,115,134,87,16,147,61,9],altern:[102,48,49,100,104,83,122,13,14,62,19,101,125,22,65,130,28,68,33,134,74,38,20,45,110,140,118,77,40,139,108,39],dw_at_apple_property_gett:132,bourn:[37,28,121],appreci:40,dbistreamhead:148,complement:[101,83,130],unrol:[46,14,83,122,1],popul:[37,55,2,11,139,29,13,34],identify_mag:45,findsymbolinlogicaldylib:9,uniprocessor:51,alon:[37,28,102,86,40,125,22],tempor:83,densemapinfo:101,cpufreq:[50,97],allocs:[83,144],corei7:[86,1],simpli:[46,81,48,49,115,4,7,61,120,57,83,121,12,86,16,20,125,41,23,127,65,130,89,28,29,30,132,91,134,37,138,101,102,40,106,22,139,43,148],fldcww:102,point:[110,1,47,48,114,115,81,125,95,4,5,6,83,8,85,54,55,102,11,129,63,132,12,60,61,14,142,68,62,87,16,17,18,19,20,21,22,23,24,25,65,130,88,27,28,29,30,31,32,33,91,92,35,134,74,96,72,37,73,67,38,100,101,57,51,106,118,77,105,84,144,139,146,108,148,124],instanti:[85,110,129,65,28,2,91,100,14,34,101,8,149],linkagenam:83,alloca:[24,25,81,130,46,88,48,45,102,103,60,33,132,115,105,106,62,139,19,83,101],classof:[34,129],shutdown:39,suppli:[108,75,144,110,63,39,26,50,114,91,100,105,15,134,139,43,141,83,9,101],ecsubstreams:148,setinternallinkag:101,throughout:[85,37,144,38,83,40,93,90,4,7,79],backend:[102,48,49,52,3,83,8,54,55,136,145,60,14,62,20,64,126,65,130,89,68,132,34,95,37,38,101,45,75,51,106,139,146,137,149],sectionmaphead:148,global_begin:[81,101],dovetail:[19,33],aarch64:[37,136,89,45,68,50,118,52,106,93,83,39],linkonce_odr:[83,62,144,11],retq:[48,89],val1l:83,globalvarnam:83,r_x86_64_8:35,diimportedent:83,reformat:[43,81],legalizerinfo:68,converv:38,multiclassobject:44,image_sym_class_extern:140,dwarfdebug:132,lto_codegen_add_must_preserve_symbol:108,unnecessarili:[91,57],gap:[68,81,83],feat_jit:102,understand:[46,102,0,111,87,2,81,4,83,8,117,55,57,63,121,84,86,15,124,48,19,101,21,25,130,88,27,29,132,33,91,69,134,138,139,110,40,144,42,43,147,44,149],atomicrmw:[83,51,38],instrumentationmap:118,convers:[109,110,65,11,101,28,1,81,62,102,83,84,149],objfilenam:148,isstoretostackslot:65,raw:[85,79,10,127,119,99,100,112,28,29,84,105,34,70,43,102,49],noexcept:139,unifi:[46,37,101,26,15,62,144,83],amdgpu:[37,136,38,54,45,102,68,83],fun:[27,26,84,35,15,16,17,18,19,21,23],anonym:[46,81,0,104,84,9,132,16,17,18,19,22,23,24,25,65,125,29,30,31,32,33,91,40,44,149],everyon:[81,0,26,40,15,96],subsect:[147,101],workgroupsizehint:38,lto_codegen_add_modul:108,mystic:[26,15],semispac:88,itself:[110,0,134,47,48,2,100,52,81,131,5,6,83,61,9,55,102,57,63,132,121,12,60,86,105,15,62,87,16,17,18,19,101,125,22,23,24,25,26,129,66,88,67,28,29,30,31,32,33,91,93,130,139,37,74,108,39,75,104,40,106,144,145,42,44,45,149],codegen_func:[16,17,18,19,23],swiftcc:[83,144],"0x00007ffff7ed40a9":123,case_branch_weight:3,sdwa:38,myseqel:110,clangdiagsindexnam:34,incarn:55,libc:[37,81,101,39,26,14,40,15,83],getlin:[25,132],flag2:[87,39],flag1:[87,39],nameflag:132,multicor:51,keyr:37,sym:[47,36,35,5,6,63,61,9],keyt:101,moment:[88,48,68,105,89,83,63,23],aliassettrack:57,travers:[46,102,129,88,87,2,68,91,42,101],task:[55,81,139,87,132,114,105,48,4,101],n_bucket:132,entri:[109,46,110,48,122,115,3,4,5,6,83,8,89,85,55,102,11,129,7,132,59,60,61,142,62,87,16,17,18,19,101,63,23,24,25,65,130,88,68,125,29,30,31,32,33,91,69,134,71,72,37,73,74,38,139,39,57,141,118,105,106,144,42,147,149],"16mib":35,globalisel:[54,68],spent:84,uint32_t:[110,113,132,69,5,83,148],spend:[2,84],instr_begin:19,ldc:45,llvm_target_definit:65,ldm:83,ldl:14,ipconstprop:46,ldr:[43,8,93],shape:[132,101,8,129,114],world:[79,37,111,138,88,27,26,132,91,104,15,90,147,83,21],depriv:101,stwu:102,cut:[28,65,9,72],shiftinst:81,snan:83,singlesourc:[86,49],"0b000000":65,restructuredtext:147,objectbodi:44,largeconst:106,dllvm_experimental_targets_to_build:65,"_segment_ptr":38,rgm:91,globalsaa:115,bin:[37,100,47,145,28,12,50,84,86,77,104,39,134,131,96,8,41],"0x00001023":132,xcodebuild:74,big:[54,102,65,47,101,29,81,50,32,33,86,97,40,62,93,95,18,19,83,23],preemptabl:38,bia:[72,97],judgement:40,transmit:83,ld1:93,irgen:[5,6,62],bit:[102,47,48,26,113,51,52,3,125,53,7,8,89,79,55,68,136,120,11,129,83,132,60,14,105,15,90,87,16,17,18,19,101,21,22,23,24,25,142,65,130,88,27,28,29,30,31,32,33,91,34,35,93,70,37,73,74,38,139,39,110,104,148,40,106,144,131,146,44,45,149],ccassigntoregwithshadow:65,knock:81,writealia:87,semi:[88,26,118,15,90,42],sema:34,constmerg:46,is_xnack_en:38,has_jit:42,aliasset:[65,57],often:[46,75,110,48,26,81,83,61,54,55,102,11,129,7,121,84,86,14,15,62,16,19,20,125,22,65,130,88,89,28,30,132,33,93,37,74,38,101,39,57,51,40,139,149],steensgaard:57,modsw:45,weakodrlinkag:101,dllimport:[83,144],back:[102,124,48,50,114,100,81,5,6,83,8,9,54,120,11,63,132,121,12,61,86,105,62,89,16,17,19,20,24,25,130,88,68,29,30,31,32,33,34,134,37,74,38,101,39,110,103,51,76,40,106,139,45],bach:4,dw_apple_property_null_resett:132,"0x00002000":132,mirror:[37,88,31,32,134,17,18],densemap:[45,101],sectionmapentryflag:148,sparcreg:65,compilecallbackmanag:[6,63],scale:[81,129,130,102,141,34,72,97],cont:[139,105,83,60],l10:84,per:[102,48,49,114,115,52,53,83,61,79,120,11,63,86,89,16,101,64,129,88,68,28,30,132,91,34,134,36,72,74,38,108,45,110,51,105,106,144,139,42,44,39],modest:81,parse_extern:[16,17,18,19,22,23],substitut:[46,102,7,2,51,86,106,90,83,149],mathemat:[11,87,125,121,83,22],larg:[46,81,48,49,2,114,115,53,82,83,8,117,11,145,60,86,14,68,62,16,20,63,65,67,28,30,132,35,95,96,37,101,39,102,51,40,106,41,144,45],chandlerc:138,s9170:38,cmake_instal:74,reproduc:[86,39,75,33,13,40,114,96,19,20],createentryblockalloca:[24,25,33],bb0_1:11,intial:101,patient:[91,111],dw_tag_template_value_paramet:83,vabsduh:45,c0c0c0:102,initialse:58,addpdrr:149,unvectoriz:1,vabsdub:45,s16:68,s15:83,fnstart:102,adc64rm:8,addpdrm:149,float_of_str:[16,17,18,19,21,22,23],vabsduw:45,deadtypeelim:[46,101],selp:11,impos:[0,83,102,40,106,89,101],usb:50,constraint:[46,55,102,65,38,48,127,122,132,91,115,40,134,139,83,8,101],preclud:[48,93],gcodeview:132,createfadd:[24,25,29,30,31,32,33],litconfig:2,forexprast:[24,25,31,32,33],disclosur:[40,0],timberwolfmc:49,fmin:83,image_sym_type_long:140,beanz:134,spasr:134,ei_data:38,stxv:45,add32mi8:8,keystrok:81,nsz:83,frames:88,n2242:81,nsw:[105,40,83,62,130],inclus:[81,38,65,100,41,4,137,83,9,149],hydra:131,errno:[83,57],megabyt:145,x86_fastcallcc:144,subst:[44,8,149],includ:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,101,21,22,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,42,43,44,45,46,104,48,49,50,52,53,54,55,57,63,60,61,62,41,79,65,68,73,74,118,77,82,83,84,85,86,90,88,127,91,93,96,99,100,20,102,51,105,106,108,81,111,113,114,115,117,136,120,121,122,125,126,129,130,131,132,133,134,138,139,145,137,148,149],cptmp0:65,cptmp1:65,numvgpr:38,image_scn_align_1byt:140,llvm_build_doc:74,myservert:5,tinyptrvector:101,reorgan:[110,122],failure_ord:51,dwarfdump:[107,7,132,80],storemerg:105,int8_t:110,s_cmov_b32:38,translat:[46,81,26,83,79,119,57,121,122,15,62,102,101,25,65,130,28,68,132,34,37,110,51,137,148],llvmfoldingbuild:16,sdk:[37,14,74,38],concaten:[37,144,44,68,86,93,149,83,101],movsx16rr8w:102,instrumen:79,movnt:83,v8i16:65,"0x00000009":132,curr:21,xxxiter:101,attrinfomap:34,flow:[109,46,110,1,48,64,26,142,115,81,83,85,54,68,102,11,59,122,14,105,15,62,90,16,17,18,19,20,21,22,23,25,65,27,125,29,30,31,32,33,91,73,101,57,40,139,147,108],debug_nam:132,functioninfo:109,clangattrlist:34,codgen:23,isdigit:[24,25,27,125,29,30,31,32,33],prevail:120,singli:88,cmake:[49,50,52,84,54,12,90,101,65,66,146,134,96,97,37,74,39,104,77,40,131,42,147,45],amd_float_round_mode_plus_infin:38,crypt:40,sequenti:[144,38,7,102,134,139,83,101],llvm_target_arch:74,bpf_rsh:102,vg_leak:2,asymmetr:130,deseri:34,dgpu:38,llvm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,79,80,81,83,84,85,86,90,88,89,127,91,16,92,93,94,95,96,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,125,126,129,130,131,132,133,134,137,138,139,141,142,144,145,146,147,148,149],functionnod:87,benchmark:[37,1,47,49,132,114,86,14,40,101,41,97],globalvar:144,"8600b":38,orcabisupport:5,formatt:83,tok_numb:[24,25,27,125,29,30,31,32,33],cater:34,extrahelp:28,unaffect:115,deserv:[83,62],image_sym_type_float:140,image_comdat_select_associ:83,machine_version_step:38,dcmake_osx_architectur:37,downcast:129,i17:68,i16:[102,83,65,38,11],tradeoff:[16,88,30,51,115],required_librari:42,type_code_float:144,llvm_shutdown:101,"0fb5bfbe8e":11,addescapingus:57,queri:[46,81,1,26,115,82,83,84,117,57,61,13,15,62,101,65,28,68,132,91,70,38,39,102,51],machinefunctionproperti:68,strex:51,classic:[45,102,101],inrang:83,ds_write_src2_b64:38,demangl:[94,100,39,132],privat:[81,0,87,5,6,63,61,9,129,11,83,105,62,101,65,132,42,34,38,40,144,146],antisymmetr:87,ulimit:39,polyhedr:122,elsewher:[48,101,65],createtargetasminfo:65,granular:[13,4,113,68,38],cumoduleloaddata:11,noop:83,"6666ff":102,findlead:101,passiv:13,priority_queu:101,loopinfowrapperpass:91,bpf_sub:102,immsubreg:65,disclos:0,named_valu:[16,17,18,19,23],error_exitcod:39,"0xe413754a191db537":79,cudeviceptr:11,volum:[54,101],stackguard:83,implicitli:[102,1,26,81,125,83,15,90,16,17,18,19,101,21,22,23,24,25,27,28,29,30,31,32,33,91,35,134,110,40,106,144,44,149],flagscpu2:110,parenthandl:83,postord:73,stddef:39,patch_premain:[118,84],refer:[46,110,134,47,48,2,50,114,115,81,89,117,131,83,8,9,85,54,63,136,102,11,7,132,121,122,61,13,90,87,17,139,19,20,125,22,23,24,25,65,130,88,68,28,29,30,31,32,33,91,69,34,35,86,93,70,94,95,36,72,37,73,74,138,38,101,45,57,105,106,144,145,42,43,149,44,148,79],pbqp:[102,92],"0x9":[102,101],"0x8":[102,101],fortun:[24,81,26,30,31,33,15,16,17,19,101],veli:102,"0x3":[106,102,101],segmentreg:102,"0x1":[106,102,101,132,38],"0x0":[102,101,144,38],toplevelexpr:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],"0x6":102,"0x5":[102,106],"0x4":[102,106],arcpatch:138,append:[74,120,145,119,86,100,144,17,149,83,41,101],"0x1f84":94,miscommun:40,avalanch:101,power:[46,50,125,83,8,136,57,7,60,68,124,16,17,18,19,101,21,22,23,27,28,29,30,31,32,33,138,38,45,102,108],resembl:130,unwound:83,access:[46,110,134,1,48,26,51,115,104,83,61,9,85,55,102,11,130,13,105,15,62,87,19,101,65,66,88,89,28,29,67,132,33,91,34,93,96,36,120,37,74,138,38,100,139,45,57,52,118,40,106,146,39,149],agg1:83,agg3:83,agg2:83,mppassmanag:84,deduc:[46,38,83,13,62,149,44,101],appatur:38,kabini:38,camlp4:[21,22],sint:83,closur:[42,26,15],dw_macinfo_defin:83,"0xh":83,partialalia:57,"0xm":83,jonathan2251:64,"0xc":[102,144],"0xb":102,"0xa":[102,101,38],vertic:118,sinc:[75,110,47,48,50,114,115,104,81,82,4,83,8,9,85,102,11,129,132,121,12,61,105,68,117,87,16,17,18,19,101,125,22,23,25,65,130,88,27,28,29,30,31,32,33,91,134,148,72,120,37,67,38,139,39,57,103,141,40,106,144,147,44,45,79],"0xe":144,"0xd":[102,144],remark:[45,20,1],unsiz:68,fpregsregclass:65,lto_codegen_cr:108,cerr:[84,11],earli:[91,81,65,11,89,39,68,148,33,13,14,105,19,83,61],implement:[46,110,134,64,47,48,2,142,115,52,81,125,4,5,6,83,61,9,85,54,55,68,102,11,129,63,132,130,92,60,84,13,14,105,15,90,87,16,17,18,19,101,21,22,23,24,25,26,123,65,66,88,27,28,29,30,31,32,33,91,34,35,93,72,120,37,73,138,38,108,39,57,103,51,118,77,40,106,139,42,43,44,45],irreduc:[46,65],setscalarinvectoract:68,foundat:[0,111,38,91,40,134,9],domtre:46,mov64ri:65,tool_nam:37,expr1lh:79,nirror:134,toshio:102,seamless:77,websit:[75,114,134,90],advoc:[81,111],select_isd_stor:65,"_regoffset":8,acc:[101,83],at_encod:132,kernargsegmentalign:38,int32ti:101,bpf_jne:102,trait:[81,110,101],attrspel:34,image_scn_align_512byt:140,undefinedbehaviorsanit:39,trail:[79,110,130,7,28,2,81,90,83,101],train:[131,141],multiclassid:44,account:[37,0,111,138,88,87,118,146,40,134,129,83,84],dcmake_c_compil:39,komatsu:102,alia:[46,73,65,1,7,28,57,60,89,51,91,115,36,54,144,87,130,102,83,9],rdynam:[18,19,30,32],obvious:[46,55,81,130,57,47,27,28,102,149,114,91,40,125,87,148,83,21,22,101],ch9:25,unread:[81,51,134],fetch:[37,38,102,52,3,134,83],aliv:[46,87,102,91,105,101],n2657:81,abcd:144,sqlite:39,granulated_wavefront_sgpr_count:38,sought:83,virtualindex:83,onlin:[90,97,19,74,33],formmask:65,serial:[37,55,54,87,110,68,34,89,41],everywher:[87,110,30,86,115,16],"00002fc0":84,surfac:102,rootcount:88,optyp:65,add32rm:8,inteldialect:83,llvm_lit_tools_dir:[104,74],usub:83,add32rr:8,add64mr:8,klau:134,tag_memb:132,act:[46,81,0,87,39,102,132,72,86,115,83,61,101],getehframesect:85,unused_sext:38,nothidden:28,llvm_include_dir:74,redund:[46,73,48,28,102,30,13,14,68,62,16,63,101],philosophi:[42,54,108,20,132],physic:[0,38,65,48,102,68,89,111,149,83,148,101],bind:[81,5,83,54,121,16,17,18,19,22,23,24,25,65,125,29,30,31,32,33,110,44,149],correspond:[46,110,48,113,142,115,104,81,125,82,7,8,79,55,129,11,83,59,86,105,87,17,102,20,121,22,23,25,126,65,130,88,89,28,29,31,132,91,69,92,35,93,94,37,73,74,138,38,101,75,51,40,144,139,44,148],afterloop:[24,25,31,32,33,17,18,19],region1:79,region0:79,noitin:95,fallback:[52,68,144],loopendbb:[24,25,31,32,33],writethunkoralia:87,declet:83,sgpr0:38,c11b17:102,symbols:69,ptr_rc:102,deallocationtypemismatch:52,symbolt:101,cpu_x86_64:110,cflag:41,getregisteredopt:28,bunch:[27,49,121,30,131,32,90,16,18,101,21],v4i32:83,tsm:148,acycl:[102,73,132,65,137],fpcmp:49,outputdebuginfo:28,tsc:84,labor:28,i1942652:83,list_of_list:90,typemap:55,immtyp:8,clientaddr:5,dag:[73,65,149,48,102,7,72,86,34,134,137,44,8,101],uncategor:28,passnam:[127,101],grpc:39,dan:110,spell:[40,34,81,45],dai:[37,74,54,26,114,40,15,101],symbol2:35,symbol1:35,nval:83,mylist:110,isimplicitdef:8,strive:[86,96,81,68,111],createfcmpult:[24,25,29,30,31,32,33],hashtbl:[16,17,18,19,22,23],dynstr:38,mem2reg:[46,88,33,62,19,101],mem2ref:48,sin:[110,1,27,125,29,30,57,14,9,16,83,21,22,23],februari:118,dllvm_libdir_suffix:74,add16ri8:8,is_dynamic_call_stack:38,postdomfronti:46,s_andn2_b32:38,intellig:[101,83],dereferenceable_or_nul:[83,144],asymptomat:145,dw_tag_gnu_template_template_param:83,machinefunct:[91,101,102,68],llvmsupport:[37,41],fluctuat:57,function_ref:101,dilexicalblock:[83,132],rex:83,paramattr:144,twice:[37,47,87,30,91,104,105,131,16,83,101],pitcairn:38,createmyregisteralloc:91,rev:[134,114,93,16,17,18,19,22,23],ret:[46,48,115,3,83,11,7,132,121,86,142,16,17,19,101,23,130,88,89,29,30,31,33,93,139,102,103,51,105,106,147,149],stub:[136,65,87,102,5,6,63,101],eliminatecallframepseudoinstr:65,typenam:[5,101,61,38],stuf:7,rel:[81,47,48,49,2,114,115,53,83,61,54,7,122,62,17,101,41,25,88,28,31,35,72,37,74,38,39,102,103,141,105,106,144,43],rem:102,image_file_machine_powerpc:140,rec:[16,17,18,19,21,22,23],dw_apple_property_assign:132,barrier0:[83,11],ref:[46,11,16,17,18,19,22,23,24,25,125,29,30,31,32,33,69,134,37,57,148,149],defens:40,red:83,clarifi:132,deregisterehframesinprocess:5,workflow:[118,134,122,138,131],flaghollow:110,attrbuild:70,thejit:[25,30,31,32,33],gaug:134,releas:[81,47,50,114,83,84,9,54,105,62,101,41,126,65,29,91,70,96,37,74,38,139,39,102,51,76,77,40,106,108,45],test_devic:14,bleed:[54,90],setinsertpoint:[24,25,29,30,31,32,33],cudevicegetcount:11,indent:[25,81,110,101,147],retain:[73,101,28,121,91,52,40,93,83],hex64:110,suffix:[91,55,29,74,65,38,101,28,2,81,120,86,100,92,112,119,5,6,83,23],createcompileunit:25,pgo:[131,117,141],targetregsterinfo:102,pgr:54,ualpha:44,secondlastinst:65,facil:[81,57,88,28,2,132,104,134,4,121,41],wavefront:38,suffic:[113,93],llvm_enable_eh:74,ancient:131,s9150:38,dllvm_use_sanitize_coverag:39,habit:[46,81],target_data:[16,17,18,19],messag:[81,75,49,2,7,8,54,120,13,90,20,24,28,91,34,134,37,73,74,99,138,101,39,110,40,139],sadli:138,dw_apple_property_sett:132,memory_order_releas:[83,51],lookuptarget:24,comparefp:149,gear:74,debuginfo:[86,25,113,132,46],ogt:83,s31:83,s32:[68,11],whitelist:[146,48,134],pg0:87,kaleidoscop:[64,87,26,5,6,63,61,9,15,16,17,18,19,101,21,22,23,24,25,27,125,29,30,31,32,33],nobodi:134,"__objc_imageinfo":83,nontempor:83,image_file_aggressive_ws_trim:140,source_i386:94,prune:[46,122,115],rpass:1,structur:[46,102,1,87,49,26,113,80,115,104,81,125,117,7,8,9,85,120,57,83,132,59,122,86,15,62,89,16,17,18,19,20,21,22,23,25,65,66,88,27,28,29,67,31,32,33,91,34,134,70,130,37,73,38,101,39,110,51,148,105,144,139,42,147,108,45,79],charact:[2,100,125,83,79,120,7,132,86,16,17,18,19,101,21,22,23,24,25,27,28,29,30,31,32,33,34,38,102,36,144,43,44,149],"123mb":28,then_val:[17,18,19],machinemoduleinfo:89,"4a789c":79,thereaft:106,subclassoptionaldata:87,ehobj:139,deprec:[118,74,38,65,45,50,86,40,144,101,49],createtargetmachin:24,corrupt:[120,139,39,26,52,15],ispack:144,have:[0,2,3,4,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,57,63,59,60,61,62,41,79,65,68,70,72,74,75,118,77,81,82,83,84,85,86,90,88,89,127,91,16,36,93,96,97,100,101,102,103,104,105,106,109,110,111,113,114,115,120,121,122,124,125,129,130,132,134,138,139,144,131,146,147,148,149],tidi:91,cgroup:96,debugcount:101,bpf_jsge:102,min:[47,14,83,39,84],mib:35,mid:[83,60,62],in64bitmod:102,sspreq:[83,144],mix:[81,130,1,101,45,102,51,122,77,108,90,42,7],belief:111,bpf_jsgt:102,startval:[24,25,31,32,33],imul16rmi:102,mir:[54,68,89],p3i8:11,mit:40,isloc:[83,132],baz_in_c_cc:3,poison_yet_again:83,unless:[46,81,0,48,49,114,115,83,117,10,7,86,14,105,62,90,17,19,20,65,130,88,28,131,31,33,91,92,134,74,99,38,100,101,39,40,106,139,147],freebsd:[37,45,102,97],fcuda:14,preliminari:[45,65],c11lineinfo:69,nativeptrt:5,setpreservescfg:91,eight:[102,83,120],transcript:[16,30],instrprof_incr:83,landscap:134,faultingloadstor:109,v8i32:83,returnaddress:83,gather:[38,1,87,28,86,34,40,139,42,83,41,101],request:[24,37,63,0,138,38,88,48,144,85,40,106,134,139,149,83,108,9,120],image_file_machine_mipsfpu16:140,getdirectori:[25,132],institer:101,instantiatetemplateattribut:34,occasion:[88,14,144],removemodul:[30,31,32,33,5,6,63,61,9],addpassestoemitmc:85,addtmp:[24,25,29,30,31,32,33,16,17,18,19,23],dllexport:[24,25,30,31,32,33,144,83],elid:[88,105,60,149],ifconvers:65,text:[102,0,111,87,49,26,100,81,7,55,120,86,15,101,21,65,27,28,36,35,74,138,38,39,110,140,141,118,40,106,43,147,44],ifconvert:65,elig:[46,105],sanitize_thread:[83,144],llvm_map_components_to_libnam:74,staff:0,dw_tag_pointer_typ:[83,132],loweroper:65,categor:[46,28,34,65],src_root:37,"__morestack":103,cpunam:[95,92],inferior:123,data64bitsdirect:65,print_newlin:[16,17,18,19],beat:68,lower_bound:101,litvalu:144,sysv:[36,136],disagre:[83,111],bear:7,is_base_of:129,image_sym_class_member_of_struct:140,increas:[46,75,1,29,68,52,40,62,134,124,95,81,105,108,8,23],gcwrite:[88,83],at_end:[16,17,18,19,23],callpcrel32:149,agrep:49,integr:[46,74,64,88,48,28,2,68,132,66,142,13,80,14,108,45,134,42,83,39,101],debug_count:101,printlabel:65,conform:[37,110,121,38,88,83,92,2,81,114,40,63,61,101],project_nam:41,emitfnstart:102,dw_tag_file_typ:132,vc41:[113,148],nt_amd_amdgpu_metadata:38,"0x00000233":7,athlon:24,dpython_execut:50,bitrevers:83,pattern:[2,80,7,52,63,8,55,11,83,122,84,86,90,101,21,22,65,130,27,28,29,68,132,34,93,100,102,51,105,131,149],boundari:[46,144,30,102,67,51,105,93,83,101],callgraphsccpass:[13,91],progress:[73,74,88,27,2,68,114,105,40,89,136,102,83,21,101],"0b100":149,"0b101":149,is_dynamic_callstack:38,strtab:[144,38],multirepo:134,switchtosect:102,nvptx64:11,phase3:[47,114],plugin:[54,88,145,127,13,77,95,83],joke:111,equal:[81,87,2,3,83,129,57,121,14,62,17,18,19,101,125,22,24,25,65,28,67,31,32,33,69,72,38,139,102,144,148,149],instanc:[102,47,87,26,81,83,61,9,85,54,129,86,7,60,13,15,101,125,22,23,2,65,88,89,28,29,68,132,91,34,134,96,74,138,38,110,105,106,149],rust:45,valuelistn:44,gmir:68,venu:0,guidelin:[81,12,122,40,147,101],vend:60,functionnam:[88,83],setmcjitmemorymanag:85,v2i32:83,gc_transit:48,endforeach:90,commandlinepars:84,defini:82,unused1:148,unused2:148,addresssanit:[39,83],ifunc:[83,144],autovector:1,component_1:42,component_0:42,createmul:101,assert:[46,110,47,50,114,81,5,6,11,86,102,101,24,25,65,28,29,30,31,32,33,91,37,74,39,75,76],untyp:89,"__sync_fetch_and_umax_n":51,sectioncontributions:148,statist:[79,118,57,39,127,91,92,53,95,101,49,41,97],determinist:[57,20,39,102,34,131,101],multi:[54,81,38,108,45,68,39,134,131,71,101,28,117,149],plain:[91,147,101,134,9],baselay:61,defin:[2,3,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,46,48,49,52,53,54,55,57,63,60,61,41,64,65,66,68,69,72,74,75,118,110,82,83,84,79,86,90,88,89,91,16,36,93,96,102,51,105,106,108,81,113,114,115,117,76,120,121,125,129,130,132,139,142,144,145,147,148,149],deem:[55,75,83,114],operandtyp:65,howev:[109,81,134,1,48,49,26,114,106,82,4,83,8,9,85,118,120,57,63,132,121,12,60,61,86,14,105,15,89,16,17,18,19,20,130,88,68,28,29,30,31,32,33,91,35,93,37,138,38,101,39,102,103,51,76,77,40,84,144,139,42,147],func_typ:48,helper:[81,87,2,125,83,9,85,86,57,132,13,18,19,101,21,22,23,24,25,65,28,29,30,31,32,33,34,37],almost:[55,73,134,88,48,102,81,51,40,62,93,4,101],virt:101,srand:39,maystor:8,isreturn:[8,149],in32bitmod:102,"4gib":35,substanti:[81,57,88,30,16,83],linkabl:38,st7:8,unneed:[19,33],llvm_enable_zlib:74,restofthecleanup:105,japanes:37,livecount:88,addmoduleset:[63,61,9],"__cxxframehandler3":139,codepath:[101,51],ae4deadbea242e8ea517eef662c30443f75bd086:132,infer:[91,102,129,66,48,110,68,13,14,92,62,93,95,81,83],backtrac:[25,102],clangdiaggroup:34,read_async:105,cubic:39,valueopt:28,dealloc:[88,101,52,105,83],default_branch_weight:3,sm_30:[14,102],image_scn_align_32byt:140,tighter:105,mcsection:102,center:[25,102,101],neural:49,nevertheless:83,getopcod:[101,65],builder:[24,25,37,54,39,29,30,31,32,33,101,146,70,16,17,18,19,63,125,22,23],col:25,dfpregsregisterclass:65,setp:11,choos:[102,0,111,115,125,82,83,9,145,12,14,16,17,101,21,22,23,24,65,88,27,28,30,31,132,91,93,95,96,74,138,75,118,40,146],error_cod:[24,101],setvector:101,usual:[81,87,49,26,53,83,61,9,55,129,57,7,86,14,105,15,20,25,65,130,88,89,28,127,132,91,35,134,96,37,73,74,138,101,39,102,103,51,77,40,144,147,108,148,149],unari:[24,25,27,26,32,33,15,18,19,44,21],tarjan:91,getgloballist:101,listconcat:[44,149],numberexprast:[24,25,125,29,30,31,32,33],p18:11,lto_module_cr:108,f_none:24,tough:[125,22],gendfapacket:102,adt:[24,25,37,101,125,29,30,31,32,33,5,6,63,61,9],tight:[108,62],add_cfg_simplif:[16,17,18,19],memorymanagerptrt:61,onward:[74,38],uwtabl:[118,83,132,144],add:[2,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,35,37,38,39,40,44,45,46,47,48,49,54,55,57,63,61,62,41,65,68,70,74,75,118,81,82,83,84,86,90,88,89,127,91,16,96,20,102,51,105,106,109,110,100,76,120,121,122,123,124,125,129,130,132,134,138,139,144,145,146,149],cleanup:[46,73,139,132,30,31,60,40,16,17,105,83],getsymboladdressinprocess:[5,6,63,61,9],citizen:101,dced:101,c11:[132,14,148,69,51],successor:[46,102,65,89,59,122,81,62,139,83,72,101],match:[46,102,139,48,49,2,81,80,100,3,113,83,84,89,79,10,129,7,59,86,14,68,117,90,16,17,18,19,20,21,22,23,65,130,88,27,28,29,30,55,132,91,34,134,37,38,101,39,110,51,105,144,145,42,108,148,149],apple_typ:132,torvald:134,"__cxx_global_var_init":84,hypersparc:65,sphinx_execut:74,llvm_yaml_is_document_list_vector:110,g_add:68,image_file_net_run_from_swap:140,punctuat:[44,81,83],realiz:[16,18,55,32],llvalu:[16,17,18,19,23],coldcc:[48,83,144],substit:83,clang_bootstrap_cmake_arg:131,insert:[46,81,48,4,83,120,57,7,132,87,16,17,18,19,20,23,24,25,65,88,68,28,29,30,31,32,33,91,93,38,101,102,51,118,105],like:[26,3,4,5,6,7,8,9,11,12,86,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,37,38,39,40,42,43,44,45,46,104,47,48,49,50,52,55,57,63,59,61,62,79,65,67,68,74,110,118,83,84,85,13,87,88,89,91,95,96,101,102,103,51,105,106,108,109,81,115,117,76,120,121,122,125,129,130,132,134,138,139,142,144,131,147,149],success:[110,81,5,6,83,145,86,16,17,18,19,101,22,23,24,25,65,66,125,29,30,31,32,33,91,134,37,139,75,40],sstream:81,registeranalysisgroup:[91,57],inferenc:102,c1x:83,soft:[4,132,95],crawler:88,unreach:[79,25,10,46,88,87,121,30,31,32,33,109,105,62,139,16,17,18,19,83],vec01:83,convei:[88,139,68,40,62,83],mtype:38,registermcobjectstream:102,"_m4enum":83,proper:[79,25,81,129,65,101,2,68,51,14,134,83],stringset:101,getparamtyp:101,release_1:37,tmp:[74,130,88,83,102,30,33,86,94,16,96,19,7,41,101],incant:14,nvcc:[14,102],add_instruction_combin:[16,17,18,19],llvmrock:81,esp:[102,7,8],nvcl:11,tma:38,nonempti:83,"__internal_accurate_powf":11,dw_tag_structure_typ:[83,132],walkarch:101,errorcodetoerror:101,notail:83,prose:81,intregsregisterclass:65,dce:[46,28,105,55,145],word32:38,noisi:[46,40,101],host:[81,49,5,6,63,61,9,85,54,11,83,121,12,86,14,101,24,88,134,95,96,37,74,38,138,39,102,131],"0xffff":[106,83,148,38],clangattrtemplateinstanti:34,geometr:[26,15],gvreg:68,chrome:84,sectionlength:148,about:[0,1,26,4,7,61,9,11,12,14,15,87,17,18,19,101,21,22,23,24,25,2,27,28,29,30,31,32,33,34,37,38,39,40,43,44,45,46,104,47,48,49,50,52,53,54,55,57,63,62,65,67,68,69,71,72,73,74,75,118,82,83,84,85,90,88,89,91,16,92,96,99,102,51,106,108,109,81,114,115,117,76,120,121,123,124,125,129,130,132,134,138,139,141,36,144,146,147,148,149],actual:[109,46,102,47,48,49,26,115,52,81,125,117,4,5,6,7,61,9,85,120,57,129,83,132,121,86,14,105,15,62,87,16,17,18,19,20,21,22,23,25,2,65,130,88,27,28,29,30,31,32,33,91,146,93,96,90,73,38,101,39,110,51,40,41,144,139,42,148,149],socket:5,elfabiversion_amdgpu_hsa:38,implicitnullcheck:109,discard:[37,83,28,102,122,105,35,101],addendum:54,upward:[2,83],orcx86_64_sysv:5,vocabulari:83,"_wave_offset":38,dibasictyp:[83,132],guard:[81,101,39,91,34,35,62,83,9],ifexpr:[24,25,31,32,33,17,18,19],leverag:[88,37,101],machineinstrbuild:[102,68],pictur:[87,130,29,117,23],naveen:46,exec_hi:38,rcn:[47,114],getelementptrinst:101,"__cxxthrowexcept":139,smin:83,biggest:[102,60],calltwo:101,macinfo:83,log10:[83,1],functionlisttyp:101,dw_op_constu:83,s_dcache_inv_vol:38,f4rc:102,bur:73,brand:91,machinefunctionpass:[13,91,84,65],bodi:[46,81,48,5,6,83,8,9,7,84,105,87,16,17,18,19,20,125,22,23,24,25,65,89,28,29,30,31,32,33,91,101,39,103,40,144,139,44,149],inlin:[46,102,48,26,81,100,3,83,61,11,121,13,14,105,15,62,16,17,101,27,28,127,30,31,132,91,69,94,37,138,38,139,45,110,51,40,106],bug:[102,111,47,48,49,26,114,90,81,83,8,54,10,7,59,12,86,15,62,87,19,20,23,129,89,29,33,36,134,37,73,138,101,39,75,40,145,44,45,149],stn_undef:38,wise:[73,83],mcpu:[38,65,11,12,50,86,92,95],wish:[37,55,75,0,138,65,130,48,28,2,14,62,87,74,149,83,117,101],srcarglist:83,rc1:47,rc2:47,"__nvcc__":14,emitjumptableinfo:65,sockaddr:5,pin:[48,83],sin_famili:5,hashfunctiontyp:132,dure:[109,102,1,47,48,49,114,90,3,82,83,54,55,86,122,13,14,105,62,87,101,23,65,88,28,29,68,132,134,96,148,72,37,74,38,139,45,110,141,40,106,108,39],pic:[102,65,45,75,12,132,95],print_list:90,int64_t:[110,101],pf_inet:5,user_sgpr:38,ttmp0:38,extra_sourc:90,probabl:[81,48,26,50,100,53,83,121,14,15,17,101,125,41,130,88,89,28,68,31,134,96,72,102,40,22],llvm_append_vc_rev:74,guidanc:[81,62,148],my_function_precis:11,detail:[46,75,0,111,1,48,26,51,52,81,53,4,5,6,83,61,9,54,102,11,63,121,84,13,14,105,15,90,87,18,19,20,21,41,23,2,65,130,88,27,28,29,67,132,32,33,91,146,34,96,72,120,37,73,74,141,101,39,57,103,104,110,118,40,139,42,43,108,148],virtual:[46,81,49,2,115,4,83,8,129,57,7,121,122,142,124,89,19,101,23,24,25,126,65,88,68,125,29,30,31,32,33,91,34,70,38,102,105],dw_apple_property_strong:132,type_info:139,apple_objc:132,"0x00000130":132,gcc:[46,75,1,49,115,81,83,54,136,145,12,14,90,101,65,28,132,96,37,100,139,45,102,51,141,118,77],pi8:142,winzip:104,spreadsheet:84,ksdbginfo:25,al_aliasset:65,excp_en_msb:38,customroot:88,kw3:39,afterbb:[24,25,31,32,33],kw2:39,predsens:82,"_zfoov":83,unshadow:[24,25,31,32,33,17,18,19],vliw:[102,34,137],twoaddressinstructionpass:102,eliminateframeindex:65,liveout:[48,106],n2756:81,poorli:[81,72],coroearli:105,bpf_arsh:102,getreginfo:102,undef:[139,7,121,68,60,51,115,34,89,105,83,101],patcher:106,isvi:65,spec:[110,83,45,75,132,86,14,89,149,44,49,101],parit:2,add_incom:[17,18],concret:[129,65,48,28,102,30,114,91,115,144,16,149,83,8,101],under:[81,134,48,26,114,5,6,63,61,9,79,11,145,121,60,8,86,142,15,62,125,22,64,2,65,28,91,146,83,97,37,74,138,139,39,102,77,40,131,42],runhelp:81,testabl:138,playground:[27,21],everi:[46,102,134,47,48,49,26,81,50,114,115,52,3,127,4,83,8,79,54,11,7,132,121,61,86,105,15,62,87,16,17,19,20,125,25,2,129,88,68,28,90,30,31,33,91,146,93,72,37,73,38,100,101,39,57,103,51,141,40,106,144,139,42,149],risk:[101,83,50,114],f934:65,rise:81,bb0_2:11,implicit:[109,54,81,65,139,83,102,31,34,89,17,149,7,101],errorasoutparamet:101,clangattrclass:34,sht_note:38,upstream:[37,48,114,40,62,134,96],toosl:84,printfunctionpass:46,read_regist:83,zext:[83,62,70],llvm_yaml_strong_typedef:110,mygc:88,isv9:65,isdefinit:[83,132],x86_64:[24,118,102,47,83,39,110,12,50,132,86,52,106,62,48,94,96,7,45,89],zlib:[86,37,74],x86call:149,xxxinstrinfo:[82,65],codeviewdebug:132,naiv:[118,46],deleteaninstruct:101,direct:[102,111,1,47,48,2,7,81,4,83,8,145,62,90,87,19,101,65,28,132,33,91,35,134,73,74,38,110,105,106,137,149],nail:[17,31],xf8:39,xor32rr:[89,102],llvmtransformutil:41,blockinfo:144,xf7:39,subsequ:[85,46,130,102,65,38,1,63,28,29,30,132,114,106,139,5,6,83,43,149],hide:[28,105,81,134],introspect:[48,43,108,83,70],foundfoo:81,poison:83,hi16:102,conduct:[54,40,0,111],underneath:[86,37,41],postdomin:46,statuscheck:134,asymmetri:[109,87],"290x":38,functiontyp:[24,25,29,30,31,32,33,101],studio:[37,81,74,54,132,104,35,131],debugg:[85,25,81,38,46,27,132,102,113,31,91,123,86,36,15,83,139,17,20,54,117],path:[109,46,81,48,49,2,50,100,104,83,9,120,11,145,12,86,14,62,90,19,101,41,126,66,88,33,133,92,134,94,95,37,74,139,39,57,51,141,77,131,137,148],forum:[54,83,111],parallel_dir:41,mypassopt:91,anymor:[91,101],pointcount:88,debug_:38,portabl:[54,2,74,88,101,26,81,15,4,102,83,121,9],precis:[46,115,83,129,57,21,22,23,65,88,27,125,29,68,132,92,95,37,38,45,102,51,106],isomorph:121,nontempl:28,straw:134,s_mov_b32:38,cmake_c_compil:37,strai:86,printf:[24,25,38,37,83,132,121,30,31,32,33,77,104,108,5,19,20,18,101,79],dllvm_enable_backtrac:37,waitcnt:38,buffer_load_dword:38,smallsetvector:101,describ:[0,2,5,6,7,8,9,11,13,14,15,87,17,18,101,21,22,23,24,25,27,125,29,30,31,32,35,37,38,39,40,42,45,46,48,49,54,55,63,62,41,79,65,66,67,68,69,72,73,110,118,75,80,82,83,85,90,88,89,91,16,92,93,102,51,105,106,108,109,81,113,114,115,117,120,122,28,129,130,132,134,138,139,142,144,148,149],would:[109,46,110,0,134,1,48,26,131,90,115,104,81,117,53,4,83,8,9,79,86,63,68,57,7,121,92,84,13,14,105,15,62,87,16,17,18,102,101,125,22,23,25,129,130,88,67,28,29,30,31,132,91,146,34,93,96,72,37,73,74,138,139,39,75,51,148,118,77,40,106,41,144,89,42,147,44,45],tba_hi:38,enable_sgpr_queue_ptr:38,debuginfoforprofil:83,gcstrategi:88,addincom:[24,25,31,32,33],llvm_doxygen_qhp_cust_filter_nam:74,initializealltargetmc:24,preview:134,musl:39,n1720:81,must:[46,75,134,110,142,48,49,2,113,114,115,52,81,131,4,7,8,89,85,86,55,102,11,129,83,132,121,12,60,61,13,14,105,68,90,87,17,18,19,101,41,23,24,25,65,130,88,67,28,29,30,31,32,33,91,35,93,122,120,37,73,74,138,38,100,108,39,57,51,118,40,106,144,139,42,147,44,45,149],shoot:[16,30],innerstructti:83,"__sync_fetch_and_xor_n":51,join:[38,101,39,91,95,83,84],getnumoperand:101,cheapest:68,image_file_machine_mipsfpu:140,runfunct:[101,123],targetframelow:102,rtdyldobjectlinkinglay:[5,6,63,61,9],norm:[44,0,149],towardzero:83,image_scn_lnk_comdat:140,localrecov:[139,83],"__data":83,succee:30,virtreg2indexfunctor:102,inadvis:130,registerehfram:[85,5],modfilecount:148,attract:[88,40],norecurs:[83,144],makellvm:37,uselistord:83,r10:[102,103,8,11],stride:[45,122],pipefail:2,compiler_rt:40,concis:[102,28,40,81,130],hasnam:101,"__xray_log_init":118,env:[47,49],frameless:102,ancestor:129,getcompilecallback:[5,6],collaps:83,dialect:[14,83,43],memorydependencyanalysi:51,createfil:25,attrdoc:34,badli:[101,62],xray_instr_map:[118,84],getreservedreg:65,mesa:38,attrspellinglistindex:34,parallel:[37,73,74,38,1,39,2,68,122,76,115,134,146,102,83,41],descent:[27,125,32,18,21,22],bootstrap:[37,131],r_arm_thm_movw_abs_nc:12,parserclass:28,includedir:126,environ:[46,81,2,100,52,4,83,84,118,101,88,28,30,91,35,96,37,74,38,45,102,51,76,77],incorpor:[102,101,134,129],enter:[101,37,2,74,138,83,125,29,30,132,115,105,9,144,139,16,102,20,84,22,62],exclus:[48,28,102,51,142,83],xnack:38,composit:[101,83],wavefront_sgpr_count:38,over:[46,102,134,48,26,115,81,5,6,63,61,9,57,83,14,15,62,90,17,18,19,20,21,23,25,129,130,27,29,31,32,33,93,73,138,38,101,110,40,108,144,44,149],commasepar:28,imul:102,blatent:[19,33],optional_dir:41,asid:[115,52,83,38,101],str_offset:132,erroror:101,"9630p":38,modref:[149,51,57],parseparenexpr:[24,25,125,29,30,31,32,33],align32bit:144,qeaa:139,baseinstrinfo:34,image_sym_type_dword:140,tramp:83,surpris:[101,83,26,15,87],replaceinstwithinst:101,getorinsertfunct:101,llvmbitread:41,comprehens:[86,37,45,46],clr:[48,148],llvmbc:144,settruncstoreact:65,visualis:84,dw_op_plus_uconst:83,cfgsimplifi:101,my_other_fil:13,getlazyresolverfunct:65,echo:[37,2,147,134,97],vanilla:14,const_global_iter:101,"0x60500020":140,cmake_cxx_flags_releas:37,alex:79,exampletest:2,bootstrap_:96,modrefresult:57,each:[0,2,4,7,8,9,11,13,14,87,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,36,37,38,39,40,42,44,46,47,48,49,54,55,57,63,61,62,41,79,65,67,68,69,70,71,72,73,74,75,76,81,82,83,85,86,90,88,127,91,16,92,93,95,96,100,101,102,51,106,108,110,111,114,115,117,120,121,122,28,126,129,130,132,134,99,139,141,142,144,131,148,149],use_begin:[81,101],complet:[46,110,0,48,2,80,114,115,104,81,125,4,5,6,83,61,9,85,54,102,11,63,132,122,86,105,68,87,16,17,18,19,101,21,22,23,24,25,127,65,88,27,28,29,30,31,32,33,91,134,72,90,73,74,38,100,139,39,57,40,144,145,146,107,108,149],prohibit:[115,108,51],abbrevwidth:144,setsubprogram:25,runtest:[47,12],ptrtoreplacedint:101,tag_pointer_typ:132,goe:[102,75,115,3,83,11,121,62,19,101,25,65,88,30,132,33,134,74,139,39,110,51,105,43],llvm_optimized_tablegen:[37,74],newli:[101,25,46,37,48,39,29,30,31,32,61,77,16,17,5,6,63,18,9,23],laid:[101,102,67,69,40,93,16,83,117],adjust:[65,141,87,60,33,86,62,19,83],has_disassembl:42,got:[25,102,38,37,28,75,16,101],unimagin:48,baseti:83,frem:83,debug_pubnam:132,precaut:101,threadidx:11,free:[81,0,111,48,26,114,52,63,84,9,68,136,57,86,105,15,62,16,101,21,23,88,27,29,30,31,32,33,91,134,73,67,138,38,39,102,51,40,45],getfilenam:[25,132],rangelist:44,cantfail:[101,30,31,32,33,5,6,63,61,9],objectlinkinglay:[63,61,9],dw_op_minu:83,precompil:11,sandylak:24,distract:40,puzzl:75,astdump:34,r9d:8,r9b:8,openssl:39,filter:[102,74,139,2,86,100,40,82,83,84],addrspac:[139,48,68,83,11],rais:[101,46,88,83,139,134,48,16,17,18,19,20,21,22,23],runtimedyldimpl:85,r9w:8,"0x0000000000000000":38,onto:[37,142,38,88,87,102,68,132,114,40,83,84,101],rand:39,rang:[81,111,1,48,2,83,79,54,57,122,62,16,18,20,21,129,130,88,27,28,68,32,30,92,35,72,91,38,101,45,102,105,139,149],neededsafepoint:88,xnorrr:65,dw_apple_property_class:132,wordsiz:88,rank:46,restrict:[81,1,48,115,83,55,121,60,62,124,101,130,89,28,30,132,91,35,134,96,38,139,102,51,40,106,44],datastructur:[101,134],alreadi:[110,0,48,81,104,3,5,83,8,9,86,55,102,57,129,63,132,60,61,13,14,68,90,87,16,17,18,19,101,21,41,23,24,25,65,88,27,28,29,30,31,32,33,91,134,37,74,75,103,40,106,147],hackabl:[27,21],createcfgsimplificationpass:[25,30,31,32,33,5,6,63,61],hasconflictingtyp:148,primari:[111,83,54,57,13,68,90,16,17,18,19,101,21,22,23,24,25,88,27,125,29,30,31,32,33,139,39,102,40,148],rewritten:[102,101],nomenclatur:131,exp2:[83,1],top:[46,102,87,49,26,115,81,5,83,61,9,63,57,7,130,60,84,142,15,90,16,17,18,19,101,125,22,23,24,25,2,66,68,28,29,30,31,32,33,91,34,134,95,96,37,73,74,138,139,110,51,141,77,40,41,144,42,44],cstring:5,seq_cst:[83,51,38],tot:48,downsid:[39,101,134],tok:[25,105,83],toi:[26,5,6,63,61,9,84,14,15,16,17,18,19,21,22,23,24,25,27,125,29,30,31,32,33,39],ton:[27,21,115],too:[109,102,87,26,50,115,104,81,4,83,61,86,15,19,20,125,22,25,28,33,91,37,101,39,110,77,40,131,149],tom:[110,114],toc:102,dw_apple_property_nul:132,initialize_native_target:[16,17,18,19],targettripl:24,createalloca:[24,25,33],quiet2:28,tool:[46,75,47,49,2,113,131,80,114,100,104,81,53,4,123,83,8,117,121,79,54,10,136,11,7,59,12,84,13,14,133,58,90,16,17,102,20,21,41,23,126,65,66,88,27,28,29,30,31,132,91,35,86,134,95,71,37,73,74,138,38,101,39,57,118,141,76,77,40,144,145,42,108,45],usesmetadata:88,took:[16,17,18,19,23],"__sync_fetch_and_nand_n":51,targetgroup:42,sanitizer_common:52,conserv:[81,38,57,88,48,51,114,91,108,106,83,72],removeus:87,reinterpret_cast:5,moduleindex:148,expr:[24,25,10,137,125,31,32,33,16,17,18,19,22,23],zero:[46,81,1,48,26,100,52,53,83,85,10,119,11,7,59,122,86,14,15,62,112,17,18,19,101,125,22,79,126,2,65,66,88,89,28,127,31,132,92,93,95,130,36,73,99,38,139,45,102,148,142,106,144,145,137,39,149],initsynclibcal:51,misunderstood:[54,121,130],hypothes:69,"__atomic_exchang":51,fashion:[83,55,35,65],ran:[91,100],ram:[146,39,45],dw_tag_string_typ:132,lbd:64,val2:[39,105,83],unreloc:48,rax:[65,48,102,106,89,83,8],kernargsegments:38,get_reginfo_target_desc:34,adc32mi:8,unresolv:[26,2,15],thorough:81,sk_somewhatspecialsquar:129,xfail:[86,49,2],contact:[0,111,39,114,91,40,146,45],expr0lh:79,thoroughli:[17,31],adc32mr:8,atom_count0:132,interproceedur:61,eph:134,though:[46,81,87,49,115,83,9,55,132,86,14,62,16,19,101,125,22,23,25,129,130,88,28,29,68,31,33,91,134,72,139,102,51,108],visitfab:55,glob:10,"__apple_typ":132,memoryssawalk:115,bss:[95,35,38],sethi:65,rv730:38,bsd:[37,36,40,120],"_ztv1c":142,"16bit":24,"0x00000002":132,"0x00000003":132,"0x00000000":[132,38],"0x00000004":132,v8p0f64:83,excis:83,metal:83,roots_begin:88,getorcreatefoo:101,abbrev:[107,144],declar:[46,102,48,81,125,4,7,8,55,129,11,83,132,121,60,61,14,142,87,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,91,34,57,105,106,144,42,44,149],radix:[36,102,81],shouldexpandatomicstoreinir:51,saga:[17,31],"0x70b298":91,random:[101,145,81,20,39,2,80,52,40,58,87,83,97],radiu:129,smallvectorhead:101,all_of:45,popq:[48,106],pkg:49,radic:[102,68],dfapacket:[102,34],bail:118,lit_config:2,absolut:[91,37,55,81,74,65,83,28,12,148,86,100,68,7,72],package_str:74,vpblock:122,bitcoderead:55,resolverti:83,configur:[102,1,47,48,49,2,114,104,81,4,83,61,9,54,11,7,12,84,86,101,41,24,65,68,91,146,92,134,37,74,138,38,39,110,52,76,77,40,131,42],cxx_fast_tl:83,s_arch:14,nextprec:[24,25,125,29,30,31,32,33],constant:[46,102,48,81,53,5,6,83,84,79,55,11,132,121,122,13,14,142,62,87,16,101,23,24,25,65,88,68,28,29,30,31,32,33,91,35,37,73,38,45,57,51,105,106,144],getreg:[102,65],llvm_yaml_is_sequence_vector:110,congruenc:73,label0:83,twiddl:[30,31,32,33,16,17,18,19,83],watch:[40,81,38],image_scn_type_no_pad:140,pointertyp:101,report:[46,0,111,47,48,49,2,114,100,52,53,83,79,54,57,86,20,23,88,29,132,91,92,134,97,73,38,101,39,75,106,42,108],rl247422:39,rl247420:39,jitcompilecallbackmanag:[5,6,63],woff2:39,sparclet:65,aliasanalysisdebugg:57,start_val:[17,18,19],fileorerr:101,sunit:102,isoper:[24,25,32,33],basicblock:[24,25,81,37,87,29,30,31,32,33,13,115,122,46,17,91,101],stringwithcstr:132,lto_module_is_object_file_for_target:108,irgenandtakeownership:[5,6],nuw:[83,62],adttest:74,storesdnod:65,richer:106,bitvector:101,nul:[18,101,32],num:[65,88,48,2,141,100,134,83],libsampl:41,isabsoluteaddress:148,dumpattr:34,afterward:[48,62,46],hopefulli:[46,81,57,28,30,91,14,144,16,147,61],databas:[54,26,110,15,83,117],image_file_machine_mips16:140,discoveri:[2,38],valb:11,tolmach94:88,mul:[46,130,11,7,29,149,83,23],approach:[46,81,48,82,83,129,122,86,14,87,20,65,130,28,68,132,93,96,74,101,45,102,103,105,139,108],synchon:38,weak:[87,45,51,33,108,62,144,36,19,83,101],checksumkind:83,protect:[81,0,144,65,39,102,51,134,4,83],notatom:51,expos:[46,81,48,2,4,83,9,57,19,20,88,28,68,33,91,34,37,101,39,102,51,108],blocknam:144,fault:[109,54,139,40,93,145],lgkmcnt:38,r7xx:38,llvmdummycodegen:65,folder:[83,96,30,74,37],mybarflag:110,dbootstrap_cmake_build_typ:96,kwd:[16,17,18,19,21,22,23],r_386_8:35,callseq_end:48,canlosslesslybitcastto:87,test_suite_host_cc:49,src1_sel:38,max_int_bit:101,trust:[81,40,63],nake:[83,144],xemac:37,nonsens:[19,147,33],been:[46,102,0,134,124,47,48,26,113,51,90,106,52,81,117,53,4,5,6,7,8,9,101,85,63,120,11,83,132,121,122,61,13,14,15,62,87,16,17,18,20,125,22,23,24,25,2,127,123,65,130,88,28,29,30,31,32,33,91,69,93,114,139,37,74,138,38,145,39,110,104,148,40,84,41,55,147,44,45,149],accumul:[46,1,39,16,17,18,19,83,22,23],fnloc:25,quieta:28,oldbind:[24,25,19,33],quickli:[37,75,120,54,83,28,57,132,61,76,115,104,81,86,139,4,102,20,39,117,101],getsymbolt:101,"0x000003bd":132,msec:1,xxx:[49,81,7,65],uncommon:[139,83,90],getsourc:37,kw1:39,expected_v:83,testcaselength:101,craft:101,"catch":[73,130,101,28,29,30,123,40,134,139,16,83,23],upcast:129,smallbitvector:101,image_sym_class_undefined_stat:140,getinstralternativemap:68,simplevalu:44,bitcod:[46,102,87,80,104,53,83,54,10,119,120,11,145,59,133,112,101,121,126,127,55,91,92,95,36,37,99,20,75,77,40,144,108],tgid_size_en:38,basic_p:149,basic_r:149,lesser:93,weren:40,curvar:[24,25,19,33],cumemalloc:11,binoprh:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],mcsymbol:[88,89,102],znver1:45,vc80:113,cdecl:83,modindic:148,linkonceanylinkag:101,p_reg:102,row_mask:38,image_sym_type_mo:140,svr4:120,vk_argument:81,exterior:48,registermypass:91,tediou:110,list_property_nam:42,s_bitcmp0_b64:38,suggest:[91,37,81,138,57,48,45,12,76,40,68,62,124,83,8,41,101],mmx:[102,83,65],thusli:69,disposit:40,dooneiter:20,sk_lastsquar:129,sched:[95,102,65],file_mag:45,darwin9:7,pick:[102,74,138,65,130,88,48,75,68,12,81,93,16,95,101,134],xyzzi:81,targetnam:89,binaryexprast:[24,25,125,29,30,31,32,33],build_ret:[16,17,18,19,23],ind1:83,introductori:54,property_nam:42,reloc_pcrel_word:65,redefin:[149,29,32,33,18,19,23],sethiddenflag:28,image_scn_mem_not_pag:140,umbrella_directori:134,bugzilla:[54,47,48,39,114,86,40,134],shortli:[25,38],token_prec:[16,17,18,19,22,23],memarg:60,everyth:[50,114,104,125,83,61,54,11,12,86,14,90,17,18,21,22,23,130,27,28,29,68,31,32,91,134,37,102,51,77],padding1:148,spencer:4,padding2:148,fxrai:[118,84],addend:[83,38],makevehicl:81,setcurrentdebugloc:25,finalizememori:85,createreassociatepass:[30,31,32,33,5,6,63,61],uncoop:88,numliveout:106,shorthand:149,lambdaresolv:[5,6,63,61,9],"0x03":[106,38],eli:14,"_buffer":38,"__unwind_info":102,interfer:[139,83,62,130],patchpoint:[48,83,106],ifcond:[24,25,31,32,33,17,18,19],elf:[85,118,136,38,45,102,132,86,14,35,144,106,71,83],"0x7fffffffe018":123,irtransl:68,els:[46,102,111,1,48,49,26,115,104,81,125,4,5,7,8,89,79,55,11,83,86,14,105,15,87,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,134,95,96,90,39,110,40],at_artifici:132,explanatori:[49,40,148],elt:83,gave:87,xnor:65,setloadxact:65,disableencod:8,x0abar:39,howtosubmitabug:37,atomic_swap:51,"______________________":101,"_inexact":38,thumb2:[136,102,83,70],thumb1:[136,83],gr64:102,end_:[17,18,19],apart:[74,57,83,67,93,101],unindex:65,arbitrari:[81,48,26,115,125,83,117,57,130,15,16,19,101,21,22,23,2,65,66,88,27,28,29,68,132,33,30,91,38,139,102,40,106,144,42,149],loadlal:83,contradict:40,dynamiclibrari:[5,6,63,61,9],build_add:[16,17,18,19,23],tolmach:88,unstabl:[47,83,50],entry_block:19,hung:101,ifexprast:[24,25,31,32,33,17],instr_map:84,scopelin:[25,83,132],llvm_use_sanit:74,stopiter:105,excerpt:11,"000000e":[29,30,31,33,16,17,19,23],unbias:72,enumcas:110,indirect:[121,65,38,48,39,102,67,105,35,106,5,6,83,63],guess:[74,39,30],v_fract_f32:38,global_dtor:83,"0x401000":94,icc:[37,132,1],predicateinfo:83,attrparsedattrimpl:34,guaranteedtailcallopt:83,optparserdef:34,armv5:51,armv7:[37,136,12,50,93,83],lebarcheri:134,armv8:[45,136,8],registerclass:[102,34,8,65],icu:39,core:[48,50,5,6,63,8,9,86,55,57,83,12,61,13,90,101,25,68,29,30,31,32,33,91,146,34,134,97,37,74,139,39,40,42,45],who:[81,0,87,26,4,83,9,79,54,86,15,90,19,65,33,134,96,37,74,138,75,76,40,42],"__declspec":[24,25,30,31,32,33],tour:[125,22],coro:105,new_corpus_dir:39,corp:39,cast210:83,meyer:81,chapter:[87,26,5,6,63,61,9,54,15,16,17,18,19,21,22,23,24,25,27,125,29,30,31,32,33],min_int_bit:101,vplan:122,canreserveresourc:102,surround:[46,130,7,51,106,83,8],unfortun:[81,87,26,30,31,60,91,14,15,134,16,17,83,101],zeroiniti:83,g_inlined_into_f:94,algn:84,algo:91,bitsetcas:110,approxim:[73,39,2,104,14,3],produc:[46,110,139,1,48,2,122,115,81,53,4,83,61,9,79,102,7,132,59,12,60,120,86,105,15,87,16,17,19,20,121,23,25,127,65,130,88,67,92,29,30,31,33,91,34,93,96,97,37,74,38,101,39,75,51,148,77,40,144,145,42,43,45,149],unrespons:134,addpsrr:149,ppa:37,"_zts1a":142,"_zts1c":142,"_zts1b":142,instcombin:[46,121,20,101],regist:[46,110,1,48,83,8,9,85,102,11,7,121,122,123,13,105,62,16,17,18,19,101,23,24,25,127,65,88,89,29,68,32,33,91,34,93,95,37,138,38,139,92,57,40,106,145,146,43,137,149],heffernan:14,encod:[102,48,49,142,53,83,8,117,79,54,120,122,105,87,19,101,25,65,88,68,132,33,92,93,95,37,38,139,110,51,141,34,106,144],othervt:65,unwelcom:111,shf_link_ord:35,functionproto:[24,25,30,31,32,33],createfmul:[24,25,29,30,31,32,33],storag:[38,11,88,101,28,102,132,105,144,83,97],addpsrm:149,git:[37,74,138,54,39,132,77,40,134],frustrat:111,dw_apple_property_copi:132,x86targetasminfo:65,"class":[46,102,111,87,26,113,122,81,82,4,5,6,7,8,9,85,54,63,129,57,83,132,60,61,13,14,142,15,16,19,101,125,22,23,24,25,65,88,68,28,29,30,31,32,33,91,34,93,70,149,37,73,38,110,76,40,144,55,43,137,44,148,79],gif:39,"0x7":102,gid:120,image_sym_type_enum:140,"__sync_lock_test_and_set_n":51,rela:38,sitofp:[29,83,23],permut:83,sub_8bit:89,head:[37,81,138,88,44,14,134,131,147,83,149],medium:[95,83],altogeth:122,heal:109,unconvinc:39,modulepass:[13,91,57],add_definit:74,heap:[73,57,88,48,26,103,33,115,52,105,15,106,110,19,83,101],icmp:[109,101,105,83,144],n2541:81,counsel:40,attr:[144,34,83,132,38],"__atomic_":51,symbolresolv:[61,9],pugixml:39,xray_never_instru:118,fundament:[90,55,102,65,130,139,48,28,70,98,91,81,62,87,101],autoconf:[74,121,50,114,90,101],loadregfromstackslot:[102,65],adorn:[147,83],reachabl:[88,48,73,83,74],getregisterinfo:[102,65],logerror:[24,25,125,29,30,31,32,33],trig:65,eieio:83,saptr:83,rl247417:39,furi:38,fmt_align:101,bore:91,assembl:[121,134,48,49,80,104,53,83,8,54,55,119,11,59,92,86,14,136,89,16,24,64,65,130,88,68,127,30,34,35,93,95,112,37,38,39,102,103,40,144,42,43,137,45],readonli:[46,38,48,132,115,106,62,144,83,84],successfulli:[75,57,48,1,12,32,114,139,146,107,18],instrprof_:83,add_execut:[74,90],when:[0,1,2,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,104,47,48,49,50,52,54,55,57,63,61,62,79,65,67,68,71,74,75,76,110,83,84,85,86,90,88,89,127,91,16,36,93,96,100,20,102,103,51,105,106,108,81,111,114,115,118,120,121,122,123,125,126,129,130,131,132,134,138,139,141,142,144,145,146,147,149],tim:122,tii:102,tid:11,tie:[105,83],pseudonym:0,evergreen:38,smallset:101,consid:[109,46,81,0,111,1,47,48,26,50,142,115,125,82,4,123,83,8,79,57,7,132,121,60,61,86,14,105,15,62,87,17,19,101,21,22,25,129,130,88,27,28,68,31,33,91,36,93,72,73,38,139,102,40,106,144,145,44,149],idx3:130,colloqui:83,idx1:[83,130],src:[126,74,65,47,101,39,102,30,114,117,148,83,49,41],uniformli:81,"0x0f":106,bitbucket:134,libcuda:11,longer:[46,81,83,61,120,121,14,62,19,101,41,88,30,33,91,134,70,39,102,51,141,40,147,45],bullet:[121,129],freebench:49,zeroext:[83,144],offsetof:[26,15],hsa_code_object_vers:38,smem:38,rol:45,loadregfromaddr:65,rob:14,focus:[102,65,88,48,59,86,101],llt:68,numsourcefil:148,movabsq:[106,103],signific:[55,81,144,57,88,27,39,31,32,122,91,40,108,93,48,87,18,83,21,101],computation:73,llc:[109,75,48,80,104,7,84,86,11,145,13,20,24,65,88,89,132,91,92,83,95,37,102],setindexedstoreact:65,n32:83,rot:40,lld:[37,81,74,38,45,13,133,134],addregisterclass:[102,65],wave_shr:38,readabl:[46,81,112,100,53,83,119,102,101,89,29,132,91,35,94,37,99,110,51,141,107,147,148],getorcreatetypearrai:25,pop_back:[25,28,101],wave_shl:38,sourc:[75,139,110,47,48,49,26,131,80,114,115,104,81,117,127,4,5,6,83,8,9,79,54,11,7,121,12,92,61,86,14,15,62,87,16,106,102,20,63,24,25,126,2,123,65,66,88,89,28,90,30,132,91,34,134,94,96,97,37,130,74,138,38,100,101,45,57,118,40,84,41,145,42,108,148],t1item:87,armv6:[136,50],feasibl:[83,84,132],broadli:68,v16p1f32:83,cool:[24,25,28,29,30,31,32,33,91,40,16,17,18,19,23],cuctxcreat:11,curop:65,"__cdecl":83,level:[109,46,110,111,1,142,48,49,26,81,131,122,115,3,125,117,53,4,7,61,9,85,54,63,68,136,102,11,83,132,121,60,123,13,14,105,15,62,87,16,17,18,19,101,21,22,23,24,25,130,65,66,88,27,28,29,30,31,32,33,91,92,86,93,74,71,37,73,67,38,139,57,51,118,40,106,41,144,89,42,149,44,134,79],hawaii:38,parseexpress:[24,25,125,29,30,31,32,33],infomr:38,quick:[46,81,47,26,79,120,57,12,86,15,62,16,20,130,88,28,30,132,91,74,138,40],release_26:37,release_27:37,release_24:37,release_25:37,release_22:37,release_23:37,release_20:37,release_21:37,release_28:37,release_29:37,msan:39,hsa:38,magnif:[27,18,21,32],endcond:[24,25,31,32,33,19],port:[37,102,1,45,26,68,118,15,134,146,4,5,121],llvmlib:41,repli:40,"64bit":[47,83],exitcond:83,alphajitinfo:65,"__llvm_deoptim":83,eckel:101,funclet:[139,105,83],u32:[102,38,11],returntyp:[88,83],varnam:[24,25,31,32,33,17,19],declare_funct:[16,17,18,19,23],subtmp:[24,25,29,30,31,32,33,16,17,18,19,23],sizeof:[121,11,48,26,67,105,15,5,83,101],fmax:83,memory_order_relax:[83,51],rl247405:39,fmag:120,dw_tag_restrict_typ:[83,132],cmakeparseargu:90,preorder:129,zerocont:52,errorinfo:101,nondebug:46,createbasicaliasanalysispass:25,writethunk:87,switchsect:[88,102],strtod:[24,25,27,28,29,30,31,32,33,125],r6xx:38,legalizedag:55,"__sync_synchron":51,dorit:[122,1],weird:102,automaton:[102,34],machine_version_minor:38,semant:[102,48,81,4,83,61,11,121,8,14,62,124,17,101,23,88,29,31,132,91,34,73,38,139,110,51,105,106,42,43,108],inlinedat:[83,7],enable_sgpr_private_seg:38,circumv:28,tweak:[37,129,28,30,118,76,14],visibl:[73,120,38,11,48,28,102,81,51,132,91,108,144,83,9,101],ditemplatevalueparamet:83,memori:[109,46,75,1,48,2,50,115,52,81,5,6,83,61,9,121,85,55,102,11,63,132,59,60,123,13,14,142,15,62,89,19,101,21,24,25,26,65,130,88,68,125,29,30,31,32,33,91,34,93,73,74,38,141,139,39,57,103,51,110,118,105,106,145,43,108,45],camlp4of:[16,17,18,19,22,23],pred:[11,101,31,33,139,17,19,83],preg:102,pref:[101,83],todai:[81,130,48,51,106,134,96,117],handler:[109,38,83,102,51,118,139,101],upheld:48,instalia:102,diflagvector:83,criteria:114,msg:83,msf:[67,148,117],andw:7,prev:101,msb:102,msa:83,newptr:83,plug:[13,29,23],capit:[40,81],rpcc:83,share:[46,110,48,49,52,81,82,4,5,6,83,8,11,145,12,123,86,14,102,20,41,23,25,29,68,132,32,91,92,35,95,37,74,38,101,39,75,51,76,144,139,108],p0v2f64:83,drown:49,prototyp:[46,81,52,83,54,10,62,16,17,18,19,22,23,24,25,65,125,29,30,31,32,33,91,134,55],build_br:[17,18,19],micromips64r6:45,x86instrinfo:65,registerinfo:[89,34,102,65],function_typ:[16,17,18,19,23],purpos:[46,81,134,124,47,48,113,52,4,83,8,9,11,13,14,105,62,87,101,25,130,68,28,29,67,91,34,93,37,38,139,45,102,40,148],themodul:[24,25,29,30,31,32,33],explor:[48,105,101,84,138],preemptibl:46,sidelength:129,recover:101,backslash:39,add8rr:102,critic:[46,81,57,47,125,114,91,88,62,90,95,22],gettyp:[81,101],alwai:[46,102,0,111,48,49,26,81,115,3,53,4,7,84,117,79,10,120,57,83,132,121,86,14,105,15,62,90,16,17,18,19,101,125,41,23,24,25,2,129,130,68,28,29,30,31,32,33,93,37,73,138,38,139,110,51,148,118,40,144,42,108,134],differenti:[42,4,35,138],localescap:[139,83],stepval:[24,25,31,32,33],twoargfp:149,v1f64:68,anyon:[0,65,51,132,40,90,96],fourth:[65,130,28,132,91,105,106,17,83],cstptr:83,"__nv_isinff":11,testfunc:[16,30],linu:134,armneonsema:34,xzr:83,clone:[37,39,2,122,33,91,77,34,134,19,101],mcdisassembl:102,r_amdgpu_rel64:38,"4th":[102,83],netinet:5,shared_ptr:[5,6,63,61],geforc:11,attrpchwrit:34,colfield:82,setexitcodemapp:101,firstlett:123,calltmp6:[19,33],predic:[81,65,101,68,51,122,34,93,82,83,8,149],the_fpm:[16,17,18,19],programmat:[102,11,88,110,32,141,118,18,101],postrapseudo:89,gfx801:38,gfx800:38,gfx803:38,gfx802:38,ulittle32_t:[113,67],image_file_machine_amd64:140,elf64:84,"_zts1d":142,blocker:[47,114],ymmv:81,microscop:81,size_t:[88,101,39,110,51,108],synthesizedcd:93,canari:83,fsanit:39,foo_dtor:60,maytrap:83,branch_weight:[3,83,72],passag:81,gvnhoist:115,pinsrd:7,platform:[113,50,114,52,4,5,83,9,54,136,121,12,86,105,117,90,16,101,88,30,32,91,146,118,37,74,38,139,102,51,76,40,106,131,42,108],buffer_store_dwordx4:38,symbolresolverptrt:61,getsymboladdress:[5,61,62],tba_lo:38,ltmp:35,ymm0:106,debug_abbrev:107,unswitch:46,maskedbitsetcas:110,flagspointi:110,computeknownbit:68,inoperandlist:[8,65],term:[46,81,111,48,115,4,83,61,54,57,121,122,86,87,88,89,132,93,73,38,138,139,102,51,40,106,44,149],amdgcn:38,name:[0,2,3,4,5,6,7,8,9,10,11,12,86,14,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,41,42,43,44,45,46,104,47,48,49,52,53,55,145,59,61,63,65,66,36,73,74,110,118,82,83,84,79,13,90,88,89,91,16,92,94,95,99,102,51,105,106,108,109,81,112,114,100,117,119,120,121,123,125,126,129,130,132,134,137,138,139,140,141,142,144,131,146,147,148,149],getoperatornam:[24,25,32,33],realist:[88,125,22,149],cellspac:102,getmbb:65,r_amdgpu_abs32_hi:38,getloopinfo:91,callsit:[46,48,3,106,83,139,101],parse_bin_rh:[16,17,18,19,22,23],varexprast:[24,25,33],the_execution_engin:[16,17,18,19],individu:[46,81,0,134,49,2,114,115,104,117,53,83,9,54,55,120,86,7,13,62,20,25,89,68,93,37,38,100,101,39,40,144,42,43,148,149],otherspecialsquar:129,const0:144,getdoubleti:[24,25,29,30,31,32,33],hacker:[54,40],armneon:34,profit:[109,46,1,45,102,14,62,83],decimalinteg:44,profil:[79,46,138,38,89,39,132,80,141,100,109,3,62,131,83,45,41],roundp:1,iscxxclass:132,s_dcache_inv:38,factori:[46,81,101],aliase:[87,83,144],unfriendli:39,numberofcpucor:39,use_s:101,"\u03c6":83,lazi:[46,64,63,57,30,5,6,83,61,9,101],write_escap:91,hd2xxx:38,sourcefilenameindex:148,integertyp:101,theori:[26,48,110,68,15,87,148],getvalueid:87,"_r0h":139,build_sub:[16,17,18,19,23],boehm:88,r_amdgpu_rel32_lo:38,cmake_parse_argu:90,synchron:[134,108,83,51,38],refus:[46,10,74,99,112,127,119,9],vextuwlx:45,codegen:[109,5,6,83,54,55,11,7,86,14,62,89,16,17,18,19,23,24,25,65,88,68,29,30,31,32,33,91,34,37,38,45,102,51,105,145,108],turn:[46,81,0,111,48,26,50,115,63,61,9,55,120,83,121,8,15,124,90,20,125,22,23,65,28,29,132,93,74,38,101,102,51,76,147,108],turk:38,ture:[16,125,30,22],imposs:[65,57,45,26,51,40,15,93,9],str1:149,origin:[0,111,48,100,4,83,61,9,120,7,66,122,8,40,124,101,25,130,132,134,37,139,102,142,105,148],suspend:[88,105],redhat:76,amd_system_vgpr_workitem_id_undefin:38,arrai:[46,102,1,87,26,83,79,120,11,86,15,62,16,17,18,19,101,22,23,65,130,88,125,67,132,33,69,34,35,93,38,139,39,57,105,144,148],number1:87,bou_fals:28,transform:[109,46,81,87,82,5,6,83,8,54,55,57,7,132,121,122,61,13,142,62,48,16,19,20,63,23,25,127,65,88,68,29,30,31,32,33,91,34,37,74,101,102,51,105,106,41],suspens:105,dllvm_external_foo_source_dir:74,readattribut:34,predefin:[102,48,2,32,91,18],unrecogn:28,"0x00003550":132,given:[46,102,48,2,115,104,81,125,53,4,5,6,63,61,9,85,55,120,57,129,83,59,122,84,14,142,68,62,90,18,101,121,22,23,127,65,66,67,28,29,30,132,32,91,34,35,134,94,72,37,74,138,38,100,139,110,51,141,77,105,106,144,42,44,149],frameindex:65,stuck:[26,15],image_sym_class_external_def:140,associ:[46,81,48,115,52,3,4,83,85,120,13,90,87,101,125,22,79,65,88,28,30,92,35,93,70,72,73,38,139,102,118,142,106,144,42,149],reli:[81,134,1,47,48,113,83,9,121,86,40,62,90,19,101,130,88,132,33,93,72,39,102,118,105,108],skipmodul:13,assort:25,necessarili:[25,81,130,37,47,48,121,67,132,14,95,83,117,101],circl:129,white:136,dedupl:148,alac:49,cope:[28,101],exitonerr:[5,101],copi:[46,102,1,48,114,115,52,81,83,85,11,7,12,60,86,105,20,126,65,88,89,28,68,132,91,134,95,96,37,73,74,138,38,100,101,57,103,51,118,77,40,144,139,147,148],dblty:25,image_scn_mem_execut:140,enclos:[25,81,101,86,105,106,144,94,7,149],pragma:[14,1],grunt:28,releasei:47,serv:[46,0,130,54,101,2,113,122,132,86,105,106,93,139,5,6,44,96],wide:[111,26,50,51,83,117,54,11,15,90,16,17,101,130,88,30,31,132,37,38,45,102,57,144,44,149],gil:122,image_sym_type_doubl:140,s_bcnt0_i32_b64:38,subexpress:[73,57,125,30,31,32,33,16,17,18,19,22],getoperationnam:55,posix:[96,36,74,120],balanc:[40,51,131],posit:[110,48,82,83,7,12,122,14,105,17,18,101,22,28,31,32,95,37,38,139,39,102,141,40,106,144,108,148],ebp:[139,102,8],xxxgenasmwrit:65,p20:11,pre:[79,37,55,40,46,47,2,68,75,114,34,134,73,95,102,101,8,41,23],pro:[93,38],isfunct:132,subroutin:[88,83],r1234:134,doiniti:[25,65,39,30,31,32,33,91,5,6,63,61],imm_eq0:8,registerbankinfo:68,bitwis:[46,102,83],llvm_create_xcode_toolchain:74,techniqu:[1,87,83,57,16,17,18,19,20,21,22,65,88,27,125,30,31,32,33,91,101,102],ebx:[102,35,8],moreov:[46,68,83,102],s_cselect_b32:38,codegen_proto:[16,17,18,19,23],optbisect:13,instrprof:83,xxxxxx:118,blunt:84,closer:[73,130],sure:[102,134,1,47,50,114,100,104,81,4,8,118,55,57,145,132,121,12,86,105,15,62,124,19,101,125,23,24,25,129,28,29,30,31,32,33,91,93,37,74,138,75,51,76,77,40,146],c13size:69,multipli:[46,55,73,101,45,102,141,14,83,72],clearer:81,fca:73,nproc:37,gunzip:[37,104],fco:65,bb0_30:11,exposesreturnstwic:89,later:[46,81,87,49,90,100,104,3,131,83,9,85,7,132,86,105,68,62,48,16,17,18,19,101,22,23,25,65,67,125,29,30,31,32,33,91,134,37,74,38,139,102,118,40,106,41,89,147,79],quantiti:83,mybison:49,cortex:[45,12,50,70],superblock:67,"0x90":48,xxxasmprint:65,cs2:[83,57],cmakelist:[37,74,65,66,91,90],apple_namespac:132,innerloop:122,build_cal:[16,17,18,19,23],uncondit:[46,65,48,102,31,100,17,18,19,83],mypatch:138,cheat:63,cheap:[81,40,101,51],recombin:9,permiss:[85,37,0,120,40,146,9],hack:[25,138,46,27,26,12,91,15,21],culinkst:11,"__global__":14,explicitli:[46,81,1,48,49,26,83,85,57,7,121,60,14,15,62,101,23,130,88,89,28,29,68,74,138,38,39,102,105,131,149],realign:83,derivedtyp:[24,55,29,30,31,32,33,101],written:[109,46,75,1,48,26,113,100,81,53,4,141,83,10,68,11,121,86,15,87,17,18,102,101,21,25,65,66,27,90,67,31,32,132,34,35,96,112,39,57,110,40,131,42,148,149],sk_circl:129,buildmodul:9,abs_fp32:8,analys:[37,55,102,57,54,132,127,118,84,91,46,83,72,101],llvm_scalar_opt:[16,17,18,19],mcsectionmacho:102,viewpoint:111,jazz:41,ssp:[83,132,144],module_code_gcnam:144,allocat:[102,83,65],space0:83,space1:83,space2:83,tailor:50,image_comdat_select_largest:83,use_llvm_executionengin:[16,17,18,19],sse:[24,102,83,65,70],pipermail:134,regtyp:65,ssa:[46,48,26,115,83,121,15,62,17,18,19,101,21,23,65,88,27,29,31,32,33,91,73,139,102],dw_tag_packed_typ:132,reveal:130,x86_stdcall:102,dramat:[37,81,101,28,30,92,16,83],debian8:96,joker:134,fastcc:[105,102,83,121,144],indirectstubmanag:[6,63],bison:49,through:[109,46,102,1,87,114,52,81,125,117,4,6,83,61,9,85,136,129,57,63,132,121,92,60,13,62,90,16,17,18,19,20,21,22,24,25,65,130,88,27,28,30,31,32,33,91,34,134,70,122,72,74,138,38,101,39,110,51,118,40,106,144,139,146,43,108],backedg:[46,48,31,32,17,18,72],drawback:[40,28,6,101,90],no_turbo:97,n16:11,pane:138,lnt:[47,86,49,12,134],maximum:[74,38,57,87,28,102,68,51,72,53,83,39,101],labori:101,deadargelim:46,amdgizcl:38,mov32rm:89,areprivatesymbolsstrip:148,detect:[46,59,74,138,38,1,30,39,2,12,14,132,86,100,52,83,87,16,141,7,101],mov32ri:[89,102],pmovmskb:45,review:[37,73,0,138,54,48,39,81,122,114,104,40,62,134,87,4,147],get_register_match:34,voluntari:134,cudamodul:11,cxx_fast_tlscc:[83,144],image_scn_cnt_uninitialized_data:[140,35],abs_f:8,cycl:[108,139,83,84,132],bitset:[39,110,65,142],collect2:77,symbolnam:38,come:[102,111,87,26,115,81,82,63,9,55,120,11,145,132,60,86,105,15,117,90,16,17,19,101,21,41,23,130,88,27,29,30,31,33,91,83,37,74,38,100,110,118,40,144,89,148,149],reaction:134,latch:83,at_apple_runtime_class:132,region:[79,46,73,144,38,139,122,142,91,100,105,106,134,83],quiet:[28,2,83,38,123],contract:[129,83,14,34,106,62,101],nocaptur:[46,83,144],entir:[46,75,1,48,49,26,115,81,53,83,117,86,68,120,11,7,13,14,105,15,62,16,102,101,23,2,65,130,88,67,28,29,30,132,91,69,93,37,100,39,57,51,110,40,144,42,148],image_scn_mem_purg:140,imgrel:35,image_file_machine_powerpcfp:140,nnn:120,color:[79,102,122,100,105,101,84],pow:[11,83,1],rescan:87,inspir:[46,83,84,132],period:[88,20,39,86,40,134,83],vptransformst:122,hblcnsviw:28,image_file_machine_sh4:140,image_file_machine_sh5:140,colon:[74,38,110,86,52,90,42,7,149],image_file_machine_sh3:140,dw_form_ref4:132,poll:[88,48],spcc:65,coupl:[25,108,138,48,26,31,32,51,91,40,15,62,118,17,18,149,83,101],test_source_root:2,sectionnumb:140,noinlin:[123,83,144,70],u16:38,debug_str:[7,132],hexinteg:44,savesomewher:81,variableexprast:[24,25,125,29,30,31,32,33],setcompileact:[5,6],mytype1:110,andrew:[88,134],mytype2:110,mrmdestmem:65,instrssrr:149,intertwin:73,type_code_funct:144,addimm:102,subtool:14,module_code_alia:144,postscript:46,amend:138,stackgrowsdown:65,registerwithsubreg:65,dw_apple_property_weak:132,type_code_point:144,cast:[25,81,129,130,44,48,28,26,30,31,32,33,15,93,87,16,149,83,8,101],async_op:105,tblgen:[55,74,65,12,102,68,80,34,137,8,149],"__atomic_load_n":51,exportedsymbolsonli:61,dootherth:81,dcmake_c_flag:50,emittrailingf:51,isextern:132,good:[46,102,47,48,49,50,114,52,81,4,83,8,9,55,136,11,145,132,14,62,87,16,17,18,19,20,65,89,28,29,30,31,32,33,91,134,37,73,138,101,39,57,40,43,45,149],clutter:[40,81],image_file_up_system_onli:140,rangepiec:44,d14:65,addr:[65,132,105,94,5,83],addedcomplex:8,value_desc:28,d10:65,d11:65,d12:[142,65],d13:65,ubsan:39,rgpassmanag:91,html:[37,55,81,74,11,47,45,102,12,114,100,34,134,49],intreg:[82,65],eventu:[46,129,49,48,39,68,31,60,115,83,139,17,7,45,9],llvmlibthin:133,hasadsizeprefix:8,week:[40,0],image_sym_class_label:140,nest:[81,1,2,122,83,57,60,13,90,17,101,22,65,88,125,31,91,74,139,102,144,42,147,149],confidenti:[40,0],driver:[100,86,136,11,12,13,14,16,17,18,19,21,41,23,24,25,27,125,29,30,31,32,33,38,22,108],safer:101,director:40,devoid:102,tirefactori:81,amd_system_vgpr_workitem_id_x_y_z:38,footprint:68,fallibl:101,viewgraph:101,descritor:38,moder:[101,81,0,138],"_count_x":38,supporttest:74,"_count_z":38,enable_sgpr_grid:38,iterat:101,"__main":91,codegenopt:13,"_count_i":38,model:[110,1,48,2,122,81,82,83,54,102,121,60,14,62,90,19,101,125,22,23,24,65,130,88,28,29,132,33,34,35,95,96,38,139,45,75,51,105,144,108],customreadbarri:88,"4kib":67,s_dcache_wb:38,tip:[54,40,27,26,91,34,15,62,134,20,21,97],s_waitcnt:38,"0x000003f3":132,violent:111,redwin:102,kill:[73,145,102,91,89,20],xxxbranchselector:65,polish:134,dynamic_cast:[24,25,81,129,33,101],blow:39,rv710:38,miscellan:[136,120,89,28,91,83,49,41],paricular:14,hint:[101,81,130,1,20,45,29,62,94,83,23],except:[46,110,111,48,26,81,53,4,7,9,54,63,119,102,11,83,60,13,14,105,15,62,87,16,17,18,19,101,21,22,23,2,65,130,27,28,29,30,32,33,91,34,35,86,93,95,120,74,38,139,57,51,148,40,106,144,89,42,44,134,149],ehselector:105,blog:134,cxx:[47,37,12,77],blob:[47,83,144],notori:4,vulner:52,disrupt:147,image_sym_dtype_point:140,jone:122,subtargetfeatur:[8,65],createbr:[24,25,31,32,33],image_sym_class_union_tag:140,x86subtarget:84,"0x000003ff":102,saniti:[42,37,39,62],"0x1000":132,whitespac:[24,25,81,37,44,27,125,29,30,31,32,33,40,16,17,18,19,7,21,22,23],image_scn_align_256byt:140,unimpl:91,tend:[109,37,81,130,47,59,132,40,42,101],cooper:[88,77],targetinstrinfo:[102,65],node:[109,46,110,1,87,115,3,53,83,54,55,102,11,129,132,122,48,16,17,18,19,101,22,23,24,25,65,68,125,29,30,31,32,33,91,34,72,73,57,142],"__llvm":144,trampolin:83,at_apple_property_attribut:132,"260x":38,xinmin:122,stt_func:38,critedge1:11,gridsizei:11,slice:[101,44,149],"__atomic_fetch_nand_n":51,micro:[81,38],v_mul_i32_i24_e64:38,legal:[55,65,38,11,139,48,102,68,51,122,86,115,14,40,62,89,43,130,83,101],gridsizex:11,encodecompactunwindregisterswithoutfram:102,gridsizez:11,freea:60,libfil:126,freed:[38,57,103,105,101,61,9],llvm_doxygen_svg:74,garbag:[54,73,88,27,26,15,144,48,106,83,21,121],unmask:83,boolordefault:28,bpf_mul:102,oneargfprw:149,microcontrol:136,immut:[91,101,83,70],microcod:38,execv:4,shouldexecut:101,stacklet:103,struct_nam:144,mergabl:46,cmptmp:[24,25,29,30,31,32,33,16,17,18,19,23],stanc:81,stand:[91,81,83,125,102,86,14,40,5,6,63,61,22,101],image_scn_align_16byt:140,onon:83,routin:[46,26,139,88,27,125,2,51,91,40,15,48,16,4,87,102,83,21,22,101],clangdiagsdef:34,dw_at_nam:[7,132],tbcc:65,torec:101,lastli:[86,25,91,70],fdr:118,overrod:149,idx2:130,cpu_powerpc:110,possbil:110,unconvent:[26,15],idx0:83,image_sym_dtype_nul:140,baeslayert:61,s_load_dwordx8:38,fcc_g:65,getbuff:110,strict:[101,124,7,39,29,132,62,93,87,42,83,8,23],racist:111,mm4:[8,149],out_of_bound:90,strictli:[24,37,11,48,83,29,31,132,139,17,4,7,9,101],blocklen_32:144,machin:[81,134,1,48,26,50,100,104,5,83,9,85,54,11,7,12,123,14,15,62,87,16,101,24,25,2,65,88,68,92,30,132,133,91,34,35,93,95,96,37,73,74,38,39,102,140,40,89,146,137,148],fcc_u:65,setfoo:83,hard:[110,87,50,81,4,83,8,120,121,12,62,124,18,19,20,21,41,24,25,27,32,33,134,138,139,102,76,40],tupl:[68,83,134],regard:[54,81,121,60,51,34,114,83],ocaml_lib:[16,17,18,19,23],amongst:51,mm0:[102,8,149],setjmp_buf:139,stackmap:[48,106],mm3:[8,149],r_amdgpu_abs64:38,slowdown:39,faster:[37,81,120,87,132,14,20,50,115,52,139,146,83,101],cmakecach:[74,84,90],nmake:74,runonregion:91,parsetoplevelexpr:[24,25,125,29,30,31,32,33],handletoplevelexpress:[24,25,125,29,30,31,32,33],make_uniqu:[24,25,125,29,30,31,32,33,5,6,63,61,9],dstindex:65,primarli:89,dllvm_external_bar_source_dir:74,intel_pst:97,clrq:102,clrw:102,intercept:39,cbe:75,frighten:39,xraylogimpl:118,strongli:[73,88,26,12,31,33,81,15,62,90,17,19,149],clrb:102,intro:[54,19,136,33],enginebuild:[85,5,6,63,61,9],umax:83,encompass:[50,70],rearrang:73,intra:57,tok_eof:[24,25,27,125,29,30,31,32,33],clrl:102,incorrect:[24,25,75,68,39,29,30,31,32,33,13,3,16,17,18,19,83,23],new_potentially_interesting_inputs_dir:39,multiclass:[44,8,65,149],idiom:[28,29,122,14,105,101,23],compet:38,cmath:14,"0xabcdef00":48,symbol:[46,102,48,26,80,100,81,53,5,6,83,61,9,85,120,56,57,63,132,12,84,15,117,17,18,19,101,23,24,25,128,123,65,88,28,29,30,31,32,33,133,69,36,35,135,94,95,71,37,73,38,110,140,76,142,144,108,148,149],briefli:[79,87,91],mrmsrcreg:65,lexicalblock:25,llvmcreatedisasm:43,serious:104,buildmi:102,llvm_enable_werror:74,ilist_nod:101,llvm_include_exampl:74,backward:[1,88,48,28,142,40,144,70,101],callq:[48,103,106],directori:[81,47,49,2,113,114,100,104,4,83,8,117,54,12,86,14,62,90,101,41,25,126,65,89,67,132,91,146,134,37,98,74,38,39,102,148,118,77,40,131,42,137,45],invest:55,calle:[46,48,83,121,60,14,87,16,17,18,19,23,24,25,65,125,29,30,31,32,33,91,93,39,102,142,106,45,149],defaultlib:104,degrad:[88,40],"__sync_":51,"0xl":83,metatada:3,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,57,145,59,60,61,62,63,65,67,68,69,71,73,74,75,118,77,80,81,82,83,84,85,86,90,88,89,127,91,16,92,93,94,96,97,100,101,102,104,105,106,107,108,110,111,114,115,117,120,121,122,123,125,126,129,130,132,134,138,139,141,36,144,131,146,137,148,149],replacealluseswith:[87,73,101],dist:101,fp_to_sint:65,lack:[111,130,88,83,45,102,76,134,124,16,44,8,149],v_max_f16_e32:38,scalar:[46,102,1,5,6,63,61,83,122,14,62,19,25,65,88,68,28,30,31,32,33,91,73,38,45,110,42],basicblockutil:101,print_final_stat:39,pty:83,ptx:[14,102,136,11],follow:[0,1,2,4,7,8,9,11,12,86,14,17,18,19,101,21,22,25,27,125,31,32,33,35,37,38,39,40,42,43,44,46,47,48,49,52,53,55,57,63,62,41,65,67,69,74,75,118,77,110,80,82,83,84,79,13,87,88,89,90,91,36,93,96,20,102,51,105,106,108,109,81,113,114,100,117,76,119,120,121,122,123,28,129,130,131,132,133,134,138,139,142,144,145,146,147,148,149],changebit:39,disk:[37,81,108,39,2,67,132,134,42,4,83,9],ptr:[109,81,38,65,11,83,51,142,105,106,101],printinformationalmessag:28,cantfil:101,uint8_t:[69,5,110,39],targetdescript:65,getaddressingmod:65,init:[24,25,38,37,28,33,91,134,5,19,83,39],program:[1,26,4,5,7,8,9,10,11,86,14,15,16,17,19,20,21,22,24,25,2,27,125,30,31,33,34,37,38,39,40,45,46,104,48,49,52,54,57,63,61,62,41,65,66,71,73,75,76,77,110,80,83,84,79,90,88,127,91,92,94,95,96,97,101,102,51,106,108,109,81,114,100,117,120,123,28,129,130,132,139,142,144,145,137,148],mayfail:101,neglig:[109,39],deepcheck:101,lsbit:101,ingredi:122,far:[26,63,84,55,57,83,15,90,18,19,101,125,22,23,28,29,132,32,33,91,42,148],flat_atom:38,subcommand:[91,118,84],xorrr:65,fat:14,urem:[55,102,83],getbasicblock:102,worst:[48,26,68,15,103,101],failur:[110,1,47,49,2,50,114,104,7,54,86,83,13,20,21,22,68,132,91,134,37,101,39,75,40,145,146],fab:[83,1],unoffici:[37,130],vpblockbas:122,isunpredicatedtermin:65,basicaliasanalysi:[91,25,57,46],catagor:46,subsubsect:147,feat_reli:102,lisp:[88,26,15],sectionnam:[148,144],fsave:[45,1],list:[0,1,2,3,5,6,7,8,9,11,12,86,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,42,43,44,45,46,47,48,52,53,54,55,57,63,59,61,62,41,65,66,67,68,70,73,74,75,76,80,81,82,83,84,85,90,88,89,127,91,16,92,94,95,96,100,20,102,103,51,106,107,108,110,111,114,115,118,136,120,121,123,125,126,129,132,134,137,138,139,141,36,144,145,147,149],lli:[37,145,75,80,123,13,104,92,95,91],"_zst1a":142,fnentri:144,snapshot:[96,57],dox:111,tag0:83,tag1:83,tag2:83,isinlin:132,scratch_en:38,still_poison:83,libfuzz:[54,39],hashdata:132,rate:[144,40,120,134,53],pressur:[102,81,1],design:[46,102,139,142,48,49,26,122,115,52,81,4,83,8,9,85,54,68,57,7,121,60,123,105,15,62,89,19,20,21,41,79,130,2,65,66,88,27,28,124,67,132,33,91,146,134,70,71,73,101,39,110,51,40,106,145,42,108,45,149],storageclass:140,llvm_ani:55,hasard:88,ror:45,attrdump:34,what:[0,26,4,5,6,7,8,11,12,14,15,16,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,37,38,39,40,42,44,46,47,48,49,104,54,55,57,63,62,41,65,67,68,72,73,74,75,118,77,80,81,83,87,88,89,127,91,92,93,138,100,101,102,51,105,110,114,115,117,120,121,122,124,28,130,132,134,99,139,144,146,147,148,149],namedindex:65,handler0:83,handler1:83,handler2:83,powerpc64l:118,sum:[1,83,84,100,144,148,101,72],brief:[37,81,74,57,88,87,28,75,90],tailcallopt:[102,83],asmprint:[88,102,34,65],version:[109,102,1,48,49,26,113,114,90,115,104,81,53,83,84,9,79,118,55,136,11,7,132,12,122,123,86,14,15,62,87,16,17,19,101,23,24,25,126,65,88,28,29,30,31,33,91,92,134,95,71,99,37,74,138,38,100,39,57,51,148,76,77,40,106,96,144,131,146,43,137,44,45],intersect:81,ctpop:[83,65],themselv:[102,144,87,28,2,51,132,40,125,134,42,83,8,22,101],berkelei:102,v_cvt_f64_i32_e32:38,memorybuff:81,xmm3:[83,8,149],shouldn:[85,81,57,27,28,12,115,83,21],xmm1:[8,149],xmm6:[8,149],roots_iter:88,xmm4:[8,149],xmm5:[8,149],build_config:104,xmm8:8,xmm9:8,asmpars:[37,55,34],calllow:68,misinterpret:[81,20],"_dpp":38,bpf_xor:102,deregisterehfram:5,slave:146,instrsdrm:149,bb2:[83,144],llvm_profdata_fil:[74,131],xmm2:[83,8,149],magnitud:83,d_ctor_bas:7,"0x0000006e":132,smax:83,filenam:[81,112,7,53,83,8,79,10,119,145,14,58,24,25,126,28,127,132,92,95,71,74,99,141,118,36,107,137,149],heurist:[46,45,102,33,19,83],sparcasmprint:[102,65],dump_modul:[16,17,18,19,23],hexadecim:[28,110,36,35,83,149],proceed:[88,37,14,102],llvm_src_dir:50,normalizedpolar:110,selectcodecommon:84,coverag:[79,54,39,68,80,100,40,84],metadata_block:144,qch:74,forcefulli:130,llvmtargetmachin:65,dllvm_build_stat:97,ld_preload:52,flat:[110,38],flaw:68,at_apple_property_sett:132,cxa_demangl:132,"80x87":102,"80x86":146,functionattr:46,customis:[118,74],flag:[102,1,47,87,50,100,52,81,82,83,84,118,11,7,12,123,86,14,62,48,16,17,18,19,101,23,126,65,88,89,28,90,68,132,35,134,94,96,37,74,38,45,110,104,148,76,77,106,145,39],immediatepar:83,stick:[81,101,50,134],"0x00000067":132,known:[46,110,47,48,49,114,104,81,83,54,102,11,129,145,86,14,62,124,16,17,18,19,101,21,22,23,24,25,65,130,88,27,125,29,30,31,32,33,91,37,139,57,103,51,142,41,144,149],ensu:[65,131],valuabl:[40,2,49],allroot:49,aarch64macrofus:45,outlin:[40,110,139,102,91,105],portugues:52,faultingpcoffset:109,s7150:38,cmake_:90,relocationtyp:65,dmpqrtx:120,image_scn_align_8192byt:140,ppc64:102,reevalu:44,dicompositetyp:83,v4p0p0f64:83,bjark:14,pong:87,bjarn:101,invokeinst:101,cours:[91,55,74,57,27,28,26,68,61,13,15,39,125,87,101,21,22],goal:[81,1,87,115,4,9,79,19,21,130,88,27,68,33,34,139,102,40,106,42,147,108],divid:[46,55,102,38,83,49,2,86,14,53,4,7,72,117],rather:[46,81,111,47,48,2,50,104,63,61,9,86,57,83,121,122,13,14,62,101,22,25,65,130,88,125,29,68,132,96,72,39,102,148,40,144,44,45],anxiou:74,hash_map:101,divis:[18,102,83,38,32],value_align:83,llvmgccdir:49,targetasminfo:[88,65],icon:138,goat:81,distro:12,replacewithnewvalu:57,fnaddr:105,resourc:[136,139,28,91,90,101,9],algebra:[46,83],mccontext:102,ranlib:[37,77],reflect:[37,65,38,11,108,45,57,68,32,114,91,40,18,83],exceptionpoint:139,okai:[24,25,73,138,130,125,29,30,31,32,33,81,17,16,4,18,19,83,22,23],ptxstring:11,mullin:38,"short":[102,48,2,115,104,81,83,61,79,11,121,122,17,18,19,25,65,31,32,33,93,94,37,45,110,57,118,40,106,137,148],ani:[0,1,2,4,5,6,7,8,9,11,12,13,15,87,17,18,19,101,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,104,48,49,50,52,53,54,55,57,63,59,61,62,41,79,65,68,70,36,72,73,74,110,118,82,83,85,86,90,88,89,127,91,16,92,93,96,97,100,20,102,51,105,106,108,81,111,112,114,115,117,120,121,122,124,125,126,130,131,132,134,139,141,142,144,145,147,149],unhid:28,stash:[134,129],ambigu:[129,28,32,86,18,44,125,22],height:79,callback:[64,65,57,88,101,39,102,105,106,5,6,63,9],prepass:102,fslp:1,radeon:38,runonscc:91,hton:5,print_float:[16,17,18,19],s_load_dwordx2:38,geomean:1,vprecip:122,next_var:[17,18,19],"0x80000000":38,dso_path:92,dw_at_high_pc:132,style:[81,26,100,83,79,54,120,57,7,15,19,20,125,41,2,129,88,28,33,34,35,95,38,101,45,102,51,118,40,22,131,42,44,148,149],d31:83,harmless:46,anachronist:144,retti:144,might:[102,111,1,48,26,81,51,52,3,4,83,120,57,129,7,121,12,15,62,87,17,18,19,20,41,24,65,88,68,28,124,67,31,132,34,96,114,97,37,73,74,138,101,39,110,104,40,42,43,147],alter:[91,101,28,83],wouldn:[25,19,81,134,33],"return":[46,110,134,1,142,48,26,81,51,115,52,3,125,82,4,5,6,83,61,9,85,55,68,102,11,129,63,132,121,60,123,13,14,105,15,62,58,87,16,17,18,19,20,21,22,23,24,25,65,88,27,28,29,30,31,32,33,91,34,93,70,94,95,71,120,37,38,100,101,39,57,103,104,141,118,40,106,144,139,107,43,147,108,45,79],success_ord:51,var_nam:[17,18,19,90],visitfunct:84,framework:[101,46,55,102,54,88,27,49,29,68,57,32,33,91,132,18,19,83,21,23],subobject:142,preheaderbb:[31,32],somebodi:[40,61],getvaluevt:68,bigger:[105,110,81],strr:65,complexpattern:[102,65],sourcebas:54,aligna:132,aad8i8:102,"__dwarf":132,refresh:108,diglobalvari:[83,132],compris:[122,38],const_float:[16,17,18,19,23],difficult:[25,81,57,101,28,51,13,40,108,134,139,18,147,83,39],remotejitutil:5,truncat:[83,65,149],compriz:53,donoth:83,dcmake_cxx_compil:39,weight:[54,89,141,3,83,72],complextyp:140,"2x3x4":83,stkmaprecord:[48,106],compute_20:11,linkag:[101,25,59,11,87,29,62,144,37,94,102,83,9,23],regmapping_f:102,asmparsernum:137,expect:[109,46,102,134,48,49,2,81,90,115,104,3,125,4,7,9,57,83,132,130,86,105,68,62,87,16,17,18,19,101,21,22,23,24,25,66,88,27,28,29,30,31,32,33,91,69,34,93,70,72,97,37,100,39,110,103,51,40,106,144,42,44,45,149],atom_count:132,constindex:106,fdrpcchannel:5,ymin:[18,32],amd_system_vgpr_workitem_id_x_i:38,resulttyp:83,foolproof:91,ccifinreg:65,lineno:25,mspdbsrv:148,get:[0,26,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,27,125,29,30,31,32,33,34,37,38,39,40,44,45,46,47,48,49,104,54,55,57,63,61,62,79,65,68,70,72,74,75,118,80,81,83,84,85,86,90,88,91,16,93,96,101,102,51,105,108,110,111,114,115,121,123,28,129,130,132,134,138,131,146,147,149],my_fil:13,image_file_line_nums_strip:140,adc64ri8:8,benjamin:88,isempti:101,uncommit:37,dofin:[91,65],pdbutil:45,headerblock:117,call_branch_weight:3,r700:38,teach:[55,27,29,21,9,23],flat_load:38,flagflat:110,thrown:[109,139,83],targetinfo:[40,65],putchar:[24,25,30,31,32,33,16,17,18,19],thread:[46,102,48,49,2,100,52,83,84,11,123,101,88,134,96,97,73,74,38,139,39,57,103,51,141,118,105,144,45],exponenti:[46,28,83],toolnam:41,runtimedyldelf:85,machineframeinfo:102,isjumptableindex:65,ccifnotvararg:65,circuit:[18,32],precal:88,"9600p":38,libclc:40,logfil:118,feed:[57,39,132,31,131,17],notifi:[0,38,57,1,114,40,146],ystep:[18,32],feel:[29,0,111,27,45,26,81,84,40,15,62,83,20,21,23],cuda_success:11,add16mi8:8,smallptrset:[45,101],summaris:93,cond_val:[17,18,19],construct:[46,102,111,48,26,122,81,125,82,83,9,55,68,120,57,63,132,121,60,142,15,90,16,17,18,19,101,21,22,23,25,65,88,27,28,29,30,31,32,33,91,34,38,139,110,51,105,144,89,147,44,149],stdlib:37,blank:[81,138,38,27,125,26,40,15,147,21,22,120],slower:[81,88,87,102,14,62,139,83,121,101],fanci:49,gpl:[40,121],superpos:101,script:[47,49,2,50,114,145,121,86,90,101,41,66,88,28,91,34,134,96,37,74,39,40,131],interact:[0,48,49,26,115,83,9,85,15,20,125,22,25,65,88,28,132,91,134,37,74,138,101,102,51,139],gpg:37,stori:[79,37,104],gpu:[54,65,38,11,102,14,34,96,83],gpr:[43,102,83,149],luckili:88,option:[1,2,7,8,10,12,13,14,17,18,19,20,23,24,25,28,29,30,31,32,33,34,37,38,39,40,42,43,44,45,46,47,87,50,52,53,54,57,58,59,41,79,65,66,70,71,73,74,110,118,77,75,80,83,84,85,86,90,88,89,127,91,92,93,94,95,96,101,102,104,105,106,107,108,81,112,100,76,119,120,121,122,123,126,131,132,133,134,99,141,36,144,145,137,148,149],functionast:[24,25,125,29,30,31,32,33,5,6],wswitch:81,st_gid:120,cmake_c_flag:74,mcasmpars:102,initializealltargetinfo:24,r_amdgpu_abs32_lo:38,secondcondit:101,dsym:94,albeit:[19,33],c13lineinfo:69,assert_valid_funct:[16,17,18,19,23],doubli:[103,101,90],artifact_prefix:39,setgraphattr:101,remot:[85,37,64,134,5,6,9],immutablepass:[91,57],get_subtarget_feature_nam:34,architect:38,stale:38,empty_subregsset:65,valuesymbolt:101,dinkumwar:101,cleaner:[28,81,101],body_v:19,nnan:83,peculiar:44,ysvn:114,astwrit:34,dedic:[65,102,68,114,134,9],"0x10":[106,132],entireti:48,"0b000100":65,check:[109,46,110,1,47,48,49,26,50,51,90,52,81,125,131,7,61,89,79,54,68,102,11,83,132,12,122,84,13,105,15,62,87,16,17,18,19,101,21,22,23,24,25,142,2,129,130,88,27,28,29,30,31,32,33,91,86,134,96,114,120,37,74,138,38,139,39,75,103,104,77,40,106,145,146,147,108,45,149],"64mb":52,manglednam:[5,6,63,61,9],intregsclass:65,paramidx1:144,paramidx0:144,exec:[145,39,38,97],unsur:[44,0],english:[37,81],reach:[109,46,81,0,65,88,87,39,122,114,13,115,105,106,134,139,42,83,101],flagsround:110,assignvirt2phi:102,undefin:[46,81,1,115,7,8,11,83,121,62,101,65,130,34,93,36,74,38,139,39,75,51,105,108,149],image_rel_amd64_addr32nb:35,r_amdgpu_rel32_hi:38,cmakefil:[37,49],splat:73,amaz:[18,32],dw_tag_enumeration_typ:[83,132],xmm7:[8,149],blockid:144,destruct:[26,60,105,15,106,101,9],libopag:76,sandybridg:[45,1],"25mb":39,arg_empti:101,ctag:34,rtl:102,getcol:25,area:[73,138,38,47,48,39,102,81,33,86,88,105,40,93,139,4,19,83,121,101],intti:83,optimizationlevel:28,inapplic:50,brtarget:65,penalti:[101,83],dw_apple_property_retain:132,bff:101,write_regist:83,bfd:77,bfi:83,create_add:23,underflow:38,image_file_large_address_awar:140,hash_funct:132,stackoffset:88,shlibext:86,address_s:11,imm:[43,102,65,149],pushfq:102,"0x0001023":132,hit:[81,39,115,5,6,101,72],invoke:83,aliasopt:28,spurious:[86,83],mydoclist:110,mydoclisttyp:110,fastest:146,negeightkind:83,stdcall:[102,83],sextload:[8,65],him:87,tokstr:44,appeal:0,exactmatch:83,llvmdummi:65,sk_otherspecialsquar:129,getvaluetyp:65,gotten:118,getpointertonamedfunct:85,"0x1234":132,use_empti:101,sk_buff:102,stump:65,bart:38,dump:[25,110,144,141,101,39,29,30,31,132,91,34,107,53,16,17,102,20,45,148,23],cleverli:93,sensit:[59,74,57,89,110,91,134],shared_librari:41,proactiv:[40,20],mutabl:[24,25,64,27,31,32,33,17,18,19,83,21],arc:[37,138,100],dumb:[26,15],arg:[81,48,2,100,125,83,145,123,87,16,17,18,19,21,22,23,24,25,27,28,29,30,31,32,33,95,38,39,75,141,44],disadvantag:[108,28,101,134,70],icc_:65,unqualifi:[102,132],arm:[37,73,136,65,54,139,68,45,102,12,50,51,86,34,35,62,93,89,43,83],csk_sha1:83,setupmachinefunct:65,inconveni:[39,19,33],getanalysi:91,tcb:103,inst_end:101,old_valu:19,maprequir:110,pubtyp:132,law:[81,0],condv:[24,25,31,32,33],extensioan:47,syntact:[16,30,7,83],unabbrev:144,induc:54,sole:[115,40,101,134],aspir:[18,32],namedvar:25,setbid:144,positionaleatsarg:28,succeed:[118,2,91,144,83,72],indirectstubsmanag:[5,6],solv:[102,130,57,26,68,132,32,33,40,15,114,134,18,19,101],setindexedloadact:65,v128:[83,11],amd64:37,isdopcod:[55,102],interprocedur:[91,46,57,83,13,108],size3:83,event:[54,0,111,48,39,118,106,74,101],available_extern:[83,144],condbr:68,typeservers:148,subclassref:44,internallinkag:101,tgt:137,getsrc:37,libxxx:12,sweep:88,zchf:12,arbitrarili:[17,83,31,129,132],xxxtargetlow:65,mistak:[81,62,134,111],java:[109,46,88,48,26,51,15,83,101],r258109:134,duo:38,unflatten:84,due:[109,102,47,48,81,50,3,7,57,83,123,14,142,62,87,101,63,88,113,134,96,37,73,38,44,75,105,139,108],shf_alloc:38,whom:[87,117],trc:102,stdint:39,brick:87,whoa:[16,30],strategi:[88,48,28,102,33,105,19,83,101],thunk:[142,46,102,83,87],dw_tag_imported_modul:83,flight:[118,139,83],append_block:[16,17,18,19,23],llvm_map_components_to_librari:74,feat_tailcal:102,demand:[37,144,102,33,134,19,9],instructor:65,logger:0,asmmatcheremitt:34,eatomtypedietag:132,frozen:123,batch:104,dagtodagisel:55,make_shar:[6,63,61,9],abov:[109,46,110,0,111,47,48,49,26,114,90,115,81,89,82,106,5,6,7,8,9,85,86,63,102,57,129,83,132,121,12,122,125,61,13,14,142,15,62,87,16,17,18,19,101,21,22,23,25,65,130,88,27,28,29,30,31,32,33,91,93,94,72,120,37,74,38,145,39,75,103,51,148,105,84,41,144,55,43,147,108,134,149],intendend:83,s_sleep:38,src_private_bas:38,int32:106,runonfunct:[91,65,57,101,13,20,84],image_file_machine_am33:140,rip:[86,89,83,8],x8b:140,dllvm_enable_project:[37,134],demot:46,rid:[87,148],illinoi:[81,121,40,5,6,63,61,9],mioperandinfo:65,dw_lang_c:25,shirt:111,minim:[81,4,83,79,120,18,101,41,130,125,68,132,32,134,95,96,38,39,102,51,142,106,22,131,108],compute_pgm_rsrc2:38,compute_pgm_rsrc1:38,getnumel:101,cset:97,adjustpassmanag:11,granulated_lds_s:38,higher:[46,1,48,26,115,104,3,63,9,54,57,83,121,13,15,101,22,125,68,102,40,106],x83:140,stackentri:88,x87:[68,83],x86:[102,1,48,50,142,83,84,55,136,7,8,86,105,62,24,65,89,68,34,35,95,37,73,74,139,45,110,103,51,92,131,42,148,149],diobjcproperti:83,mfctypeserverindex:148,e_id:38,mytyp:83,w9100:38,robust:[45,86,14,68,43],wherev:[25,14,81,101],obit:83,"_info":38,stateless:[91,46,51],lower:[46,81,1,48,26,52,83,55,57,121,60,14,15,62,18,19,22,65,130,88,89,125,68,32,33,34,93,139,45,102,51,105,106,137],memoryphi:115,n2429:81,machineri:[49,129],discourag:[4,28,81,0,101],find_packag:74,"try":[46,110,0,111,87,26,115,104,81,4,5,6,83,61,9,54,102,57,63,14,15,62,16,17,18,19,20,22,23,24,66,88,89,28,30,139,32,33,91,93,96,97,37,101,39,75,51,118,40,145,147,134],searchabl:[61,9],throwawai:131,chees:81,local_unnamed_addr:[83,144],propos:[54,87,39,122,84,40,62,134,72,132],rewound:139,module_code_asm:144,collabor:134,targets_to_build:12,paramattr_group_block:144,builder_at:19,"_division_by_zero":38,bpf_call:102,waymark:101,parse_var_init:19,xxxisellow:65,globallayoutbuild:142,exposit:[27,21],getbinarycodeforinstr:65,lmalloc:28,type_code_label:144,finder:54,view_function_cfg_onli:17,complaint:[26,15],vendor:[24,81,83,38],erasefrompar:[24,25,65,29,30,31,32,33,101],int32x4_t:93,v64:[83,11],ispoint:87,mypassnam:101,v60:148,preexist:46,awaken:139,image_sym_class_bit_field:140,fbb:65,ptrb:11,llvm_yaml_is_flow_sequence_vector:110,"__cxx_":84,short_wchar:83,xmm10:8,xmm11:8,xmm12:8,xmm13:8,xmm14:8,hatsiz:110,cst_code_wide_integ:144,parse_var_nam:19,modulesymstream:148,compilemodul:84,global:[46,102,1,48,26,52,81,117,53,7,89,121,79,54,10,68,120,11,83,132,59,123,13,14,142,15,62,87,16,19,101,21,41,23,24,25,2,128,65,130,88,27,28,29,30,31,32,33,91,69,34,36,37,73,38,139,39,57,51,148,105,144,108,45],understood:[81,102,69,15,144,148],litter:40,unspecifi:[38,11,48,49,102,68,83],lowerinvok:46,llvmgettypekind:55,isaddresstaken:89,multmp:[24,25,29,30,31,32,33,16,17,18,19,23],affili:90,enable_sgpr_workgroup_id_i:38,dagisel:34,glibc:39,socklen_t:5,image_scn_mem_read:140,retri:118,enable_sgpr_workgroup_id_x:38,proj:114,enable_sgpr_workgroup_id_z:38,prof:[3,83,72],patchset:37,proc:[37,50,65,97],rotl:55,n3206:81,setdatalayout:[24,25,30,31,32,33],assignvirt2stackslot:102,runtimedyld:[85,63],mustquot:110,lhs_val:[16,17,18,19,23],ispointertyp:81,accessti:83,"_unwind_resum":139,"3dnow":24,arg_begin:101,roundup:38,row:82,"_ztv1a":142,"_ztv1b":142,image_file_machine_wcemipsv2:140,registerasmprint:65,runonloop:91,estim:[87,122,72,1],threadid:11,tok_then:[24,25,31,32,33],runonbasicblock:91,ldri:65,plethora:[37,121,101],branchfold:65,prec:[24,25,32,33,18,19],announc:[47,54,118,134,114],operandmap:65,question:[81,111,87,26,104,83,54,57,132,121,15,62,124,17,19,101,22,129,130,125,31,33,37,138,45,40,41,147],"long":[102,0,47,48,26,81,100,3,53,4,5,83,61,117,68,136,120,57,129,145,121,86,15,62,90,20,23,2,65,130,88,67,131,29,30,132,91,35,37,138,101,45,110,51,40,139],adjac:[44,83,38,101],arithmet:[79,46,102,130,1,87,45,29,33,62,19,83,149,101,23],exedepsfix:68,fmuladd:[83,1],"__cxa_call_unexpect":139,aliasanalysi:[91,83,57],files:58,lto_codegen_set_pic_model:108,of_channel:[16,17,18,19,22,23],gcca:119,delta:75,consist:[81,48,49,2,114,53,4,83,8,89,79,57,7,132,61,13,142,62,87,16,17,18,19,101,23,24,25,65,130,88,68,28,29,30,31,32,33,91,36,134,70,90,38,139,39,102,51,118,40,144,42,44,45,149],confusingli:51,caller:[46,87,83,121,14,17,18,101,23,65,88,31,32,91,93,139,39,102,103,20,105,45],cmpnumber:87,parsedefinit:[24,25,125,29,30,31,32,33],mflop:1,reorder:[38,7,132,51,48,83],tdrr:95,highlight:[79,25,37,102,34,62,90,147,101,84],worklist:[46,101,87],alu32_rr:82,icc_val:65,createdatalayout:[24,25,30,31,32,33,5,6,63,61,9],phieliminationid:102,ptr2:83,fpexcept:83,tpi:[78,117,116],numconst:106,simm13:65,cciftyp:65,bpf_neg:102,"0x0000000000dc8872":123,sdvalu:[102,84,65],outerstructti:83,remove_if:101,registerdescriptor:65,maybeoverridden:87,v3i32:68,ecosystem:[42,101,117],at_decl_fil:132,storeregtostackslot:[102,65],parseprimari:[24,25,125,29,30,31,32,33,18],domfronti:46,containsfoo:81,ccpromotetotyp:65,meaning:[38,130,88,48,127,14,34,95,147,83,101],thedoc:110,ccifcc:65,difil:[25,83,132],numeltsparam:[83,144],ternari:102,gr1:83,elementtyp:83,gr8:[102,65],spillsiz:65,scroll:138,cmpq:[103,35],pervert:[8,124],tag_structure_typ:132,module_code_globalvar:144,m7170:38,edi:[89,102,7,8],numfilenam:79,block_begin:[16,17,18,19,23],gmake:[91,49],dispel:130,int8ti:101,edu:97,edx:[102,83,8,149],modulehandl:[5,6,63,61,9],printexprresult:5,uphold:83,xxxiseldagtodag:65,else_bb:[17,18,19],initializenativetargetasmprint:[25,30,31,32,33,5],needstub:65,va_end:83,attributerefer:34,junip:38,formbit:8,isconstantpoolindex:65,fpformbit:8,mcinst:[102,34],templateparam:83,whichev:[132,138],w64:74,heard:[14,96],reinterpret:93,graphic:[38,39,26,32,15,18],reservednumvgpr:38,uniqueid:113,emitconstantpool:65,reles:50,relev:[0,48,50,114,82,83,117,136,57,7,12,14,105,62,17,129,68,31,134,138,102,51,76,40,42],callloweringinfo:84,mandelhelp:[18,32],lfoo:102,"0x0002023":132,maxsiz:81,dealt:68,loop_end_bb:[17,18,19],h_inlined_into_g:94,pleas:[75,0,111,47,48,26,50,114,104,81,82,83,84,11,12,86,15,62,102,101,23,64,65,88,29,146,37,98,137,74,138,39,57,51,40,131,42,147,44,45,149],smaller:[46,81,138,88,101,49,102,51,13,40,133,62,83],"_main":[94,140],cfi:[89,73,139],lcuda:11,cfg:[91,46,122,102,65,86,87,2,31,60,13,104,3,139,17,83,101],cfe:[37,138,122,114,40,134],hardcod:[82,65],dllvm_binutils_incdir:77,fold:[109,54,55,102,65,46,68,29,30,57,51,91,106,62,16,83,101],"__llvm_memmove_element_unordered_atomic_":83,throttl:122,folk:[39,138],ifequ:83,compat:[46,142,48,26,80,114,100,104,83,54,55,120,11,60,86,14,105,15,90,101,88,28,132,133,35,93,70,95,37,74,38,139,45,102,51,40,106,144,39],pointer_offset:48,b13e8756b13a00cf168300179061fb4b91fefb:39,memcpyopt:[46,51,57],image_file_machine_i386:140,compar:[46,102,1,47,87,49,3,82,83,57,7,132,59,122,86,17,18,19,101,41,24,25,130,125,68,31,32,33,72,139,39,110,51,22,131,149],mainlin:[40,134,114],smallconst:106,dllvm_enable_doxygen_qt_help:74,sm_xx:14,proj_obj_root:41,finishassembl:88,juggl:14,dllvm_targets_to_build:[74,96,40,12,50],chose:[16,47,105],sexi:[27,21],queue_ptr:38,ocamlbuild_plugin:[16,17,18,19,23],sext:[83,62,38],inaccessiblemem_or_argmemonli:83,sse41:7,win:[81,101,57],larger:[10,81,65,48,102,68,55,132,40,35,144,53,96,83,148,101],shader:[102,81,38],enable_exception_memori:38,n2927:81,nsstring:132,unattend:20,typic:[109,46,81,26,113,114,100,104,53,83,85,86,120,57,129,7,13,14,15,101,41,65,130,88,89,132,91,36,96,73,74,99,138,139,39,102,51,106,42,43,108],current_valu:105,n2928:81,mock:101,apr:4,elfdata2lsb:38,app:[76,81,101,38],inequ:102,loopcond:[24,25,31,32,33,17,18,19],apu:38,core2:86,duck:101,opcod:[81,87,82,83,8,129,18,101,22,23,24,25,65,125,29,68,32,33,38,39,102,51,149],numer:[124,104,125,83,8,117,14,62,89,16,17,18,19,101,21,22,23,24,25,65,27,28,29,30,31,32,33,36,45,118,44],transformutil:42,gnuwin32:[104,74],sourcefil:100,emitconstpooladdress:65,w31:83,fed:[102,122],from:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,51,52,53,54,55,57,145,59,60,61,62,63,64,65,66,68,69,71,72,73,74,75,76,77,79,80,81,82,83,84,85,86,90,88,89,127,91,16,92,93,94,95,96,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,125,126,129,130,132,133,134,136,138,139,141,142,144,131,146,137,148,149],stream:[102,1,112,113,7,81,116,83,117,79,10,119,56,145,16,17,18,19,101,21,22,23,128,65,125,127,67,55,132,91,69,36,37,99,39,110,144,78,148],libclang_rt:118,ineg:102,few:[46,81,111,1,26,114,131,4,63,84,120,11,83,86,14,15,90,16,18,20,41,23,25,127,65,88,125,29,30,132,32,91,134,96,37,74,101,102,51,40,22,144,139,42],usr:[37,74,11,28,12,50,77,14,96],regconstraint:102,my_addit:132,sort:[81,26,83,84,79,132,121,14,15,16,17,19,101,125,22,30,28,68,31,33,36,134,74,75,51,118,40],clever:[26,15,129],ap2:83,parse_binary_preced:[18,19],spu:65,cimag:[18,32],adc64mi8:8,toolchain:[37,81,74,102,113,104,134,148,117],tok_identifi:[24,25,27,125,29,30,31,32,33],is_zero_undef:83,localdynam:[83,144],dllc:86,optimizefunct:[5,6,63,61],augment:[101,18,3,68,32],"_name_":90,lbb0_2:103,corpus_dir:39,linger:48,annot:[73,11,139,141,14,3,62,43,83],"__clear_cach":83,annoi:81,no_dead_strip:83,endian:[54,38,65,144,102,132,93,83,117],lf_typeserver2:132,getregclass:102,proof:[89,3],v_bfrev_b32_e32:38,cta:11,quickstart:[54,49,12,86,77,147],tar:[47,37,104,12,96],"0f7f800000":11,isindirectbranch:8,movapd:7,tag:[79,37,81,88,48,110,132,114,34,40,144,43,83,96,101],proprietari:40,tab:[100,81,7],xmin:[18,32],tag_apple_properti:132,predicate_stor:65,jingyu:14,sit:61,featurefparmv8:8,six:[102,2,51],linaro:50,brian:122,sig:37,implicitdefin:89,subdirectori:[37,74,65,49,2,86,134,90,42,41],instead:[46,110,0,111,48,26,50,114,90,100,81,125,127,82,4,83,61,9,79,54,10,68,102,11,129,63,121,60,123,86,14,105,15,62,87,16,18,19,20,21,22,23,122,2,65,66,88,27,28,29,30,139,32,33,91,146,36,35,134,95,130,37,73,74,99,101,39,57,103,51,40,106,144,89,42,44,45],constantfp:[24,25,29,30,31,32,33,101,23],dwo:107,chri:[102,26,81,91,14,40,15,134],sil:8,tension:[19,33],fpext:83,"__atomic_exchange_n":51,vehicletyp:81,hazard:73,singlethread:[83,38],printdens:[18,32],attent:[37,0,111,65,86,40,105,83,9],ethnic:111,hasiniti:101,initialize_ag_pass:91,mynewpass:145,light:[81,83],llvm_build_exampl:74,modulesett:61,datacrc:148,retainedtyp:[83,132],deoptim:[48,83],xrayentrytyp:118,ptroff:102,ouput:84,elim:[92,132],dw_tag_memb:[83,132],getanalysisifavail:91,elis:[105,60],attrparsedattrlist:34,build_fsub:23,pai:[86,40,81,65],reilli:101,initroot:88,waypoint:20,criterion:52,vsplth:73,emitfunctionstub:65,multimap:101,crash:[37,75,46,88,145,39,26,106,15,134,95,20,45,101],attrpchread:34,nonneg:83,flat_scratch_lo:38,devel:47,byvalu:38,ilp32:[26,15],createbasictyp:25,nfc:73,trac:146,edit:[37,74,120,38,101],ds_atom:38,f2_1:65,fuzz:[54,39],trap:[105,83,62,38,130],codegenprepar:46,instsp:65,always_instru:118,licm_vers:83,image_scn_align_8byt:140,clangcommentcommandlist:34,mylistel:110,virtregmap:102,"__stack_chk_fail":83,visitinstruct:84,our:[102,0,111,1,48,26,113,81,125,117,5,6,63,61,9,11,132,84,14,105,15,90,87,16,17,18,19,101,21,22,23,24,25,88,27,28,29,30,31,32,33,91,134,37,74,75,76,40,131,108],argumentlisttyp:101,vcc:38,const_use_iter:101,frontier:[46,19,38,33],llvm_compiler_job:74,m_func:101,double_typ:[16,17,18,19,23],categori:[46,81,65,101,28,75,132,86,34,83,49],sectalign:28,basic_ss:149,stroustrup:101,llvmbb:54,llvmconfig:74,gettargetmachin:[25,30,31,32,33,5,6,63,61,9],llvmlab:134,multiplicand:83,proviso:40,powerpc:[37,55,73,74,65,45,110,51,86,106,136,102,83],dictionari:[39,2,83],deadarghax0r:46,"0x00000110":132,anyhow:83,dlltool:45,promptli:40,my86_64flag:110,image_sym_class_undefined_label:140,vc2:113,vc4:113,tailcalle:102,lto:[73,13,77,142,144,105,108],libcxxabi:[37,74],optimizemodul:[5,6,63,61],mrm1r:65,flaground:110,isfoo:81,"0x2000":132,"0dev":49,prioriti:[0,38,130,132,114,14,83],invidu:0,unknown:[102,1,125,63,117,120,83,16,17,18,19,101,21,22,23,24,25,27,28,29,67,31,32,33,30,69,96,110,77,148],ntohl:102,v8p0i32:83,makestruct:14,boil:[134,129,31,32,40,93,17,18],dbuild_shared_lib:37,tidbit:[25,64,27,26,57,15,19,21],shell:[25,121,74,37,28,2,86,147,20],unabridg:[19,33],shelf:[61,9],juli:[88,134],difwddecl:83,eltsizeparam:[83,144],practic:[109,46,81,48,113,83,61,121,62,16,17,101,21,23,129,130,88,27,28,29,30,31,132,69,134,73,39,51,40,106,148],protocol:[48,81,83,134],lea:[45,102,8],svnup:37,xray_interfac:118,utf:[37,34],clangattrparserstringswitch:34,sea:38,clip:123,favorit:[17,73,31],cohen:4,linker:[113,80,52,83,9,13,11,12,86,20,126,65,54,88,28,132,32,92,35,37,74,99,38,101,102,77,42,108,148],appel89:88,peform:93,coher:[42,83,38],lowerfp_to_sint:65,disjoint:[115,57,83,38,1],memorydef:115,inform:[0,1,26,3,4,7,8,11,12,86,14,15,16,18,19,101,23,24,25,2,27,28,29,30,32,33,34,35,37,38,39,40,42,43,45,46,47,48,49,50,52,53,54,57,145,62,41,64,65,66,67,68,69,71,73,74,75,118,77,79,110,80,82,83,84,85,87,88,89,127,91,36,99,102,104,105,106,108,109,81,111,113,114,100,117,136,121,122,123,129,130,132,134,137,138,139,141,142,144,146,147,148,149],diverg:[13,18,83,32,130],rout:57,roun:14,r_amdgpu_gotpcrel32_lo:38,anyregcc:[106,83,144],preced:[46,81,2,115,52,83,9,57,7,132,16,17,18,19,101,21,22,23,24,25,66,27,125,29,30,31,32,33,36,38,105,106,144,44],which:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,46,47,48,49,51,52,53,54,55,57,63,59,60,61,62,41,79,65,66,67,68,69,70,36,73,74,75,118,77,81,82,83,84,85,86,90,88,89,127,91,16,92,93,95,96,97,100,101,102,103,104,105,106,108,110,111,114,115,117,120,121,122,123,124,125,126,129,130,132,134,138,139,141,142,144,145,146,147,148,149],pty2:83,combin:[46,102,1,48,26,100,53,83,55,130,122,13,14,105,15,87,20,125,22,23,65,66,88,89,28,29,68,91,35,134,37,74,38,101,45,110,51,118,40,144,39],createstub:[5,6],ncsa:40,practis:72,llvmtarget:41,clash:[5,6,83,81],machine_version_major:38,safepointaddress:88,clase:101,sunwspro:37,image_file_machine_ia64:140,dw_op_addr:132,reglist:65,sean:101,attributelist:[34,70],dens:[101,83,144,38],sparsecheckout:134,addregfrm:65,pipe:[4,2,7,38],add_custom_target:90,osuosl:146,determin:[46,75,0,110,48,49,2,114,52,82,4,83,85,86,120,11,129,122,13,142,87,17,18,102,101,125,22,23,79,127,65,28,29,68,31,32,132,91,92,74,38,139,45,57,148,105,106,41,144,131,39],nextindvar:83,dispatch1:83,carrizo:38,const_arg_iter:101,mips64el:118,"99p":84,"30pm":110,mainloop:[24,25,125,29,30,31,32,33],filetyp:[24,104,92,132],findregress:47,arm_neon:[34,93],umbrella:134,liveinterv:[95,102],reqd_work_group_s:38,eas:50,strtol:28,locat:[109,46,75,0,1,47,48,49,2,80,115,52,4,83,9,85,54,102,11,7,130,12,86,62,18,19,101,41,25,65,66,88,89,28,132,32,33,94,120,37,73,74,38,139,57,51,110,106,43,79],preserve_allcc:[83,144],much:[46,75,0,110,47,48,26,115,81,53,4,83,8,117,86,55,102,11,129,121,12,60,133,61,13,14,15,62,16,106,19,20,125,22,23,65,68,28,29,30,132,33,91,134,96,118,108,97,120,37,138,101,45,57,51,76,77,40,84,41,146,147,44],pickup:37,mymaptyp:110,eatomtypetypeflag:132,multmp4:[16,30],local:[46,110,48,2,50,52,81,83,121,85,102,11,7,59,86,14,87,16,19,101,21,23,88,27,28,29,30,132,33,91,34,134,95,96,36,72,37,73,38,139,45,57,92,144,44],multmp1:[29,23],multmp2:[29,23],multmp3:[29,23],contribut:[64,54,48,102,118,91,69,40,62,134,46,83,148,117,101],succe:[112,10,137,119,120,129,139,145,125,127,99,126,86,92,53,146,19,7,22,101],cdbg_user:38,buildtool:42,blarg:101,lto_module_t:108,operating_system:83,"8800p":38,selectcod:65,bisect:[13,54,101,134],regalloclinearscan:102,image_rel_i386_sect:35,partit:[46,73,20,102,50,115,92,63],"8800b":38,svnrevert:37,bar_in_b_cc:3,view:[46,144,111,49,100,27,39,102,31,51,115,108,134,90,17,101,21],modulo:[102,83,132],knowledg:[79,46,102,86,88,26,81,13,40,15,144,43,147,83,117],maketir:81,objectcach:85,dw_form_xxx:132,int16_t:[110,65],terminatorinst:[81,3,101],image_sym_class_enum_tag:140,image_scn_lnk_remov:[140,35],becaus:[109,46,102,134,1,87,49,26,81,114,115,104,3,125,131,82,4,7,8,89,85,68,120,57,129,83,132,121,12,60,61,13,14,142,15,62,90,16,17,18,19,20,21,22,23,24,25,2,65,130,88,27,28,29,30,31,32,33,91,36,93,70,96,37,138,101,39,110,51,40,106,144,139,149,108,79],gmail:[37,138],xrai:[118,54,45,84],ht206167:39,entranc:83,framemap:88,mainli:[87,45,68,14,34,83,41],float_mode_round_32:38,below:[46,110,1,47,48,49,81,50,51,115,52,3,5,6,7,61,9,79,86,10,102,11,129,83,132,12,60,84,13,14,142,62,87,16,18,19,101,125,22,24,25,113,65,89,28,90,30,31,32,33,91,34,134,122,114,120,37,74,138,92,57,103,104,141,118,40,106,41,144,131,42,148],dll:[86,139,83,148,144],favor:[49,40,113],libsystem:81,s_swappc_b64:38,beginassembl:88,"__apple_nam":132,rppassmanag:91,image_sym_dtype_funct:140,amen:102,clangattrdump:34,sprinkl:101,job:[74,129,39,91,115,134,4,61],mapopt:110,noalia:[130,57,115,105,62,144,83],externallinkag:[24,25,29,30,31,32,33,23],exclam:83,swift:83,gte:83,"0x00000120":132,thenbb:[24,25,31,32,33,17],constantint:[101,81,83],tgtm:37,mlimit:145,april:39,progbit:35,w8100:38,grain:[101,68],committe:[101,0,111],libtinfo:12,uint16_t:[65,110,132,82,148,117],unclear:[19,113,148,33],parallel_loop_access:83,galina:146,hyphen:[28,65],wonder:[81,129,130,121,30,40,16],arriv:130,chmod:37,walk:[46,73,87,110,68,91,115,101],c13bytes:[69,148],rpc:5,"_var":90,respect:[81,111,48,142,83,61,63,129,57,145,8,86,14,105,19,20,41,65,130,88,33,134,94,37,73,74,38,101,102,40,139,43],rpo:73,getoperand:[81,102,101,65],decent:[25,55,27,50,114,91,101],xxxcallingconv:65,compos:[79,120,89,104,83,61,9],compon:[46,102,49,114,100,104,58,9,85,54,11,83,122,123,90,101,41,126,65,66,88,96,37,73,74,39,75,118,40,106,42],packedvector:101,besid:[81,0,65,28,32,86,134,18,83,125,22],hsa_code_object_isa:38,gtu:11,unregist:91,inbound:[79,105,83,62,130],presenc:[129,65,7,49,102,113,51,13,139,83,101],cypress:38,sock_stream:5,gtx:11,ptxa:[14,11],llparser:[55,84],present:[109,102,48,2,83,54,7,132,13,14,87,17,18,19,101,24,25,130,88,28,90,31,32,33,69,35,134,94,95,37,38,139,75,105,144,44,148],argu:81,align:[46,102,48,7,79,136,11,83,122,62,87,101,65,130,88,89,67,132,93,70,38,139,45,110,51,105,106,144,108],dfpregsclass:65,g_store:68,constprop:[46,28,101],wili:130,wild:[18,28,32],xorri:65,indirectstubsmgrbuild:6,bb3:83,observ:[102,48,39,26,113,51,148,69,81,15,83,84],bb1:[83,144],sop2:38,layer:[64,102,57,39,26,67,15,134,96,6,63,61,9],sop1:38,avx:[86,83,1],instrinfo:[89,34,102,65],cctype:[24,25,125,29,30,31,32,33],eptr:83,avr:45,avl:101,motiv:[109,31,33,106,82,17,19,83,61],dual:40,add64mi32:8,foreign:[121,74,9],incq:7,getattributespellinglistindex:34,disubrang:83,uint16x4_t:93,headlight:81,xxxschedul:65,cross:[24,37,74,54,87,45,131,12,50,122,68,134,145,83,117,101],member:[46,110,0,111,1,49,81,63,9,85,120,129,83,86,14,90,101,65,130,132,133,38,102,142,108,149],binary_preced:[18,19],largest:[83,102,35,62,148],ifndef:[14,5,6,63,61,9],f64:[102,83,65,38,11],expcnt:38,"0x1b":144,hasjit:65,sopp:38,maptag:110,diploma:122,swiftself:[83,144],ssecal:65,sopc:38,hardcodedsmalls:101,bcpl:44,v_nop:38,decoupl:149,iftru:83,inc4:7,minsizerel:[37,74],firstli:83,lower16:35,faultingload:109,linkagetyp:101,getrawpoint:70,initializeallasmprint:24,my_function_fast:11,llvm_enable_expensive_check:74,libdevic:11,mips16:51,getoffset:65,camel:81,converg:[18,83,144],obtain:[85,46,102,65,38,149,101,75,30,148,115,14,40,4,105,83,8,79],tcp:5,debuggerabivers:38,mft:117,heavili:[54,121,88,26,15,101],simultan:[1,39,51,86,93,101],lex:[25,27,16,17,18,19,44,21,22,23],expr1rh:79,superset:[83,51,120],methodproto:65,full_corpus_dir:39,eatomtypenul:132,image_debug_type_codeview:113,book:[54,81,91,73,134,101],cultur:111,mybranch:[37,134],emitobject:85,registerehframesinprocess:5,llvm_on_win32:[24,25,30,31,32,33,4],dw_tag_namelist:132,wavefronts:38,agnost:[4,102,132,93],strconcat:[44,65,149],lightweight:[45,2,101,96,81],know:[75,0,134,1,48,49,26,90,104,81,117,83,61,9,79,102,11,132,121,123,86,142,15,62,87,16,17,18,19,20,125,22,23,24,25,2,65,88,28,29,30,31,32,33,91,93,37,74,138,101,39,57,51,110,40,139,146,147,108],denser:[18,32],press:24,librarynam:[88,41],python2:50,"7e15":28,hostc:11,hostb:11,hosta:11,incred:[40,81,134],bpf_class:102,vextublx:45,thunderx2:45,repurpos:132,unord:[74,38,65,45,51,147,83],subsystem:[54,102,83],"0xff":[83,38,149],"__host__":14,"0xfe":38,createphi:[24,25,31,32,33],"0xfc":38,"_invalid_oper":38,unabbrev_record:144,growth:[101,102,83],"export":[100,37,74,57,63,28,102,30,32,114,77,108,117,134,5,6,83,61,9],superclass:[65,57,91,101,8,149],smoothli:[61,90],add64ri32:8,not_found:[16,17,18,19,22,23],leaf:[139,132],image_sym_class_struct_tag:140,lead:[25,63,102,130,46,83,28,110,68,51,77,40,125,90,81,105,7,39,22,101],vprecipebas:122,leak:[88,39,2,103,60,86,21],boolean_property_nam:42,leap:138,leaq:103,leav:[37,75,138,65,11,88,87,28,2,122,121,132,77,40,134,46,105,83,61,97],settl:134,prehead:[17,31,46],leader:81,getnam:[24,25,121,125,29,30,31,32,33,91,5,6,101],numstr:[24,25,27,125,29,30,31,32,33],settargettripl:24,acronym:54,"enum":[102,113,81,82,83,8,55,129,57,132,68,101,125,24,25,65,88,27,28,29,30,31,32,33,34,70,110,140,137,148],xxxgencallingconv:65,obei:83,enable_dx10_clamp:38,eatomtypenameflag:132,readwrit:38,add64mi8:8,column:[79,25,110,38,37,83,49,1,132,81,82,7],fudg:12,type_code_doubl:144,lppassmanag:91,constructor:[85,51,102,121,65,129,83,28,110,81,31,60,91,14,105,70,63,61,9,101],spiller:[95,92,102],disabl:[81,1,47,48,2,7,114,115,83,86,57,145,12,13,17,20,25,88,28,127,31,92,93,95,97,37,74,38,100,101,39,75,118,76,77],ashr:83,any_of:45,own:[46,81,0,49,26,114,115,4,83,117,85,55,129,122,86,14,15,90,18,19,101,21,41,79,65,88,27,28,29,30,132,32,33,91,34,134,96,72,37,98,74,138,38,139,39,102,118,77,40,106,144,42],dclang_bootstrap_target:96,automat:[102,87,2,80,122,81,83,54,129,57,145,132,121,12,60,16,17,20,41,23,24,25,65,88,89,28,29,31,33,91,146,34,134,37,74,138,38,101,110,103,118,92,42,147,149],warranti:[91,40],dbuilder:25,isprint:39,"59620e187c6ac38b36382685ccd2b63b":49,build_mod:104,val:[24,25,51,65,11,101,28,29,30,31,32,33,105,106,81,144,70,5,83,125,149],transfer:[24,25,60,30,31,32,33,14,105,103,93,139,83],v4f32:[68,83],secret:52,threadsanit:83,intention:[91,125,81,83,22],appl:[54,139,7,131,102,132,123,40,90,83],arg1:[27,39,83,21],"var":[24,25,83,90,132,33,87,19,7,149],dilocalvari:[25,83,132],floatscalarti:83,varexpr:[24,25,19,33],mailer:40,functionaddress:109,unwrap:101,"0x7fffffff":83,codegen_expr:[16,17,18,19,23],lazyresolverfn:65,cvinfo:69,made:[109,46,102,134,48,26,114,115,52,81,83,8,9,54,57,132,121,14,15,62,87,17,19,101,41,129,130,124,30,31,33,91,34,93,139,45,110,103,40,144,147],temp:75,whether:[46,102,0,48,26,142,52,81,83,55,68,120,57,129,13,14,105,15,87,17,18,19,20,125,22,24,25,65,130,88,67,28,127,30,31,32,33,34,134,95,72,37,74,138,38,101,39,75,118,92,106,41,144,139,42,108,149],consumeerror:101,troubl:[37,28,40,104],record:[0,1,48,49,26,113,83,61,117,79,132,92,8,15,106,101,24,25,127,67,29,30,31,32,33,69,34,134,135,95,36,37,138,38,45,141,118,40,84,143,144,137,44,148,149],divisionbyzero:83,structtyp:101,ptrreg:102,lvm:25,again:[134,87,49,26,114,115,83,9,7,15,62,90,16,17,19,101,28,29,30,31,33,91,93,139,75,103,105,131,147],llvmasmpars:41,numberexpr:[24,25,125,29,30,31,32,33,16,17,18,19,22,23],significantli:[109,81,74,139,101,39,31,91,40,108,144,53,17,83,125,22],llvmhello:91,flat_atomic_fmax_x2:38,irtransformlay:[5,6,63,61],meaningless:101,rl5:11,create_entry_block_alloca:19,sparseset:101,findsymbolin:61,rl7:11,mutual:[48,27,28,21,23],targetfunc:101,throwinfo:139,immateri:87,the_modul:[16,17,18,19,23],percent:57,constantfold:55,parsecommandlineopt:[5,28,84],other:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,87,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,40,42,44,45,46,47,48,49,50,104,54,55,57,63,59,60,61,62,41,64,65,67,68,69,70,36,72,73,74,75,77,79,81,82,83,84,85,86,90,88,89,127,91,16,92,93,94,95,96,100,101,102,51,105,108,110,111,113,114,115,117,136,120,121,122,124,125,129,130,132,134,137,139,142,144,131,147,148,149],bool:[102,87,81,83,61,55,129,57,84,13,16,17,18,19,101,23,24,25,65,68,28,29,30,31,32,33,91,74,39,110,51,118,105],llvmdisassembler_option_usemarkup:43,modulehandlet:[5,6,63,61,9],gline:1,neelakantam:46,inst_iter:101,junk:[16,17,18,19,22,23],xxxsubtarget:65,vea6bbv2:40,indexedmap:[102,101],clangcommentcommandinfo:34,add_subdirectori:[91,74],tok_extern:[24,25,27,125,29,30,31,32,33],swifterror:[83,144],debian:[76,37,12],stringmap:[28,101],experienc:20,sass:[14,11],sh_addralign:38,reliabl:[109,102,2,74,122],subregclasslist:65,pdata:[35,148],emerg:[40,123],auxiliari:[65,45,38,9],invari:[46,73,37,48,57,68,91,62,83,101],istermin:[8,149]},objtypes:{"0":"std:option"},titles:["Reporting Guide","Auto-Vectorization in LLVM","lit - LLVM Integrated Tester","LLVM Branch Weight Metadata","System Library","5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance","4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs","FileCheck - Flexible pattern matching file verifier","TableGen","1. Building a JIT: Starting out with KaleidoscopeJIT","llvm-extract - extract a function from an LLVM module","User Guide for NVPTX Back-end","How To Cross-Compile Clang/LLVM using Clang/LLVM","Using -opt-bisect-limit to debug optimization errors","Compiling CUDA with clang","8. Kaleidoscope: Conclusion and other useful LLVM tidbits","4. Kaleidoscope: Adding JIT and Optimizer Support","5. Kaleidoscope: Extending the Language: Control Flow","6. Kaleidoscope: Extending the Language: User-defined Operators","7. Kaleidoscope: Extending the Language: Mutable Variables","LLVM bugpoint tool: design and usage","1. Kaleidoscope: Tutorial Introduction and the Lexer","2. Kaleidoscope: Implementing a Parser and AST","3. Kaleidoscope: Code generation to LLVM IR","8. Kaleidoscope: Compiling to Object Code","9. Kaleidoscope: Adding Debug Information","10. Kaleidoscope: Conclusion and other useful LLVM tidbits","1. Kaleidoscope: Tutorial Introduction and the Lexer","CommandLine 2.0 Library Manual","3. Kaleidoscope: Code generation to LLVM IR","4. Kaleidoscope: Adding JIT and Optimizer Support","5. Kaleidoscope: Extending the Language: Control Flow","6. Kaleidoscope: Extending the Language: User-defined Operators","7. Kaleidoscope: Extending the Language: Mutable Variables","TableGen BackEnds","LLVM Extensions","llvm-nm - list LLVM bitcode and object file’s symbol table","Getting Started with the LLVM System","User Guide for AMDGPU Backend","libFuzzer \u2013 a library for coverage-guided fuzz testing.","LLVM Developer Policy","Creating an LLVM Project","LLVMBuild Guide","LLVM’s Optional Rich Disassembly Output","TableGen Language Reference","LLVM 5.0.0 Release Notes","LLVM’s Analysis and Transform Passes","How To Validate a New Release","Garbage Collection Safepoints in LLVM","LLVM test-suite Guide","How To Build On ARM","LLVM Atomic Instructions and Concurrency Guide","Scudo Hardened Allocator","llvm-bcanalyzer - LLVM bitcode analyzer","Overview","Extending LLVM: Adding instructions, intrinsics, types, etc.","The PDB Public Symbol Stream","LLVM Alias Analysis Infrastructure","llvm-stress - generate random .ll files","llvm-diff - LLVM structural ‘diff’","Design and Usage of the InAlloca Attribute","2. Building a JIT: Adding Optimizations – An introduction to ORC Layers","Performance Tips for Frontend Authors","3. Building a JIT: Per-function Lazy Compilation","LLVM Tutorial: Table of Contents","Writing an LLVM Backend","llvm-build - LLVM Project Build Utility","The MSF File Format","Global Instruction Selection","The Module Information Stream","How To Use Attributes","llvm-readobj - LLVM Object Reader","LLVM Block Frequency Terminology","The LLVM Lexicon","Building LLVM with CMake","How to submit an LLVM bug report","Advice on Packaging LLVM","The LLVM gold plugin","The TPI & IPI Hash Streams","LLVM Code Coverage Mapping Format","LLVM Command Guide","LLVM Coding Standards","How To Use Instruction Mappings","LLVM Language Reference Manual","Debugging with XRay","MCJIT Design and Implementation","LLVM Testing Infrastructure Guide","MergeFunctions pass, how it works","Garbage Collection with LLVM","Machine IR (MIR) Format Reference Manual","CMake Primer","Writing an LLVM Pass","llc - LLVM static compiler","Using ARM NEON instructions in big endian mode","llvm-symbolizer - convert addresses into source code locations","lli - directly execute programs from LLVM bitcode","A guide to Dockerfiles for building LLVM","Benchmarking tips","TableGen Fundamentals","llvm-link - LLVM bitcode linker","llvm-cov - emit coverage information","LLVM Programmer’s Manual","The LLVM Target-Independent Code Generator","Segmented Stacks in LLVM","Getting Started with the LLVM System using Microsoft Visual Studio","Coroutines in LLVM","Stack maps and patch points in LLVM","llvm-dwarfdump - print contents of DWARF sections","LLVM Link Time Optimization: Design and Implementation","FaultMaps and implicit checks","YAML I/O","LLVM Community Code of Conduct","llvm-dis - LLVM disassembler","The PDB Info Stream (aka the PDB Stream)","How To Release LLVM To The Public","MemorySSA","The PDB TPI Stream","The PDB File Format","XRay Instrumentation","llvm-as - LLVM assembler","llvm-ar - LLVM archiver","Frequently Asked Questions (FAQ)","Vectorization Plan","Debugging JIT-ed Code With GDB","TableGen Deficiencies","2. Kaleidoscope: Implementing a Parser and AST","llvm-config - Print LLVM compilation options","opt - LLVM optimizer","The PDB Global Symbol Stream","How to set up LLVM-style RTTI for your class hierarchy","The Often Misunderstood GEP Instruction","Advanced Build Configurations","Source Level Debugging with LLVM","llvm-lib - LLVM lib.exe compatible library tool","Moving LLVM Projects to GitHub","CodeView Symbol Records","Architecture & Platform Information for Compiler Writers","tblgen - Target Description To C++ Code Generator","Code Reviews with Phabricator","Exception Handling in LLVM","yaml2obj","llvm-profdata - Profile data tool","Type Metadata","CodeView Type Records","LLVM Bitcode File Format","bugpoint - automatic test case reduction tool","How To Add Your Build Configuration To LLVM Buildbot Infrastructure","Sphinx Quickstart Template","The PDB DBI (Debug Info) Stream","TableGen Language Introduction"],objnames:{"0":["std","option","option"]},filenames:["ReportingGuide","Vectorizers","CommandGuide/lit","BranchWeightMetadata","SystemLibrary","tutorial/BuildingAJIT5","tutorial/BuildingAJIT4","CommandGuide/FileCheck","TableGen/index","tutorial/BuildingAJIT1","CommandGuide/llvm-extract","NVPTXUsage","HowToCrossCompileLLVM","OptBisect","CompileCudaWithLLVM","tutorial/OCamlLangImpl8","tutorial/OCamlLangImpl4","tutorial/OCamlLangImpl5","tutorial/OCamlLangImpl6","tutorial/OCamlLangImpl7","Bugpoint","tutorial/OCamlLangImpl1","tutorial/OCamlLangImpl2","tutorial/OCamlLangImpl3","tutorial/LangImpl08","tutorial/LangImpl09","tutorial/LangImpl10","tutorial/LangImpl01","CommandLine","tutorial/LangImpl03","tutorial/LangImpl04","tutorial/LangImpl05","tutorial/LangImpl06","tutorial/LangImpl07","TableGen/BackEnds","Extensions","CommandGuide/llvm-nm","GettingStarted","AMDGPUUsage","LibFuzzer","DeveloperPolicy","Projects","LLVMBuild","MarkedUpDisassembly","TableGen/LangRef","ReleaseNotes","Passes","ReleaseProcess","Statepoints","TestSuiteMakefileGuide","HowToBuildOnARM","Atomics","ScudoHardenedAllocator","CommandGuide/llvm-bcanalyzer","index","ExtendingLLVM","PDB/PublicStream","AliasAnalysis","CommandGuide/llvm-stress","CommandGuide/llvm-diff","InAlloca","tutorial/BuildingAJIT2","Frontend/PerformanceTips","tutorial/BuildingAJIT3","tutorial/index","WritingAnLLVMBackend","CommandGuide/llvm-build","PDB/MsfFile","GlobalISel","PDB/ModiStream","HowToUseAttributes","CommandGuide/llvm-readobj","BlockFrequencyTerminology","Lexicon","CMake","HowToSubmitABug","Packaging","GoldPlugin","PDB/HashStream","CoverageMappingFormat","CommandGuide/index","CodingStandards","HowToUseInstrMappings","LangRef","XRayExample","MCJITDesignAndImplementation","TestingGuide","MergeFunctions","GarbageCollection","MIRLangRef","CMakePrimer","WritingAnLLVMPass","CommandGuide/llc","BigEndianNEON","CommandGuide/llvm-symbolizer","CommandGuide/lli","Docker","Benchmarking","TableGenFundamentals","CommandGuide/llvm-link","CommandGuide/llvm-cov","ProgrammersManual","CodeGenerator","SegmentedStacks","GettingStartedVS","Coroutines","StackMaps","CommandGuide/llvm-dwarfdump","LinkTimeOptimization","FaultMaps","YamlIO","CodeOfConduct","CommandGuide/llvm-dis","PDB/PdbStream","HowToReleaseLLVM","MemorySSA","PDB/TpiStream","PDB/index","XRay","CommandGuide/llvm-as","CommandGuide/llvm-ar","FAQ","Proposals/VectorizationPlan","DebuggingJITedCode","TableGen/Deficiencies","tutorial/LangImpl02","CommandGuide/llvm-config","CommandGuide/opt","PDB/GlobalStream","HowToSetUpLLVMStyleRTTI","GetElementPtr","AdvancedBuilds","SourceLevelDebugging","CommandGuide/llvm-lib","Proposals/GitHubMove","PDB/CodeViewSymbols","CompilerWriterInfo","CommandGuide/tblgen","Phabricator","ExceptionHandling","yaml2obj","CommandGuide/llvm-profdata","TypeMetadata","PDB/CodeViewTypes","BitCodeFormat","CommandGuide/bugpoint","HowToAddABuilder","SphinxQuickstartTemplate","PDB/DbiStream","TableGen/LangIntro"]})
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT1.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT1.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT1.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT1.html Thu May 10 06:54:16 2018
@@ -0,0 +1,576 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>1. Building a JIT: Starting out with KaleidoscopeJIT — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers" href="BuildingAJIT2.html" />
+    <link rel="prev" title="8. Kaleidoscope: Conclusion and other useful LLVM tidbits" href="OCamlLangImpl8.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT2.html" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="OCamlLangImpl8.html" title="8. Kaleidoscope: Conclusion and other useful LLVM tidbits"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="building-a-jit-starting-out-with-kaleidoscopejit">
+<h1>1. Building a JIT: Starting out with KaleidoscopeJIT<a class="headerlink" href="#building-a-jit-starting-out-with-kaleidoscopejit" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-1-introduction" id="id11">Chapter 1 Introduction</a></li>
+<li><a class="reference internal" href="#jit-api-basics" id="id12">JIT API Basics</a></li>
+<li><a class="reference internal" href="#kaleidoscopejit" id="id13">KaleidoscopeJIT</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id14">Full Code Listing</a></li>
+</ul>
+</div>
+<div class="section" id="chapter-1-introduction">
+<h2><a class="toc-backref" href="#id11">1.1. Chapter 1 Introduction</a><a class="headerlink" href="#chapter-1-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 1 of the “Building an ORC-based JIT in LLVM” tutorial. This
+tutorial runs through the implementation of a JIT compiler using LLVM’s
+On-Request-Compilation (ORC) APIs. It begins with a simplified version of the
+KaleidoscopeJIT class used in the
+<a class="reference external" href="LangImpl01.html">Implementing a language with LLVM</a> tutorials and then
+introduces new features like optimization, lazy compilation and remote
+execution.</p>
+<p>The goal of this tutorial is to introduce you to LLVM’s ORC JIT APIs, show how
+these APIs interact with other parts of LLVM, and to teach you how to recombine
+them to build a custom JIT that is suited to your use-case.</p>
+<p>The structure of the tutorial is:</p>
+<ul class="simple">
+<li>Chapter #1: Investigate the simple KaleidoscopeJIT class. This will
+introduce some of the basic concepts of the ORC JIT APIs, including the
+idea of an ORC <em>Layer</em>.</li>
+<li><a class="reference external" href="BuildingAJIT2.html">Chapter #2</a>: Extend the basic KaleidoscopeJIT by adding
+a new layer that will optimize IR and generated code.</li>
+<li><a class="reference external" href="BuildingAJIT3.html">Chapter #3</a>: Further extend the JIT by adding a
+Compile-On-Demand layer to lazily compile IR.</li>
+<li><a class="reference external" href="BuildingAJIT4.html">Chapter #4</a>: Improve the laziness of our JIT by
+replacing the Compile-On-Demand layer with a custom layer that uses the ORC
+Compile Callbacks API directly to defer IR-generation until functions are
+called.</li>
+<li><a class="reference external" href="BuildingAJIT5.html">Chapter #5</a>: Add process isolation by JITing code into
+a remote process with reduced privileges using the JIT Remote APIs.</li>
+</ul>
+<p>To provide input for our JIT we will use the Kaleidoscope REPL from
+<a class="reference external" href="LangImpl07.html">Chapter 7</a> of the “Implementing a language in LLVM tutorial”,
+with one minor modification: We will remove the FunctionPassManager from the
+code for that chapter and replace it with optimization support in our JIT class
+in Chapter #2.</p>
+<p>Finally, a word on API generations: ORC is the 3rd generation of LLVM JIT API.
+It was preceded by MCJIT, and before that by the (now deleted) legacy JIT.
+These tutorials don’t assume any experience with these earlier APIs, but
+readers acquainted with them will see many familiar elements. Where appropriate
+we will make this connection with the earlier APIs explicit to help people who
+are transitioning from them to ORC.</p>
+</div>
+<div class="section" id="jit-api-basics">
+<h2><a class="toc-backref" href="#id12">1.2. JIT API Basics</a><a class="headerlink" href="#jit-api-basics" title="Permalink to this headline">¶</a></h2>
+<p>The purpose of a JIT compiler is to compile code “on-the-fly” as it is needed,
+rather than compiling whole programs to disk ahead of time as a traditional
+compiler does. To support that aim our initial, bare-bones JIT API will be:</p>
+<ol class="arabic simple">
+<li>Handle addModule(Module &M) – Make the given IR module available for
+execution.</li>
+<li>JITSymbol findSymbol(const std::string &Name) – Search for pointers to
+symbols (functions or variables) that have been added to the JIT.</li>
+<li>void removeModule(Handle H) – Remove a module from the JIT, releasing any
+memory that had been used for the compiled code.</li>
+</ol>
+<p>A basic use-case for this API, executing the ‘main’ function from a module,
+will look like:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span> <span class="o">=</span> <span class="n">buildModule</span><span class="p">();</span>
+<span class="n">JIT</span> <span class="n">J</span><span class="p">;</span>
+<span class="n">Handle</span> <span class="n">H</span> <span class="o">=</span> <span class="n">J</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="o">*</span><span class="n">M</span><span class="p">);</span>
+<span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">Main</span><span class="p">)(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">char</span><span class="o">*</span><span class="p">[])</span> <span class="o">=</span>
+  <span class="p">(</span><span class="kt">int</span><span class="p">(</span><span class="o">*</span><span class="p">)(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">char</span><span class="o">*</span><span class="p">[])</span><span class="n">J</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="s">"main"</span><span class="p">).</span><span class="n">getAddress</span><span class="p">();</span>
+<span class="kt">int</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">Main</span><span class="p">();</span>
+<span class="n">J</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>The APIs that we build in these tutorials will all be variations on this simple
+theme. Behind the API we will refine the implementation of the JIT to add
+support for optimization and lazy compilation. Eventually we will extend the
+API itself to allow higher-level program representations (e.g. ASTs) to be
+added to the JIT.</p>
+</div>
+<div class="section" id="kaleidoscopejit">
+<h2><a class="toc-backref" href="#id13">1.3. KaleidoscopeJIT</a><a class="headerlink" href="#kaleidoscopejit" title="Permalink to this headline">¶</a></h2>
+<p>In the previous section we described our API, now we examine a simple
+implementation of it: The KaleidoscopeJIT class <a class="footnote-reference" href="#id7" id="id1">[1]</a> that was used in the
+<a class="reference external" href="LangImpl01.html">Implementing a language with LLVM</a> tutorials. We will use
+the REPL code from <a class="reference external" href="LangImpl07.html">Chapter 7</a> of that tutorial to supply the
+input for our JIT: Each time the user enters an expression the REPL will add a
+new IR module containing the code for that expression to the JIT. If the
+expression is a top-level expression like ‘1+1’ or ‘sin(x)’, the REPL will also
+use the findSymbol method of our JIT class find and execute the code for the
+expression, and then use the removeModule method to remove the code again
+(since there’s no way to re-invoke an anonymous expression). In later chapters
+of this tutorial we’ll modify the REPL to enable new interactions with our JIT
+class, but for now we will take this setup for granted and focus our attention on
+the implementation of our JIT itself.</p>
+<p>Our KaleidoscopeJIT class is defined in the KaleidoscopeJIT.h header. After the
+usual include guards and #includes <a class="footnote-reference" href="#id8" id="id4">[2]</a>, we get to the definition of our class:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">ObjectLinkingLayer</span><span class="o"><></span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">)</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">typedef</span> <span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleSetHandleT</span> <span class="n">ModuleHandleT</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>Our class begins with four members: A TargetMachine, TM, which will be used
+to build our LLVM compiler instance; A DataLayout, DL, which will be used for
+symbol mangling (more on that later), and two ORC <em>layers</em>: an
+ObjectLinkingLayer and a IRCompileLayer. We’ll be talking more about layers in
+the next chapter, but for now you can think of them as analogous to LLVM
+Passes: they wrap up useful JIT utilities behind an easy to compose interface.
+The first layer, ObjectLinkingLayer, is the foundation of our JIT: it takes
+in-memory object files produced by a compiler and links them on the fly to make
+them executable. This JIT-on-top-of-a-linker design was introduced in MCJIT,
+however the linker was hidden inside the MCJIT class. In ORC we expose the
+linker so that clients can access and configure it directly if they need to. In
+this tutorial our ObjectLinkingLayer will just be used to support the next layer
+in our stack: the IRCompileLayer, which will be responsible for taking LLVM IR,
+compiling it, and passing the resulting in-memory object files down to the
+object linking layer below.</p>
+<p>That’s it for member variables, after that we have a single typedef:
+ModuleHandleT. This is the handle type that will be returned from our JIT’s
+addModule method, and can be passed to the removeModule method to remove a
+module. The IRCompileLayer class already provides a convenient handle type
+(IRCompileLayer::ModuleSetHandleT), so we just alias our ModuleHandleT to this.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+    <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+      <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">))</span> <span class="p">{</span>
+  <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+</pre></div>
+</div>
+<p>Next up we have our class constructor. We begin by initializing TM using the
+EngineBuilder::selectTarget helper method, which constructs a TargetMachine for
+the current process. Next we use our newly created TargetMachine to initialize
+DL, our DataLayout. Then we initialize our IRCompileLayer. Our IRCompile layer
+needs two things: (1) A reference to our object linking layer, and (2) a
+compiler instance to use to perform the actual compilation from IR to object
+files. We use the off-the-shelf SimpleCompiler instance for now. Finally, in
+the body of the constructor, we call the DynamicLibrary::LoadLibraryPermanently
+method with a nullptr argument. Normally the LoadLibraryPermanently method is
+called with the path of a dynamic library to load, but when passed a null
+pointer it will ‘load’ the host process itself, making its exported symbols
+available for execution.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// Build our symbol resolver:</span>
+  <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+  <span class="c1">//           the same "logical dylib".</span>
+  <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+  <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+      <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+        <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">CompileLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+          <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+        <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+      <span class="p">},</span>
+      <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">S</span><span class="p">)</span> <span class="p">{</span>
+        <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">SymAddr</span> <span class="o">=</span>
+              <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">SymAddr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+        <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+      <span class="p">});</span>
+
+  <span class="c1">// Build a singleton module set to hold our module.</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">>></span> <span class="n">Ms</span><span class="p">;</span>
+  <span class="n">Ms</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+
+  <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+  <span class="c1">// created SectionMemoryManager.</span>
+  <span class="k">return</span> <span class="n">CompileLayer</span><span class="p">.</span><span class="n">addModuleSet</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Ms</span><span class="p">),</span>
+                                   <span class="n">make_unique</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">(),</span>
+                                   <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">));</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Now we come to the first of our JIT API methods: addModule. This method is
+responsible for adding IR to the JIT and making it available for execution. In
+this initial implementation of our JIT we will make our modules “available for
+execution” by adding them straight to the IRCompileLayer, which will
+immediately compile them. In later chapters we will teach our JIT to be lazier
+and instead add the Modules to a “pending” list to be compiled if and when they
+are first executed.</p>
+<p>To add our module to the IRCompileLayer we need to supply two auxiliary objects
+(as well as the module itself): a memory manager and a symbol resolver.  The
+memory manager will be responsible for managing the memory allocated to JIT’d
+machine code, setting memory permissions, and registering exception handling
+tables (if the JIT’d code uses exceptions). For our memory manager we will use
+the SectionMemoryManager class: another off-the-shelf utility that provides all
+the basic functionality we need. The second auxiliary class, the symbol
+resolver, is more interesting for us. It exists to tell the JIT where to look
+when it encounters an <em>external symbol</em> in the module we are adding.  External
+symbols are any symbol not defined within the module itself, including calls to
+functions outside the JIT and calls to functions defined in other modules that
+have already been added to the JIT. It may seem as though modules added to the
+JIT should “know about one another” by default, but since we would still have to
+supply a symbol resolver for references to code outside the JIT it turns out to
+be easier to just re-use this one mechanism for all symbol resolution. This has
+the added benefit that the user has full control over the symbol resolution
+process. Should we search for definitions within the JIT first, then fall back
+on external definitions? Or should we prefer external definitions where
+available and only JIT code if we don’t already have an available
+implementation? By using a single symbol resolution scheme we are free to choose
+whatever makes the most sense for any given use case.</p>
+<p>Building a symbol resolver is made especially easy by the <em>createLambdaResolver</em>
+function. This function takes two lambdas <a class="footnote-reference" href="#id9" id="id5">[3]</a> and returns a JITSymbolResolver
+instance. The first lambda is used as the implementation of the resolver’s
+findSymbolInLogicalDylib method, which searches for symbol definitions that
+should be thought of as being part of the same “logical” dynamic library as this
+Module. If you are familiar with static linking: this means that
+findSymbolInLogicalDylib should expose symbols with common linkage and hidden
+visibility. If all this sounds foreign you can ignore the details and just
+remember that this is the first method that the linker will use to try to find a
+symbol definition. If the findSymbolInLogicalDylib method returns a null result
+then the linker will call the second symbol resolver method, called findSymbol,
+which searches for symbols that should be thought of as external to (but
+visibile from) the module and its logical dylib. In this tutorial we will adopt
+the following simple scheme: All modules added to the JIT will behave as if they
+were linked into a single, ever-growing logical dylib. To implement this our
+first lambda (the one defining findSymbolInLogicalDylib) will just search for
+JIT’d code by calling the CompileLayer’s findSymbol method. If we don’t find a
+symbol in the JIT itself we’ll fall back to our second lambda, which implements
+findSymbol. This will use the RTDyldMemoryManager::getSymbolAddressInProcess
+method to search for the symbol within the program itself. If we can’t find a
+symbol definition via either of these paths, the JIT will refuse to accept our
+module, returning a “symbol not found” error.</p>
+<p>Now that we’ve built our symbol resolver, we’re ready to add our module to the
+JIT. We do this by calling the CompileLayer’s addModuleSet method <a class="footnote-reference" href="#id10" id="id6">[4]</a>. Since
+we only have a single Module and addModuleSet expects a collection, we will
+create a vector of modules and add our module as the only member. Since we
+have already typedef’d our ModuleHandleT type to be the same as the
+CompileLayer’s handle type, we can return the handle from addModuleSet
+directly from our addModule method.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+  <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+  <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">CompileLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">CompileLayer</span><span class="p">.</span><span class="n">removeModuleSet</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Now that we can add code to our JIT, we need a way to find the symbols we’ve
+added to it. To do that we call the findSymbol method on our IRCompileLayer,
+but with a twist: We have to <em>mangle</em> the name of the symbol we’re searching
+for first. The reason for this is that the ORC JIT components use mangled
+symbols internally the same way a static compiler and linker would, rather
+than using plain IR symbol names. The kind of mangling will depend on the
+DataLayout, which in turn depends on the target platform. To allow us to
+remain portable and search based on the un-mangled name, we just re-produce
+this mangling ourselves.</p>
+<p>We now come to the last method in our JIT API: removeModule. This method is
+responsible for destructing the MemoryManager and SymbolResolver that were
+added with a given module, freeing any resources they were using in the
+process. In our Kaleidoscope demo we rely on this method to remove the module
+representing the most recent top-level expression, preventing it from being
+treated as a duplicate definition when the next top-level expression is
+entered. It is generally good to free any module that you know you won’t need
+to call further, just to free up the resources dedicated to it. However, you
+don’t strictly need to do this: All resources will be cleaned up when your
+JIT class is destructed, if they haven’t been freed before then.</p>
+<p>This brings us to the end of Chapter 1 of Building a JIT. You now have a basic
+but fully functioning JIT stack that you can use to take LLVM IR and make it
+executable within the context of your JIT process. In the next chapter we’ll
+look at how to extend this JIT to produce better quality code, and in the
+process take a deeper look at the ORC layer concept.</p>
+<p><a class="reference external" href="BuildingAJIT2.html">Next: Extending the KaleidoscopeJIT</a></p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id14">1.4. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example. To build this
+example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core orc native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">//===- KaleidoscopeJIT.h - A simple JIT for Kaleidoscope --------*- C++ -*-===//</span>
+<span class="cp">//</span>
+<span class="cp">//                     The LLVM Compiler Infrastructure</span>
+<span class="cp">//</span>
+<span class="cp">// This file is distributed under the University of Illinois Open Source</span>
+<span class="cp">// License. See LICENSE.TXT for details.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">//</span>
+<span class="cp">// Contains a simple JIT definition for use in the kaleidoscope tutorials.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/JITSymbol.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/SectionMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/IR/DataLayout.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">RTDyldObjectLinkingLayer</span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">),</span> <span class="n">SimpleCompiler</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">using</span> <span class="n">ModuleHandle</span> <span class="o">=</span> <span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleHandleT</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">ObjectLayer</span><span class="p">([]()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">();</span> <span class="p">}),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">))</span> <span class="p">{</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Build our symbol resolver:</span>
+    <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+    <span class="c1">//           the same "logical dylib".</span>
+    <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+    <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">CompileLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">},</span>
+        <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">SymAddr</span> <span class="o">=</span>
+                <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">SymAddr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">});</span>
+
+    <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+    <span class="c1">// created SectionMemoryManager.</span>
+    <span class="k">return</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">),</span>
+                                           <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">)));</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+    <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+    <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">CompileLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">cantFail</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">));</span>
+  <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end namespace orc</span>
+<span class="p">}</span> <span class="c1">// end namespace llvm</span>
+
+<span class="cp">#endif </span><span class="c1">// LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+</pre></div>
+</div>
+<table class="docutils footnote" frame="void" id="id7" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Actually we use a cut-down version of KaleidoscopeJIT that makes a
+simplifying assumption: symbols cannot be re-defined. This will make it
+impossible to re-define symbols in the REPL, but will make our symbol
+lookup logic simpler. Re-introducing support for symbol redefinition is
+left as an exercise for the reader. (The KaleidoscopeJIT.h used in the
+original tutorials will be a helpful reference).</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id8" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id4">[2]</a></td><td><table border="1" class="first last docutils">
+<colgroup>
+<col width="33%" />
+<col width="67%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">File</th>
+<th class="head">Reason for inclusion</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>ExecutionEngine.h</td>
+<td>Access to the EngineBuilder::selectTarget
+method.</td>
+</tr>
+<tr class="row-odd"><td>RTDyldMemoryManager.h</td>
+<td>Access to the
+RTDyldMemoryManager::getSymbolAddressInProcess
+method.</td>
+</tr>
+<tr class="row-even"><td>CompileUtils.h</td>
+<td>Provides the SimpleCompiler class.</td>
+</tr>
+<tr class="row-odd"><td>IRCompileLayer.h</td>
+<td>Provides the IRCompileLayer class.</td>
+</tr>
+<tr class="row-even"><td>LambdaResolver.h</td>
+<td>Access the createLambdaResolver function,
+which provides easy construction of symbol
+resolvers.</td>
+</tr>
+<tr class="row-odd"><td>ObjectLinkingLayer.h</td>
+<td>Provides the ObjectLinkingLayer class.</td>
+</tr>
+<tr class="row-even"><td>Mangler.h</td>
+<td>Provides the Mangler class for platform
+specific name-mangling.</td>
+</tr>
+<tr class="row-odd"><td>DynamicLibrary.h</td>
+<td>Provides the DynamicLibrary class, which
+makes symbols in the host process searchable.</td>
+</tr>
+</tbody>
+</table>
+</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id9" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Actually they don’t have to be lambdas, any object with a call operator
+will do, including plain old functions or std::functions.</td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="id10" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id6">[4]</a></td><td>ORC layers accept sets of Modules, rather than individual ones, so that
+all Modules in the set could be co-located by the memory manager, though
+this feature is not yet implemented.</td></tr>
+</tbody>
+</table>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT2.html" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="OCamlLangImpl8.html" title="8. Kaleidoscope: Conclusion and other useful LLVM tidbits"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT2.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT2.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT2.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT2.html Thu May 10 06:54:16 2018
@@ -0,0 +1,563 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>2. Building a JIT: Adding Optimizations – An introduction to ORC Layers — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="3. Building a JIT: Per-function Lazy Compilation" href="BuildingAJIT3.html" />
+    <link rel="prev" title="1. Building a JIT: Starting out with KaleidoscopeJIT" href="BuildingAJIT1.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT3.html" title="3. Building a JIT: Per-function Lazy Compilation"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT1.html" title="1. Building a JIT: Starting out with KaleidoscopeJIT"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="building-a-jit-adding-optimizations-an-introduction-to-orc-layers">
+<h1>2. Building a JIT: Adding Optimizations – An introduction to ORC Layers<a class="headerlink" href="#building-a-jit-adding-optimizations-an-introduction-to-orc-layers" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-2-introduction" id="id4">Chapter 2 Introduction</a></li>
+<li><a class="reference internal" href="#optimizing-modules-using-the-irtransformlayer" id="id5">Optimizing Modules using the IRTransformLayer</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id6">Full Code Listing</a></li>
+</ul>
+</div>
+<p><strong>This tutorial is under active development. It is incomplete and details may
+change frequently.</strong> Nonetheless we invite you to try it out as it stands, and
+we welcome any feedback.</p>
+<div class="section" id="chapter-2-introduction">
+<h2><a class="toc-backref" href="#id4">2.1. Chapter 2 Introduction</a><a class="headerlink" href="#chapter-2-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 2 of the “Building an ORC-based JIT in LLVM” tutorial. In
+<a class="reference external" href="BuildingAJIT1.html">Chapter 1</a> of this series we examined a basic JIT
+class, KaleidoscopeJIT, that could take LLVM IR modules as input and produce
+executable code in memory. KaleidoscopeJIT was able to do this with relatively
+little code by composing two off-the-shelf <em>ORC layers</em>: IRCompileLayer and
+ObjectLinkingLayer, to do much of the heavy lifting.</p>
+<p>In this layer we’ll learn more about the ORC layer concept by using a new layer,
+IRTransformLayer, to add IR optimization support to KaleidoscopeJIT.</p>
+</div>
+<div class="section" id="optimizing-modules-using-the-irtransformlayer">
+<h2><a class="toc-backref" href="#id5">2.2. Optimizing Modules using the IRTransformLayer</a><a class="headerlink" href="#optimizing-modules-using-the-irtransformlayer" title="Permalink to this headline">¶</a></h2>
+<p>In <a class="reference external" href="LangImpl04.html">Chapter 4</a> of the “Implementing a language with LLVM”
+tutorial series the llvm <em>FunctionPassManager</em> is introduced as a means for
+optimizing LLVM IR. Interested readers may read that chapter for details, but
+in short: to optimize a Module we create an llvm::FunctionPassManager
+instance, configure it with a set of optimizations, then run the PassManager on
+a Module to mutate it into a (hopefully) more optimized but semantically
+equivalent form. In the original tutorial series the FunctionPassManager was
+created outside the KaleidoscopeJIT and modules were optimized before being
+added to it. In this Chapter we will make optimization a phase of our JIT
+instead. For now this will provide us a motivation to learn more about ORC
+layers, but in the long term making optimization part of our JIT will yield an
+important benefit: When we begin lazily compiling code (i.e. deferring
+compilation of each function until the first time it’s run), having
+optimization managed by our JIT will allow us to optimize lazily too, rather
+than having to do all our optimization up-front.</p>
+<p>To add optimization support to our JIT we will take the KaleidoscopeJIT from
+Chapter 1 and compose an ORC <em>IRTransformLayer</em> on top. We will look at how the
+IRTransformLayer works in more detail below, but the interface is simple: the
+constructor for this layer takes a reference to the layer below (as all layers
+do) plus an <em>IR optimization function</em> that it will apply to each Module that
+is added via addModuleSet:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">ObjectLinkingLayer</span><span class="o"><></span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">)</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span>
+    <span class="n">OptimizeFunction</span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">typedef</span> <span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleSetHandleT</span> <span class="n">ModuleHandle</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+        <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                      <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                        <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                      <span class="p">})</span> <span class="p">{</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+</pre></div>
+</div>
+<p>Our extended KaleidoscopeJIT class starts out the same as it did in Chapter 1,
+but after the CompileLayer we introduce a typedef for our optimization function.
+In this case we use a std::function (a handy wrapper for “function-like” things)
+from a single unique_ptr<Module> input to a std::unique_ptr<Module> output. With
+our optimization function typedef in place we can declare our OptimizeLayer,
+which sits on top of our CompileLayer.</p>
+<p>To initialize our OptimizeLayer we pass it a reference to the CompileLayer
+below (standard practice for layers), and we initialize the OptimizeFunction
+using a lambda that calls out to an “optimizeModule” function that we will
+define below.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// ...</span>
+<span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+    <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+      <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+    <span class="p">},</span>
+<span class="c1">// ...</span>
+</pre></div>
+</div>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// ...</span>
+<span class="k">return</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">addModuleSet</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Ms</span><span class="p">),</span>
+                                  <span class="n">make_unique</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">(),</span>
+                                  <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">));</span>
+<span class="c1">// ...</span>
+</pre></div>
+</div>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// ...</span>
+<span class="k">return</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+<span class="c1">// ...</span>
+</pre></div>
+</div>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// ...</span>
+<span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">removeModuleSet</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+<span class="c1">// ...</span>
+</pre></div>
+</div>
+<p>Next we need to replace references to ‘CompileLayer’ with references to
+OptimizeLayer in our key methods: addModule, findSymbol, and removeModule. In
+addModule we need to be careful to replace both references: the findSymbol call
+inside our resolver, and the call through to addModuleSet.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// Create a function pass manager.</span>
+  <span class="k">auto</span> <span class="n">FPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">M</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+  <span class="c1">// Add some optimizations.</span>
+  <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+  <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+  <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+  <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+  <span class="n">FPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+
+  <span class="c1">// Run the optimizations over all functions in the module being added to</span>
+  <span class="c1">// the JIT.</span>
+  <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">F</span> <span class="o">:</span> <span class="o">*</span><span class="n">M</span><span class="p">)</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="n">F</span><span class="p">);</span>
+
+  <span class="k">return</span> <span class="n">M</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>At the bottom of our JIT we add a private method to do the actual optimization:
+<em>optimizeModule</em>. This function sets up a FunctionPassManager, adds some passes
+to it, runs it over every function in the module, and then returns the mutated
+module. The specific optimizations are the same ones used in
+<a class="reference external" href="LangImpl04.html">Chapter 4</a> of the “Implementing a language with LLVM”
+tutorial series. Readers may visit that chapter for a more in-depth
+discussion of these, and of IR optimization in general.</p>
+<p>And that’s it in terms of changes to KaleidoscopeJIT: When a module is added via
+addModule the OptimizeLayer will call our optimizeModule function before passing
+the transformed module on to the CompileLayer below. Of course, we could have
+called optimizeModule directly in our addModule function and not gone to the
+bother of using the IRTransformLayer, but doing so gives us another opportunity
+to see how layers compose. It also provides a neat entry point to the <em>layer</em>
+concept itself, because IRTransformLayer turns out to be one of the simplest
+implementations of the layer concept that can be devised:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">template</span> <span class="o"><</span><span class="k">typename</span> <span class="n">BaseLayerT</span><span class="p">,</span> <span class="k">typename</span> <span class="n">TransformFtor</span><span class="o">></span>
+<span class="k">class</span> <span class="nc">IRTransformLayer</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">typedef</span> <span class="k">typename</span> <span class="n">BaseLayerT</span><span class="o">::</span><span class="n">ModuleSetHandleT</span> <span class="n">ModuleSetHandleT</span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="p">(</span><span class="n">BaseLayerT</span> <span class="o">&</span><span class="n">BaseLayer</span><span class="p">,</span>
+                   <span class="n">TransformFtor</span> <span class="n">Transform</span> <span class="o">=</span> <span class="n">TransformFtor</span><span class="p">())</span>
+    <span class="o">:</span> <span class="n">BaseLayer</span><span class="p">(</span><span class="n">BaseLayer</span><span class="p">),</span> <span class="n">Transform</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Transform</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="k">template</span> <span class="o"><</span><span class="k">typename</span> <span class="n">ModuleSetT</span><span class="p">,</span> <span class="k">typename</span> <span class="n">MemoryManagerPtrT</span><span class="p">,</span>
+            <span class="k">typename</span> <span class="n">SymbolResolverPtrT</span><span class="o">></span>
+  <span class="n">ModuleSetHandleT</span> <span class="n">addModuleSet</span><span class="p">(</span><span class="n">ModuleSetT</span> <span class="n">Ms</span><span class="p">,</span>
+                                <span class="n">MemoryManagerPtrT</span> <span class="n">MemMgr</span><span class="p">,</span>
+                                <span class="n">SymbolResolverPtrT</span> <span class="n">Resolver</span><span class="p">)</span> <span class="p">{</span>
+
+    <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="n">I</span> <span class="o">=</span> <span class="n">Ms</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">E</span> <span class="o">=</span> <span class="n">Ms</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="n">I</span> <span class="o">!=</span> <span class="n">E</span><span class="p">;</span> <span class="o">++</span><span class="n">I</span><span class="p">)</span>
+      <span class="o">*</span><span class="n">I</span> <span class="o">=</span> <span class="n">Transform</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="o">*</span><span class="n">I</span><span class="p">));</span>
+
+    <span class="k">return</span> <span class="n">BaseLayer</span><span class="p">.</span><span class="n">addModuleSet</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Ms</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">MemMgr</span><span class="p">),</span>
+                                <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">));</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModuleSet</span><span class="p">(</span><span class="n">ModuleSetHandleT</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span> <span class="n">BaseLayer</span><span class="p">.</span><span class="n">removeModuleSet</span><span class="p">(</span><span class="n">H</span><span class="p">);</span> <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">ExportedSymbolsOnly</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">return</span> <span class="n">BaseLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="n">ExportedSymbolsOnly</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbolIn</span><span class="p">(</span><span class="n">ModuleSetHandleT</span> <span class="n">H</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">,</span>
+                         <span class="kt">bool</span> <span class="n">ExportedSymbolsOnly</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">return</span> <span class="n">BaseLayer</span><span class="p">.</span><span class="n">findSymbolIn</span><span class="p">(</span><span class="n">H</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">ExportedSymbolsOnly</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">emitAndFinalize</span><span class="p">(</span><span class="n">ModuleSetHandleT</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">BaseLayer</span><span class="p">.</span><span class="n">emitAndFinalize</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TransformFtor</span><span class="o">&</span> <span class="n">getTransform</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Transform</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="k">const</span> <span class="n">TransformFtor</span><span class="o">&</span> <span class="n">getTransform</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Transform</span><span class="p">;</span> <span class="p">}</span>
+
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">BaseLayerT</span> <span class="o">&</span><span class="n">BaseLayer</span><span class="p">;</span>
+  <span class="n">TransformFtor</span> <span class="n">Transform</span><span class="p">;</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>This is the whole definition of IRTransformLayer, from
+<tt class="docutils literal"><span class="pre">llvm/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h</span></tt>, stripped of its
+comments. It is a template class with two template arguments: <tt class="docutils literal"><span class="pre">BaesLayerT</span></tt> and
+<tt class="docutils literal"><span class="pre">TransformFtor</span></tt> that provide the type of the base layer and the type of the
+“transform functor” (in our case a std::function) respectively. This class is
+concerned with two very simple jobs: (1) Running every IR Module that is added
+with addModuleSet through the transform functor, and (2) conforming to the ORC
+layer interface. The interface consists of one typedef and five methods:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="23%" />
+<col width="77%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Interface</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>ModuleSetHandleT</td>
+<td>Provides a handle that can be used to identify a module
+set when calling findSymbolIn, removeModuleSet, or
+emitAndFinalize.</td>
+</tr>
+<tr class="row-odd"><td>addModuleSet</td>
+<td>Takes a given set of Modules and makes them “available
+for execution. This means that symbols in those modules
+should be searchable via findSymbol and findSymbolIn, and
+the address of the symbols should be read/writable (for
+data symbols), or executable (for function symbols) after
+JITSymbol::getAddress() is called. Note: This means that
+addModuleSet doesn’t have to compile (or do any other
+work) up-front. It <em>can</em>, like IRCompileLayer, act
+eagerly, but it can also simply record the module and
+take no further action until somebody calls
+JITSymbol::getAddress(). In IRTransformLayer’s case
+addModuleSet eagerly applies the transform functor to
+each module in the set, then passes the resulting set
+of mutated modules down to the layer below.</td>
+</tr>
+<tr class="row-even"><td>removeModuleSet</td>
+<td>Removes a set of modules from the JIT. Code or data
+defined in these modules will no longer be available, and
+the memory holding the JIT’d definitions will be freed.</td>
+</tr>
+<tr class="row-odd"><td>findSymbol</td>
+<td>Searches for the named symbol in all modules that have
+previously been added via addModuleSet (and not yet
+removed by a call to removeModuleSet). In
+IRTransformLayer we just pass the query on to the layer
+below. In our REPL this is our default way to search for
+function definitions.</td>
+</tr>
+<tr class="row-even"><td>findSymbolIn</td>
+<td>Searches for the named symbol in the module set indicated
+by the given ModuleSetHandleT. This is just an optimized
+search, better for lookup-speed when you know exactly
+a symbol definition should be found. In IRTransformLayer
+we just pass this query on to the layer below. In our
+REPL we use this method to search for functions
+representing top-level expressions, since we know exactly
+where we’ll find them: in the top-level expression module
+we just added.</td>
+</tr>
+<tr class="row-odd"><td>emitAndFinalize</td>
+<td>Forces all of the actions required to make the code and
+data in a module set (represented by a ModuleSetHandleT)
+accessible. Behaves as if some symbol in the set had been
+searched for and JITSymbol::getSymbolAddress called. This
+is rarely needed, but can be useful when dealing with
+layers that usually behave lazily if the user wants to
+trigger early compilation (for example, to use idle CPU
+time to eagerly compile code in the background).</td>
+</tr>
+</tbody>
+</table>
+<p>This interface attempts to capture the natural operations of a JIT (with some
+wrinkles like emitAndFinalize for performance), similar to the basic JIT API
+operations we identified in Chapter 1. Conforming to the layer concept allows
+classes to compose neatly by implementing their behaviors in terms of the these
+same operations, carried out on the layer below. For example, an eager layer
+(like IRTransformLayer) can implement addModuleSet by running each module in the
+set through its transform up-front and immediately passing the result to the
+layer below. A lazy layer, by contrast, could implement addModuleSet by
+squirreling away the modules doing no other up-front work, but applying the
+transform (and calling addModuleSet on the layer below) when the client calls
+findSymbol instead. The JIT’d program behavior will be the same either way, but
+these choices will have different performance characteristics: Doing work
+eagerly means the JIT takes longer up-front, but proceeds smoothly once this is
+done. Deferring work allows the JIT to get up-and-running quickly, but will
+force the JIT to pause and wait whenever some code or data is needed that hasn’t
+already been processed.</p>
+<p>Our current REPL is eager: Each function definition is optimized and compiled as
+soon as it’s typed in. If we were to make the transform layer lazy (but not
+change things otherwise) we could defer optimization until the first time we
+reference a function in a top-level expression (see if you can figure out why,
+then check out the answer below <a class="footnote-reference" href="#id3" id="id2">[1]</a>). In the next chapter, however we’ll
+introduce fully lazy compilation, in which function’s aren’t compiled until
+they’re first called at run-time. At this point the trade-offs get much more
+interesting: the lazier we are, the quicker we can start executing the first
+function, but the more often we’ll have to pause to compile newly encountered
+functions. If we only code-gen lazily, but optimize eagerly, we’ll have a slow
+startup (which everything is optimized) but relatively short pauses as each
+function just passes through code-gen. If we both optimize and code-gen lazily
+we can start executing the first function more quickly, but we’ll have longer
+pauses as each function has to be both optimized and code-gen’d when it’s first
+executed. Things become even more interesting if we consider interproceedural
+optimizations like inlining, which must be performed eagerly. These are
+complex trade-offs, and there is no one-size-fits all solution to them, but by
+providing composable layers we leave the decisions to the person implementing
+the JIT, and make it easy for them to experiment with different configurations.</p>
+<p><a class="reference external" href="BuildingAJIT3.html">Next: Adding Per-function Lazy Compilation</a></p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id6">2.3. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example with an
+IRTransformLayer added to enable optimization. To build this example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core orc native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">//===- KaleidoscopeJIT.h - A simple JIT for Kaleidoscope --------*- C++ -*-===//</span>
+<span class="cp">//</span>
+<span class="cp">//                     The LLVM Compiler Infrastructure</span>
+<span class="cp">//</span>
+<span class="cp">// This file is distributed under the University of Illinois Open Source</span>
+<span class="cp">// License. See LICENSE.TXT for details.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">//</span>
+<span class="cp">// Contains a simple JIT definition for use in the kaleidoscope tutorials.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/JITSymbol.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/SectionMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/IR/DataLayout.h"</span>
+<span class="cp">#include "llvm/IR/LegacyPassManager.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar/GVN.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">RTDyldObjectLinkingLayer</span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">),</span> <span class="n">SimpleCompiler</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">using</span> <span class="n">OptimizeFunction</span> <span class="o">=</span>
+      <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">using</span> <span class="n">ModuleHandle</span> <span class="o">=</span> <span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleHandleT</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">ObjectLayer</span><span class="p">([]()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">();</span> <span class="p">}),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+        <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                      <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                        <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                      <span class="p">})</span> <span class="p">{</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Build our symbol resolver:</span>
+    <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+    <span class="c1">//           the same "logical dylib".</span>
+    <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+    <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">},</span>
+        <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">SymAddr</span> <span class="o">=</span>
+                <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">SymAddr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">});</span>
+
+    <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+    <span class="c1">// created SectionMemoryManager.</span>
+    <span class="k">return</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">),</span>
+                                            <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">)));</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+    <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+    <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">));</span>
+  <span class="p">}</span>
+
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a function pass manager.</span>
+    <span class="k">auto</span> <span class="n">FPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">M</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+    <span class="c1">// Add some optimizations.</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+
+    <span class="c1">// Run the optimizations over all functions in the module being added to</span>
+    <span class="c1">// the JIT.</span>
+    <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">F</span> <span class="o">:</span> <span class="o">*</span><span class="n">M</span><span class="p">)</span>
+      <span class="n">FPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="n">F</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">M</span><span class="p">;</span>
+  <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end namespace orc</span>
+<span class="p">}</span> <span class="c1">// end namespace llvm</span>
+
+<span class="cp">#endif </span><span class="c1">// LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+</pre></div>
+</div>
+<table class="docutils footnote" frame="void" id="id3" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>When we add our top-level expression to the JIT, any calls to functions
+that we defined earlier will appear to the ObjectLinkingLayer as
+external symbols. The ObjectLinkingLayer will call the SymbolResolver
+that we defined in addModuleSet, which in turn calls findSymbol on the
+OptimizeLayer, at which point even a lazy transform layer will have to
+do its work.</td></tr>
+</tbody>
+</table>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT3.html" title="3. Building a JIT: Per-function Lazy Compilation"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT1.html" title="1. Building a JIT: Starting out with KaleidoscopeJIT"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT3.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT3.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT3.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT3.html Thu May 10 06:54:16 2018
@@ -0,0 +1,412 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>3. Building a JIT: Per-function Lazy Compilation — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs" href="BuildingAJIT4.html" />
+    <link rel="prev" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers" href="BuildingAJIT2.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT4.html" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT2.html" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="building-a-jit-per-function-lazy-compilation">
+<h1>3. Building a JIT: Per-function Lazy Compilation<a class="headerlink" href="#building-a-jit-per-function-lazy-compilation" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-3-introduction" id="id1">Chapter 3 Introduction</a></li>
+<li><a class="reference internal" href="#lazy-compilation" id="id2">Lazy Compilation</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id3">Full Code Listing</a></li>
+</ul>
+</div>
+<p><strong>This tutorial is under active development. It is incomplete and details may
+change frequently.</strong> Nonetheless we invite you to try it out as it stands, and
+we welcome any feedback.</p>
+<div class="section" id="chapter-3-introduction">
+<h2><a class="toc-backref" href="#id1">3.1. Chapter 3 Introduction</a><a class="headerlink" href="#chapter-3-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 3 of the “Building an ORC-based JIT in LLVM” tutorial. This
+chapter discusses lazy JITing and shows you how to enable it by adding an ORC
+CompileOnDemand layer the JIT from <a class="reference external" href="BuildingAJIT2.html">Chapter 2</a>.</p>
+</div>
+<div class="section" id="lazy-compilation">
+<h2><a class="toc-backref" href="#id2">3.2. Lazy Compilation</a><a class="headerlink" href="#lazy-compilation" title="Permalink to this headline">¶</a></h2>
+<p>When we add a module to the KaleidoscopeJIT class from Chapter 2 it is
+immediately optimized, compiled and linked for us by the IRTransformLayer,
+IRCompileLayer and ObjectLinkingLayer respectively. This scheme, where all the
+work to make a Module executable is done up front, is simple to understand and
+its performance characteristics are easy to reason about. However, it will lead
+to very high startup times if the amount of code to be compiled is large, and
+may also do a lot of unnecessary compilation if only a few compiled functions
+are ever called at runtime. A truly “just-in-time” compiler should allow us to
+defer the compilation of any given function until the moment that function is
+first called, improving launch times and eliminating redundant work. In fact,
+the ORC APIs provide us with a layer to lazily compile LLVM IR:
+<em>CompileOnDemandLayer</em>.</p>
+<p>The CompileOnDemandLayer class conforms to the layer interface described in
+Chapter 2, but its addModuleSet method behaves quite differently from the layers
+we have seen so far: rather than doing any work up front, it just scans the
+Modules being added and arranges for each function in them to be compiled the
+first time it is called. To do this, the CompileOnDemandLayer creates two small
+utilities for each function that it scans: a <em>stub</em> and a <em>compile
+callback</em>. The stub is a pair of a function pointer (which will be pointed at
+the function’s implementation once the function has been compiled) and an
+indirect jump through the pointer. By fixing the address of the indirect jump
+for the lifetime of the program we can give the function a permanent “effective
+address”, one that can be safely used for indirection and function pointer
+comparison even if the function’s implementation is never compiled, or if it is
+compiled more than once (due to, for example, recompiling the function at a
+higher optimization level) and changes address. The second utility, the compile
+callback, represents a re-entry point from the program into the compiler that
+will trigger compilation and then execution of a function. By initializing the
+function’s stub to point at the function’s compile callback, we enable lazy
+compilation: The first attempted call to the function will follow the function
+pointer and trigger the compile callback instead. The compile callback will
+compile the function, update the function pointer for the stub, then execute
+the function. On all subsequent calls to the function, the function pointer
+will point at the already-compiled function, so there is no further overhead
+from the compiler. We will look at this process in more detail in the next
+chapter of this tutorial, but for now we’ll trust the CompileOnDemandLayer to
+set all the stubs and callbacks up for us. All we need to do is to add the
+CompileOnDemandLayer to the top of our stack and we’ll get the benefits of
+lazy compilation. We just need a few changes to the source:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="p">...</span>
+<span class="cp">#include "llvm/ExecutionEngine/SectionMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="p">...</span>
+
+<span class="p">...</span>
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">JITCompileCallbackManager</span><span class="o">></span> <span class="n">CompileCallbackManager</span><span class="p">;</span>
+  <span class="n">ObjectLinkingLayer</span><span class="o"><></span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">)</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span>
+    <span class="n">OptimizeFunction</span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+  <span class="n">CompileOnDemandLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">></span> <span class="n">CODLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">typedef</span> <span class="n">decltype</span><span class="p">(</span><span class="n">CODLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleSetHandleT</span> <span class="n">ModuleHandle</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>First we need to include the CompileOnDemandLayer.h header, then add two new
+members: a std::unique_ptr<CompileCallbackManager> and a CompileOnDemandLayer,
+to our class. The CompileCallbackManager member is used by the CompileOnDemandLayer
+to create the compile callback needed for each function.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+    <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+      <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+      <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                    <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                      <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                    <span class="p">}),</span>
+      <span class="n">CompileCallbackManager</span><span class="p">(</span>
+          <span class="n">orc</span><span class="o">::</span><span class="n">createLocalCompileCallbackManager</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">(),</span> <span class="mi">0</span><span class="p">)),</span>
+      <span class="n">CODLayer</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">,</span>
+               <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">Function</span> <span class="o">&</span><span class="n">F</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">set</span><span class="o"><</span><span class="n">Function</span><span class="o">*></span><span class="p">({</span><span class="o">&</span><span class="n">F</span><span class="p">});</span> <span class="p">},</span>
+               <span class="o">*</span><span class="n">CompileCallbackManager</span><span class="p">,</span>
+               <span class="n">orc</span><span class="o">::</span><span class="n">createLocalIndirectStubsManagerBuilder</span><span class="p">(</span>
+                 <span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">()))</span> <span class="p">{</span>
+  <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Next we have to update our constructor to initialize the new members. To create
+an appropriate compile callback manager we use the
+createLocalCompileCallbackManager function, which takes a TargetMachine and a
+JITTargetAddress to call if it receives a request to compile an unknown
+function.  In our simple JIT this situation is unlikely to come up, so we’ll
+cheat and just pass ‘0’ here. In a production quality JIT you could give the
+address of a function that throws an exception in order to unwind the JIT’d
+code’s stack.</p>
+<p>Now we can construct our CompileOnDemandLayer. Following the pattern from
+previous layers we start by passing a reference to the next layer down in our
+stack – the OptimizeLayer. Next we need to supply a ‘partitioning function’:
+when a not-yet-compiled function is called, the CompileOnDemandLayer will call
+this function to ask us what we would like to compile. At a minimum we need to
+compile the function being called (given by the argument to the partitioning
+function), but we could also request that the CompileOnDemandLayer compile other
+functions that are unconditionally called (or highly likely to be called) from
+the function being called. For KaleidoscopeJIT we’ll keep it simple and just
+request compilation of the function that was called. Next we pass a reference to
+our CompileCallbackManager. Finally, we need to supply an “indirect stubs
+manager builder”: a utility function that constructs IndirectStubManagers, which
+are in turn used to build the stubs for the functions in each module. The
+CompileOnDemandLayer will call the indirect stub manager builder once for each
+call to addModuleSet, and use the resulting indirect stubs manager to create
+stubs for all functions in all modules in the set. If/when the module set is
+removed from the JIT the indirect stubs manager will be deleted, freeing any
+memory allocated to the stubs. We supply this function by using the
+createLocalIndirectStubsManagerBuilder utility.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// ...</span>
+        <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">CODLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+<span class="c1">// ...</span>
+<span class="k">return</span> <span class="n">CODLayer</span><span class="p">.</span><span class="n">addModuleSet</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Ms</span><span class="p">),</span>
+                             <span class="n">make_unique</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">(),</span>
+                             <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">));</span>
+<span class="c1">// ...</span>
+
+<span class="c1">// ...</span>
+<span class="k">return</span> <span class="n">CODLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+<span class="c1">// ...</span>
+
+<span class="c1">// ...</span>
+<span class="n">CODLayer</span><span class="p">.</span><span class="n">removeModuleSet</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+<span class="c1">// ...</span>
+</pre></div>
+</div>
+<p>Finally, we need to replace the references to OptimizeLayer in our addModule,
+findSymbol, and removeModule methods. With that, we’re up and running.</p>
+<p><strong>To be done:</strong></p>
+<p>** Chapter conclusion.**</p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id3">3.3. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example with a CompileOnDemand
+layer added to enable lazy function-at-a-time compilation. To build this example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core orc native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">//===- KaleidoscopeJIT.h - A simple JIT for Kaleidoscope --------*- C++ -*-===//</span>
+<span class="cp">//</span>
+<span class="cp">//                     The LLVM Compiler Infrastructure</span>
+<span class="cp">//</span>
+<span class="cp">// This file is distributed under the University of Illinois Open Source</span>
+<span class="cp">// License. See LICENSE.TXT for details.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">//</span>
+<span class="cp">// Contains a simple JIT definition for use in the kaleidoscope tutorials.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/JITSymbol.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RuntimeDyld.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/SectionMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/IR/DataLayout.h"</span>
+<span class="cp">#include "llvm/IR/LegacyPassManager.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar/GVN.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <set></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">RTDyldObjectLinkingLayer</span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">),</span> <span class="n">SimpleCompiler</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">using</span> <span class="n">OptimizeFunction</span> <span class="o">=</span>
+      <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">JITCompileCallbackManager</span><span class="o">></span> <span class="n">CompileCallbackManager</span><span class="p">;</span>
+  <span class="n">CompileOnDemandLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">></span> <span class="n">CODLayer</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">using</span> <span class="n">ModuleHandle</span> <span class="o">=</span> <span class="n">decltype</span><span class="p">(</span><span class="n">CODLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleHandleT</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span> <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">ObjectLayer</span><span class="p">([]()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">();</span> <span class="p">}),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+        <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                      <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                        <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                      <span class="p">}),</span>
+        <span class="n">CompileCallbackManager</span><span class="p">(</span>
+            <span class="n">orc</span><span class="o">::</span><span class="n">createLocalCompileCallbackManager</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">(),</span> <span class="mi">0</span><span class="p">)),</span>
+        <span class="n">CODLayer</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">,</span>
+                 <span class="p">[](</span><span class="n">Function</span> <span class="o">&</span><span class="n">F</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">set</span><span class="o"><</span><span class="n">Function</span><span class="o">*></span><span class="p">({</span><span class="o">&</span><span class="n">F</span><span class="p">});</span> <span class="p">},</span>
+                 <span class="o">*</span><span class="n">CompileCallbackManager</span><span class="p">,</span>
+                 <span class="n">orc</span><span class="o">::</span><span class="n">createLocalIndirectStubsManagerBuilder</span><span class="p">(</span>
+                   <span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">()))</span> <span class="p">{</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Build our symbol resolver:</span>
+    <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+    <span class="c1">//           the same "logical dylib".</span>
+    <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+    <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">CODLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">},</span>
+        <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">SymAddr</span> <span class="o">=</span>
+                <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">SymAddr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">});</span>
+
+    <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+    <span class="c1">// created SectionMemoryManager.</span>
+    <span class="k">return</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">CODLayer</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">)));</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+    <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+    <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">CODLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="kc">true</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">cantFail</span><span class="p">(</span><span class="n">CODLayer</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">));</span>
+  <span class="p">}</span>
+
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a function pass manager.</span>
+    <span class="k">auto</span> <span class="n">FPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">M</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+    <span class="c1">// Add some optimizations.</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+
+    <span class="c1">// Run the optimizations over all functions in the module being added to</span>
+    <span class="c1">// the JIT.</span>
+    <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">F</span> <span class="o">:</span> <span class="o">*</span><span class="n">M</span><span class="p">)</span>
+      <span class="n">FPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="n">F</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">M</span><span class="p">;</span>
+  <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end namespace orc</span>
+<span class="p">}</span> <span class="c1">// end namespace llvm</span>
+
+<span class="cp">#endif </span><span class="c1">// LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="BuildingAJIT4.html">Next: Extreme Laziness – Using Compile Callbacks to JIT directly from ASTs</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT4.html" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT2.html" title="2. Building a JIT: Adding Optimizations – An introduction to ORC Layers"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT4.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT4.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT4.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT4.html Thu May 10 06:54:16 2018
@@ -0,0 +1,371 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance" href="BuildingAJIT5.html" />
+    <link rel="prev" title="3. Building a JIT: Per-function Lazy Compilation" href="BuildingAJIT3.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT5.html" title="5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT3.html" title="3. Building a JIT: Per-function Lazy Compilation"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="building-a-jit-extreme-laziness-using-compile-callbacks-to-jit-from-asts">
+<h1>4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs<a class="headerlink" href="#building-a-jit-extreme-laziness-using-compile-callbacks-to-jit-from-asts" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-4-introduction" id="id1">Chapter 4 Introduction</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id2">Full Code Listing</a></li>
+</ul>
+</div>
+<p><strong>This tutorial is under active development. It is incomplete and details may
+change frequently.</strong> Nonetheless we invite you to try it out as it stands, and
+we welcome any feedback.</p>
+<div class="section" id="chapter-4-introduction">
+<h2><a class="toc-backref" href="#id1">4.1. Chapter 4 Introduction</a><a class="headerlink" href="#chapter-4-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 4 of the “Building an ORC-based JIT in LLVM” tutorial. This
+chapter introduces the Compile Callbacks and Indirect Stubs APIs and shows how
+they can be used to replace the CompileOnDemand layer from
+<a class="reference external" href="BuildingAJIT3.html">Chapter 3</a> with a custom lazy-JITing scheme that JITs
+directly from Kaleidoscope ASTs.</p>
+<p><strong>To be done:</strong></p>
+<p><strong>(1) Describe the drawbacks of JITing from IR (have to compile to IR first,
+which reduces the benefits of laziness).</strong></p>
+<p><strong>(2) Describe CompileCallbackManagers and IndirectStubManagers in detail.</strong></p>
+<p><strong>(3) Run through the implementation of addFunctionAST.</strong></p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id2">4.2. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example that JITs lazily from
+Kaleidoscope ASTS. To build this example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core orc native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">//===- KaleidoscopeJIT.h - A simple JIT for Kaleidoscope --------*- C++ -*-===//</span>
+<span class="cp">//</span>
+<span class="cp">//                     The LLVM Compiler Infrastructure</span>
+<span class="cp">//</span>
+<span class="cp">// This file is distributed under the University of Illinois Open Source</span>
+<span class="cp">// License. See LICENSE.TXT for details.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">//</span>
+<span class="cp">// Contains a simple JIT definition for use in the kaleidoscope tutorials.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/JITSymbol.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/SectionMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IndirectionUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/IR/DataLayout.h"</span>
+<span class="cp">#include "llvm/IR/LegacyPassManager.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Support/Error.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar/GVN.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <cassert></span>
+<span class="cp">#include <cstdlib></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">class</span> <span class="nc">PrototypeAST</span><span class="p">;</span>
+<span class="k">class</span> <span class="nc">ExprAST</span><span class="p">;</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="k">const</span> <span class="n">PrototypeAST</span><span class="o">&</span> <span class="n">getProto</span><span class="p">()</span> <span class="k">const</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">getName</span><span class="p">()</span> <span class="k">const</span><span class="p">;</span>
+  <span class="n">llvm</span><span class="o">::</span><span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+<span class="p">};</span>
+
+<span class="c1">/// This will compile FnAST to IR, rename the function to add the given</span>
+<span class="c1">/// suffix (needed to prevent a name-clash with the function's stub),</span>
+<span class="c1">/// and then take ownership of the module that the function was compiled</span>
+<span class="c1">/// into.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">llvm</span><span class="o">::</span><span class="n">Module</span><span class="o">></span>
+<span class="n">irgenAndTakeOwnership</span><span class="p">(</span><span class="n">FunctionAST</span> <span class="o">&</span><span class="n">FnAST</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Suffix</span><span class="p">);</span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">RTDyldObjectLinkingLayer</span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">),</span> <span class="n">SimpleCompiler</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">using</span> <span class="n">OptimizeFunction</span> <span class="o">=</span>
+      <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">JITCompileCallbackManager</span><span class="o">></span> <span class="n">CompileCallbackMgr</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">IndirectStubsManager</span><span class="o">></span> <span class="n">IndirectStubsMgr</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">using</span> <span class="n">ModuleHandle</span> <span class="o">=</span> <span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleHandleT</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">()</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">()),</span>
+        <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">ObjectLayer</span><span class="p">([]()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">make_shared</span><span class="o"><</span><span class="n">SectionMemoryManager</span><span class="o">></span><span class="p">();</span> <span class="p">}),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+        <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                      <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                        <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                      <span class="p">}),</span>
+        <span class="n">CompileCallbackMgr</span><span class="p">(</span>
+            <span class="n">orc</span><span class="o">::</span><span class="n">createLocalCompileCallbackManager</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">(),</span> <span class="mi">0</span><span class="p">))</span> <span class="p">{</span>
+    <span class="k">auto</span> <span class="n">IndirectStubsMgrBuilder</span> <span class="o">=</span>
+      <span class="n">orc</span><span class="o">::</span><span class="n">createLocalIndirectStubsManagerBuilder</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">getTargetTriple</span><span class="p">());</span>
+    <span class="n">IndirectStubsMgr</span> <span class="o">=</span> <span class="n">IndirectStubsMgrBuilder</span><span class="p">();</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Build our symbol resolver:</span>
+    <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+    <span class="c1">//           the same "logical dylib".</span>
+    <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+    <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">findStub</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">},</span>
+        <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">SymAddr</span> <span class="o">=</span>
+                <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">SymAddr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">});</span>
+
+    <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+    <span class="c1">// created SectionMemoryManager.</span>
+    <span class="k">return</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">),</span>
+                                            <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">)));</span>
+  <span class="p">}</span>
+
+  <span class="n">Error</span> <span class="n">addFunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">FnAST</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a CompileCallback - this is the re-entry point into the compiler</span>
+    <span class="c1">// for functions that haven't been compiled yet.</span>
+    <span class="k">auto</span> <span class="n">CCInfo</span> <span class="o">=</span> <span class="n">CompileCallbackMgr</span><span class="o">-></span><span class="n">getCompileCallback</span><span class="p">();</span>
+
+    <span class="c1">// Create an indirect stub. This serves as the functions "canonical</span>
+    <span class="c1">// definition" - an unchanging (constant address) entry point to the</span>
+    <span class="c1">// function implementation.</span>
+    <span class="c1">// Initially we point the stub's function-pointer at the compile callback</span>
+    <span class="c1">// that we just created. In the compile action for the callback (see below)</span>
+    <span class="c1">// we will update the stub's function pointer to point at the function</span>
+    <span class="c1">// implementation that we just implemented.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span> <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">createStub</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">FnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()),</span>
+                                                <span class="n">CCInfo</span><span class="p">.</span><span class="n">getAddress</span><span class="p">(),</span>
+                                                <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">))</span>
+      <span class="k">return</span> <span class="n">Err</span><span class="p">;</span>
+
+    <span class="c1">// Move ownership of FnAST to a shared pointer - C++11 lambdas don't support</span>
+    <span class="c1">// capture-by-move, which is be required for unique_ptr.</span>
+    <span class="k">auto</span> <span class="n">SharedFnAST</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">FnAST</span><span class="p">));</span>
+
+    <span class="c1">// Set the action to compile our AST. This lambda will be run if/when</span>
+    <span class="c1">// execution hits the compile callback (via the stub).</span>
+    <span class="c1">//</span>
+    <span class="c1">// The steps to compile are:</span>
+    <span class="c1">// (1) IRGen the function.</span>
+    <span class="c1">// (2) Add the IR module to the JIT to make it executable like any other</span>
+    <span class="c1">//     module.</span>
+    <span class="c1">// (3) Use findSymbol to get the address of the compiled function.</span>
+    <span class="c1">// (4) Update the stub pointer to point at the implementation so that</span>
+    <span class="c1">///    subsequent calls go directly to it and bypass the compiler.</span>
+    <span class="c1">// (5) Return the address of the implementation: this lambda will actually</span>
+    <span class="c1">//     be run inside an attempted call to the function, and we need to</span>
+    <span class="c1">//     continue on to the implementation to complete the attempted call.</span>
+    <span class="c1">//     The JIT runtime (the resolver block) will use the return address of</span>
+    <span class="c1">//     this function as the address to continue at once it has reset the</span>
+    <span class="c1">//     CPU state to what it was immediately before the call.</span>
+    <span class="n">CCInfo</span><span class="p">.</span><span class="n">setCompileAction</span><span class="p">(</span>
+      <span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="n">SharedFnAST</span><span class="p">]()</span> <span class="p">{</span>
+        <span class="k">auto</span> <span class="n">M</span> <span class="o">=</span> <span class="n">irgenAndTakeOwnership</span><span class="p">(</span><span class="o">*</span><span class="n">SharedFnAST</span><span class="p">,</span> <span class="s">"$impl"</span><span class="p">);</span>
+        <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+        <span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">findSymbol</span><span class="p">(</span><span class="n">SharedFnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">"$impl"</span><span class="p">);</span>
+        <span class="n">assert</span><span class="p">(</span><span class="n">Sym</span> <span class="o">&&</span> <span class="s">"Couldn't find compiled function?"</span><span class="p">);</span>
+        <span class="n">JITTargetAddress</span> <span class="n">SymAddr</span> <span class="o">=</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">Sym</span><span class="p">.</span><span class="n">getAddress</span><span class="p">());</span>
+        <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span>
+              <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">updatePointer</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">SharedFnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()),</span>
+                                              <span class="n">SymAddr</span><span class="p">))</span> <span class="p">{</span>
+          <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Err</span><span class="p">),</span> <span class="n">errs</span><span class="p">(),</span>
+                                <span class="s">"Error updating function pointer: "</span><span class="p">);</span>
+          <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+        <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">SymAddr</span><span class="p">;</span>
+      <span class="p">});</span>
+
+    <span class="k">return</span> <span class="n">Error</span><span class="o">::</span><span class="n">success</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">return</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">Name</span><span class="p">),</span> <span class="kc">true</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">));</span>
+  <span class="p">}</span>
+
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">mangle</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+    <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+    <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a function pass manager.</span>
+    <span class="k">auto</span> <span class="n">FPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">M</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+    <span class="c1">// Add some optimizations.</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+
+    <span class="c1">// Run the optimizations over all functions in the module being added to</span>
+    <span class="c1">// the JIT.</span>
+    <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">F</span> <span class="o">:</span> <span class="o">*</span><span class="n">M</span><span class="p">)</span>
+      <span class="n">FPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="n">F</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">M</span><span class="p">;</span>
+  <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end namespace orc</span>
+<span class="p">}</span> <span class="c1">// end namespace llvm</span>
+
+<span class="cp">#endif </span><span class="c1">// LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="BuildingAJIT5.html">Next: Remote-JITing – Process-isolation and laziness-at-a-distance</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="BuildingAJIT5.html" title="5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT3.html" title="3. Building a JIT: Per-function Lazy Compilation"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT5.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT5.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT5.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/BuildingAJIT5.html Thu May 10 06:54:16 2018
@@ -0,0 +1,520 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="LLVM 5.0.0 Release Notes" href="../ReleaseNotes.html" />
+    <link rel="prev" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs" href="BuildingAJIT4.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../ReleaseNotes.html" title="LLVM 5.0.0 Release Notes"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT4.html" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="building-a-jit-remote-jiting-process-isolation-and-laziness-at-a-distance">
+<h1>5. Building a JIT: Remote-JITing – Process Isolation and Laziness at a Distance<a class="headerlink" href="#building-a-jit-remote-jiting-process-isolation-and-laziness-at-a-distance" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-5-introduction" id="id1">Chapter 5 Introduction</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id2">Full Code Listing</a></li>
+</ul>
+</div>
+<p><strong>This tutorial is under active development. It is incomplete and details may
+change frequently.</strong> Nonetheless we invite you to try it out as it stands, and
+we welcome any feedback.</p>
+<div class="section" id="chapter-5-introduction">
+<h2><a class="toc-backref" href="#id1">5.1. Chapter 5 Introduction</a><a class="headerlink" href="#chapter-5-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 5 of the “Building an ORC-based JIT in LLVM” tutorial. This
+chapter introduces the ORC RemoteJIT Client/Server APIs and shows how to use
+them to build a JIT stack that will execute its code via a communications
+channel with a different process. This can be a separate process on the same
+machine, a process on a different machine, or even a process on a different
+platform/architecture. The code builds on top of the lazy-AST-compiling JIT
+stack from <a class="reference external" href="BuildingAJIT3.html">Chapter 4</a>.</p>
+<p><strong>To be done – this is going to be a long one:</strong></p>
+<p><strong>(1) Introduce channels, RPC, RemoteJIT Client and Server APIs</strong></p>
+<p><strong>(2) Describe the client code in greater detail. Discuss modifications of the
+KaleidoscopeJIT class, and the REPL itself.</strong></p>
+<p><strong>(3) Describe the server code.</strong></p>
+<p><strong>(4) Describe how to run the demo.</strong></p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id2">5.2. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example that JITs lazily from
+Kaleidoscope ASTS. To build this example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core orc native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code for the modified KaleidoscopeJIT:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">//===- KaleidoscopeJIT.h - A simple JIT for Kaleidoscope --------*- C++ -*-===//</span>
+<span class="cp">//</span>
+<span class="cp">//                     The LLVM Compiler Infrastructure</span>
+<span class="cp">//</span>
+<span class="cp">// This file is distributed under the University of Illinois Open Source</span>
+<span class="cp">// License. See LICENSE.TXT for details.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">//</span>
+<span class="cp">// Contains a simple JIT definition for use in the kaleidoscope tutorials.</span>
+<span class="cp">//</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifndef LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+<span class="cp">#define LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+
+<span class="cp">#include "RemoteJITUtils.h"</span>
+<span class="cp">#include "llvm/ADT/SmallVector.h"</span>
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/ADT/Triple.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/ExecutionEngine.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/JITSymbol.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/CompileUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IndirectionUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h"</span>
+<span class="cp">#include "llvm/IR/DataLayout.h"</span>
+<span class="cp">#include "llvm/IR/LegacyPassManager.h"</span>
+<span class="cp">#include "llvm/IR/Mangler.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Support/Error.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar/GVN.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <cassert></span>
+<span class="cp">#include <cstdlib></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">class</span> <span class="nc">PrototypeAST</span><span class="p">;</span>
+<span class="k">class</span> <span class="nc">ExprAST</span><span class="p">;</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="k">const</span> <span class="n">PrototypeAST</span><span class="o">&</span> <span class="n">getProto</span><span class="p">()</span> <span class="k">const</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">getName</span><span class="p">()</span> <span class="k">const</span><span class="p">;</span>
+  <span class="n">llvm</span><span class="o">::</span><span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+<span class="p">};</span>
+
+<span class="c1">/// This will compile FnAST to IR, rename the function to add the given</span>
+<span class="c1">/// suffix (needed to prevent a name-clash with the function's stub),</span>
+<span class="c1">/// and then take ownership of the module that the function was compiled</span>
+<span class="c1">/// into.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">llvm</span><span class="o">::</span><span class="n">Module</span><span class="o">></span>
+<span class="n">irgenAndTakeOwnership</span><span class="p">(</span><span class="n">FunctionAST</span> <span class="o">&</span><span class="n">FnAST</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Suffix</span><span class="p">);</span>
+
+<span class="k">namespace</span> <span class="n">llvm</span> <span class="p">{</span>
+<span class="k">namespace</span> <span class="n">orc</span> <span class="p">{</span>
+
+<span class="c1">// Typedef the remote-client API.</span>
+<span class="k">using</span> <span class="n">MyRemote</span> <span class="o">=</span> <span class="n">remote</span><span class="o">::</span><span class="n">OrcRemoteTargetClient</span><span class="o"><</span><span class="n">FDRPCChannel</span><span class="o">></span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">KaleidoscopeJIT</span> <span class="p">{</span>
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">TargetMachine</span><span class="o">></span> <span class="n">TM</span><span class="p">;</span>
+  <span class="k">const</span> <span class="n">DataLayout</span> <span class="n">DL</span><span class="p">;</span>
+  <span class="n">RTDyldObjectLinkingLayer</span> <span class="n">ObjectLayer</span><span class="p">;</span>
+  <span class="n">IRCompileLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">),</span> <span class="n">SimpleCompiler</span><span class="o">></span> <span class="n">CompileLayer</span><span class="p">;</span>
+
+  <span class="k">using</span> <span class="n">OptimizeFunction</span> <span class="o">=</span>
+      <span class="n">std</span><span class="o">::</span><span class="n">function</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">)</span><span class="o">></span><span class="p">;</span>
+
+  <span class="n">IRTransformLayer</span><span class="o"><</span><span class="n">decltype</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">),</span> <span class="n">OptimizeFunction</span><span class="o">></span> <span class="n">OptimizeLayer</span><span class="p">;</span>
+
+  <span class="n">JITCompileCallbackManager</span> <span class="o">*</span><span class="n">CompileCallbackMgr</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">IndirectStubsManager</span><span class="o">></span> <span class="n">IndirectStubsMgr</span><span class="p">;</span>
+  <span class="n">MyRemote</span> <span class="o">&</span><span class="n">Remote</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">using</span> <span class="n">ModuleHandle</span> <span class="o">=</span> <span class="n">decltype</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">)</span><span class="o">::</span><span class="n">ModuleHandleT</span><span class="p">;</span>
+
+  <span class="n">KaleidoscopeJIT</span><span class="p">(</span><span class="n">MyRemote</span> <span class="o">&</span><span class="n">Remote</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">TM</span><span class="p">(</span><span class="n">EngineBuilder</span><span class="p">().</span><span class="n">selectTarget</span><span class="p">(</span><span class="n">Triple</span><span class="p">(</span><span class="n">Remote</span><span class="p">.</span><span class="n">getTargetTriple</span><span class="p">()),</span> <span class="s">""</span><span class="p">,</span>
+                                        <span class="s">""</span><span class="p">,</span> <span class="n">SmallVector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="mi">0</span><span class="o">></span><span class="p">())),</span>
+        <span class="n">DL</span><span class="p">(</span><span class="n">TM</span><span class="o">-></span><span class="n">createDataLayout</span><span class="p">()),</span>
+        <span class="n">ObjectLayer</span><span class="p">([</span><span class="o">&</span><span class="n">Remote</span><span class="p">]()</span> <span class="p">{</span>
+            <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">MyRemote</span><span class="o">::</span><span class="n">RCMemoryManager</span><span class="o">></span> <span class="n">MemMgr</span><span class="p">;</span>
+            <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span> <span class="n">Remote</span><span class="p">.</span><span class="n">createRemoteMemoryManager</span><span class="p">(</span><span class="n">MemMgr</span><span class="p">))</span> <span class="p">{</span>
+              <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Err</span><span class="p">),</span> <span class="n">errs</span><span class="p">(),</span>
+                                    <span class="s">"Error creating remote memory manager:"</span><span class="p">);</span>
+              <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+            <span class="p">}</span>
+            <span class="k">return</span> <span class="n">MemMgr</span><span class="p">;</span>
+          <span class="p">}),</span>
+        <span class="n">CompileLayer</span><span class="p">(</span><span class="n">ObjectLayer</span><span class="p">,</span> <span class="n">SimpleCompiler</span><span class="p">(</span><span class="o">*</span><span class="n">TM</span><span class="p">)),</span>
+        <span class="n">OptimizeLayer</span><span class="p">(</span><span class="n">CompileLayer</span><span class="p">,</span>
+                      <span class="p">[</span><span class="k">this</span><span class="p">](</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+                        <span class="k">return</span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+                      <span class="p">}),</span>
+        <span class="n">Remote</span><span class="p">(</span><span class="n">Remote</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">auto</span> <span class="n">CCMgrOrErr</span> <span class="o">=</span> <span class="n">Remote</span><span class="p">.</span><span class="n">enableCompileCallbacks</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">CCMgrOrErr</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">CCMgrOrErr</span><span class="p">.</span><span class="n">takeError</span><span class="p">(),</span> <span class="n">errs</span><span class="p">(),</span>
+                            <span class="s">"Error enabling remote compile callbacks:"</span><span class="p">);</span>
+      <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+    <span class="p">}</span>
+    <span class="n">CompileCallbackMgr</span> <span class="o">=</span> <span class="o">&*</span><span class="n">CCMgrOrErr</span><span class="p">;</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">MyRemote</span><span class="o">::</span><span class="n">RCIndirectStubsManager</span><span class="o">></span> <span class="n">ISM</span><span class="p">;</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span> <span class="n">Remote</span><span class="p">.</span><span class="n">createIndirectStubsManager</span><span class="p">(</span><span class="n">ISM</span><span class="p">))</span> <span class="p">{</span>
+      <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Err</span><span class="p">),</span> <span class="n">errs</span><span class="p">(),</span>
+                            <span class="s">"Error creating indirect stubs manager:"</span><span class="p">);</span>
+      <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+    <span class="p">}</span>
+    <span class="n">IndirectStubsMgr</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ISM</span><span class="p">);</span>
+    <span class="n">llvm</span><span class="o">::</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">TargetMachine</span> <span class="o">&</span><span class="n">getTargetMachine</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="o">*</span><span class="n">TM</span><span class="p">;</span> <span class="p">}</span>
+
+  <span class="n">ModuleHandle</span> <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Build our symbol resolver:</span>
+    <span class="c1">// Lambda 1: Look back into the JIT itself to find symbols that are part of</span>
+    <span class="c1">//           the same "logical dylib".</span>
+    <span class="c1">// Lambda 2: Search for external symbols in the host process.</span>
+    <span class="k">auto</span> <span class="n">Resolver</span> <span class="o">=</span> <span class="n">createLambdaResolver</span><span class="p">(</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">findStub</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">Name</span><span class="p">,</span> <span class="kc">false</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">Sym</span><span class="p">;</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">},</span>
+        <span class="p">[</span><span class="o">&</span><span class="p">](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+          <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">AddrOrErr</span> <span class="o">=</span> <span class="n">Remote</span><span class="p">.</span><span class="n">getSymbolAddress</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="o">*</span><span class="n">AddrOrErr</span><span class="p">,</span> <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">);</span>
+          <span class="k">else</span> <span class="p">{</span>
+            <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">AddrOrErr</span><span class="p">.</span><span class="n">takeError</span><span class="p">(),</span> <span class="n">errs</span><span class="p">(),</span>
+                                  <span class="s">"Error resolving remote symbol:"</span><span class="p">);</span>
+            <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+          <span class="p">}</span>
+          <span class="k">return</span> <span class="n">JITSymbol</span><span class="p">(</span><span class="n">nullptr</span><span class="p">);</span>
+        <span class="p">});</span>
+
+    <span class="c1">// Add the set to the JIT with the resolver we created above and a newly</span>
+    <span class="c1">// created SectionMemoryManager.</span>
+    <span class="k">return</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">),</span>
+                                            <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Resolver</span><span class="p">)));</span>
+  <span class="p">}</span>
+
+  <span class="n">Error</span> <span class="n">addFunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">FnAST</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a CompileCallback - this is the re-entry point into the compiler</span>
+    <span class="c1">// for functions that haven't been compiled yet.</span>
+    <span class="k">auto</span> <span class="n">CCInfo</span> <span class="o">=</span> <span class="n">CompileCallbackMgr</span><span class="o">-></span><span class="n">getCompileCallback</span><span class="p">();</span>
+
+    <span class="c1">// Create an indirect stub. This serves as the functions "canonical</span>
+    <span class="c1">// definition" - an unchanging (constant address) entry point to the</span>
+    <span class="c1">// function implementation.</span>
+    <span class="c1">// Initially we point the stub's function-pointer at the compile callback</span>
+    <span class="c1">// that we just created. In the compile action for the callback (see below)</span>
+    <span class="c1">// we will update the stub's function pointer to point at the function</span>
+    <span class="c1">// implementation that we just implemented.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span> <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">createStub</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">FnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()),</span>
+                                                <span class="n">CCInfo</span><span class="p">.</span><span class="n">getAddress</span><span class="p">(),</span>
+                                                <span class="n">JITSymbolFlags</span><span class="o">::</span><span class="n">Exported</span><span class="p">))</span>
+      <span class="k">return</span> <span class="n">Err</span><span class="p">;</span>
+
+    <span class="c1">// Move ownership of FnAST to a shared pointer - C++11 lambdas don't support</span>
+    <span class="c1">// capture-by-move, which is be required for unique_ptr.</span>
+    <span class="k">auto</span> <span class="n">SharedFnAST</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">FnAST</span><span class="p">));</span>
+
+    <span class="c1">// Set the action to compile our AST. This lambda will be run if/when</span>
+    <span class="c1">// execution hits the compile callback (via the stub).</span>
+    <span class="c1">//</span>
+    <span class="c1">// The steps to compile are:</span>
+    <span class="c1">// (1) IRGen the function.</span>
+    <span class="c1">// (2) Add the IR module to the JIT to make it executable like any other</span>
+    <span class="c1">//     module.</span>
+    <span class="c1">// (3) Use findSymbol to get the address of the compiled function.</span>
+    <span class="c1">// (4) Update the stub pointer to point at the implementation so that</span>
+    <span class="c1">///    subsequent calls go directly to it and bypass the compiler.</span>
+    <span class="c1">// (5) Return the address of the implementation: this lambda will actually</span>
+    <span class="c1">//     be run inside an attempted call to the function, and we need to</span>
+    <span class="c1">//     continue on to the implementation to complete the attempted call.</span>
+    <span class="c1">//     The JIT runtime (the resolver block) will use the return address of</span>
+    <span class="c1">//     this function as the address to continue at once it has reset the</span>
+    <span class="c1">//     CPU state to what it was immediately before the call.</span>
+    <span class="n">CCInfo</span><span class="p">.</span><span class="n">setCompileAction</span><span class="p">(</span>
+      <span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="n">SharedFnAST</span><span class="p">]()</span> <span class="p">{</span>
+        <span class="k">auto</span> <span class="n">M</span> <span class="o">=</span> <span class="n">irgenAndTakeOwnership</span><span class="p">(</span><span class="o">*</span><span class="n">SharedFnAST</span><span class="p">,</span> <span class="s">"$impl"</span><span class="p">);</span>
+        <span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">M</span><span class="p">));</span>
+        <span class="k">auto</span> <span class="n">Sym</span> <span class="o">=</span> <span class="n">findSymbol</span><span class="p">(</span><span class="n">SharedFnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">"$impl"</span><span class="p">);</span>
+        <span class="n">assert</span><span class="p">(</span><span class="n">Sym</span> <span class="o">&&</span> <span class="s">"Couldn't find compiled function?"</span><span class="p">);</span>
+        <span class="n">JITTargetAddress</span> <span class="n">SymAddr</span> <span class="o">=</span> <span class="n">cantFail</span><span class="p">(</span><span class="n">Sym</span><span class="p">.</span><span class="n">getAddress</span><span class="p">());</span>
+        <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Err</span> <span class="o">=</span>
+              <span class="n">IndirectStubsMgr</span><span class="o">-></span><span class="n">updatePointer</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">SharedFnAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()),</span>
+                                              <span class="n">SymAddr</span><span class="p">))</span> <span class="p">{</span>
+          <span class="n">logAllUnhandledErrors</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Err</span><span class="p">),</span> <span class="n">errs</span><span class="p">(),</span>
+                                <span class="s">"Error updating function pointer: "</span><span class="p">);</span>
+          <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+        <span class="p">}</span>
+
+        <span class="k">return</span> <span class="n">SymAddr</span><span class="p">;</span>
+      <span class="p">});</span>
+
+    <span class="k">return</span> <span class="n">Error</span><span class="o">::</span><span class="n">success</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="n">Error</span> <span class="n">executeRemoteExpr</span><span class="p">(</span><span class="n">JITTargetAddress</span> <span class="n">ExprAddr</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">return</span> <span class="n">Remote</span><span class="p">.</span><span class="n">callVoidVoid</span><span class="p">(</span><span class="n">ExprAddr</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="n">JITSymbol</span> <span class="n">findSymbol</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">return</span> <span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">findSymbol</span><span class="p">(</span><span class="n">mangle</span><span class="p">(</span><span class="n">Name</span><span class="p">),</span> <span class="kc">true</span><span class="p">);</span>
+  <span class="p">}</span>
+
+  <span class="kt">void</span> <span class="n">removeModule</span><span class="p">(</span><span class="n">ModuleHandle</span> <span class="n">H</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">cantFail</span><span class="p">(</span><span class="n">OptimizeLayer</span><span class="p">.</span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">));</span>
+  <span class="p">}</span>
+
+<span class="k">private</span><span class="o">:</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">mangle</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">MangledName</span><span class="p">;</span>
+    <span class="n">raw_string_ostream</span> <span class="n">MangledNameStream</span><span class="p">(</span><span class="n">MangledName</span><span class="p">);</span>
+    <span class="n">Mangler</span><span class="o">::</span><span class="n">getNameWithPrefix</span><span class="p">(</span><span class="n">MangledNameStream</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DL</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">MangledNameStream</span><span class="p">.</span><span class="n">str</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">optimizeModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">shared_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">M</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Create a function pass manager.</span>
+    <span class="k">auto</span> <span class="n">FPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">M</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+    <span class="c1">// Add some optimizations.</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+    <span class="n">FPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+
+    <span class="c1">// Run the optimizations over all functions in the module being added to</span>
+    <span class="c1">// the JIT.</span>
+    <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">F</span> <span class="o">:</span> <span class="o">*</span><span class="n">M</span><span class="p">)</span>
+      <span class="n">FPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="n">F</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">M</span><span class="p">;</span>
+  <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end namespace orc</span>
+<span class="p">}</span> <span class="c1">// end namespace llvm</span>
+
+<span class="cp">#endif </span><span class="c1">// LLVM_EXECUTIONENGINE_ORC_KALEIDOSCOPEJIT_H</span>
+</pre></div>
+</div>
+<p>And the code for the JIT server:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include "../RemoteJITUtils.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h"</span>
+<span class="cp">#include "llvm/ExecutionEngine/Orc/OrcABISupport.h"</span>
+<span class="cp">#include "llvm/Support/CommandLine.h"</span>
+<span class="cp">#include "llvm/Support/DynamicLibrary.h"</span>
+<span class="cp">#include "llvm/Support/Error.h"</span>
+<span class="cp">#include "llvm/Support/raw_ostream.h"</span>
+<span class="cp">#include "llvm/Support/TargetSelect.h"</span>
+<span class="cp">#include <cstdint></span>
+<span class="cp">#include <cstdio></span>
+<span class="cp">#include <cstring></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <netinet/in.h></span>
+<span class="cp">#include <sys/socket.h></span>
+
+<span class="k">using</span> <span class="k">namespace</span> <span class="n">llvm</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span class="n">llvm</span><span class="o">::</span><span class="n">orc</span><span class="p">;</span>
+
+<span class="c1">// Command line argument for TCP port.</span>
+<span class="n">cl</span><span class="o">::</span><span class="n">opt</span><span class="o"><</span><span class="n">uint32_t</span><span class="o">></span> <span class="n">Port</span><span class="p">(</span><span class="s">"port"</span><span class="p">,</span>
+                       <span class="n">cl</span><span class="o">::</span><span class="n">desc</span><span class="p">(</span><span class="s">"TCP port to listen on"</span><span class="p">),</span>
+                       <span class="n">cl</span><span class="o">::</span><span class="n">init</span><span class="p">(</span><span class="mi">20000</span><span class="p">));</span>
+
+<span class="n">ExitOnError</span> <span class="n">ExitOnErr</span><span class="p">;</span>
+
+<span class="k">using</span> <span class="n">MainFun</span> <span class="o">=</span> <span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="p">)(</span><span class="kt">int</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">[]);</span>
+
+<span class="k">template</span> <span class="o"><</span><span class="k">typename</span> <span class="n">NativePtrT</span><span class="o">></span>
+<span class="n">NativePtrT</span> <span class="n">MakeNative</span><span class="p">(</span><span class="n">uint64_t</span> <span class="n">P</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="k">reinterpret_cast</span><span class="o"><</span><span class="n">NativePtrT</span><span class="o">></span><span class="p">(</span><span class="k">static_cast</span><span class="o"><</span><span class="n">uintptr_t</span><span class="o">></span><span class="p">(</span><span class="n">P</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="k">extern</span> <span class="s">"C"</span>
+<span class="kt">void</span> <span class="n">printExprResult</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">printf</span><span class="p">(</span><span class="s">"Expression evaluated to: %f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Val</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">// --- LAZY COMPILE TEST ---</span>
+<span class="kt">int</span> <span class="n">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="n">ExitOnErr</span><span class="p">.</span><span class="n">setBanner</span><span class="p">(</span><span class="s">"jit_server: "</span><span class="p">);</span>
+  <span class="k">else</span>
+    <span class="n">ExitOnErr</span><span class="p">.</span><span class="n">setBanner</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="s">": "</span><span class="p">);</span>
+
+  <span class="c1">// --- Initialize LLVM ---</span>
+  <span class="n">cl</span><span class="o">::</span><span class="n">ParseCommandLineOptions</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"LLVM lazy JIT example.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+
+  <span class="n">InitializeNativeTarget</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmPrinter</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmParser</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">sys</span><span class="o">::</span><span class="n">DynamicLibrary</span><span class="o">::</span><span class="n">LoadLibraryPermanently</span><span class="p">(</span><span class="n">nullptr</span><span class="p">))</span> <span class="p">{</span>
+    <span class="n">errs</span><span class="p">()</span> <span class="o"><<</span> <span class="s">"Error loading program symbols.</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
+    <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="c1">// --- Initialize remote connection ---</span>
+
+  <span class="kt">int</span> <span class="n">sockfd</span> <span class="o">=</span> <span class="n">socket</span><span class="p">(</span><span class="n">PF_INET</span><span class="p">,</span> <span class="n">SOCK_STREAM</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
+  <span class="n">sockaddr_in</span> <span class="n">servAddr</span><span class="p">,</span> <span class="n">clientAddr</span><span class="p">;</span>
+  <span class="n">socklen_t</span> <span class="n">clientAddrLen</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">clientAddr</span><span class="p">);</span>
+  <span class="n">memset</span><span class="p">(</span><span class="o">&</span><span class="n">servAddr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">servAddr</span><span class="p">));</span>
+  <span class="n">servAddr</span><span class="p">.</span><span class="n">sin_family</span> <span class="o">=</span> <span class="n">PF_INET</span><span class="p">;</span>
+  <span class="n">servAddr</span><span class="p">.</span><span class="n">sin_family</span> <span class="o">=</span> <span class="n">INADDR_ANY</span><span class="p">;</span>
+  <span class="n">servAddr</span><span class="p">.</span><span class="n">sin_port</span> <span class="o">=</span> <span class="n">htons</span><span class="p">(</span><span class="n">Port</span><span class="p">);</span>
+
+  <span class="p">{</span>
+    <span class="c1">// avoid "Address already in use" error.</span>
+    <span class="kt">int</span> <span class="n">yes</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">setsockopt</span><span class="p">(</span><span class="n">sockfd</span><span class="p">,</span><span class="n">SOL_SOCKET</span><span class="p">,</span><span class="n">SO_REUSEADDR</span><span class="p">,</span><span class="o">&</span><span class="n">yes</span><span class="p">,</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">))</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">errs</span><span class="p">()</span> <span class="o"><<</span> <span class="s">"Error calling setsockopt.</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
+      <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">bind</span><span class="p">(</span><span class="n">sockfd</span><span class="p">,</span> <span class="k">reinterpret_cast</span><span class="o"><</span><span class="n">sockaddr</span><span class="o">*></span><span class="p">(</span><span class="o">&</span><span class="n">servAddr</span><span class="p">),</span>
+           <span class="k">sizeof</span><span class="p">(</span><span class="n">servAddr</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">errs</span><span class="p">()</span> <span class="o"><<</span> <span class="s">"Error on binding.</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
+    <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+  <span class="p">}</span>
+  <span class="n">listen</span><span class="p">(</span><span class="n">sockfd</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
+  <span class="kt">int</span> <span class="n">newsockfd</span> <span class="o">=</span> <span class="n">accept</span><span class="p">(</span><span class="n">sockfd</span><span class="p">,</span> <span class="k">reinterpret_cast</span><span class="o"><</span><span class="n">sockaddr</span><span class="o">*></span><span class="p">(</span><span class="o">&</span><span class="n">clientAddr</span><span class="p">),</span>
+                         <span class="o">&</span><span class="n">clientAddrLen</span><span class="p">);</span>
+
+  <span class="k">auto</span> <span class="n">SymbolLookup</span> <span class="o">=</span>
+    <span class="p">[](</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">return</span> <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">getSymbolAddressInProcess</span><span class="p">(</span><span class="n">Name</span><span class="p">);</span>
+    <span class="p">};</span>
+
+  <span class="k">auto</span> <span class="n">RegisterEHFrames</span> <span class="o">=</span>
+    <span class="p">[](</span><span class="n">uint8_t</span> <span class="o">*</span><span class="n">Addr</span><span class="p">,</span> <span class="n">uint32_t</span> <span class="n">Size</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">registerEHFramesInProcess</span><span class="p">(</span><span class="n">Addr</span><span class="p">,</span> <span class="n">Size</span><span class="p">);</span>
+    <span class="p">};</span>
+
+  <span class="k">auto</span> <span class="n">DeregisterEHFrames</span> <span class="o">=</span>
+    <span class="p">[](</span><span class="n">uint8_t</span> <span class="o">*</span><span class="n">Addr</span><span class="p">,</span> <span class="n">uint32_t</span> <span class="n">Size</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RTDyldMemoryManager</span><span class="o">::</span><span class="n">deregisterEHFramesInProcess</span><span class="p">(</span><span class="n">Addr</span><span class="p">,</span> <span class="n">Size</span><span class="p">);</span>
+    <span class="p">};</span>
+
+  <span class="n">FDRPCChannel</span> <span class="n">TCPChannel</span><span class="p">(</span><span class="n">newsockfd</span><span class="p">,</span> <span class="n">newsockfd</span><span class="p">);</span>
+
+  <span class="k">using</span> <span class="n">MyServerT</span> <span class="o">=</span> <span class="n">remote</span><span class="o">::</span><span class="n">OrcRemoteTargetServer</span><span class="o"><</span><span class="n">FDRPCChannel</span><span class="p">,</span> <span class="n">OrcX86_64_SysV</span><span class="o">></span><span class="p">;</span>
+
+  <span class="n">MyServerT</span> <span class="n">Server</span><span class="p">(</span><span class="n">TCPChannel</span><span class="p">,</span> <span class="n">SymbolLookup</span><span class="p">,</span> <span class="n">RegisterEHFrames</span><span class="p">,</span> <span class="n">DeregisterEHFrames</span><span class="p">);</span>
+
+  <span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">Server</span><span class="p">.</span><span class="n">receivedTerminate</span><span class="p">())</span>
+    <span class="n">ExitOnErr</span><span class="p">(</span><span class="n">Server</span><span class="p">.</span><span class="n">handleOne</span><span class="p">());</span>
+
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../ReleaseNotes.html" title="LLVM 5.0.0 Release Notes"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="BuildingAJIT4.html" title="4. Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/LangImpl01.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/LangImpl01.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/LangImpl01.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/LangImpl01.html Thu May 10 06:54:16 2018
@@ -0,0 +1,365 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>1. Kaleidoscope: Tutorial Introduction and the Lexer — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="2. Kaleidoscope: Implementing a Parser and AST" href="LangImpl02.html" />
+    <link rel="prev" title="LLVM Tutorial: Table of Contents" href="index.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="LangImpl02.html" title="2. Kaleidoscope: Implementing a Parser and AST"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="index.html" title="LLVM Tutorial: Table of Contents"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="kaleidoscope-tutorial-introduction-and-the-lexer">
+<h1>1. Kaleidoscope: Tutorial Introduction and the Lexer<a class="headerlink" href="#kaleidoscope-tutorial-introduction-and-the-lexer" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#tutorial-introduction" id="id1">Tutorial Introduction</a></li>
+<li><a class="reference internal" href="#the-basic-language" id="id2">The Basic Language</a></li>
+<li><a class="reference internal" href="#the-lexer" id="id3">The Lexer</a></li>
+</ul>
+</div>
+<div class="section" id="tutorial-introduction">
+<h2><a class="toc-backref" href="#id1">1.1. Tutorial Introduction</a><a class="headerlink" href="#tutorial-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to the “Implementing a language with LLVM” tutorial. This
+tutorial runs through the implementation of a simple language, showing
+how fun and easy it can be. This tutorial will get you up and started as
+well as help to build a framework you can extend to other languages. The
+code in this tutorial can also be used as a playground to hack on other
+LLVM specific things.</p>
+<p>The goal of this tutorial is to progressively unveil our language,
+describing how it is built up over time. This will let us cover a fairly
+broad range of language design and LLVM-specific usage issues, showing
+and explaining the code for it all along the way, without overwhelming
+you with tons of details up front.</p>
+<p>It is useful to point out ahead of time that this tutorial is really
+about teaching compiler techniques and LLVM specifically, <em>not</em> about
+teaching modern and sane software engineering principles. In practice,
+this means that we’ll take a number of shortcuts to simplify the
+exposition. For example, the code uses global variables
+all over the place, doesn’t use nice design patterns like
+<a class="reference external" href="http://en.wikipedia.org/wiki/Visitor_pattern">visitors</a>, etc... but
+it is very simple. If you dig in and use the code as a basis for future
+projects, fixing these deficiencies shouldn’t be hard.</p>
+<p>I’ve tried to put this tutorial together in a way that makes chapters
+easy to skip over if you are already familiar with or are uninterested
+in the various pieces. The structure of the tutorial is:</p>
+<ul class="simple">
+<li><a class="reference external" href="#language">Chapter #1</a>: Introduction to the Kaleidoscope
+language, and the definition of its Lexer - This shows where we are
+going and the basic functionality that we want it to do. In order to
+make this tutorial maximally understandable and hackable, we choose
+to implement everything in C++ instead of using lexer and parser
+generators. LLVM obviously works just fine with such tools, feel free
+to use one if you prefer.</li>
+<li><a class="reference external" href="LangImpl02.html">Chapter #2</a>: Implementing a Parser and AST -
+With the lexer in place, we can talk about parsing techniques and
+basic AST construction. This tutorial describes recursive descent
+parsing and operator precedence parsing. Nothing in Chapters 1 or 2
+is LLVM-specific, the code doesn’t even link in LLVM at this point.
+:)</li>
+<li><a class="reference external" href="LangImpl03.html">Chapter #3</a>: Code generation to LLVM IR - With
+the AST ready, we can show off how easy generation of LLVM IR really
+is.</li>
+<li><a class="reference external" href="LangImpl04.html">Chapter #4</a>: Adding JIT and Optimizer Support
+- Because a lot of people are interested in using LLVM as a JIT,
+we’ll dive right into it and show you the 3 lines it takes to add JIT
+support. LLVM is also useful in many other ways, but this is one
+simple and “sexy” way to show off its power. :)</li>
+<li><a class="reference external" href="LangImpl05.html">Chapter #5</a>: Extending the Language: Control
+Flow - With the language up and running, we show how to extend it
+with control flow operations (if/then/else and a ‘for’ loop). This
+gives us a chance to talk about simple SSA construction and control
+flow.</li>
+<li><a class="reference external" href="LangImpl06.html">Chapter #6</a>: Extending the Language:
+User-defined Operators - This is a silly but fun chapter that talks
+about extending the language to let the user program define their own
+arbitrary unary and binary operators (with assignable precedence!).
+This lets us build a significant piece of the “language” as library
+routines.</li>
+<li><a class="reference external" href="LangImpl07.html">Chapter #7</a>: Extending the Language: Mutable
+Variables - This chapter talks about adding user-defined local
+variables along with an assignment operator. The interesting part
+about this is how easy and trivial it is to construct SSA form in
+LLVM: no, LLVM does <em>not</em> require your front-end to construct SSA
+form!</li>
+<li><a class="reference external" href="LangImpl08.html">Chapter #8</a>: Compiling to Object Files - This
+chapter explains how to take LLVM IR and compile it down to object
+files.</li>
+<li><a class="reference external" href="LangImpl09.html">Chapter #9</a>: Extending the Language: Debug
+Information - Having built a decent little programming language with
+control flow, functions and mutable variables, we consider what it
+takes to add debug information to standalone executables. This debug
+information will allow you to set breakpoints in Kaleidoscope
+functions, print out argument variables, and call functions - all
+from within the debugger!</li>
+<li><a class="reference external" href="LangImpl10.html">Chapter #10</a>: Conclusion and other useful LLVM
+tidbits - This chapter wraps up the series by talking about
+potential ways to extend the language, but also includes a bunch of
+pointers to info about “special topics” like adding garbage
+collection support, exceptions, debugging, support for “spaghetti
+stacks”, and a bunch of other tips and tricks.</li>
+</ul>
+<p>By the end of the tutorial, we’ll have written a bit less than 1000 lines
+of non-comment, non-blank, lines of code. With this small amount of
+code, we’ll have built up a very reasonable compiler for a non-trivial
+language including a hand-written lexer, parser, AST, as well as code
+generation support with a JIT compiler. While other systems may have
+interesting “hello world” tutorials, I think the breadth of this
+tutorial is a great testament to the strengths of LLVM and why you
+should consider it if you’re interested in language or compiler design.</p>
+<p>A note about this tutorial: we expect you to extend the language and
+play with it on your own. Take the code and go crazy hacking away at it,
+compilers don’t need to be scary creatures - it can be a lot of fun to
+play with languages!</p>
+</div>
+<div class="section" id="the-basic-language">
+<h2><a class="toc-backref" href="#id2">1.2. The Basic Language</a><a class="headerlink" href="#the-basic-language" title="Permalink to this headline">¶</a></h2>
+<p>This tutorial will be illustrated with a toy language that we’ll call
+“<a class="reference external" href="http://en.wikipedia.org/wiki/Kaleidoscope">Kaleidoscope</a>” (derived
+from “meaning beautiful, form, and view”). Kaleidoscope is a procedural
+language that allows you to define functions, use conditionals, math,
+etc. Over the course of the tutorial, we’ll extend Kaleidoscope to
+support the if/then/else construct, a for loop, user defined operators,
+JIT compilation with a simple command line interface, etc.</p>
+<p>Because we want to keep things simple, the only datatype in Kaleidoscope
+is a 64-bit floating point type (aka ‘double’ in C parlance). As such,
+all values are implicitly double precision and the language doesn’t
+require type declarations. This gives the language a very nice and
+simple syntax. For example, the following simple example computes
+<a class="reference external" href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci numbers:</a></p>
+<div class="highlight-python"><pre># Compute the x'th fibonacci number.
+def fib(x)
+  if x < 3 then
+    1
+  else
+    fib(x-1)+fib(x-2)
+
+# This expression will compute the 40th number.
+fib(40)</pre>
+</div>
+<p>We also allow Kaleidoscope to call into standard library functions (the
+LLVM JIT makes this completely trivial). This means that you can use the
+‘extern’ keyword to define a function before you use it (this is also
+useful for mutually recursive functions). For example:</p>
+<div class="highlight-python"><pre>extern sin(arg);
+extern cos(arg);
+extern atan2(arg1 arg2);
+
+atan2(sin(.4), cos(42))</pre>
+</div>
+<p>A more interesting example is included in Chapter 6 where we write a
+little Kaleidoscope application that <a class="reference external" href="LangImpl06.html#kicking-the-tires">displays a Mandelbrot
+Set</a> at various levels of magnification.</p>
+<p>Lets dive into the implementation of this language!</p>
+</div>
+<div class="section" id="the-lexer">
+<h2><a class="toc-backref" href="#id3">1.3. The Lexer</a><a class="headerlink" href="#the-lexer" title="Permalink to this headline">¶</a></h2>
+<p>When it comes to implementing a language, the first thing needed is the
+ability to process a text file and recognize what it says. The
+traditional way to do this is to use a
+“<a class="reference external" href="http://en.wikipedia.org/wiki/Lexical_analysis">lexer</a>” (aka
+‘scanner’) to break the input up into “tokens”. Each token returned by
+the lexer includes a token code and potentially some metadata (e.g. the
+numeric value of a number). First, we define the possibilities:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// The lexer returns tokens [0-255] if it is an unknown character, otherwise one</span>
+<span class="c1">// of these for known things.</span>
+<span class="k">enum</span> <span class="n">Token</span> <span class="p">{</span>
+  <span class="n">tok_eof</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+
+  <span class="c1">// commands</span>
+  <span class="n">tok_def</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span>
+  <span class="n">tok_extern</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span>
+
+  <span class="c1">// primary</span>
+  <span class="n">tok_identifier</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span><span class="p">,</span>
+  <span class="n">tok_number</span> <span class="o">=</span> <span class="o">-</span><span class="mi">5</span><span class="p">,</span>
+<span class="p">};</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdentifierStr</span><span class="p">;</span> <span class="c1">// Filled in if tok_identifier</span>
+<span class="k">static</span> <span class="kt">double</span> <span class="n">NumVal</span><span class="p">;</span>             <span class="c1">// Filled in if tok_number</span>
+</pre></div>
+</div>
+<p>Each token returned by our lexer will either be one of the Token enum
+values or it will be an ‘unknown’ character like ‘+’, which is returned
+as its ASCII value. If the current token is an identifier, the
+<tt class="docutils literal"><span class="pre">IdentifierStr</span></tt> global variable holds the name of the identifier. If
+the current token is a numeric literal (like 1.0), <tt class="docutils literal"><span class="pre">NumVal</span></tt> holds its
+value. Note that we use global variables for simplicity, this is not the
+best choice for a real language implementation :).</p>
+<p>The actual implementation of the lexer is a single function named
+<tt class="docutils literal"><span class="pre">gettok</span></tt>. The <tt class="docutils literal"><span class="pre">gettok</span></tt> function is called to return the next token
+from standard input. Its definition starts as:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// gettok - Return the next token from standard input.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">gettok</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">static</span> <span class="kt">int</span> <span class="n">LastChar</span> <span class="o">=</span> <span class="sc">' '</span><span class="p">;</span>
+
+  <span class="c1">// Skip any whitespace.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">isspace</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+</pre></div>
+</div>
+<p><tt class="docutils literal"><span class="pre">gettok</span></tt> works by calling the C <tt class="docutils literal"><span class="pre">getchar()</span></tt> function to read
+characters one at a time from standard input. It eats them as it
+recognizes them and stores the last character read, but not processed,
+in LastChar. The first thing that it has to do is ignore whitespace
+between tokens. This is accomplished with the loop above.</p>
+<p>The next thing <tt class="docutils literal"><span class="pre">gettok</span></tt> needs to do is recognize identifiers and
+specific keywords like “def”. Kaleidoscope does this with this simple
+loop:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">isalpha</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span> <span class="p">{</span> <span class="c1">// identifier: [a-zA-Z][a-zA-Z0-9]*</span>
+  <span class="n">IdentifierStr</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">isalnum</span><span class="p">((</span><span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">())))</span>
+    <span class="n">IdentifierStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"def"</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_def</span><span class="p">;</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"extern"</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_extern</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">tok_identifier</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Note that this code sets the ‘<tt class="docutils literal"><span class="pre">IdentifierStr</span></tt>‘ global whenever it
+lexes an identifier. Also, since language keywords are matched by the
+same loop, we handle them here inline. Numeric values are similar:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">)</span> <span class="p">{</span>   <span class="c1">// Number: [0-9.]+</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">NumStr</span><span class="p">;</span>
+  <span class="k">do</span> <span class="p">{</span>
+    <span class="n">NumStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">);</span>
+
+  <span class="n">NumVal</span> <span class="o">=</span> <span class="n">strtod</span><span class="p">(</span><span class="n">NumStr</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="mi">0</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">tok_number</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This is all pretty straight-forward code for processing input. When
+reading a numeric value from input, we use the C <tt class="docutils literal"><span class="pre">strtod</span></tt> function to
+convert it to a numeric value that we store in <tt class="docutils literal"><span class="pre">NumVal</span></tt>. Note that
+this isn’t doing sufficient error checking: it will incorrectly read
+“1.23.45.67” and handle it as if you typed in “1.23”. Feel free to
+extend it :). Next we handle comments:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'#'</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// Comment until end of line.</span>
+  <span class="k">do</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\n'</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\r'</span><span class="p">);</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">gettok</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>We handle comments by skipping to the end of the line and then return
+the next token. Finally, if the input doesn’t match one of the above
+cases, it is either an operator character like ‘+’ or the end of the
+file. These are handled with this code:</p>
+<div class="highlight-c++"><div class="highlight"><pre>  <span class="c1">// Check for end of file.  Don't eat the EOF.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="n">EOF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_eof</span><span class="p">;</span>
+
+  <span class="c1">// Otherwise, just return the character as its ascii value.</span>
+  <span class="kt">int</span> <span class="n">ThisChar</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+  <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">ThisChar</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>With this, we have the complete lexer for the basic Kaleidoscope
+language (the <a class="reference external" href="LangImpl02.html#full-code-listing">full code listing</a> for the Lexer
+is available in the <a class="reference external" href="LangImpl02.html">next chapter</a> of the tutorial).
+Next we’ll <a class="reference external" href="LangImpl02.html">build a simple parser that uses this to build an Abstract
+Syntax Tree</a>. When we have that, we’ll include a
+driver so that you can use the lexer and parser together.</p>
+<p><a class="reference external" href="LangImpl02.html">Next: Implementing a Parser and AST</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="LangImpl02.html" title="2. Kaleidoscope: Implementing a Parser and AST"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="index.html" title="LLVM Tutorial: Table of Contents"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/LangImpl02.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/LangImpl02.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/LangImpl02.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/LangImpl02.html Thu May 10 06:54:16 2018
@@ -0,0 +1,1212 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>2. Kaleidoscope: Implementing a Parser and AST — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="3. Kaleidoscope: Code generation to LLVM IR" href="LangImpl03.html" />
+    <link rel="prev" title="1. Kaleidoscope: Tutorial Introduction and the Lexer" href="LangImpl01.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="LangImpl03.html" title="3. Kaleidoscope: Code generation to LLVM IR"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl01.html" title="1. Kaleidoscope: Tutorial Introduction and the Lexer"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="kaleidoscope-implementing-a-parser-and-ast">
+<h1>2. Kaleidoscope: Implementing a Parser and AST<a class="headerlink" href="#kaleidoscope-implementing-a-parser-and-ast" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-2-introduction" id="id2">Chapter 2 Introduction</a></li>
+<li><a class="reference internal" href="#the-abstract-syntax-tree-ast" id="id3">The Abstract Syntax Tree (AST)</a></li>
+<li><a class="reference internal" href="#parser-basics" id="id4">Parser Basics</a></li>
+<li><a class="reference internal" href="#basic-expression-parsing" id="id5">Basic Expression Parsing</a></li>
+<li><a class="reference internal" href="#binary-expression-parsing" id="id6">Binary Expression Parsing</a></li>
+<li><a class="reference internal" href="#parsing-the-rest" id="id7">Parsing the Rest</a></li>
+<li><a class="reference internal" href="#the-driver" id="id8">The Driver</a></li>
+<li><a class="reference internal" href="#conclusions" id="id9">Conclusions</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id10">Full Code Listing</a></li>
+</ul>
+</div>
+<div class="section" id="chapter-2-introduction">
+<h2><a class="toc-backref" href="#id2">2.1. Chapter 2 Introduction</a><a class="headerlink" href="#chapter-2-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 2 of the “<a class="reference external" href="index.html">Implementing a language with
+LLVM</a>” tutorial. This chapter shows you how to use the
+lexer, built in <a class="reference external" href="LangImpl01.html">Chapter 1</a>, to build a full
+<a class="reference external" href="http://en.wikipedia.org/wiki/Parsing">parser</a> for our Kaleidoscope
+language. Once we have a parser, we’ll define and build an <a class="reference external" href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">Abstract
+Syntax Tree</a> (AST).</p>
+<p>The parser we will build uses a combination of <a class="reference external" href="http://en.wikipedia.org/wiki/Recursive_descent_parser">Recursive Descent
+Parsing</a> and
+<a class="reference external" href="http://en.wikipedia.org/wiki/Operator-precedence_parser">Operator-Precedence
+Parsing</a> to
+parse the Kaleidoscope language (the latter for binary expressions and
+the former for everything else). Before we get to parsing though, lets
+talk about the output of the parser: the Abstract Syntax Tree.</p>
+</div>
+<div class="section" id="the-abstract-syntax-tree-ast">
+<h2><a class="toc-backref" href="#id3">2.2. The Abstract Syntax Tree (AST)</a><a class="headerlink" href="#the-abstract-syntax-tree-ast" title="Permalink to this headline">¶</a></h2>
+<p>The AST for a program captures its behavior in such a way that it is
+easy for later stages of the compiler (e.g. code generation) to
+interpret. We basically want one object for each construct in the
+language, and the AST should closely model the language. In
+Kaleidoscope, we have expressions, a prototype, and a function object.
+We’ll start with expressions first:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// ExprAST - Base class for all expression nodes.</span>
+<span class="k">class</span> <span class="nc">ExprAST</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">virtual</span> <span class="o">~</span><span class="n">ExprAST</span><span class="p">()</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// NumberExprAST - Expression class for numeric literals like "1.0".</span>
+<span class="k">class</span> <span class="nc">NumberExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">double</span> <span class="n">Val</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">NumberExprAST</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="o">:</span> <span class="n">Val</span><span class="p">(</span><span class="n">Val</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>The code above shows the definition of the base ExprAST class and one
+subclass which we use for numeric literals. The important thing to note
+about this code is that the NumberExprAST class captures the numeric
+value of the literal as an instance variable. This allows later phases
+of the compiler to know what the stored numeric value is.</p>
+<p>Right now we only create the AST, so there are no useful accessor
+methods on them. It would be very easy to add a virtual method to pretty
+print the code, for example. Here are the other expression AST node
+definitions that we’ll use in the basic form of the Kaleidoscope
+language:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// VariableExprAST - Expression class for referencing a variable, like "a".</span>
+<span class="k">class</span> <span class="nc">VariableExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">VariableExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// BinaryExprAST - Expression class for a binary operator.</span>
+<span class="k">class</span> <span class="nc">BinaryExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">char</span> <span class="n">Op</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span> <span class="n">RHS</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">BinaryExprAST</span><span class="p">(</span><span class="kt">char</span> <span class="n">op</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span>
+                <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">RHS</span><span class="p">)</span>
+    <span class="o">:</span> <span class="n">Op</span><span class="p">(</span><span class="n">op</span><span class="p">),</span> <span class="n">LHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">)),</span> <span class="n">RHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// CallExprAST - Expression class for function calls.</span>
+<span class="k">class</span> <span class="nc">CallExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Callee</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">CallExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Callee</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">)</span>
+    <span class="o">:</span> <span class="n">Callee</span><span class="p">(</span><span class="n">Callee</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>This is all (intentionally) rather straight-forward: variables capture
+the variable name, binary operators capture their opcode (e.g. ‘+’), and
+calls capture a function name as well as a list of any argument
+expressions. One thing that is nice about our AST is that it captures
+the language features without talking about the syntax of the language.
+Note that there is no discussion about precedence of binary operators,
+lexical structure, etc.</p>
+<p>For our basic language, these are all of the expression nodes we’ll
+define. Because it doesn’t have conditional control flow, it isn’t
+Turing-complete; we’ll fix that in a later installment. The two things
+we need next are a way to talk about the interface to a function, and a
+way to talk about functions themselves:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// PrototypeAST - This class represents the "prototype" for a function,</span>
+<span class="c1">/// which captures its name, and its argument names (thus implicitly the number</span>
+<span class="c1">/// of arguments the function takes).</span>
+<span class="k">class</span> <span class="nc">PrototypeAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">PrototypeAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">)</span>
+    <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">getName</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Name</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+    <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>In Kaleidoscope, functions are typed with just a count of their
+arguments. Since all values are double precision floating point, the
+type of each argument doesn’t need to be stored anywhere. In a more
+aggressive and realistic language, the “ExprAST” class would probably
+have a type field.</p>
+<p>With this scaffolding, we can now talk about parsing expressions and
+function bodies in Kaleidoscope.</p>
+</div>
+<div class="section" id="parser-basics">
+<h2><a class="toc-backref" href="#id4">2.3. Parser Basics</a><a class="headerlink" href="#parser-basics" title="Permalink to this headline">¶</a></h2>
+<p>Now that we have an AST to build, we need to define the parser code to
+build it. The idea here is that we want to parse something like “x+y”
+(which is returned as three tokens by the lexer) into an AST that could
+be generated with calls like this:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">auto</span> <span class="n">LHS</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="s">"x"</span><span class="p">);</span>
+<span class="k">auto</span> <span class="n">RHS</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="s">"y"</span><span class="p">);</span>
+<span class="k">auto</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="sc">'+'</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span>
+                                              <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+</pre></div>
+</div>
+<p>In order to do this, we’ll start by defining some basic helper routines:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current</span>
+<span class="c1">/// token the parser is looking at.  getNextToken reads another token from the</span>
+<span class="c1">/// lexer and updates CurTok with its results.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">CurTok</span><span class="p">;</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">getNextToken</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">CurTok</span> <span class="o">=</span> <span class="n">gettok</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This implements a simple token buffer around the lexer. This allows us
+to look one token ahead at what the lexer is returning. Every function
+in our parser will assume that CurTok is the current token that needs to
+be parsed.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// LogError* - These are little helper functions for error handling.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LogError</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"LogError: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">LogErrorP</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The <tt class="docutils literal"><span class="pre">LogError</span></tt> routines are simple helper routines that our parser will
+use to handle errors. The error recovery in our parser will not be the
+best and is not particular user-friendly, but it will be enough for our
+tutorial. These routines make it easier to handle errors in routines
+that have various return types: they always return null.</p>
+<p>With these basic helper functions, we can implement the first piece of
+our grammar: numeric literals.</p>
+</div>
+<div class="section" id="basic-expression-parsing">
+<h2><a class="toc-backref" href="#id5">2.4. Basic Expression Parsing</a><a class="headerlink" href="#basic-expression-parsing" title="Permalink to this headline">¶</a></h2>
+<p>We start with numeric literals, because they are the simplest to
+process. For each production in our grammar, we’ll define a function
+which parses that production. For numeric literals, we have:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// numberexpr ::= number</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseNumberExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">NumberExprAST</span><span class="o">></span><span class="p">(</span><span class="n">NumVal</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// consume the number</span>
+  <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Result</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This routine is very simple: it expects to be called when the current
+token is a <tt class="docutils literal"><span class="pre">tok_number</span></tt> token. It takes the current number value,
+creates a <tt class="docutils literal"><span class="pre">NumberExprAST</span></tt> node, advances the lexer to the next token,
+and finally returns.</p>
+<p>There are some interesting aspects to this. The most important one is
+that this routine eats all of the tokens that correspond to the
+production and returns the lexer buffer with the next token (which is
+not part of the grammar production) ready to go. This is a fairly
+standard way to go for recursive descent parsers. For a better example,
+the parenthesis operator is defined like this:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// parenexpr ::= '(' expression ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseParenExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (.</span>
+  <span class="k">auto</span> <span class="n">V</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"expected ')'"</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ).</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This function illustrates a number of interesting things about the
+parser:</p>
+<p>1) It shows how we use the LogError routines. When called, this function
+expects that the current token is a ‘(‘ token, but after parsing the
+subexpression, it is possible that there is no ‘)’ waiting. For example,
+if the user types in “(4 x” instead of “(4)”, the parser should emit an
+error. Because errors can occur, the parser needs a way to indicate that
+they happened: in our parser, we return null on an error.</p>
+<p>2) Another interesting aspect of this function is that it uses recursion
+by calling <tt class="docutils literal"><span class="pre">ParseExpression</span></tt> (we will soon see that
+<tt class="docutils literal"><span class="pre">ParseExpression</span></tt> can call <tt class="docutils literal"><span class="pre">ParseParenExpr</span></tt>). This is powerful
+because it allows us to handle recursive grammars, and keeps each
+production very simple. Note that parentheses do not cause construction
+of AST nodes themselves. While we could do it this way, the most
+important role of parentheses are to guide the parser and provide
+grouping. Once the parser constructs the AST, parentheses are not
+needed.</p>
+<p>The next simple production is for handling variable references and
+function calls:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// identifierexpr</span>
+<span class="c1">///   ::= identifier</span>
+<span class="c1">///   ::= identifier '(' expression* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseIdentifierExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+
+  <span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat identifier.</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span> <span class="c1">// Simple variable ref.</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">);</span>
+
+  <span class="c1">// Call.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat (</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Arg</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+        <span class="n">Args</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Arg</span><span class="p">));</span>
+      <span class="k">else</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">==</span> <span class="sc">')'</span><span class="p">)</span>
+        <span class="k">break</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">','</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"Expected ')' or ',' in argument list"</span><span class="p">);</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Eat the ')'.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">CallExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">));</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This routine follows the same style as the other routines. (It expects
+to be called if the current token is a <tt class="docutils literal"><span class="pre">tok_identifier</span></tt> token). It
+also has recursion and error handling. One interesting aspect of this is
+that it uses <em>look-ahead</em> to determine if the current identifier is a
+stand alone variable reference or if it is a function call expression.
+It handles this by checking to see if the token after the identifier is
+a ‘(‘ token, constructing either a <tt class="docutils literal"><span class="pre">VariableExprAST</span></tt> or
+<tt class="docutils literal"><span class="pre">CallExprAST</span></tt> node as appropriate.</p>
+<p>Now that we have all of our simple expression-parsing logic in place, we
+can define a helper function to wrap it together into one entry point.
+We call this class of expressions “primary” expressions, for reasons
+that will become more clear <a class="reference external" href="LangImpl6.html#user-defined-unary-operators">later in the
+tutorial</a>. In order to parse an arbitrary
+primary expression, we need to determine what sort of expression it is:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// primary</span>
+<span class="c1">///   ::= identifierexpr</span>
+<span class="c1">///   ::= numberexpr</span>
+<span class="c1">///   ::= parenexpr</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParsePrimary</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"unknown token when expecting an expression"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="nl">tok_identifier:</span>
+    <span class="k">return</span> <span class="n">ParseIdentifierExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="nl">tok_number:</span>
+    <span class="k">return</span> <span class="n">ParseNumberExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="sc">'('</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">ParseParenExpr</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Now that you see the definition of this function, it is more obvious why
+we can assume the state of CurTok in the various functions. This uses
+look-ahead to determine which sort of expression is being inspected, and
+then parses it with a function call.</p>
+<p>Now that basic expressions are handled, we need to handle binary
+expressions. They are a bit more complex.</p>
+</div>
+<div class="section" id="binary-expression-parsing">
+<h2><a class="toc-backref" href="#id6">2.5. Binary Expression Parsing</a><a class="headerlink" href="#binary-expression-parsing" title="Permalink to this headline">¶</a></h2>
+<p>Binary expressions are significantly harder to parse because they are
+often ambiguous. For example, when given the string “x+y*z”, the parser
+can choose to parse it as either “(x+y)*z” or “x+(y*z)”. With common
+definitions from mathematics, we expect the later parse, because “*”
+(multiplication) has higher <em>precedence</em> than “+” (addition).</p>
+<p>There are many ways to handle this, but an elegant and efficient way is
+to use <a class="reference external" href="http://en.wikipedia.org/wiki/Operator-precedence_parser">Operator-Precedence
+Parsing</a>.
+This parsing technique uses the precedence of binary operators to guide
+recursion. To start with, we need a table of precedences:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// BinopPrecedence - This holds the precedence for each binary operator that is</span>
+<span class="c1">/// defined.</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="kt">char</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">BinopPrecedence</span><span class="p">;</span>
+
+<span class="c1">/// GetTokPrecedence - Get the precedence of the pending binary operator token.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">GetTokPrecedence</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">isascii</span><span class="p">(</span><span class="n">CurTok</span><span class="p">))</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+
+  <span class="c1">// Make sure it's a declared binop.</span>
+  <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">BinopPrecedence</span><span class="p">[</span><span class="n">CurTok</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">TokPrec</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Install standard binary operators.</span>
+  <span class="c1">// 1 is lowest precedence.</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'<'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'+'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'-'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'*'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">40</span><span class="p">;</span>  <span class="c1">// highest.</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>For the basic form of Kaleidoscope, we will only support 4 binary
+operators (this can obviously be extended by you, our brave and intrepid
+reader). The <tt class="docutils literal"><span class="pre">GetTokPrecedence</span></tt> function returns the precedence for
+the current token, or -1 if the token is not a binary operator. Having a
+map makes it easy to add new operators and makes it clear that the
+algorithm doesn’t depend on the specific operators involved, but it
+would be easy enough to eliminate the map and do the comparisons in the
+<tt class="docutils literal"><span class="pre">GetTokPrecedence</span></tt> function. (Or just use a fixed-size array).</p>
+<p>With the helper above defined, we can now start parsing binary
+expressions. The basic idea of operator precedence parsing is to break
+down an expression with potentially ambiguous binary operators into
+pieces. Consider, for example, the expression “a+b+(c+d)*e*f+g”.
+Operator precedence parsing considers this as a stream of primary
+expressions separated by binary operators. As such, it will first parse
+the leading primary expression “a”, then it will see the pairs [+, b]
+[+, (c+d)] [*, e] [*, f] and [+, g]. Note that because parentheses are
+primary expressions, the binary expression parser doesn’t need to worry
+about nested subexpressions like (c+d) at all.</p>
+<p>To start, an expression is a primary expression potentially followed by
+a sequence of [binop,primaryexpr] pairs:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// expression</span>
+<span class="c1">///   ::= primary binoprhs</span>
+<span class="c1">///</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">LHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">LHS</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">return</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">));</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt> is the function that parses the sequence of pairs for
+us. It takes a precedence and a pointer to an expression for the part
+that has been parsed so far. Note that “x” is a perfectly valid
+expression: As such, “binoprhs” is allowed to be empty, in which case it
+returns the expression that is passed into it. In our example above, the
+code passes the expression for “a” into <tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt> and the
+current token is “+”.</p>
+<p>The precedence value passed into <tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt> indicates the
+<em>minimal operator precedence</em> that the function is allowed to eat. For
+example, if the current pair stream is [+, x] and <tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt> is
+passed in a precedence of 40, it will not consume any tokens (because
+the precedence of ‘+’ is only 20). With this in mind, <tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt>
+starts with:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// binoprhs</span>
+<span class="c1">///   ::= ('+' primary)*</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="kt">int</span> <span class="n">ExprPrec</span><span class="p">,</span>
+                                              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// If this is a binop, find its precedence.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+    <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+
+    <span class="c1">// If this is a binop that binds at least as tightly as the current binop,</span>
+    <span class="c1">// consume it, otherwise we are done.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">ExprPrec</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">LHS</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>This code gets the precedence of the current token and checks to see if
+if is too low. Because we defined invalid tokens to have a precedence of
+-1, this check implicitly knows that the pair-stream ends when the token
+stream runs out of binary operators. If this check succeeds, we know
+that the token is a binary operator and that it will be included in this
+expression:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// Okay, we know this is a binop.</span>
+<span class="kt">int</span> <span class="n">BinOp</span> <span class="o">=</span> <span class="n">CurTok</span><span class="p">;</span>
+<span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat binop</span>
+
+<span class="c1">// Parse the primary expression after the binary operator.</span>
+<span class="k">auto</span> <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>As such, this code eats (and remembers) the binary operator and then
+parses the primary expression that follows. This builds up the whole
+pair, the first of which is [+, b] for the running example.</p>
+<p>Now that we parsed the left-hand side of an expression and one pair of
+the RHS sequence, we have to decide which way the expression associates.
+In particular, we could have “(a+b) binop unparsed” or “a + (b binop
+unparsed)”. To determine this, we look ahead at “binop” to determine its
+precedence and compare it to BinOp’s precedence (which is ‘+’ in this
+case):</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// If BinOp binds less tightly with RHS than the operator after RHS, let</span>
+<span class="c1">// the pending operator take RHS as its LHS.</span>
+<span class="kt">int</span> <span class="n">NextPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+<span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">NextPrec</span><span class="p">)</span> <span class="p">{</span>
+</pre></div>
+</div>
+<p>If the precedence of the binop to the right of “RHS” is lower or equal
+to the precedence of our current operator, then we know that the
+parentheses associate as “(a+b) binop ...”. In our example, the current
+operator is “+” and the next operator is “+”, we know that they have the
+same precedence. In this case we’ll create the AST node for “a+b”, and
+then continue parsing:</p>
+<div class="highlight-c++"><div class="highlight"><pre>      <span class="p">...</span> <span class="k">if</span> <span class="n">body</span> <span class="n">omitted</span> <span class="p">...</span>
+    <span class="p">}</span>
+
+    <span class="c1">// Merge LHS/RHS.</span>
+    <span class="n">LHS</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="n">BinOp</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span>
+                                           <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+  <span class="p">}</span>  <span class="c1">// loop around to the top of the while loop.</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>In our example above, this will turn “a+b+” into “(a+b)” and execute the
+next iteration of the loop, with “+” as the current token. The code
+above will eat, remember, and parse “(c+d)” as the primary expression,
+which makes the current pair equal to [+, (c+d)]. It will then evaluate
+the ‘if’ conditional above with “*” as the binop to the right of the
+primary. In this case, the precedence of “*” is higher than the
+precedence of “+” so the if condition will be entered.</p>
+<p>The critical question left here is “how can the if condition parse the
+right hand side in full”? In particular, to build the AST correctly for
+our example, it needs to get all of “(c+d)*e*f” as the RHS expression
+variable. The code to do this is surprisingly simple (code from the
+above two blocks duplicated for context):</p>
+<div class="highlight-c++"><div class="highlight"><pre>    <span class="c1">// If BinOp binds less tightly with RHS than the operator after RHS, let</span>
+    <span class="c1">// the pending operator take RHS as its LHS.</span>
+    <span class="kt">int</span> <span class="n">NextPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">NextPrec</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="n">TokPrec</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+      <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+    <span class="p">}</span>
+    <span class="c1">// Merge LHS/RHS.</span>
+    <span class="n">LHS</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="n">BinOp</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span>
+                                           <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+  <span class="p">}</span>  <span class="c1">// loop around to the top of the while loop.</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>At this point, we know that the binary operator to the RHS of our
+primary has higher precedence than the binop we are currently parsing.
+As such, we know that any sequence of pairs whose operators are all
+higher precedence than “+” should be parsed together and returned as
+“RHS”. To do this, we recursively invoke the <tt class="docutils literal"><span class="pre">ParseBinOpRHS</span></tt> function
+specifying “TokPrec+1” as the minimum precedence required for it to
+continue. In our example above, this will cause it to return the AST
+node for “(c+d)*e*f” as RHS, which is then set as the RHS of the ‘+’
+expression.</p>
+<p>Finally, on the next iteration of the while loop, the “+g” piece is
+parsed and added to the AST. With this little bit of code (14
+non-trivial lines), we correctly handle fully general binary expression
+parsing in a very elegant way. This was a whirlwind tour of this code,
+and it is somewhat subtle. I recommend running through it with a few
+tough examples to see how it works.</p>
+<p>This wraps up handling of expressions. At this point, we can point the
+parser at an arbitrary token stream and build an expression from it,
+stopping at the first token that is not part of the expression. Next up
+we need to handle function definitions, etc.</p>
+</div>
+<div class="section" id="parsing-the-rest">
+<h2><a class="toc-backref" href="#id7">2.6. Parsing the Rest</a><a class="headerlink" href="#parsing-the-rest" title="Permalink to this headline">¶</a></h2>
+<p>The next thing missing is handling of function prototypes. In
+Kaleidoscope, these are used both for ‘extern’ function declarations as
+well as function body definitions. The code to do this is
+straight-forward and not very interesting (once you’ve survived
+expressions):</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// prototype</span>
+<span class="c1">///   ::= id '(' id* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParsePrototype</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected function name in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">FnName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected '(' in prototype"</span><span class="p">);</span>
+
+  <span class="c1">// Read the list of argument names.</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">ArgNames</span><span class="p">;</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">getNextToken</span><span class="p">()</span> <span class="o">==</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="n">ArgNames</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">IdentifierStr</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected ')' in prototype"</span><span class="p">);</span>
+
+  <span class="c1">// success.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat ')'.</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="n">FnName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ArgNames</span><span class="p">));</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Given this, a function definition is very simple, just a prototype plus
+an expression to implement the body:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// definition ::= 'def' prototype expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat def.</span>
+  <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">Proto</span><span class="p">)</span> <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>In addition, we support ‘extern’ to declare functions like ‘sin’ and
+‘cos’ as well as to support forward declaration of user functions. These
+‘extern’s are just prototypes with no body:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// external ::= 'extern' prototype</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParseExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span>  <span class="c1">// eat extern.</span>
+  <span class="k">return</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Finally, we’ll also let the user type in arbitrary top-level expressions
+and evaluate them on the fly. We will handle this by defining anonymous
+nullary (zero argument) functions for them:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// toplevelexpr ::= expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseTopLevelExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Make an anonymous proto.</span>
+    <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="p">}</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Now that we have all the pieces, let’s build a little driver that will
+let us actually <em>execute</em> this code we’ve built!</p>
+</div>
+<div class="section" id="the-driver">
+<h2><a class="toc-backref" href="#id8">2.7. The Driver</a><a class="headerlink" href="#the-driver" title="Permalink to this headline">¶</a></h2>
+<p>The driver for this simply invokes all of the parsing pieces with a
+top-level dispatch loop. There isn’t much interesting here, so I’ll just
+include the top-level loop. See <a class="reference external" href="#full-code-listing">below</a> for full code in the
+“Top-Level Parsing” section.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// top ::= definition | external | expression | ';'</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">MainLoop</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+    <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">case</span> <span class="nl">tok_eof:</span>
+      <span class="k">return</span><span class="p">;</span>
+    <span class="k">case</span> <span class="sc">';'</span><span class="o">:</span> <span class="c1">// ignore top-level semicolons.</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_def:</span>
+      <span class="n">HandleDefinition</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_extern:</span>
+      <span class="n">HandleExtern</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">default</span><span class="o">:</span>
+      <span class="n">HandleTopLevelExpression</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The most interesting part of this is that we ignore top-level
+semicolons. Why is this, you ask? The basic reason is that if you type
+“4 + 5” at the command line, the parser doesn’t know whether that is the
+end of what you will type or not. For example, on the next line you
+could type “def foo...” in which case 4+5 is the end of a top-level
+expression. Alternatively you could type “* 6”, which would continue
+the expression. Having top-level semicolons allows you to type “4+5;”,
+and the parser will know you are done.</p>
+</div>
+<div class="section" id="conclusions">
+<h2><a class="toc-backref" href="#id9">2.8. Conclusions</a><a class="headerlink" href="#conclusions" title="Permalink to this headline">¶</a></h2>
+<p>With just under 400 lines of commented code (240 lines of non-comment,
+non-blank code), we fully defined our minimal language, including a
+lexer, parser, and AST builder. With this done, the executable will
+validate Kaleidoscope code and tell us if it is grammatically invalid.
+For example, here is a sample interaction:</p>
+<div class="highlight-bash"><pre>$ ./a.out
+ready> def foo(x y) x+foo(y, 4.0);
+Parsed a function definition.
+ready> def foo(x y) x+y y;
+Parsed a function definition.
+Parsed a top-level expr
+ready> def foo(x y) x+y );
+Parsed a function definition.
+Error: unknown token when expecting an expression
+ready> extern sin(a);
+ready> Parsed an extern
+ready> ^D
+$</pre>
+</div>
+<p>There is a lot of room for extension here. You can define new AST nodes,
+extend the language in many ways, etc. In the <a class="reference external" href="LangImpl03.html">next
+installment</a>, we will describe how to generate LLVM
+Intermediate Representation (IR) from the AST.</p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id10">2.9. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for this and the previous chapter.
+Note that it is fully self-contained: you don’t need LLVM or any
+external libraries at all for this. (Besides the C and C++ standard
+libraries, of course.) To build this, just compile with:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g -O3 toy.cpp
+<span class="c"># Run</span>
+./a.out
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <cctype></span>
+<span class="cp">#include <cstdio></span>
+<span class="cp">#include <cstdlib></span>
+<span class="cp">#include <map></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Lexer</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">// The lexer returns tokens [0-255] if it is an unknown character, otherwise one</span>
+<span class="c1">// of these for known things.</span>
+<span class="k">enum</span> <span class="n">Token</span> <span class="p">{</span>
+  <span class="n">tok_eof</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+
+  <span class="c1">// commands</span>
+  <span class="n">tok_def</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span>
+  <span class="n">tok_extern</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span>
+
+  <span class="c1">// primary</span>
+  <span class="n">tok_identifier</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span><span class="p">,</span>
+  <span class="n">tok_number</span> <span class="o">=</span> <span class="o">-</span><span class="mi">5</span>
+<span class="p">};</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdentifierStr</span><span class="p">;</span> <span class="c1">// Filled in if tok_identifier</span>
+<span class="k">static</span> <span class="kt">double</span> <span class="n">NumVal</span><span class="p">;</span>             <span class="c1">// Filled in if tok_number</span>
+
+<span class="c1">/// gettok - Return the next token from standard input.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">gettok</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">static</span> <span class="kt">int</span> <span class="n">LastChar</span> <span class="o">=</span> <span class="sc">' '</span><span class="p">;</span>
+
+  <span class="c1">// Skip any whitespace.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">isspace</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isalpha</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span> <span class="p">{</span> <span class="c1">// identifier: [a-zA-Z][a-zA-Z0-9]*</span>
+    <span class="n">IdentifierStr</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">isalnum</span><span class="p">((</span><span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">())))</span>
+      <span class="n">IdentifierStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"def"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_def</span><span class="p">;</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"extern"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_extern</span><span class="p">;</span>
+    <span class="k">return</span> <span class="n">tok_identifier</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Number: [0-9.]+</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">NumStr</span><span class="p">;</span>
+    <span class="k">do</span> <span class="p">{</span>
+      <span class="n">NumStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">);</span>
+
+    <span class="n">NumVal</span> <span class="o">=</span> <span class="n">strtod</span><span class="p">(</span><span class="n">NumStr</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">nullptr</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">tok_number</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'#'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Comment until end of line.</span>
+    <span class="k">do</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\n'</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\r'</span><span class="p">);</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">gettok</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Check for end of file.  Don't eat the EOF.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="n">EOF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_eof</span><span class="p">;</span>
+
+  <span class="c1">// Otherwise, just return the character as its ascii value.</span>
+  <span class="kt">int</span> <span class="n">ThisChar</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+  <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">ThisChar</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Abstract Syntax Tree (aka Parse Tree)</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+<span class="c1">/// ExprAST - Base class for all expression nodes.</span>
+<span class="k">class</span> <span class="nc">ExprAST</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">virtual</span> <span class="o">~</span><span class="n">ExprAST</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// NumberExprAST - Expression class for numeric literals like "1.0".</span>
+<span class="k">class</span> <span class="nc">NumberExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">double</span> <span class="n">Val</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">NumberExprAST</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="o">:</span> <span class="n">Val</span><span class="p">(</span><span class="n">Val</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// VariableExprAST - Expression class for referencing a variable, like "a".</span>
+<span class="k">class</span> <span class="nc">VariableExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">VariableExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// BinaryExprAST - Expression class for a binary operator.</span>
+<span class="k">class</span> <span class="nc">BinaryExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">char</span> <span class="n">Op</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span> <span class="n">RHS</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">BinaryExprAST</span><span class="p">(</span><span class="kt">char</span> <span class="n">Op</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span>
+                <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">RHS</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Op</span><span class="p">(</span><span class="n">Op</span><span class="p">),</span> <span class="n">LHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">)),</span> <span class="n">RHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// CallExprAST - Expression class for function calls.</span>
+<span class="k">class</span> <span class="nc">CallExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Callee</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">CallExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Callee</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Callee</span><span class="p">(</span><span class="n">Callee</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="c1">/// PrototypeAST - This class represents the "prototype" for a function,</span>
+<span class="c1">/// which captures its name, and its argument names (thus implicitly the number</span>
+<span class="c1">/// of arguments the function takes).</span>
+<span class="k">class</span> <span class="nc">PrototypeAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">PrototypeAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">getName</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Name</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end anonymous namespace</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Parser</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">/// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current</span>
+<span class="c1">/// token the parser is looking at.  getNextToken reads another token from the</span>
+<span class="c1">/// lexer and updates CurTok with its results.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">CurTok</span><span class="p">;</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">getNextToken</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">CurTok</span> <span class="o">=</span> <span class="n">gettok</span><span class="p">();</span> <span class="p">}</span>
+
+<span class="c1">/// BinopPrecedence - This holds the precedence for each binary operator that is</span>
+<span class="c1">/// defined.</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="kt">char</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">BinopPrecedence</span><span class="p">;</span>
+
+<span class="c1">/// GetTokPrecedence - Get the precedence of the pending binary operator token.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">GetTokPrecedence</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">isascii</span><span class="p">(</span><span class="n">CurTok</span><span class="p">))</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+
+  <span class="c1">// Make sure it's a declared binop.</span>
+  <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">BinopPrecedence</span><span class="p">[</span><span class="n">CurTok</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">TokPrec</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// LogError* - These are little helper functions for error handling.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LogError</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Error: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">LogErrorP</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">();</span>
+
+<span class="c1">/// numberexpr ::= number</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseNumberExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">NumberExprAST</span><span class="o">></span><span class="p">(</span><span class="n">NumVal</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// consume the number</span>
+  <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Result</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">/// parenexpr ::= '(' expression ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseParenExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (.</span>
+  <span class="k">auto</span> <span class="n">V</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"expected ')'"</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ).</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// identifierexpr</span>
+<span class="c1">///   ::= identifier</span>
+<span class="c1">///   ::= identifier '(' expression* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseIdentifierExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat identifier.</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span> <span class="c1">// Simple variable ref.</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">);</span>
+
+  <span class="c1">// Call.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Arg</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+        <span class="n">Args</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Arg</span><span class="p">));</span>
+      <span class="k">else</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">==</span> <span class="sc">')'</span><span class="p">)</span>
+        <span class="k">break</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">','</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"Expected ')' or ',' in argument list"</span><span class="p">);</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Eat the ')'.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">CallExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// primary</span>
+<span class="c1">///   ::= identifierexpr</span>
+<span class="c1">///   ::= numberexpr</span>
+<span class="c1">///   ::= parenexpr</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParsePrimary</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"unknown token when expecting an expression"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="nl">tok_identifier:</span>
+    <span class="k">return</span> <span class="n">ParseIdentifierExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="nl">tok_number:</span>
+    <span class="k">return</span> <span class="n">ParseNumberExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="sc">'('</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">ParseParenExpr</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// binoprhs</span>
+<span class="c1">///   ::= ('+' primary)*</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="kt">int</span> <span class="n">ExprPrec</span><span class="p">,</span>
+                                              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// If this is a binop, find its precedence.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+
+    <span class="c1">// If this is a binop that binds at least as tightly as the current binop,</span>
+    <span class="c1">// consume it, otherwise we are done.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">ExprPrec</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">LHS</span><span class="p">;</span>
+
+    <span class="c1">// Okay, we know this is a binop.</span>
+    <span class="kt">int</span> <span class="n">BinOp</span> <span class="o">=</span> <span class="n">CurTok</span><span class="p">;</span>
+    <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat binop</span>
+
+    <span class="c1">// Parse the primary expression after the binary operator.</span>
+    <span class="k">auto</span> <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+    <span class="c1">// If BinOp binds less tightly with RHS than the operator after RHS, let</span>
+    <span class="c1">// the pending operator take RHS as its LHS.</span>
+    <span class="kt">int</span> <span class="n">NextPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">NextPrec</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="n">TokPrec</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+      <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+    <span class="p">}</span>
+
+    <span class="c1">// Merge LHS/RHS.</span>
+    <span class="n">LHS</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="n">BinOp</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span>
+                                           <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// expression</span>
+<span class="c1">///   ::= primary binoprhs</span>
+<span class="c1">///</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">LHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">LHS</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">return</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// prototype</span>
+<span class="c1">///   ::= id '(' id* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParsePrototype</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected function name in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">FnName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected '(' in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">ArgNames</span><span class="p">;</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">getNextToken</span><span class="p">()</span> <span class="o">==</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="n">ArgNames</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">IdentifierStr</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected ')' in prototype"</span><span class="p">);</span>
+
+  <span class="c1">// success.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ')'.</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="n">FnName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ArgNames</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// definition ::= 'def' prototype expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat def.</span>
+  <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">Proto</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// toplevelexpr ::= expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseTopLevelExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Make an anonymous proto.</span>
+    <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="s">"__anon_expr"</span><span class="p">,</span>
+                                                 <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="p">}</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// external ::= 'extern' prototype</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParseExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat extern.</span>
+  <span class="k">return</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Top-Level parsing</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">ParseDefinition</span><span class="p">())</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Parsed a function definition.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">ParseExtern</span><span class="p">())</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Parsed an extern</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleTopLevelExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Evaluate a top-level expression into an anonymous function.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">ParseTopLevelExpr</span><span class="p">())</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Parsed a top-level expr</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// top ::= definition | external | expression | ';'</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">MainLoop</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+    <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">case</span> <span class="nl">tok_eof:</span>
+      <span class="k">return</span><span class="p">;</span>
+    <span class="k">case</span> <span class="sc">';'</span><span class="o">:</span> <span class="c1">// ignore top-level semicolons.</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_def:</span>
+      <span class="n">HandleDefinition</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_extern:</span>
+      <span class="n">HandleExtern</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">default</span><span class="o">:</span>
+      <span class="n">HandleTopLevelExpression</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Main driver code.</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Install standard binary operators.</span>
+  <span class="c1">// 1 is lowest precedence.</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'<'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'+'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'-'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'*'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">40</span><span class="p">;</span> <span class="c1">// highest.</span>
+
+  <span class="c1">// Prime the first token.</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="c1">// Run the main "interpreter loop" now.</span>
+  <span class="n">MainLoop</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="LangImpl03.html">Next: Implementing Code Generation to LLVM IR</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="LangImpl03.html" title="3. Kaleidoscope: Code generation to LLVM IR"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl01.html" title="1. Kaleidoscope: Tutorial Introduction and the Lexer"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/LangImpl03.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/LangImpl03.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/LangImpl03.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/LangImpl03.html Thu May 10 06:54:16 2018
@@ -0,0 +1,1209 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>3. Kaleidoscope: Code generation to LLVM IR — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="4. Kaleidoscope: Adding JIT and Optimizer Support" href="LangImpl04.html" />
+    <link rel="prev" title="2. Kaleidoscope: Implementing a Parser and AST" href="LangImpl02.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="LangImpl04.html" title="4. Kaleidoscope: Adding JIT and Optimizer Support"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl02.html" title="2. Kaleidoscope: Implementing a Parser and AST"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="kaleidoscope-code-generation-to-llvm-ir">
+<h1>3. Kaleidoscope: Code generation to LLVM IR<a class="headerlink" href="#kaleidoscope-code-generation-to-llvm-ir" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-3-introduction" id="id1">Chapter 3 Introduction</a></li>
+<li><a class="reference internal" href="#code-generation-setup" id="id2">Code Generation Setup</a></li>
+<li><a class="reference internal" href="#expression-code-generation" id="id3">Expression Code Generation</a></li>
+<li><a class="reference internal" href="#function-code-generation" id="id4">Function Code Generation</a></li>
+<li><a class="reference internal" href="#driver-changes-and-closing-thoughts" id="id5">Driver Changes and Closing Thoughts</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id6">Full Code Listing</a></li>
+</ul>
+</div>
+<div class="section" id="chapter-3-introduction">
+<h2><a class="toc-backref" href="#id1">3.1. Chapter 3 Introduction</a><a class="headerlink" href="#chapter-3-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 3 of the “<a class="reference external" href="index.html">Implementing a language with
+LLVM</a>” tutorial. This chapter shows you how to transform
+the <a class="reference external" href="LangImpl02.html">Abstract Syntax Tree</a>, built in Chapter 2, into
+LLVM IR. This will teach you a little bit about how LLVM does things, as
+well as demonstrate how easy it is to use. It’s much more work to build
+a lexer and parser than it is to generate LLVM IR code. :)</p>
+<p><strong>Please note</strong>: the code in this chapter and later require LLVM 3.7 or
+later. LLVM 3.6 and before will not work with it. Also note that you
+need to use a version of this tutorial that matches your LLVM release:
+If you are using an official LLVM release, use the version of the
+documentation included with your release or on the <a class="reference external" href="http://llvm.org/releases/">llvm.org releases
+page</a>.</p>
+</div>
+<div class="section" id="code-generation-setup">
+<h2><a class="toc-backref" href="#id2">3.2. Code Generation Setup</a><a class="headerlink" href="#code-generation-setup" title="Permalink to this headline">¶</a></h2>
+<p>In order to generate LLVM IR, we want some simple setup to get started.
+First we define virtual code generation (codegen) methods in each AST
+class:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">/// ExprAST - Base class for all expression nodes.</span>
+<span class="k">class</span> <span class="nc">ExprAST</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">virtual</span> <span class="o">~</span><span class="n">ExprAST</span><span class="p">()</span> <span class="p">{}</span>
+  <span class="k">virtual</span> <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// NumberExprAST - Expression class for numeric literals like "1.0".</span>
+<span class="k">class</span> <span class="nc">NumberExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">double</span> <span class="n">Val</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">NumberExprAST</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="o">:</span> <span class="n">Val</span><span class="p">(</span><span class="n">Val</span><span class="p">)</span> <span class="p">{}</span>
+  <span class="k">virtual</span> <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+<span class="p">};</span>
+<span class="p">...</span>
+</pre></div>
+</div>
+<p>The codegen() method says to emit IR for that AST node along with all
+the things it depends on, and they all return an LLVM Value object.
+“Value” is the class used to represent a “<a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form">Static Single Assignment
+(SSA)</a>
+register” or “SSA value” in LLVM. The most distinct aspect of SSA values
+is that their value is computed as the related instruction executes, and
+it does not get a new value until (and if) the instruction re-executes.
+In other words, there is no way to “change” an SSA value. For more
+information, please read up on <a class="reference external" href="http://en.wikipedia.org/wiki/Static_single_assignment_form">Static Single
+Assignment</a>
+- the concepts are really quite natural once you grok them.</p>
+<p>Note that instead of adding virtual methods to the ExprAST class
+hierarchy, it could also make sense to use a <a class="reference external" href="http://en.wikipedia.org/wiki/Visitor_pattern">visitor
+pattern</a> or some other
+way to model this. Again, this tutorial won’t dwell on good software
+engineering practices: for our purposes, adding a virtual method is
+simplest.</p>
+<p>The second thing we want is an “LogError” method like we used for the
+parser, which will be used to report errors found during code generation
+(for example, use of an undeclared parameter):</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">LLVMContext</span> <span class="n">TheContext</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">IRBuilder</span><span class="o"><></span> <span class="n">Builder</span><span class="p">(</span><span class="n">TheContext</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">TheModule</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">Value</span> <span class="o">*></span> <span class="n">NamedValues</span><span class="p">;</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">LogErrorV</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The static variables will be used during code generation. <tt class="docutils literal"><span class="pre">TheContext</span></tt>
+is an opaque object that owns a lot of core LLVM data structures, such as
+the type and constant value tables. We don’t need to understand it in
+detail, we just need a single instance to pass into APIs that require it.</p>
+<p>The <tt class="docutils literal"><span class="pre">Builder</span></tt> object is a helper object that makes it easy to generate
+LLVM instructions. Instances of the
+<a class="reference external" href="http://llvm.org/doxygen/IRBuilder_8h-source.html">IRBuilder</a>
+class template keep track of the current place to insert instructions
+and has methods to create new instructions.</p>
+<p><tt class="docutils literal"><span class="pre">TheModule</span></tt> is an LLVM construct that contains functions and global
+variables. In many ways, it is the top-level structure that the LLVM IR
+uses to contain code. It will own the memory for all of the IR that we
+generate, which is why the codegen() method returns a raw Value*,
+rather than a unique_ptr<Value>.</p>
+<p>The <tt class="docutils literal"><span class="pre">NamedValues</span></tt> map keeps track of which values are defined in the
+current scope and what their LLVM representation is. (In other words, it
+is a symbol table for the code). In this form of Kaleidoscope, the only
+things that can be referenced are function parameters. As such, function
+parameters will be in this map when generating code for their function
+body.</p>
+<p>With these basics in place, we can start talking about how to generate
+code for each expression. Note that this assumes that the <tt class="docutils literal"><span class="pre">Builder</span></tt>
+has been set up to generate code <em>into</em> something. For now, we’ll assume
+that this has already been done, and we’ll just use it to emit code.</p>
+</div>
+<div class="section" id="expression-code-generation">
+<h2><a class="toc-backref" href="#id3">3.3. Expression Code Generation</a><a class="headerlink" href="#expression-code-generation" title="Permalink to this headline">¶</a></h2>
+<p>Generating LLVM code for expression nodes is very straightforward: less
+than 45 lines of commented code for all four of our expression nodes.
+First we’ll do numeric literals:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Value</span> <span class="o">*</span><span class="n">NumberExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">ConstantFP</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="n">APFloat</span><span class="p">(</span><span class="n">Val</span><span class="p">));</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>In the LLVM IR, numeric constants are represented with the
+<tt class="docutils literal"><span class="pre">ConstantFP</span></tt> class, which holds the numeric value in an <tt class="docutils literal"><span class="pre">APFloat</span></tt>
+internally (<tt class="docutils literal"><span class="pre">APFloat</span></tt> has the capability of holding floating point
+constants of Arbitrary Precision). This code basically just creates
+and returns a <tt class="docutils literal"><span class="pre">ConstantFP</span></tt>. Note that in the LLVM IR that constants
+are all uniqued together and shared. For this reason, the API uses the
+“foo::get(...)” idiom instead of “new foo(..)” or “foo::Create(..)”.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Value</span> <span class="o">*</span><span class="n">VariableExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look this variable up in the function.</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">V</span> <span class="o">=</span> <span class="n">NamedValues</span><span class="p">[</span><span class="n">Name</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown variable name"</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>References to variables are also quite simple using LLVM. In the simple
+version of Kaleidoscope, we assume that the variable has already been
+emitted somewhere and its value is available. In practice, the only
+values that can be in the <tt class="docutils literal"><span class="pre">NamedValues</span></tt> map are function arguments.
+This code simply checks to see that the specified name is in the map (if
+not, an unknown variable is being referenced) and returns the value for
+it. In future chapters, we’ll add support for <a class="reference external" href="LangImpl5.html#for-loop-expression">loop induction
+variables</a> in the symbol table, and for <a class="reference external" href="LangImpl7.html#user-defined-local-variables">local
+variables</a>.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Value</span> <span class="o">*</span><span class="n">BinaryExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">L</span> <span class="o">=</span> <span class="n">LHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">R</span> <span class="o">=</span> <span class="n">RHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">L</span> <span class="o">||</span> <span class="o">!</span><span class="n">R</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">switch</span> <span class="p">(</span><span class="n">Op</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">case</span> <span class="sc">'+'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFAdd</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"addtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'-'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFSub</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"subtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'*'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFMul</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"multmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'<'</span><span class="o">:</span>
+    <span class="n">L</span> <span class="o">=</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFCmpULT</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"cmptmp"</span><span class="p">);</span>
+    <span class="c1">// Convert bool 0/1 to double 0.0 or 1.0</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateUIToFP</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span>
+                                <span class="s">"booltmp"</span><span class="p">);</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"invalid binary operator"</span><span class="p">);</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Binary operators start to get more interesting. The basic idea here is
+that we recursively emit code for the left-hand side of the expression,
+then the right-hand side, then we compute the result of the binary
+expression. In this code, we do a simple switch on the opcode to create
+the right LLVM instruction.</p>
+<p>In the example above, the LLVM builder class is starting to show its
+value. IRBuilder knows where to insert the newly created instruction,
+all you have to do is specify what instruction to create (e.g. with
+<tt class="docutils literal"><span class="pre">CreateFAdd</span></tt>), which operands to use (<tt class="docutils literal"><span class="pre">L</span></tt> and <tt class="docutils literal"><span class="pre">R</span></tt> here) and
+optionally provide a name for the generated instruction.</p>
+<p>One nice thing about LLVM is that the name is just a hint. For instance,
+if the code above emits multiple “addtmp” variables, LLVM will
+automatically provide each one with an increasing, unique numeric
+suffix. Local value names for instructions are purely optional, but it
+makes it much easier to read the IR dumps.</p>
+<p><a class="reference external" href="../LangRef.html#instruction-reference">LLVM instructions</a> are constrained by strict
+rules: for example, the Left and Right operators of an <a class="reference external" href="../LangRef.html#add-instruction">add
+instruction</a> must have the same type, and the
+result type of the add must match the operand types. Because all values
+in Kaleidoscope are doubles, this makes for very simple code for add,
+sub and mul.</p>
+<p>On the other hand, LLVM specifies that the <a class="reference external" href="../LangRef.html#fcmp-instruction">fcmp
+instruction</a> always returns an ‘i1’ value (a
+one bit integer). The problem with this is that Kaleidoscope wants the
+value to be a 0.0 or 1.0 value. In order to get these semantics, we
+combine the fcmp instruction with a <a class="reference external" href="../LangRef.html#uitofp-to-instruction">uitofp
+instruction</a>. This instruction converts its
+input integer into a floating point value by treating the input as an
+unsigned value. In contrast, if we used the <a class="reference external" href="../LangRef.html#sitofp-to-instruction">sitofp
+instruction</a>, the Kaleidoscope ‘<’ operator
+would return 0.0 and -1.0, depending on the input value.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Value</span> <span class="o">*</span><span class="n">CallExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look up the name in the global module table.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">CalleeF</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Callee</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">CalleeF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown function referenced"</span><span class="p">);</span>
+
+  <span class="c1">// If argument mismatch error.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CalleeF</span><span class="o">-></span><span class="n">arg_size</span><span class="p">()</span> <span class="o">!=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Incorrect # arguments passed"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Value</span> <span class="o">*></span> <span class="n">ArgsV</span><span class="p">;</span>
+  <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">e</span> <span class="o">=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">e</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">ArgsV</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-></span><span class="n">codegen</span><span class="p">());</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">ArgsV</span><span class="p">.</span><span class="n">back</span><span class="p">())</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateCall</span><span class="p">(</span><span class="n">CalleeF</span><span class="p">,</span> <span class="n">ArgsV</span><span class="p">,</span> <span class="s">"calltmp"</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Code generation for function calls is quite straightforward with LLVM. The code
+above initially does a function name lookup in the LLVM Module’s symbol table.
+Recall that the LLVM Module is the container that holds the functions we are
+JIT’ing. By giving each function the same name as what the user specifies, we
+can use the LLVM symbol table to resolve function names for us.</p>
+<p>Once we have the function to call, we recursively codegen each argument
+that is to be passed in, and create an LLVM <a class="reference external" href="../LangRef.html#call-instruction">call
+instruction</a>. Note that LLVM uses the native C
+calling conventions by default, allowing these calls to also call into
+standard library functions like “sin” and “cos”, with no additional
+effort.</p>
+<p>This wraps up our handling of the four basic expressions that we have so
+far in Kaleidoscope. Feel free to go in and add some more. For example,
+by browsing the <a class="reference external" href="../LangRef.html">LLVM language reference</a> you’ll find
+several other interesting instructions that are really easy to plug into
+our basic framework.</p>
+</div>
+<div class="section" id="function-code-generation">
+<h2><a class="toc-backref" href="#id4">3.4. Function Code Generation</a><a class="headerlink" href="#function-code-generation" title="Permalink to this headline">¶</a></h2>
+<p>Code generation for prototypes and functions must handle a number of
+details, which make their code less beautiful than expression code
+generation, but allows us to illustrate some important points. First,
+lets talk about code generation for prototypes: they are used both for
+function bodies and external function declarations. The code starts
+with:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Function</span> <span class="o">*</span><span class="n">PrototypeAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Make the function type:  double(double,double) etc.</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Type</span><span class="o">*></span> <span class="n">Doubles</span><span class="p">(</span><span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span>
+                             <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">));</span>
+  <span class="n">FunctionType</span> <span class="o">*</span><span class="n">FT</span> <span class="o">=</span>
+    <span class="n">FunctionType</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span> <span class="n">Doubles</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">F</span> <span class="o">=</span>
+    <span class="n">Function</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">FT</span><span class="p">,</span> <span class="n">Function</span><span class="o">::</span><span class="n">ExternalLinkage</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">TheModule</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>This code packs a lot of power into a few lines. Note first that this
+function returns a “Function*” instead of a “Value*”. Because a
+“prototype” really talks about the external interface for a function
+(not the value computed by an expression), it makes sense for it to
+return the LLVM Function it corresponds to when codegen’d.</p>
+<p>The call to <tt class="docutils literal"><span class="pre">FunctionType::get</span></tt> creates the <tt class="docutils literal"><span class="pre">FunctionType</span></tt> that
+should be used for a given Prototype. Since all function arguments in
+Kaleidoscope are of type double, the first line creates a vector of “N”
+LLVM double types. It then uses the <tt class="docutils literal"><span class="pre">Functiontype::get</span></tt> method to
+create a function type that takes “N” doubles as arguments, returns one
+double as a result, and that is not vararg (the false parameter
+indicates this). Note that Types in LLVM are uniqued just like Constants
+are, so you don’t “new” a type, you “get” it.</p>
+<p>The final line above actually creates the IR Function corresponding to
+the Prototype. This indicates the type, linkage and name to use, as
+well as which module to insert into. “<a class="reference external" href="../LangRef.html#linkage">external
+linkage</a>” means that the function may be
+defined outside the current module and/or that it is callable by
+functions outside the module. The Name passed in is the name the user
+specified: since “<tt class="docutils literal"><span class="pre">TheModule</span></tt>” is specified, this name is registered
+in “<tt class="docutils literal"><span class="pre">TheModule</span></tt>“s symbol table.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// Set names for all arguments.</span>
+<span class="kt">unsigned</span> <span class="n">Idx</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">F</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+  <span class="n">Arg</span><span class="p">.</span><span class="n">setName</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">Idx</span><span class="o">++</span><span class="p">]);</span>
+
+<span class="k">return</span> <span class="n">F</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>Finally, we set the name of each of the function’s arguments according to the
+names given in the Prototype. This step isn’t strictly necessary, but keeping
+the names consistent makes the IR more readable, and allows subsequent code to
+refer directly to the arguments for their names, rather than having to look up
+them up in the Prototype AST.</p>
+<p>At this point we have a function prototype with no body. This is how LLVM IR
+represents function declarations. For extern statements in Kaleidoscope, this
+is as far as we need to go. For function definitions however, we need to
+codegen and attach a function body.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">Function</span> <span class="o">*</span><span class="n">FunctionAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+    <span class="c1">// First, check for an existing function from a previous 'extern' declaration.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">TheFunction</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Proto</span><span class="o">-></span><span class="n">getName</span><span class="p">());</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="n">TheFunction</span> <span class="o">=</span> <span class="n">Proto</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="o">-></span><span class="n">empty</span><span class="p">())</span>
+    <span class="k">return</span> <span class="p">(</span><span class="n">Function</span><span class="o">*</span><span class="p">)</span><span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Function cannot be redefined."</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>For function definitions, we start by searching TheModule’s symbol table for an
+existing version of this function, in case one has already been created using an
+‘extern’ statement. If Module::getFunction returns null then no previous version
+exists, so we’ll codegen one from the Prototype. In either case, we want to
+assert that the function is empty (i.e. has no body yet) before we start.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// Create a new basic block to start insertion into.</span>
+<span class="n">BasicBlock</span> <span class="o">*</span><span class="n">BB</span> <span class="o">=</span> <span class="n">BasicBlock</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="s">"entry"</span><span class="p">,</span> <span class="n">TheFunction</span><span class="p">);</span>
+<span class="n">Builder</span><span class="p">.</span><span class="n">SetInsertPoint</span><span class="p">(</span><span class="n">BB</span><span class="p">);</span>
+
+<span class="c1">// Record the function arguments in the NamedValues map.</span>
+<span class="n">NamedValues</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
+<span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">TheFunction</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+  <span class="n">NamedValues</span><span class="p">[</span><span class="n">Arg</span><span class="p">.</span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="o">&</span><span class="n">Arg</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>Now we get to the point where the <tt class="docutils literal"><span class="pre">Builder</span></tt> is set up. The first line
+creates a new <a class="reference external" href="http://en.wikipedia.org/wiki/Basic_block">basic block</a>
+(named “entry”), which is inserted into <tt class="docutils literal"><span class="pre">TheFunction</span></tt>. The second line
+then tells the builder that new instructions should be inserted into the
+end of the new basic block. Basic blocks in LLVM are an important part
+of functions that define the <a class="reference external" href="http://en.wikipedia.org/wiki/Control_flow_graph">Control Flow
+Graph</a>. Since we
+don’t have any control flow, our functions will only contain one block
+at this point. We’ll fix this in <a class="reference external" href="LangImpl05.html">Chapter 5</a> :).</p>
+<p>Next we add the function arguments to the NamedValues map (after first clearing
+it out) so that they’re accessible to <tt class="docutils literal"><span class="pre">VariableExprAST</span></tt> nodes.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">Value</span> <span class="o">*</span><span class="n">RetVal</span> <span class="o">=</span> <span class="n">Body</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+  <span class="c1">// Finish off the function.</span>
+  <span class="n">Builder</span><span class="p">.</span><span class="n">CreateRet</span><span class="p">(</span><span class="n">RetVal</span><span class="p">);</span>
+
+  <span class="c1">// Validate the generated code, checking for consistency.</span>
+  <span class="n">verifyFunction</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+  <span class="k">return</span> <span class="n">TheFunction</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Once the insertion point has been set up and the NamedValues map populated,
+we call the <tt class="docutils literal"><span class="pre">codegen()</span></tt> method for the root expression of the function. If no
+error happens, this emits code to compute the expression into the entry block
+and returns the value that was computed. Assuming no error, we then create an
+LLVM <a class="reference external" href="../LangRef.html#ret-instruction">ret instruction</a>, which completes the function.
+Once the function is built, we call <tt class="docutils literal"><span class="pre">verifyFunction</span></tt>, which is
+provided by LLVM. This function does a variety of consistency checks on
+the generated code, to determine if our compiler is doing everything
+right. Using this is important: it can catch a lot of bugs. Once the
+function is finished and validated, we return it.</p>
+<div class="highlight-c++"><div class="highlight"><pre>  <span class="c1">// Error reading body, remove function.</span>
+  <span class="n">TheFunction</span><span class="o">-></span><span class="n">eraseFromParent</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The only piece left here is handling of the error case. For simplicity,
+we handle this by merely deleting the function we produced with the
+<tt class="docutils literal"><span class="pre">eraseFromParent</span></tt> method. This allows the user to redefine a function
+that they incorrectly typed in before: if we didn’t delete it, it would
+live in the symbol table, with a body, preventing future redefinition.</p>
+<p>This code does have a bug, though: If the <tt class="docutils literal"><span class="pre">FunctionAST::codegen()</span></tt> method
+finds an existing IR Function, it does not validate its signature against the
+definition’s own prototype. This means that an earlier ‘extern’ declaration will
+take precedence over the function definition’s signature, which can cause
+codegen to fail, for instance if the function arguments are named differently.
+There are a number of ways to fix this bug, see what you can come up with! Here
+is a testcase:</p>
+<div class="highlight-python"><pre>extern foo(a);     # ok, defines foo.
+def foo(b) b;      # Error: Unknown variable name. (decl using 'a' takes precedence).</pre>
+</div>
+</div>
+<div class="section" id="driver-changes-and-closing-thoughts">
+<h2><a class="toc-backref" href="#id5">3.5. Driver Changes and Closing Thoughts</a><a class="headerlink" href="#driver-changes-and-closing-thoughts" title="Permalink to this headline">¶</a></h2>
+<p>For now, code generation to LLVM doesn’t really get us much, except that
+we can look at the pretty IR calls. The sample code inserts calls to
+codegen into the “<tt class="docutils literal"><span class="pre">HandleDefinition</span></tt>”, “<tt class="docutils literal"><span class="pre">HandleExtern</span></tt>” etc
+functions, and then dumps out the LLVM IR. This gives a nice way to look
+at the LLVM IR for simple functions. For example:</p>
+<div class="highlight-python"><pre>ready> 4+5;
+Read top-level expression:
+define double @0() {
+entry:
+  ret double 9.000000e+00
+}</pre>
+</div>
+<p>Note how the parser turns the top-level expression into anonymous
+functions for us. This will be handy when we add <a class="reference external" href="LangImpl4.html#adding-a-jit-compiler">JIT
+support</a> in the next chapter. Also note that the
+code is very literally transcribed, no optimizations are being performed
+except simple constant folding done by IRBuilder. We will <a class="reference external" href="LangImpl4.html#trivial-constant-folding">add
+optimizations</a> explicitly in the next
+chapter.</p>
+<div class="highlight-python"><pre>ready> def foo(a b) a*a + 2*a*b + b*b;
+Read function definition:
+define double @foo(double %a, double %b) {
+entry:
+  %multmp = fmul double %a, %a
+  %multmp1 = fmul double 2.000000e+00, %a
+  %multmp2 = fmul double %multmp1, %b
+  %addtmp = fadd double %multmp, %multmp2
+  %multmp3 = fmul double %b, %b
+  %addtmp4 = fadd double %addtmp, %multmp3
+  ret double %addtmp4
+}</pre>
+</div>
+<p>This shows some simple arithmetic. Notice the striking similarity to the
+LLVM builder calls that we use to create the instructions.</p>
+<div class="highlight-python"><pre>ready> def bar(a) foo(a, 4.0) + bar(31337);
+Read function definition:
+define double @bar(double %a) {
+entry:
+  %calltmp = call double @foo(double %a, double 4.000000e+00)
+  %calltmp1 = call double @bar(double 3.133700e+04)
+  %addtmp = fadd double %calltmp, %calltmp1
+  ret double %addtmp
+}</pre>
+</div>
+<p>This shows some function calls. Note that this function will take a long
+time to execute if you call it. In the future we’ll add conditional
+control flow to actually make recursion useful :).</p>
+<div class="highlight-python"><pre>ready> extern cos(x);
+Read extern:
+declare double @cos(double)
+
+ready> cos(1.234);
+Read top-level expression:
+define double @1() {
+entry:
+  %calltmp = call double @cos(double 1.234000e+00)
+  ret double %calltmp
+}</pre>
+</div>
+<p>This shows an extern for the libm “cos” function, and a call to it.</p>
+<div class="highlight-python"><pre>ready> ^D
+; ModuleID = 'my cool jit'
+
+define double @0() {
+entry:
+  %addtmp = fadd double 4.000000e+00, 5.000000e+00
+  ret double %addtmp
+}
+
+define double @foo(double %a, double %b) {
+entry:
+  %multmp = fmul double %a, %a
+  %multmp1 = fmul double 2.000000e+00, %a
+  %multmp2 = fmul double %multmp1, %b
+  %addtmp = fadd double %multmp, %multmp2
+  %multmp3 = fmul double %b, %b
+  %addtmp4 = fadd double %addtmp, %multmp3
+  ret double %addtmp4
+}
+
+define double @bar(double %a) {
+entry:
+  %calltmp = call double @foo(double %a, double 4.000000e+00)
+  %calltmp1 = call double @bar(double 3.133700e+04)
+  %addtmp = fadd double %calltmp, %calltmp1
+  ret double %addtmp
+}
+
+declare double @cos(double)
+
+define double @1() {
+entry:
+  %calltmp = call double @cos(double 1.234000e+00)
+  ret double %calltmp
+}</pre>
+</div>
+<p>When you quit the current demo (by sending an EOF via CTRL+D on Linux
+or CTRL+Z and ENTER on Windows), it dumps out the IR for the entire
+module generated. Here you can see the big picture with all the
+functions referencing each other.</p>
+<p>This wraps up the third chapter of the Kaleidoscope tutorial. Up next,
+we’ll describe how to <a class="reference external" href="LangImpl04.html">add JIT codegen and optimizer
+support</a> to this so we can actually start running
+code!</p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id6">3.6. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example, enhanced with
+the LLVM code generator. Because this uses the LLVM libraries, we need
+to link them in. To do this, we use the
+<a class="reference external" href="http://llvm.org/cmds/llvm-config.html">llvm-config</a> tool to inform
+our makefile/command line about which options to use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g -O3 toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core<span class="sb">`</span> -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include "llvm/ADT/APFloat.h"</span>
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/IR/BasicBlock.h"</span>
+<span class="cp">#include "llvm/IR/Constants.h"</span>
+<span class="cp">#include "llvm/IR/DerivedTypes.h"</span>
+<span class="cp">#include "llvm/IR/Function.h"</span>
+<span class="cp">#include "llvm/IR/IRBuilder.h"</span>
+<span class="cp">#include "llvm/IR/LLVMContext.h"</span>
+<span class="cp">#include "llvm/IR/Module.h"</span>
+<span class="cp">#include "llvm/IR/Type.h"</span>
+<span class="cp">#include "llvm/IR/Verifier.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <cctype></span>
+<span class="cp">#include <cstdio></span>
+<span class="cp">#include <cstdlib></span>
+<span class="cp">#include <map></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">using</span> <span class="k">namespace</span> <span class="n">llvm</span><span class="p">;</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Lexer</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">// The lexer returns tokens [0-255] if it is an unknown character, otherwise one</span>
+<span class="c1">// of these for known things.</span>
+<span class="k">enum</span> <span class="n">Token</span> <span class="p">{</span>
+  <span class="n">tok_eof</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+
+  <span class="c1">// commands</span>
+  <span class="n">tok_def</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span>
+  <span class="n">tok_extern</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span>
+
+  <span class="c1">// primary</span>
+  <span class="n">tok_identifier</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span><span class="p">,</span>
+  <span class="n">tok_number</span> <span class="o">=</span> <span class="o">-</span><span class="mi">5</span>
+<span class="p">};</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdentifierStr</span><span class="p">;</span> <span class="c1">// Filled in if tok_identifier</span>
+<span class="k">static</span> <span class="kt">double</span> <span class="n">NumVal</span><span class="p">;</span>             <span class="c1">// Filled in if tok_number</span>
+
+<span class="c1">/// gettok - Return the next token from standard input.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">gettok</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">static</span> <span class="kt">int</span> <span class="n">LastChar</span> <span class="o">=</span> <span class="sc">' '</span><span class="p">;</span>
+
+  <span class="c1">// Skip any whitespace.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">isspace</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isalpha</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span> <span class="p">{</span> <span class="c1">// identifier: [a-zA-Z][a-zA-Z0-9]*</span>
+    <span class="n">IdentifierStr</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">isalnum</span><span class="p">((</span><span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">())))</span>
+      <span class="n">IdentifierStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"def"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_def</span><span class="p">;</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"extern"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_extern</span><span class="p">;</span>
+    <span class="k">return</span> <span class="n">tok_identifier</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Number: [0-9.]+</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">NumStr</span><span class="p">;</span>
+    <span class="k">do</span> <span class="p">{</span>
+      <span class="n">NumStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">);</span>
+
+    <span class="n">NumVal</span> <span class="o">=</span> <span class="n">strtod</span><span class="p">(</span><span class="n">NumStr</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">nullptr</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">tok_number</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'#'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Comment until end of line.</span>
+    <span class="k">do</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\n'</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\r'</span><span class="p">);</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">gettok</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Check for end of file.  Don't eat the EOF.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="n">EOF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_eof</span><span class="p">;</span>
+
+  <span class="c1">// Otherwise, just return the character as its ascii value.</span>
+  <span class="kt">int</span> <span class="n">ThisChar</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+  <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">ThisChar</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Abstract Syntax Tree (aka Parse Tree)</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+<span class="c1">/// ExprAST - Base class for all expression nodes.</span>
+<span class="k">class</span> <span class="nc">ExprAST</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">virtual</span> <span class="o">~</span><span class="n">ExprAST</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
+
+  <span class="k">virtual</span> <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// NumberExprAST - Expression class for numeric literals like "1.0".</span>
+<span class="k">class</span> <span class="nc">NumberExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">double</span> <span class="n">Val</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">NumberExprAST</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="o">:</span> <span class="n">Val</span><span class="p">(</span><span class="n">Val</span><span class="p">)</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// VariableExprAST - Expression class for referencing a variable, like "a".</span>
+<span class="k">class</span> <span class="nc">VariableExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">VariableExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">)</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// BinaryExprAST - Expression class for a binary operator.</span>
+<span class="k">class</span> <span class="nc">BinaryExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">char</span> <span class="n">Op</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span> <span class="n">RHS</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">BinaryExprAST</span><span class="p">(</span><span class="kt">char</span> <span class="n">Op</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span>
+                <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">RHS</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Op</span><span class="p">(</span><span class="n">Op</span><span class="p">),</span> <span class="n">LHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">)),</span> <span class="n">RHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// CallExprAST - Expression class for function calls.</span>
+<span class="k">class</span> <span class="nc">CallExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Callee</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">CallExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Callee</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Callee</span><span class="p">(</span><span class="n">Callee</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// PrototypeAST - This class represents the "prototype" for a function,</span>
+<span class="c1">/// which captures its name, and its argument names (thus implicitly the number</span>
+<span class="c1">/// of arguments the function takes).</span>
+<span class="k">class</span> <span class="nc">PrototypeAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">PrototypeAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">getName</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Name</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end anonymous namespace</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Parser</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">/// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current</span>
+<span class="c1">/// token the parser is looking at.  getNextToken reads another token from the</span>
+<span class="c1">/// lexer and updates CurTok with its results.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">CurTok</span><span class="p">;</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">getNextToken</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">CurTok</span> <span class="o">=</span> <span class="n">gettok</span><span class="p">();</span> <span class="p">}</span>
+
+<span class="c1">/// BinopPrecedence - This holds the precedence for each binary operator that is</span>
+<span class="c1">/// defined.</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="kt">char</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">BinopPrecedence</span><span class="p">;</span>
+
+<span class="c1">/// GetTokPrecedence - Get the precedence of the pending binary operator token.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">GetTokPrecedence</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">isascii</span><span class="p">(</span><span class="n">CurTok</span><span class="p">))</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+
+  <span class="c1">// Make sure it's a declared binop.</span>
+  <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">BinopPrecedence</span><span class="p">[</span><span class="n">CurTok</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">TokPrec</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// LogError* - These are little helper functions for error handling.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LogError</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Error: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">LogErrorP</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">();</span>
+
+<span class="c1">/// numberexpr ::= number</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseNumberExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">NumberExprAST</span><span class="o">></span><span class="p">(</span><span class="n">NumVal</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// consume the number</span>
+  <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Result</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">/// parenexpr ::= '(' expression ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseParenExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (.</span>
+  <span class="k">auto</span> <span class="n">V</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"expected ')'"</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ).</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// identifierexpr</span>
+<span class="c1">///   ::= identifier</span>
+<span class="c1">///   ::= identifier '(' expression* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseIdentifierExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat identifier.</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span> <span class="c1">// Simple variable ref.</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">);</span>
+
+  <span class="c1">// Call.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Arg</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+        <span class="n">Args</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Arg</span><span class="p">));</span>
+      <span class="k">else</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">==</span> <span class="sc">')'</span><span class="p">)</span>
+        <span class="k">break</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">','</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"Expected ')' or ',' in argument list"</span><span class="p">);</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Eat the ')'.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">CallExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// primary</span>
+<span class="c1">///   ::= identifierexpr</span>
+<span class="c1">///   ::= numberexpr</span>
+<span class="c1">///   ::= parenexpr</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParsePrimary</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"unknown token when expecting an expression"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="nl">tok_identifier:</span>
+    <span class="k">return</span> <span class="n">ParseIdentifierExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="nl">tok_number:</span>
+    <span class="k">return</span> <span class="n">ParseNumberExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="sc">'('</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">ParseParenExpr</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// binoprhs</span>
+<span class="c1">///   ::= ('+' primary)*</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="kt">int</span> <span class="n">ExprPrec</span><span class="p">,</span>
+                                              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// If this is a binop, find its precedence.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+
+    <span class="c1">// If this is a binop that binds at least as tightly as the current binop,</span>
+    <span class="c1">// consume it, otherwise we are done.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">ExprPrec</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">LHS</span><span class="p">;</span>
+
+    <span class="c1">// Okay, we know this is a binop.</span>
+    <span class="kt">int</span> <span class="n">BinOp</span> <span class="o">=</span> <span class="n">CurTok</span><span class="p">;</span>
+    <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat binop</span>
+
+    <span class="c1">// Parse the primary expression after the binary operator.</span>
+    <span class="k">auto</span> <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+    <span class="c1">// If BinOp binds less tightly with RHS than the operator after RHS, let</span>
+    <span class="c1">// the pending operator take RHS as its LHS.</span>
+    <span class="kt">int</span> <span class="n">NextPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">NextPrec</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="n">TokPrec</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+      <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+    <span class="p">}</span>
+
+    <span class="c1">// Merge LHS/RHS.</span>
+    <span class="n">LHS</span> <span class="o">=</span>
+        <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="n">BinOp</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// expression</span>
+<span class="c1">///   ::= primary binoprhs</span>
+<span class="c1">///</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">LHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">LHS</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">return</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// prototype</span>
+<span class="c1">///   ::= id '(' id* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParsePrototype</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected function name in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">FnName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected '(' in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">ArgNames</span><span class="p">;</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">getNextToken</span><span class="p">()</span> <span class="o">==</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="n">ArgNames</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">IdentifierStr</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected ')' in prototype"</span><span class="p">);</span>
+
+  <span class="c1">// success.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ')'.</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="n">FnName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ArgNames</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// definition ::= 'def' prototype expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat def.</span>
+  <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">Proto</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// toplevelexpr ::= expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseTopLevelExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Make an anonymous proto.</span>
+    <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="s">"__anon_expr"</span><span class="p">,</span>
+                                                 <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="p">}</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// external ::= 'extern' prototype</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParseExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat extern.</span>
+  <span class="k">return</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Code Generation</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">static</span> <span class="n">LLVMContext</span> <span class="n">TheContext</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">IRBuilder</span><span class="o"><></span> <span class="n">Builder</span><span class="p">(</span><span class="n">TheContext</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">TheModule</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">Value</span> <span class="o">*></span> <span class="n">NamedValues</span><span class="p">;</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">LogErrorV</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">NumberExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">ConstantFP</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="n">APFloat</span><span class="p">(</span><span class="n">Val</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">VariableExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look this variable up in the function.</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">V</span> <span class="o">=</span> <span class="n">NamedValues</span><span class="p">[</span><span class="n">Name</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown variable name"</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">BinaryExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">L</span> <span class="o">=</span> <span class="n">LHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">R</span> <span class="o">=</span> <span class="n">RHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">L</span> <span class="o">||</span> <span class="o">!</span><span class="n">R</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">switch</span> <span class="p">(</span><span class="n">Op</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">case</span> <span class="sc">'+'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFAdd</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"addtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'-'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFSub</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"subtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'*'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFMul</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"multmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'<'</span><span class="o">:</span>
+    <span class="n">L</span> <span class="o">=</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFCmpULT</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"cmptmp"</span><span class="p">);</span>
+    <span class="c1">// Convert bool 0/1 to double 0.0 or 1.0</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateUIToFP</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span> <span class="s">"booltmp"</span><span class="p">);</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"invalid binary operator"</span><span class="p">);</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">CallExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look up the name in the global module table.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">CalleeF</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Callee</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">CalleeF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown function referenced"</span><span class="p">);</span>
+
+  <span class="c1">// If argument mismatch error.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CalleeF</span><span class="o">-></span><span class="n">arg_size</span><span class="p">()</span> <span class="o">!=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Incorrect # arguments passed"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Value</span> <span class="o">*></span> <span class="n">ArgsV</span><span class="p">;</span>
+  <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">e</span> <span class="o">=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">e</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">ArgsV</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-></span><span class="n">codegen</span><span class="p">());</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">ArgsV</span><span class="p">.</span><span class="n">back</span><span class="p">())</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateCall</span><span class="p">(</span><span class="n">CalleeF</span><span class="p">,</span> <span class="n">ArgsV</span><span class="p">,</span> <span class="s">"calltmp"</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">PrototypeAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Make the function type:  double(double,double) etc.</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Type</span> <span class="o">*></span> <span class="n">Doubles</span><span class="p">(</span><span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">));</span>
+  <span class="n">FunctionType</span> <span class="o">*</span><span class="n">FT</span> <span class="o">=</span>
+      <span class="n">FunctionType</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span> <span class="n">Doubles</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">F</span> <span class="o">=</span>
+      <span class="n">Function</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">FT</span><span class="p">,</span> <span class="n">Function</span><span class="o">::</span><span class="n">ExternalLinkage</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">TheModule</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+  <span class="c1">// Set names for all arguments.</span>
+  <span class="kt">unsigned</span> <span class="n">Idx</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+  <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">F</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+    <span class="n">Arg</span><span class="p">.</span><span class="n">setName</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">Idx</span><span class="o">++</span><span class="p">]);</span>
+
+  <span class="k">return</span> <span class="n">F</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">FunctionAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// First, check for an existing function from a previous 'extern' declaration.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">TheFunction</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Proto</span><span class="o">-></span><span class="n">getName</span><span class="p">());</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="n">TheFunction</span> <span class="o">=</span> <span class="n">Proto</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="c1">// Create a new basic block to start insertion into.</span>
+  <span class="n">BasicBlock</span> <span class="o">*</span><span class="n">BB</span> <span class="o">=</span> <span class="n">BasicBlock</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="s">"entry"</span><span class="p">,</span> <span class="n">TheFunction</span><span class="p">);</span>
+  <span class="n">Builder</span><span class="p">.</span><span class="n">SetInsertPoint</span><span class="p">(</span><span class="n">BB</span><span class="p">);</span>
+
+  <span class="c1">// Record the function arguments in the NamedValues map.</span>
+  <span class="n">NamedValues</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
+  <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">TheFunction</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+    <span class="n">NamedValues</span><span class="p">[</span><span class="n">Arg</span><span class="p">.</span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="o">&</span><span class="n">Arg</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">Value</span> <span class="o">*</span><span class="n">RetVal</span> <span class="o">=</span> <span class="n">Body</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Finish off the function.</span>
+    <span class="n">Builder</span><span class="p">.</span><span class="n">CreateRet</span><span class="p">(</span><span class="n">RetVal</span><span class="p">);</span>
+
+    <span class="c1">// Validate the generated code, checking for consistency.</span>
+    <span class="n">verifyFunction</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">TheFunction</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Error reading body, remove function.</span>
+  <span class="n">TheFunction</span><span class="o">-></span><span class="n">eraseFromParent</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Top-Level parsing and JIT Driver</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseDefinition</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read function definition:"</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">ProtoAST</span> <span class="o">=</span> <span class="n">ParseExtern</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">ProtoAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read extern: "</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleTopLevelExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Evaluate a top-level expression into an anonymous function.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseTopLevelExpr</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read top-level expression:"</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// top ::= definition | external | expression | ';'</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">MainLoop</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+    <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">case</span> <span class="nl">tok_eof:</span>
+      <span class="k">return</span><span class="p">;</span>
+    <span class="k">case</span> <span class="sc">';'</span><span class="o">:</span> <span class="c1">// ignore top-level semicolons.</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_def:</span>
+      <span class="n">HandleDefinition</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_extern:</span>
+      <span class="n">HandleExtern</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">default</span><span class="o">:</span>
+      <span class="n">HandleTopLevelExpression</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Main driver code.</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Install standard binary operators.</span>
+  <span class="c1">// 1 is lowest precedence.</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'<'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'+'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'-'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'*'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">40</span><span class="p">;</span> <span class="c1">// highest.</span>
+
+  <span class="c1">// Prime the first token.</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="c1">// Make the module, which holds all the code.</span>
+  <span class="n">TheModule</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="s">"my cool jit"</span><span class="p">,</span> <span class="n">TheContext</span><span class="p">);</span>
+
+  <span class="c1">// Run the main "interpreter loop" now.</span>
+  <span class="n">MainLoop</span><span class="p">();</span>
+
+  <span class="c1">// Print out all of the generated code.</span>
+  <span class="n">TheModule</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">(),</span> <span class="n">nullptr</span><span class="p">);</span>
+
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="LangImpl04.html">Next: Adding JIT and Optimizer Support</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="LangImpl04.html" title="4. Kaleidoscope: Adding JIT and Optimizer Support"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl02.html" title="2. Kaleidoscope: Implementing a Parser and AST"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/5.0.2/docs/tutorial/LangImpl04.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/5.0.2/docs/tutorial/LangImpl04.html?rev=331981&view=auto
==============================================================================
--- www-releases/trunk/5.0.2/docs/tutorial/LangImpl04.html (added)
+++ www-releases/trunk/5.0.2/docs/tutorial/LangImpl04.html Thu May 10 06:54:16 2018
@@ -0,0 +1,1371 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>4. Kaleidoscope: Adding JIT and Optimizer Support — LLVM 5 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/llvm-theme.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '5',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="LLVM 5 documentation" href="../index.html" />
+    <link rel="up" title="LLVM Tutorial: Table of Contents" href="index.html" />
+    <link rel="next" title="5. Kaleidoscope: Extending the Language: Control Flow" href="LangImpl05.html" />
+    <link rel="prev" title="3. Kaleidoscope: Code generation to LLVM IR" href="LangImpl03.html" />
+<style type="text/css">
+  table.right { float: right; margin-left: 20px; }
+  table.right td { border: 1px solid #ccc; }
+</style>
+
+  </head>
+  <body>
+<div class="logo">
+  <a href="../index.html">
+    <img src="../_static/logo.png"
+         alt="LLVM Logo" width="250" height="88"/></a>
+</div>
+
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="LangImpl05.html" title="5. Kaleidoscope: Extending the Language: Control Flow"
+             accesskey="N">next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl03.html" title="3. Kaleidoscope: Code generation to LLVM IR"
+             accesskey="P">previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+
+
+    <div class="document">
+      <div class="documentwrapper">
+          <div class="body">
+            
+  <div class="section" id="kaleidoscope-adding-jit-and-optimizer-support">
+<h1>4. Kaleidoscope: Adding JIT and Optimizer Support<a class="headerlink" href="#kaleidoscope-adding-jit-and-optimizer-support" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#chapter-4-introduction" id="id1">Chapter 4 Introduction</a></li>
+<li><a class="reference internal" href="#trivial-constant-folding" id="id2">Trivial Constant Folding</a></li>
+<li><a class="reference internal" href="#llvm-optimization-passes" id="id3">LLVM Optimization Passes</a></li>
+<li><a class="reference internal" href="#adding-a-jit-compiler" id="id4">Adding a JIT Compiler</a></li>
+<li><a class="reference internal" href="#full-code-listing" id="id5">Full Code Listing</a></li>
+</ul>
+</div>
+<div class="section" id="chapter-4-introduction">
+<h2><a class="toc-backref" href="#id1">4.1. Chapter 4 Introduction</a><a class="headerlink" href="#chapter-4-introduction" title="Permalink to this headline">¶</a></h2>
+<p>Welcome to Chapter 4 of the “<a class="reference external" href="index.html">Implementing a language with
+LLVM</a>” tutorial. Chapters 1-3 described the implementation
+of a simple language and added support for generating LLVM IR. This
+chapter describes two new techniques: adding optimizer support to your
+language, and adding JIT compiler support. These additions will
+demonstrate how to get nice, efficient code for the Kaleidoscope
+language.</p>
+</div>
+<div class="section" id="trivial-constant-folding">
+<h2><a class="toc-backref" href="#id2">4.2. Trivial Constant Folding</a><a class="headerlink" href="#trivial-constant-folding" title="Permalink to this headline">¶</a></h2>
+<p>Our demonstration for Chapter 3 is elegant and easy to extend.
+Unfortunately, it does not produce wonderful code. The IRBuilder,
+however, does give us obvious optimizations when compiling simple code:</p>
+<div class="highlight-python"><pre>ready> def test(x) 1+2+x;
+Read function definition:
+define double @test(double %x) {
+entry:
+        %addtmp = fadd double 3.000000e+00, %x
+        ret double %addtmp
+}</pre>
+</div>
+<p>This code is not a literal transcription of the AST built by parsing the
+input. That would be:</p>
+<div class="highlight-python"><pre>ready> def test(x) 1+2+x;
+Read function definition:
+define double @test(double %x) {
+entry:
+        %addtmp = fadd double 2.000000e+00, 1.000000e+00
+        %addtmp1 = fadd double %addtmp, %x
+        ret double %addtmp1
+}</pre>
+</div>
+<p>Constant folding, as seen above, in particular, is a very common and
+very important optimization: so much so that many language implementors
+implement constant folding support in their AST representation.</p>
+<p>With LLVM, you don’t need this support in the AST. Since all calls to
+build LLVM IR go through the LLVM IR builder, the builder itself checked
+to see if there was a constant folding opportunity when you call it. If
+so, it just does the constant fold and return the constant instead of
+creating an instruction.</p>
+<p>Well, that was easy :). In practice, we recommend always using
+<tt class="docutils literal"><span class="pre">IRBuilder</span></tt> when generating code like this. It has no “syntactic
+overhead” for its use (you don’t have to uglify your compiler with
+constant checks everywhere) and it can dramatically reduce the amount of
+LLVM IR that is generated in some cases (particular for languages with a
+macro preprocessor or that use a lot of constants).</p>
+<p>On the other hand, the <tt class="docutils literal"><span class="pre">IRBuilder</span></tt> is limited by the fact that it does
+all of its analysis inline with the code as it is built. If you take a
+slightly more complex example:</p>
+<div class="highlight-python"><pre>ready> def test(x) (1+2+x)*(x+(1+2));
+ready> Read function definition:
+define double @test(double %x) {
+entry:
+        %addtmp = fadd double 3.000000e+00, %x
+        %addtmp1 = fadd double %x, 3.000000e+00
+        %multmp = fmul double %addtmp, %addtmp1
+        ret double %multmp
+}</pre>
+</div>
+<p>In this case, the LHS and RHS of the multiplication are the same value.
+We’d really like to see this generate “<tt class="docutils literal"><span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">x+3;</span> <span class="pre">result</span> <span class="pre">=</span> <span class="pre">tmp*tmp;</span></tt>”
+instead of computing “<tt class="docutils literal"><span class="pre">x+3</span></tt>” twice.</p>
+<p>Unfortunately, no amount of local analysis will be able to detect and
+correct this. This requires two transformations: reassociation of
+expressions (to make the add’s lexically identical) and Common
+Subexpression Elimination (CSE) to delete the redundant add instruction.
+Fortunately, LLVM provides a broad range of optimizations that you can
+use, in the form of “passes”.</p>
+</div>
+<div class="section" id="llvm-optimization-passes">
+<h2><a class="toc-backref" href="#id3">4.3. LLVM Optimization Passes</a><a class="headerlink" href="#llvm-optimization-passes" title="Permalink to this headline">¶</a></h2>
+<p>LLVM provides many optimization passes, which do many different sorts of
+things and have different tradeoffs. Unlike other systems, LLVM doesn’t
+hold to the mistaken notion that one set of optimizations is right for
+all languages and for all situations. LLVM allows a compiler implementor
+to make complete decisions about what optimizations to use, in which
+order, and in what situation.</p>
+<p>As a concrete example, LLVM supports both “whole module” passes, which
+look across as large of body of code as they can (often a whole file,
+but if run at link time, this can be a substantial portion of the whole
+program). It also supports and includes “per-function” passes which just
+operate on a single function at a time, without looking at other
+functions. For more information on passes and how they are run, see the
+<a class="reference external" href="../WritingAnLLVMPass.html">How to Write a Pass</a> document and the
+<a class="reference external" href="../Passes.html">List of LLVM Passes</a>.</p>
+<p>For Kaleidoscope, we are currently generating functions on the fly, one
+at a time, as the user types them in. We aren’t shooting for the
+ultimate optimization experience in this setting, but we also want to
+catch the easy and quick stuff where possible. As such, we will choose
+to run a few per-function optimizations as the user types the function
+in. If we wanted to make a “static Kaleidoscope compiler”, we would use
+exactly the code we have now, except that we would defer running the
+optimizer until the entire file has been parsed.</p>
+<p>In order to get per-function optimizations going, we need to set up a
+<a class="reference external" href="../WritingAnLLVMPass.html#what-passmanager-doesr">FunctionPassManager</a> to hold
+and organize the LLVM optimizations that we want to run. Once we have
+that, we can add a set of optimizations to run. We’ll need a new
+FunctionPassManager for each module that we want to optimize, so we’ll
+write a function to create and initialize both the module and pass manager
+for us:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">void</span> <span class="n">InitializeModuleAndPassManager</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// Open a new module.</span>
+  <span class="n">TheModule</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="s">"my cool jit"</span><span class="p">,</span> <span class="n">TheContext</span><span class="p">);</span>
+
+  <span class="c1">// Create a new pass manager attached to it.</span>
+  <span class="n">TheFPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">TheModule</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+  <span class="c1">// Do simple "peephole" optimizations and bit-twiddling optzns.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+  <span class="c1">// Reassociate expressions.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+  <span class="c1">// Eliminate Common SubExpressions.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+  <span class="c1">// Simplify the control flow graph (deleting unreachable blocks, etc).</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>This code initializes the global module <tt class="docutils literal"><span class="pre">TheModule</span></tt>, and the function pass
+manager <tt class="docutils literal"><span class="pre">TheFPM</span></tt>, which is attached to <tt class="docutils literal"><span class="pre">TheModule</span></tt>. Once the pass manager is
+set up, we use a series of “add” calls to add a bunch of LLVM passes.</p>
+<p>In this case, we choose to add four optimization passes.
+The passes we choose here are a pretty standard set
+of “cleanup” optimizations that are useful for a wide variety of code. I won’t
+delve into what they do but, believe me, they are a good starting place :).</p>
+<p>Once the PassManager is set up, we need to make use of it. We do this by
+running it after our newly created function is constructed (in
+<tt class="docutils literal"><span class="pre">FunctionAST::codegen()</span></tt>), but before it is returned to the client:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">Value</span> <span class="o">*</span><span class="n">RetVal</span> <span class="o">=</span> <span class="n">Body</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+  <span class="c1">// Finish off the function.</span>
+  <span class="n">Builder</span><span class="p">.</span><span class="n">CreateRet</span><span class="p">(</span><span class="n">RetVal</span><span class="p">);</span>
+
+  <span class="c1">// Validate the generated code, checking for consistency.</span>
+  <span class="n">verifyFunction</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+  <span class="c1">// Optimize the function.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+  <span class="k">return</span> <span class="n">TheFunction</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>As you can see, this is pretty straightforward. The
+<tt class="docutils literal"><span class="pre">FunctionPassManager</span></tt> optimizes and updates the LLVM Function* in
+place, improving (hopefully) its body. With this in place, we can try
+our test above again:</p>
+<div class="highlight-python"><pre>ready> def test(x) (1+2+x)*(x+(1+2));
+ready> Read function definition:
+define double @test(double %x) {
+entry:
+        %addtmp = fadd double %x, 3.000000e+00
+        %multmp = fmul double %addtmp, %addtmp
+        ret double %multmp
+}</pre>
+</div>
+<p>As expected, we now get our nicely optimized code, saving a floating
+point add instruction from every execution of this function.</p>
+<p>LLVM provides a wide variety of optimizations that can be used in
+certain circumstances. Some <a class="reference external" href="../Passes.html">documentation about the various
+passes</a> is available, but it isn’t very complete.
+Another good source of ideas can come from looking at the passes that
+<tt class="docutils literal"><span class="pre">Clang</span></tt> runs to get started. The “<tt class="docutils literal"><span class="pre">opt</span></tt>” tool allows you to
+experiment with passes from the command line, so you can see if they do
+anything.</p>
+<p>Now that we have reasonable code coming out of our front-end, lets talk
+about executing it!</p>
+</div>
+<div class="section" id="adding-a-jit-compiler">
+<h2><a class="toc-backref" href="#id4">4.4. Adding a JIT Compiler</a><a class="headerlink" href="#adding-a-jit-compiler" title="Permalink to this headline">¶</a></h2>
+<p>Code that is available in LLVM IR can have a wide variety of tools
+applied to it. For example, you can run optimizations on it (as we did
+above), you can dump it out in textual or binary forms, you can compile
+the code to an assembly file (.s) for some target, or you can JIT
+compile it. The nice thing about the LLVM IR representation is that it
+is the “common currency” between many different parts of the compiler.</p>
+<p>In this section, we’ll add JIT compiler support to our interpreter. The
+basic idea that we want for Kaleidoscope is to have the user enter
+function bodies as they do now, but immediately evaluate the top-level
+expressions they type in. For example, if they type in “1 + 2;”, we
+should evaluate and print out 3. If they define a function, they should
+be able to call it from the command line.</p>
+<p>In order to do this, we first prepare the environment to create code for
+the current native target and declare and initialize the JIT. This is
+done by calling some <tt class="docutils literal"><span class="pre">InitializeNativeTarget\*</span></tt> functions and
+adding a global variable <tt class="docutils literal"><span class="pre">TheJIT</span></tt>, and initializing it in
+<tt class="docutils literal"><span class="pre">main</span></tt>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">KaleidoscopeJIT</span><span class="o">></span> <span class="n">TheJIT</span><span class="p">;</span>
+<span class="p">...</span>
+<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">InitializeNativeTarget</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmPrinter</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmParser</span><span class="p">();</span>
+
+  <span class="c1">// Install standard binary operators.</span>
+  <span class="c1">// 1 is lowest precedence.</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'<'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'+'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'-'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'*'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">40</span><span class="p">;</span> <span class="c1">// highest.</span>
+
+  <span class="c1">// Prime the first token.</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="n">TheJIT</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">KaleidoscopeJIT</span><span class="o">></span><span class="p">();</span>
+
+  <span class="c1">// Run the main "interpreter loop" now.</span>
+  <span class="n">MainLoop</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>We also need to setup the data layout for the JIT:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">void</span> <span class="n">InitializeModuleAndPassManager</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// Open a new module.</span>
+  <span class="n">TheModule</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="s">"my cool jit"</span><span class="p">,</span> <span class="n">TheContext</span><span class="p">);</span>
+  <span class="n">TheModule</span><span class="o">-></span><span class="n">setDataLayout</span><span class="p">(</span><span class="n">TheJIT</span><span class="o">-></span><span class="n">getTargetMachine</span><span class="p">().</span><span class="n">createDataLayout</span><span class="p">());</span>
+
+  <span class="c1">// Create a new pass manager attached to it.</span>
+  <span class="n">TheFPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">TheModule</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+  <span class="p">...</span>
+</pre></div>
+</div>
+<p>The KaleidoscopeJIT class is a simple JIT built specifically for these
+tutorials, available inside the LLVM source code
+at llvm-src/examples/Kaleidoscope/include/KaleidoscopeJIT.h.
+In later chapters we will look at how it works and extend it with
+new features, but for now we will take it as given. Its API is very simple:
+<tt class="docutils literal"><span class="pre">addModule</span></tt> adds an LLVM IR module to the JIT, making its functions
+available for execution; <tt class="docutils literal"><span class="pre">removeModule</span></tt> removes a module, freeing any
+memory associated with the code in that module; and <tt class="docutils literal"><span class="pre">findSymbol</span></tt> allows us
+to look up pointers to the compiled code.</p>
+<p>We can take this simple API and change our code that parses top-level expressions to
+look like this:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="n">HandleTopLevelExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Evaluate a top-level expression into an anonymous function.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseTopLevelExpr</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+
+      <span class="c1">// JIT the module containing the anonymous expression, keeping a handle so</span>
+      <span class="c1">// we can free it later.</span>
+      <span class="k">auto</span> <span class="n">H</span> <span class="o">=</span> <span class="n">TheJIT</span><span class="o">-></span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">TheModule</span><span class="p">));</span>
+      <span class="n">InitializeModuleAndPassManager</span><span class="p">();</span>
+
+      <span class="c1">// Search the JIT for the __anon_expr symbol.</span>
+      <span class="k">auto</span> <span class="n">ExprSymbol</span> <span class="o">=</span> <span class="n">TheJIT</span><span class="o">-></span><span class="n">findSymbol</span><span class="p">(</span><span class="s">"__anon_expr"</span><span class="p">);</span>
+      <span class="n">assert</span><span class="p">(</span><span class="n">ExprSymbol</span> <span class="o">&&</span> <span class="s">"Function not found"</span><span class="p">);</span>
+
+      <span class="c1">// Get the symbol's address and cast it to the right type (takes no</span>
+      <span class="c1">// arguments, returns a double) so we can call it as a native function.</span>
+      <span class="kt">double</span> <span class="p">(</span><span class="o">*</span><span class="n">FP</span><span class="p">)()</span> <span class="o">=</span> <span class="p">(</span><span class="kt">double</span> <span class="p">(</span><span class="o">*</span><span class="p">)())(</span><span class="n">intptr_t</span><span class="p">)</span><span class="n">ExprSymbol</span><span class="p">.</span><span class="n">getAddress</span><span class="p">();</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Evaluated to %f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">FP</span><span class="p">());</span>
+
+      <span class="c1">// Delete the anonymous expression module from the JIT.</span>
+      <span class="n">TheJIT</span><span class="o">-></span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+    <span class="p">}</span>
+</pre></div>
+</div>
+<p>If parsing and codegen succeeed, the next step is to add the module containing
+the top-level expression to the JIT. We do this by calling addModule, which
+triggers code generation for all the functions in the module, and returns a
+handle that can be used to remove the module from the JIT later. Once the module
+has been added to the JIT it can no longer be modified, so we also open a new
+module to hold subsequent code by calling <tt class="docutils literal"><span class="pre">InitializeModuleAndPassManager()</span></tt>.</p>
+<p>Once we’ve added the module to the JIT we need to get a pointer to the final
+generated code. We do this by calling the JIT’s findSymbol method, and passing
+the name of the top-level expression function: <tt class="docutils literal"><span class="pre">__anon_expr</span></tt>. Since we just
+added this function, we assert that findSymbol returned a result.</p>
+<p>Next, we get the in-memory address of the <tt class="docutils literal"><span class="pre">__anon_expr</span></tt> function by calling
+<tt class="docutils literal"><span class="pre">getAddress()</span></tt> on the symbol. Recall that we compile top-level expressions
+into a self-contained LLVM function that takes no arguments and returns the
+computed double. Because the LLVM JIT compiler matches the native platform ABI,
+this means that you can just cast the result pointer to a function pointer of
+that type and call it directly. This means, there is no difference between JIT
+compiled code and native machine code that is statically linked into your
+application.</p>
+<p>Finally, since we don’t support re-evaluation of top-level expressions, we
+remove the module from the JIT when we’re done to free the associated memory.
+Recall, however, that the module we created a few lines earlier (via
+<tt class="docutils literal"><span class="pre">InitializeModuleAndPassManager</span></tt>) is still open and waiting for new code to be
+added.</p>
+<p>With just these two changes, lets see how Kaleidoscope works now!</p>
+<div class="highlight-python"><pre>ready> 4+5;
+Read top-level expression:
+define double @0() {
+entry:
+  ret double 9.000000e+00
+}
+
+Evaluated to 9.000000</pre>
+</div>
+<p>Well this looks like it is basically working. The dump of the function
+shows the “no argument function that always returns double” that we
+synthesize for each top-level expression that is typed in. This
+demonstrates very basic functionality, but can we do more?</p>
+<div class="highlight-python"><pre>ready> def testfunc(x y) x + y*2;
+Read function definition:
+define double @testfunc(double %x, double %y) {
+entry:
+  %multmp = fmul double %y, 2.000000e+00
+  %addtmp = fadd double %multmp, %x
+  ret double %addtmp
+}
+
+ready> testfunc(4, 10);
+Read top-level expression:
+define double @1() {
+entry:
+  %calltmp = call double @testfunc(double 4.000000e+00, double 1.000000e+01)
+  ret double %calltmp
+}
+
+Evaluated to 24.000000
+
+ready> testfunc(5, 10);
+ready> LLVM ERROR: Program used external function 'testfunc' which could not be resolved!</pre>
+</div>
+<p>Function definitions and calls also work, but something went very wrong on that
+last line. The call looks valid, so what happened? As you may have guessed from
+the the API a Module is a unit of allocation for the JIT, and testfunc was part
+of the same module that contained anonymous expression. When we removed that
+module from the JIT to free the memory for the anonymous expression, we deleted
+the definition of <tt class="docutils literal"><span class="pre">testfunc</span></tt> along with it. Then, when we tried to call
+testfunc a second time, the JIT could no longer find it.</p>
+<p>The easiest way to fix this is to put the anonymous expression in a separate
+module from the rest of the function definitions. The JIT will happily resolve
+function calls across module boundaries, as long as each of the functions called
+has a prototype, and is added to the JIT before it is called. By putting the
+anonymous expression in a different module we can delete it without affecting
+the rest of the functions.</p>
+<p>In fact, we’re going to go a step further and put every function in its own
+module. Doing so allows us to exploit a useful property of the KaleidoscopeJIT
+that will make our environment more REPL-like: Functions can be added to the
+JIT more than once (unlike a module where every function must have a unique
+definition). When you look up a symbol in KaleidoscopeJIT it will always return
+the most recent definition:</p>
+<div class="highlight-python"><pre>ready> def foo(x) x + 1;
+Read function definition:
+define double @foo(double %x) {
+entry:
+  %addtmp = fadd double %x, 1.000000e+00
+  ret double %addtmp
+}
+
+ready> foo(2);
+Evaluated to 3.000000
+
+ready> def foo(x) x + 2;
+define double @foo(double %x) {
+entry:
+  %addtmp = fadd double %x, 2.000000e+00
+  ret double %addtmp
+}
+
+ready> foo(2);
+Evaluated to 4.000000</pre>
+</div>
+<p>To allow each function to live in its own module we’ll need a way to
+re-generate previous function declarations into each new module we open:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">KaleidoscopeJIT</span><span class="o">></span> <span class="n">TheJIT</span><span class="p">;</span>
+
+<span class="p">...</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">getFunction</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// First, see if the function has already been added to the current module.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">F</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">F</span><span class="p">;</span>
+
+  <span class="c1">// If not, check whether we can codegen the declaration from some existing</span>
+  <span class="c1">// prototype.</span>
+  <span class="k">auto</span> <span class="n">FI</span> <span class="o">=</span> <span class="n">FunctionProtos</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">Name</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">FI</span> <span class="o">!=</span> <span class="n">FunctionProtos</span><span class="p">.</span><span class="n">end</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">FI</span><span class="o">-></span><span class="n">second</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+
+  <span class="c1">// If no existing prototype exists, return null.</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="p">...</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">CallExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look up the name in the global module table.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">CalleeF</span> <span class="o">=</span> <span class="n">getFunction</span><span class="p">(</span><span class="n">Callee</span><span class="p">);</span>
+
+<span class="p">...</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">FunctionAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Transfer ownership of the prototype to the FunctionProtos map, but keep a</span>
+  <span class="c1">// reference to it for use below.</span>
+  <span class="k">auto</span> <span class="o">&</span><span class="n">P</span> <span class="o">=</span> <span class="o">*</span><span class="n">Proto</span><span class="p">;</span>
+  <span class="n">FunctionProtos</span><span class="p">[</span><span class="n">Proto</span><span class="o">-></span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">);</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">TheFunction</span> <span class="o">=</span> <span class="n">getFunction</span><span class="p">(</span><span class="n">P</span><span class="p">.</span><span class="n">getName</span><span class="p">());</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>To enable this, we’ll start by adding a new global, <tt class="docutils literal"><span class="pre">FunctionProtos</span></tt>, that
+holds the most recent prototype for each function. We’ll also add a convenience
+method, <tt class="docutils literal"><span class="pre">getFunction()</span></tt>, to replace calls to <tt class="docutils literal"><span class="pre">TheModule->getFunction()</span></tt>.
+Our convenience method searches <tt class="docutils literal"><span class="pre">TheModule</span></tt> for an existing function
+declaration, falling back to generating a new declaration from FunctionProtos if
+it doesn’t find one. In <tt class="docutils literal"><span class="pre">CallExprAST::codegen()</span></tt> we just need to replace the
+call to <tt class="docutils literal"><span class="pre">TheModule->getFunction()</span></tt>. In <tt class="docutils literal"><span class="pre">FunctionAST::codegen()</span></tt> we need to
+update the FunctionProtos map first, then call <tt class="docutils literal"><span class="pre">getFunction()</span></tt>. With this
+done, we can always obtain a function declaration in the current module for any
+previously declared function.</p>
+<p>We also need to update HandleDefinition and HandleExtern:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="n">HandleDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseDefinition</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read function definition:"</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+      <span class="n">TheJIT</span><span class="o">-></span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">TheModule</span><span class="p">));</span>
+      <span class="n">InitializeModuleAndPassManager</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+     <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">ProtoAST</span> <span class="o">=</span> <span class="n">ParseExtern</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">ProtoAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read extern: "</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+      <span class="n">FunctionProtos</span><span class="p">[</span><span class="n">ProtoAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ProtoAST</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>In HandleDefinition, we add two lines to transfer the newly defined function to
+the JIT and open a new module. In HandleExtern, we just need to add one line to
+add the prototype to FunctionProtos.</p>
+<p>With these changes made, lets try our REPL again (I removed the dump of the
+anonymous functions this time, you should get the idea by now :) :</p>
+<div class="highlight-python"><pre>ready> def foo(x) x + 1;
+ready> foo(2);
+Evaluated to 3.000000
+
+ready> def foo(x) x + 2;
+ready> foo(2);
+Evaluated to 4.000000</pre>
+</div>
+<p>It works!</p>
+<p>Even with this simple code, we get some surprisingly powerful capabilities -
+check this out:</p>
+<div class="highlight-python"><pre>ready> extern sin(x);
+Read extern:
+declare double @sin(double)
+
+ready> extern cos(x);
+Read extern:
+declare double @cos(double)
+
+ready> sin(1.0);
+Read top-level expression:
+define double @2() {
+entry:
+  ret double 0x3FEAED548F090CEE
+}
+
+Evaluated to 0.841471
+
+ready> def foo(x) sin(x)*sin(x) + cos(x)*cos(x);
+Read function definition:
+define double @foo(double %x) {
+entry:
+  %calltmp = call double @sin(double %x)
+  %multmp = fmul double %calltmp, %calltmp
+  %calltmp2 = call double @cos(double %x)
+  %multmp4 = fmul double %calltmp2, %calltmp2
+  %addtmp = fadd double %multmp, %multmp4
+  ret double %addtmp
+}
+
+ready> foo(4.0);
+Read top-level expression:
+define double @3() {
+entry:
+  %calltmp = call double @foo(double 4.000000e+00)
+  ret double %calltmp
+}
+
+Evaluated to 1.000000</pre>
+</div>
+<p>Whoa, how does the JIT know about sin and cos? The answer is surprisingly
+simple: The KaleidoscopeJIT has a straightforward symbol resolution rule that
+it uses to find symbols that aren’t available in any given module: First
+it searches all the modules that have already been added to the JIT, from the
+most recent to the oldest, to find the newest definition. If no definition is
+found inside the JIT, it falls back to calling “<tt class="docutils literal"><span class="pre">dlsym("sin")</span></tt>” on the
+Kaleidoscope process itself. Since “<tt class="docutils literal"><span class="pre">sin</span></tt>” is defined within the JIT’s
+address space, it simply patches up calls in the module to call the libm
+version of <tt class="docutils literal"><span class="pre">sin</span></tt> directly. But in some cases this even goes further:
+as sin and cos are names of standard math functions, the constant folder
+will directly evaluate the function calls to the correct result when called
+with constants like in the “<tt class="docutils literal"><span class="pre">sin(1.0)</span></tt>” above.</p>
+<p>In the future we’ll see how tweaking this symbol resolution rule can be used to
+enable all sorts of useful features, from security (restricting the set of
+symbols available to JIT’d code), to dynamic code generation based on symbol
+names, and even lazy compilation.</p>
+<p>One immediate benefit of the symbol resolution rule is that we can now extend
+the language by writing arbitrary C++ code to implement operations. For example,
+if we add:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#ifdef LLVM_ON_WIN32</span>
+<span class="cp">#define DLLEXPORT __declspec(dllexport)</span>
+<span class="cp">#else</span>
+<span class="cp">#define DLLEXPORT</span>
+<span class="cp">#endif</span>
+
+<span class="c1">/// putchard - putchar that takes a double and returns 0.</span>
+<span class="k">extern</span> <span class="s">"C"</span> <span class="n">DLLEXPORT</span> <span class="kt">double</span> <span class="n">putchard</span><span class="p">(</span><span class="kt">double</span> <span class="n">X</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fputc</span><span class="p">((</span><span class="kt">char</span><span class="p">)</span><span class="n">X</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span>
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Note, that for Windows we need to actually export the functions because
+the dynamic symbol loader will use GetProcAddress to find the symbols.</p>
+<p>Now we can produce simple output to the console by using things like:
+“<tt class="docutils literal"><span class="pre">extern</span> <span class="pre">putchard(x);</span> <span class="pre">putchard(120);</span></tt>”, which prints a lowercase ‘x’
+on the console (120 is the ASCII code for ‘x’). Similar code could be
+used to implement file I/O, console input, and many other capabilities
+in Kaleidoscope.</p>
+<p>This completes the JIT and optimizer chapter of the Kaleidoscope
+tutorial. At this point, we can compile a non-Turing-complete
+programming language, optimize and JIT compile it in a user-driven way.
+Next up we’ll look into <a class="reference external" href="LangImpl05.html">extending the language with control flow
+constructs</a>, tackling some interesting LLVM IR issues
+along the way.</p>
+</div>
+<div class="section" id="full-code-listing">
+<h2><a class="toc-backref" href="#id5">4.5. Full Code Listing</a><a class="headerlink" href="#full-code-listing" title="Permalink to this headline">¶</a></h2>
+<p>Here is the complete code listing for our running example, enhanced with
+the LLVM JIT and optimizer. To build this example, use:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Compile</span>
+clang++ -g toy.cpp <span class="sb">`</span>llvm-config --cxxflags --ldflags --system-libs --libs core mcjit native<span class="sb">`</span> -O3 -o toy
+<span class="c"># Run</span>
+./toy
+</pre></div>
+</div>
+<p>If you are compiling this on Linux, make sure to add the “-rdynamic”
+option as well. This makes sure that the external functions are resolved
+properly at runtime.</p>
+<p>Here is the code:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include "llvm/ADT/APFloat.h"</span>
+<span class="cp">#include "llvm/ADT/STLExtras.h"</span>
+<span class="cp">#include "llvm/IR/BasicBlock.h"</span>
+<span class="cp">#include "llvm/IR/Constants.h"</span>
+<span class="cp">#include "llvm/IR/DerivedTypes.h"</span>
+<span class="cp">#include "llvm/IR/Function.h"</span>
+<span class="cp">#include "llvm/IR/IRBuilder.h"</span>
+<span class="cp">#include "llvm/IR/LLVMContext.h"</span>
+<span class="cp">#include "llvm/IR/LegacyPassManager.h"</span>
+<span class="cp">#include "llvm/IR/Module.h"</span>
+<span class="cp">#include "llvm/IR/Type.h"</span>
+<span class="cp">#include "llvm/IR/Verifier.h"</span>
+<span class="cp">#include "llvm/Support/TargetSelect.h"</span>
+<span class="cp">#include "llvm/Target/TargetMachine.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar.h"</span>
+<span class="cp">#include "llvm/Transforms/Scalar/GVN.h"</span>
+<span class="cp">#include "../include/KaleidoscopeJIT.h"</span>
+<span class="cp">#include <algorithm></span>
+<span class="cp">#include <cassert></span>
+<span class="cp">#include <cctype></span>
+<span class="cp">#include <cstdint></span>
+<span class="cp">#include <cstdio></span>
+<span class="cp">#include <cstdlib></span>
+<span class="cp">#include <map></span>
+<span class="cp">#include <memory></span>
+<span class="cp">#include <string></span>
+<span class="cp">#include <vector></span>
+
+<span class="k">using</span> <span class="k">namespace</span> <span class="n">llvm</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span class="n">llvm</span><span class="o">::</span><span class="n">orc</span><span class="p">;</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Lexer</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">// The lexer returns tokens [0-255] if it is an unknown character, otherwise one</span>
+<span class="c1">// of these for known things.</span>
+<span class="k">enum</span> <span class="n">Token</span> <span class="p">{</span>
+  <span class="n">tok_eof</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span>
+
+  <span class="c1">// commands</span>
+  <span class="n">tok_def</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span>
+  <span class="n">tok_extern</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span><span class="p">,</span>
+
+  <span class="c1">// primary</span>
+  <span class="n">tok_identifier</span> <span class="o">=</span> <span class="o">-</span><span class="mi">4</span><span class="p">,</span>
+  <span class="n">tok_number</span> <span class="o">=</span> <span class="o">-</span><span class="mi">5</span>
+<span class="p">};</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdentifierStr</span><span class="p">;</span> <span class="c1">// Filled in if tok_identifier</span>
+<span class="k">static</span> <span class="kt">double</span> <span class="n">NumVal</span><span class="p">;</span>             <span class="c1">// Filled in if tok_number</span>
+
+<span class="c1">/// gettok - Return the next token from standard input.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">gettok</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">static</span> <span class="kt">int</span> <span class="n">LastChar</span> <span class="o">=</span> <span class="sc">' '</span><span class="p">;</span>
+
+  <span class="c1">// Skip any whitespace.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">isspace</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span>
+    <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isalpha</span><span class="p">(</span><span class="n">LastChar</span><span class="p">))</span> <span class="p">{</span> <span class="c1">// identifier: [a-zA-Z][a-zA-Z0-9]*</span>
+    <span class="n">IdentifierStr</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">isalnum</span><span class="p">((</span><span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">())))</span>
+      <span class="n">IdentifierStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"def"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_def</span><span class="p">;</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">IdentifierStr</span> <span class="o">==</span> <span class="s">"extern"</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">tok_extern</span><span class="p">;</span>
+    <span class="k">return</span> <span class="n">tok_identifier</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Number: [0-9.]+</span>
+    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">NumStr</span><span class="p">;</span>
+    <span class="k">do</span> <span class="p">{</span>
+      <span class="n">NumStr</span> <span class="o">+=</span> <span class="n">LastChar</span><span class="p">;</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">isdigit</span><span class="p">(</span><span class="n">LastChar</span><span class="p">)</span> <span class="o">||</span> <span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'.'</span><span class="p">);</span>
+
+    <span class="n">NumVal</span> <span class="o">=</span> <span class="n">strtod</span><span class="p">(</span><span class="n">NumStr</span><span class="p">.</span><span class="n">c_str</span><span class="p">(),</span> <span class="n">nullptr</span><span class="p">);</span>
+    <span class="k">return</span> <span class="n">tok_number</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="sc">'#'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="c1">// Comment until end of line.</span>
+    <span class="k">do</span>
+      <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+    <span class="k">while</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\n'</span> <span class="o">&&</span> <span class="n">LastChar</span> <span class="o">!=</span> <span class="sc">'\r'</span><span class="p">);</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">!=</span> <span class="n">EOF</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">gettok</span><span class="p">();</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Check for end of file.  Don't eat the EOF.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">LastChar</span> <span class="o">==</span> <span class="n">EOF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">tok_eof</span><span class="p">;</span>
+
+  <span class="c1">// Otherwise, just return the character as its ascii value.</span>
+  <span class="kt">int</span> <span class="n">ThisChar</span> <span class="o">=</span> <span class="n">LastChar</span><span class="p">;</span>
+  <span class="n">LastChar</span> <span class="o">=</span> <span class="n">getchar</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">ThisChar</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Abstract Syntax Tree (aka Parse Tree)</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+<span class="c1">/// ExprAST - Base class for all expression nodes.</span>
+<span class="k">class</span> <span class="nc">ExprAST</span> <span class="p">{</span>
+<span class="k">public</span><span class="o">:</span>
+  <span class="k">virtual</span> <span class="o">~</span><span class="n">ExprAST</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
+
+  <span class="k">virtual</span> <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// NumberExprAST - Expression class for numeric literals like "1.0".</span>
+<span class="k">class</span> <span class="nc">NumberExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">double</span> <span class="n">Val</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">NumberExprAST</span><span class="p">(</span><span class="kt">double</span> <span class="n">Val</span><span class="p">)</span> <span class="o">:</span> <span class="n">Val</span><span class="p">(</span><span class="n">Val</span><span class="p">)</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// VariableExprAST - Expression class for referencing a variable, like "a".</span>
+<span class="k">class</span> <span class="nc">VariableExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">VariableExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">)</span> <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">)</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// BinaryExprAST - Expression class for a binary operator.</span>
+<span class="k">class</span> <span class="nc">BinaryExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="kt">char</span> <span class="n">Op</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span> <span class="n">RHS</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">BinaryExprAST</span><span class="p">(</span><span class="kt">char</span> <span class="n">Op</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">,</span>
+                <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">RHS</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Op</span><span class="p">(</span><span class="n">Op</span><span class="p">),</span> <span class="n">LHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">)),</span> <span class="n">RHS</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// CallExprAST - Expression class for function calls.</span>
+<span class="k">class</span> <span class="nc">CallExprAST</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ExprAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Callee</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">CallExprAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Callee</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Callee</span><span class="p">(</span><span class="n">Callee</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Value</span> <span class="o">*</span><span class="n">codegen</span><span class="p">()</span> <span class="n">override</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// PrototypeAST - This class represents the "prototype" for a function,</span>
+<span class="c1">/// which captures its name, and its argument names (thus implicitly the number</span>
+<span class="c1">/// of arguments the function takes).</span>
+<span class="k">class</span> <span class="nc">PrototypeAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">PrototypeAST</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">Name</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">Args</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Name</span><span class="p">(</span><span class="n">Name</span><span class="p">),</span> <span class="n">Args</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+  <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">getName</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">Name</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="c1">/// FunctionAST - This class represents a function definition itself.</span>
+<span class="k">class</span> <span class="nc">FunctionAST</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">;</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">;</span>
+
+<span class="k">public</span><span class="o">:</span>
+  <span class="n">FunctionAST</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">Proto</span><span class="p">,</span>
+              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">Body</span><span class="p">)</span>
+      <span class="o">:</span> <span class="n">Proto</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">)),</span> <span class="n">Body</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Body</span><span class="p">))</span> <span class="p">{}</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">codegen</span><span class="p">();</span>
+<span class="p">};</span>
+
+<span class="p">}</span> <span class="c1">// end anonymous namespace</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Parser</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="c1">/// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current</span>
+<span class="c1">/// token the parser is looking at.  getNextToken reads another token from the</span>
+<span class="c1">/// lexer and updates CurTok with its results.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">CurTok</span><span class="p">;</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">getNextToken</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">CurTok</span> <span class="o">=</span> <span class="n">gettok</span><span class="p">();</span> <span class="p">}</span>
+
+<span class="c1">/// BinopPrecedence - This holds the precedence for each binary operator that is</span>
+<span class="c1">/// defined.</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="kt">char</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">BinopPrecedence</span><span class="p">;</span>
+
+<span class="c1">/// GetTokPrecedence - Get the precedence of the pending binary operator token.</span>
+<span class="k">static</span> <span class="kt">int</span> <span class="n">GetTokPrecedence</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">isascii</span><span class="p">(</span><span class="n">CurTok</span><span class="p">))</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+
+  <span class="c1">// Make sure it's a declared binop.</span>
+  <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">BinopPrecedence</span><span class="p">[</span><span class="n">CurTok</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">TokPrec</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// LogError* - These are little helper functions for error handling.</span>
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LogError</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Error: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">LogErrorP</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">();</span>
+
+<span class="c1">/// numberexpr ::= number</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseNumberExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">Result</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">NumberExprAST</span><span class="o">></span><span class="p">(</span><span class="n">NumVal</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// consume the number</span>
+  <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Result</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">/// parenexpr ::= '(' expression ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseParenExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (.</span>
+  <span class="k">auto</span> <span class="n">V</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"expected ')'"</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ).</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// identifierexpr</span>
+<span class="c1">///   ::= identifier</span>
+<span class="c1">///   ::= identifier '(' expression* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseIdentifierExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">IdName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat identifier.</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span> <span class="c1">// Simple variable ref.</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">VariableExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">);</span>
+
+  <span class="c1">// Call.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat (</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">>></span> <span class="n">Args</span><span class="p">;</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+      <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">Arg</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+        <span class="n">Args</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Arg</span><span class="p">));</span>
+      <span class="k">else</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">==</span> <span class="sc">')'</span><span class="p">)</span>
+        <span class="k">break</span><span class="p">;</span>
+
+      <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">','</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"Expected ')' or ',' in argument list"</span><span class="p">);</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Eat the ')'.</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">CallExprAST</span><span class="o">></span><span class="p">(</span><span class="n">IdName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Args</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// primary</span>
+<span class="c1">///   ::= identifierexpr</span>
+<span class="c1">///   ::= numberexpr</span>
+<span class="c1">///   ::= parenexpr</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParsePrimary</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogError</span><span class="p">(</span><span class="s">"unknown token when expecting an expression"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="nl">tok_identifier:</span>
+    <span class="k">return</span> <span class="n">ParseIdentifierExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="nl">tok_number:</span>
+    <span class="k">return</span> <span class="n">ParseNumberExpr</span><span class="p">();</span>
+  <span class="k">case</span> <span class="sc">'('</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">ParseParenExpr</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// binoprhs</span>
+<span class="c1">///   ::= ('+' primary)*</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="kt">int</span> <span class="n">ExprPrec</span><span class="p">,</span>
+                                              <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">LHS</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// If this is a binop, find its precedence.</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="kt">int</span> <span class="n">TokPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+
+    <span class="c1">// If this is a binop that binds at least as tightly as the current binop,</span>
+    <span class="c1">// consume it, otherwise we are done.</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">ExprPrec</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">LHS</span><span class="p">;</span>
+
+    <span class="c1">// Okay, we know this is a binop.</span>
+    <span class="kt">int</span> <span class="n">BinOp</span> <span class="o">=</span> <span class="n">CurTok</span><span class="p">;</span>
+    <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat binop</span>
+
+    <span class="c1">// Parse the primary expression after the binary operator.</span>
+    <span class="k">auto</span> <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+    <span class="c1">// If BinOp binds less tightly with RHS than the operator after RHS, let</span>
+    <span class="c1">// the pending operator take RHS as its LHS.</span>
+    <span class="kt">int</span> <span class="n">NextPrec</span> <span class="o">=</span> <span class="n">GetTokPrecedence</span><span class="p">();</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">TokPrec</span> <span class="o"><</span> <span class="n">NextPrec</span><span class="p">)</span> <span class="p">{</span>
+      <span class="n">RHS</span> <span class="o">=</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="n">TokPrec</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+      <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">RHS</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+    <span class="p">}</span>
+
+    <span class="c1">// Merge LHS/RHS.</span>
+    <span class="n">LHS</span> <span class="o">=</span>
+        <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">BinaryExprAST</span><span class="o">></span><span class="p">(</span><span class="n">BinOp</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">RHS</span><span class="p">));</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// expression</span>
+<span class="c1">///   ::= primary binoprhs</span>
+<span class="c1">///</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">ExprAST</span><span class="o">></span> <span class="n">ParseExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">auto</span> <span class="n">LHS</span> <span class="o">=</span> <span class="n">ParsePrimary</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">LHS</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">return</span> <span class="n">ParseBinOpRHS</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">LHS</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// prototype</span>
+<span class="c1">///   ::= id '(' id* ')'</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParsePrototype</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected function name in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">FnName</span> <span class="o">=</span> <span class="n">IdentifierStr</span><span class="p">;</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">'('</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected '(' in prototype"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">ArgNames</span><span class="p">;</span>
+  <span class="k">while</span> <span class="p">(</span><span class="n">getNextToken</span><span class="p">()</span> <span class="o">==</span> <span class="n">tok_identifier</span><span class="p">)</span>
+    <span class="n">ArgNames</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">IdentifierStr</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CurTok</span> <span class="o">!=</span> <span class="sc">')'</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorP</span><span class="p">(</span><span class="s">"Expected ')' in prototype"</span><span class="p">);</span>
+
+  <span class="c1">// success.</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat ')'.</span>
+
+  <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="n">FnName</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ArgNames</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="c1">/// definition ::= 'def' prototype expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat def.</span>
+  <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">Proto</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// toplevelexpr ::= expression</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span> <span class="n">ParseTopLevelExpr</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">E</span> <span class="o">=</span> <span class="n">ParseExpression</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Make an anonymous proto.</span>
+    <span class="k">auto</span> <span class="n">Proto</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span><span class="p">(</span><span class="s">"__anon_expr"</span><span class="p">,</span>
+                                                 <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span>
+    <span class="k">return</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">FunctionAST</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">E</span><span class="p">));</span>
+  <span class="p">}</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// external ::= 'extern' prototype</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">></span> <span class="n">ParseExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">getNextToken</span><span class="p">();</span> <span class="c1">// eat extern.</span>
+  <span class="k">return</span> <span class="n">ParsePrototype</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Code Generation</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">static</span> <span class="n">LLVMContext</span> <span class="n">TheContext</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">IRBuilder</span><span class="o"><></span> <span class="n">Builder</span><span class="p">(</span><span class="n">TheContext</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">Module</span><span class="o">></span> <span class="n">TheModule</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">Value</span> <span class="o">*></span> <span class="n">NamedValues</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span> <span class="n">TheFPM</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">KaleidoscopeJIT</span><span class="o">></span> <span class="n">TheJIT</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o"><</span><span class="n">PrototypeAST</span><span class="o">>></span> <span class="n">FunctionProtos</span><span class="p">;</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">LogErrorV</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">Str</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">LogError</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">getFunction</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">Name</span><span class="p">)</span> <span class="p">{</span>
+  <span class="c1">// First, see if the function has already been added to the current module.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">F</span> <span class="o">=</span> <span class="n">TheModule</span><span class="o">-></span><span class="n">getFunction</span><span class="p">(</span><span class="n">Name</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">F</span><span class="p">;</span>
+
+  <span class="c1">// If not, check whether we can codegen the declaration from some existing</span>
+  <span class="c1">// prototype.</span>
+  <span class="k">auto</span> <span class="n">FI</span> <span class="o">=</span> <span class="n">FunctionProtos</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">Name</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">FI</span> <span class="o">!=</span> <span class="n">FunctionProtos</span><span class="p">.</span><span class="n">end</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">FI</span><span class="o">-></span><span class="n">second</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+
+  <span class="c1">// If no existing prototype exists, return null.</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">NumberExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">ConstantFP</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="n">APFloat</span><span class="p">(</span><span class="n">Val</span><span class="p">));</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">VariableExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look this variable up in the function.</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">V</span> <span class="o">=</span> <span class="n">NamedValues</span><span class="p">[</span><span class="n">Name</span><span class="p">];</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">V</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown variable name"</span><span class="p">);</span>
+  <span class="k">return</span> <span class="n">V</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">BinaryExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">L</span> <span class="o">=</span> <span class="n">LHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="n">Value</span> <span class="o">*</span><span class="n">R</span> <span class="o">=</span> <span class="n">RHS</span><span class="o">-></span><span class="n">codegen</span><span class="p">();</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">L</span> <span class="o">||</span> <span class="o">!</span><span class="n">R</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="k">switch</span> <span class="p">(</span><span class="n">Op</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">case</span> <span class="sc">'+'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFAdd</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"addtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'-'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFSub</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"subtmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'*'</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFMul</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"multmp"</span><span class="p">);</span>
+  <span class="k">case</span> <span class="sc">'<'</span><span class="o">:</span>
+    <span class="n">L</span> <span class="o">=</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateFCmpULT</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">R</span><span class="p">,</span> <span class="s">"cmptmp"</span><span class="p">);</span>
+    <span class="c1">// Convert bool 0/1 to double 0.0 or 1.0</span>
+    <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateUIToFP</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span> <span class="s">"booltmp"</span><span class="p">);</span>
+  <span class="k">default</span><span class="o">:</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"invalid binary operator"</span><span class="p">);</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">Value</span> <span class="o">*</span><span class="n">CallExprAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Look up the name in the global module table.</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">CalleeF</span> <span class="o">=</span> <span class="n">getFunction</span><span class="p">(</span><span class="n">Callee</span><span class="p">);</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">CalleeF</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Unknown function referenced"</span><span class="p">);</span>
+
+  <span class="c1">// If argument mismatch error.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">CalleeF</span><span class="o">-></span><span class="n">arg_size</span><span class="p">()</span> <span class="o">!=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">())</span>
+    <span class="k">return</span> <span class="n">LogErrorV</span><span class="p">(</span><span class="s">"Incorrect # arguments passed"</span><span class="p">);</span>
+
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Value</span> <span class="o">*></span> <span class="n">ArgsV</span><span class="p">;</span>
+  <span class="k">for</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">e</span> <span class="o">=</span> <span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">e</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">ArgsV</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-></span><span class="n">codegen</span><span class="p">());</span>
+    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">ArgsV</span><span class="p">.</span><span class="n">back</span><span class="p">())</span>
+      <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="k">return</span> <span class="n">Builder</span><span class="p">.</span><span class="n">CreateCall</span><span class="p">(</span><span class="n">CalleeF</span><span class="p">,</span> <span class="n">ArgsV</span><span class="p">,</span> <span class="s">"calltmp"</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">PrototypeAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Make the function type:  double(double,double) etc.</span>
+  <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Type</span> <span class="o">*></span> <span class="n">Doubles</span><span class="p">(</span><span class="n">Args</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">));</span>
+  <span class="n">FunctionType</span> <span class="o">*</span><span class="n">FT</span> <span class="o">=</span>
+      <span class="n">FunctionType</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">Type</span><span class="o">::</span><span class="n">getDoubleTy</span><span class="p">(</span><span class="n">TheContext</span><span class="p">),</span> <span class="n">Doubles</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
+
+  <span class="n">Function</span> <span class="o">*</span><span class="n">F</span> <span class="o">=</span>
+      <span class="n">Function</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">FT</span><span class="p">,</span> <span class="n">Function</span><span class="o">::</span><span class="n">ExternalLinkage</span><span class="p">,</span> <span class="n">Name</span><span class="p">,</span> <span class="n">TheModule</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+  <span class="c1">// Set names for all arguments.</span>
+  <span class="kt">unsigned</span> <span class="n">Idx</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+  <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">F</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+    <span class="n">Arg</span><span class="p">.</span><span class="n">setName</span><span class="p">(</span><span class="n">Args</span><span class="p">[</span><span class="n">Idx</span><span class="o">++</span><span class="p">]);</span>
+
+  <span class="k">return</span> <span class="n">F</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">Function</span> <span class="o">*</span><span class="n">FunctionAST</span><span class="o">::</span><span class="n">codegen</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Transfer ownership of the prototype to the FunctionProtos map, but keep a</span>
+  <span class="c1">// reference to it for use below.</span>
+  <span class="k">auto</span> <span class="o">&</span><span class="n">P</span> <span class="o">=</span> <span class="o">*</span><span class="n">Proto</span><span class="p">;</span>
+  <span class="n">FunctionProtos</span><span class="p">[</span><span class="n">Proto</span><span class="o">-></span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">Proto</span><span class="p">);</span>
+  <span class="n">Function</span> <span class="o">*</span><span class="n">TheFunction</span> <span class="o">=</span> <span class="n">getFunction</span><span class="p">(</span><span class="n">P</span><span class="p">.</span><span class="n">getName</span><span class="p">());</span>
+  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">TheFunction</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+
+  <span class="c1">// Create a new basic block to start insertion into.</span>
+  <span class="n">BasicBlock</span> <span class="o">*</span><span class="n">BB</span> <span class="o">=</span> <span class="n">BasicBlock</span><span class="o">::</span><span class="n">Create</span><span class="p">(</span><span class="n">TheContext</span><span class="p">,</span> <span class="s">"entry"</span><span class="p">,</span> <span class="n">TheFunction</span><span class="p">);</span>
+  <span class="n">Builder</span><span class="p">.</span><span class="n">SetInsertPoint</span><span class="p">(</span><span class="n">BB</span><span class="p">);</span>
+
+  <span class="c1">// Record the function arguments in the NamedValues map.</span>
+  <span class="n">NamedValues</span><span class="p">.</span><span class="n">clear</span><span class="p">();</span>
+  <span class="k">for</span> <span class="p">(</span><span class="k">auto</span> <span class="o">&</span><span class="n">Arg</span> <span class="o">:</span> <span class="n">TheFunction</span><span class="o">-></span><span class="n">args</span><span class="p">())</span>
+    <span class="n">NamedValues</span><span class="p">[</span><span class="n">Arg</span><span class="p">.</span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="o">&</span><span class="n">Arg</span><span class="p">;</span>
+
+  <span class="k">if</span> <span class="p">(</span><span class="n">Value</span> <span class="o">*</span><span class="n">RetVal</span> <span class="o">=</span> <span class="n">Body</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+    <span class="c1">// Finish off the function.</span>
+    <span class="n">Builder</span><span class="p">.</span><span class="n">CreateRet</span><span class="p">(</span><span class="n">RetVal</span><span class="p">);</span>
+
+    <span class="c1">// Validate the generated code, checking for consistency.</span>
+    <span class="n">verifyFunction</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+    <span class="c1">// Run the optimizer on the function.</span>
+    <span class="n">TheFPM</span><span class="o">-></span><span class="n">run</span><span class="p">(</span><span class="o">*</span><span class="n">TheFunction</span><span class="p">);</span>
+
+    <span class="k">return</span> <span class="n">TheFunction</span><span class="p">;</span>
+  <span class="p">}</span>
+
+  <span class="c1">// Error reading body, remove function.</span>
+  <span class="n">TheFunction</span><span class="o">-></span><span class="n">eraseFromParent</span><span class="p">();</span>
+  <span class="k">return</span> <span class="n">nullptr</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Top-Level parsing and JIT Driver</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">InitializeModuleAndPassManager</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Open a new module.</span>
+  <span class="n">TheModule</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">Module</span><span class="o">></span><span class="p">(</span><span class="s">"my cool jit"</span><span class="p">,</span> <span class="n">TheContext</span><span class="p">);</span>
+  <span class="n">TheModule</span><span class="o">-></span><span class="n">setDataLayout</span><span class="p">(</span><span class="n">TheJIT</span><span class="o">-></span><span class="n">getTargetMachine</span><span class="p">().</span><span class="n">createDataLayout</span><span class="p">());</span>
+
+  <span class="c1">// Create a new pass manager attached to it.</span>
+  <span class="n">TheFPM</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">legacy</span><span class="o">::</span><span class="n">FunctionPassManager</span><span class="o">></span><span class="p">(</span><span class="n">TheModule</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
+
+  <span class="c1">// Do simple "peephole" optimizations and bit-twiddling optzns.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createInstructionCombiningPass</span><span class="p">());</span>
+  <span class="c1">// Reassociate expressions.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createReassociatePass</span><span class="p">());</span>
+  <span class="c1">// Eliminate Common SubExpressions.</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createGVNPass</span><span class="p">());</span>
+  <span class="c1">// Simplify the control flow graph (deleting unreachable blocks, etc).</span>
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">add</span><span class="p">(</span><span class="n">createCFGSimplificationPass</span><span class="p">());</span>
+
+  <span class="n">TheFPM</span><span class="o">-></span><span class="n">doInitialization</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleDefinition</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseDefinition</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read function definition:"</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+      <span class="n">TheJIT</span><span class="o">-></span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">TheModule</span><span class="p">));</span>
+      <span class="n">InitializeModuleAndPassManager</span><span class="p">();</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleExtern</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">ProtoAST</span> <span class="o">=</span> <span class="n">ParseExtern</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="o">*</span><span class="n">FnIR</span> <span class="o">=</span> <span class="n">ProtoAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Read extern: "</span><span class="p">);</span>
+      <span class="n">FnIR</span><span class="o">-></span><span class="n">print</span><span class="p">(</span><span class="n">errs</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
+      <span class="n">FunctionProtos</span><span class="p">[</span><span class="n">ProtoAST</span><span class="o">-></span><span class="n">getName</span><span class="p">()]</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">ProtoAST</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="k">static</span> <span class="kt">void</span> <span class="n">HandleTopLevelExpression</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// Evaluate a top-level expression into an anonymous function.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="k">auto</span> <span class="n">FnAST</span> <span class="o">=</span> <span class="n">ParseTopLevelExpr</span><span class="p">())</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">FnAST</span><span class="o">-></span><span class="n">codegen</span><span class="p">())</span> <span class="p">{</span>
+      <span class="c1">// JIT the module containing the anonymous expression, keeping a handle so</span>
+      <span class="c1">// we can free it later.</span>
+      <span class="k">auto</span> <span class="n">H</span> <span class="o">=</span> <span class="n">TheJIT</span><span class="o">-></span><span class="n">addModule</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">move</span><span class="p">(</span><span class="n">TheModule</span><span class="p">));</span>
+      <span class="n">InitializeModuleAndPassManager</span><span class="p">();</span>
+
+      <span class="c1">// Search the JIT for the __anon_expr symbol.</span>
+      <span class="k">auto</span> <span class="n">ExprSymbol</span> <span class="o">=</span> <span class="n">TheJIT</span><span class="o">-></span><span class="n">findSymbol</span><span class="p">(</span><span class="s">"__anon_expr"</span><span class="p">);</span>
+      <span class="n">assert</span><span class="p">(</span><span class="n">ExprSymbol</span> <span class="o">&&</span> <span class="s">"Function not found"</span><span class="p">);</span>
+
+      <span class="c1">// Get the symbol's address and cast it to the right type (takes no</span>
+      <span class="c1">// arguments, returns a double) so we can call it as a native function.</span>
+      <span class="kt">double</span> <span class="p">(</span><span class="o">*</span><span class="n">FP</span><span class="p">)()</span> <span class="o">=</span> <span class="p">(</span><span class="kt">double</span> <span class="p">(</span><span class="o">*</span><span class="p">)())(</span><span class="n">intptr_t</span><span class="p">)</span><span class="n">cantFail</span><span class="p">(</span><span class="n">ExprSymbol</span><span class="p">.</span><span class="n">getAddress</span><span class="p">());</span>
+      <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Evaluated to %f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">FP</span><span class="p">());</span>
+
+      <span class="c1">// Delete the anonymous expression module from the JIT.</span>
+      <span class="n">TheJIT</span><span class="o">-></span><span class="n">removeModule</span><span class="p">(</span><span class="n">H</span><span class="p">);</span>
+    <span class="p">}</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="c1">// Skip token for error recovery.</span>
+    <span class="n">getNextToken</span><span class="p">();</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">/// top ::= definition | external | expression | ';'</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">MainLoop</span><span class="p">()</span> <span class="p">{</span>
+  <span class="k">while</span> <span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
+    <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+    <span class="k">switch</span> <span class="p">(</span><span class="n">CurTok</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">case</span> <span class="nl">tok_eof:</span>
+      <span class="k">return</span><span class="p">;</span>
+    <span class="k">case</span> <span class="sc">';'</span><span class="o">:</span> <span class="c1">// ignore top-level semicolons.</span>
+      <span class="n">getNextToken</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_def:</span>
+      <span class="n">HandleDefinition</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">case</span> <span class="nl">tok_extern:</span>
+      <span class="n">HandleExtern</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="k">default</span><span class="o">:</span>
+      <span class="n">HandleTopLevelExpression</span><span class="p">();</span>
+      <span class="k">break</span><span class="p">;</span>
+    <span class="p">}</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+<span class="cp">// "Library" functions that can be "extern'd" from user code.</span>
+<span class="cp">//===----------------------------------------------------------------------===//</span>
+
+<span class="cp">#ifdef LLVM_ON_WIN32</span>
+<span class="cp">#define DLLEXPORT __declspec(dllexport)</span>
+<span class="cp">#else</span>
+<span class="cp">#define DLLEXPORT</span>
+<span class="cp">#endif</span>
+
+<span class="c1">/// putchard - putchar that takes a double and returns 0.</span>
+<span class="k">extern</span> <span class="s">"C"</span> <span class="n">DLLEXPORT</span> <span class="kt">double</span> <span class="n">putchard</span><span class="p">(</span><span class="kt">double</span> <span class="n">X</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fputc</span><span class="p">((</span><span class="kt">char</span><span class="p">)</span><span class="n">X</span><span class="p">,</span> <span class="n">stderr</span><span class="p">);</span>
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">/// printd - printf that takes a double prints it as "%f\n", returning 0.</span>
+<span class="k">extern</span> <span class="s">"C"</span> <span class="n">DLLEXPORT</span> <span class="kt">double</span> <span class="n">printd</span><span class="p">(</span><span class="kt">double</span> <span class="n">X</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"%f</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">X</span><span class="p">);</span>
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+<span class="c1">// Main driver code.</span>
+<span class="c1">//===----------------------------------------------------------------------===//</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
+  <span class="n">InitializeNativeTarget</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmPrinter</span><span class="p">();</span>
+  <span class="n">InitializeNativeTargetAsmParser</span><span class="p">();</span>
+
+  <span class="c1">// Install standard binary operators.</span>
+  <span class="c1">// 1 is lowest precedence.</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'<'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'+'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'-'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">20</span><span class="p">;</span>
+  <span class="n">BinopPrecedence</span><span class="p">[</span><span class="sc">'*'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">40</span><span class="p">;</span> <span class="c1">// highest.</span>
+
+  <span class="c1">// Prime the first token.</span>
+  <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"ready> "</span><span class="p">);</span>
+  <span class="n">getNextToken</span><span class="p">();</span>
+
+  <span class="n">TheJIT</span> <span class="o">=</span> <span class="n">llvm</span><span class="o">::</span><span class="n">make_unique</span><span class="o"><</span><span class="n">KaleidoscopeJIT</span><span class="o">></span><span class="p">();</span>
+
+  <span class="n">InitializeModuleAndPassManager</span><span class="p">();</span>
+
+  <span class="c1">// Run the main "interpreter loop" now.</span>
+  <span class="n">MainLoop</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="LangImpl05.html">Next: Extending the language: control flow</a></p>
+</div>
+</div>
+
+
+          </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="LangImpl05.html" title="5. Kaleidoscope: Extending the Language: Control Flow"
+             >next</a> |</li>
+        <li class="right" >
+          <a href="LangImpl03.html" title="3. Kaleidoscope: Code generation to LLVM IR"
+             >previous</a> |</li>
+  <li><a href="http://llvm.org/">LLVM Home</a> | </li>
+  <li><a href="../index.html">Documentation</a>»</li>
+
+          <li><a href="index.html" >LLVM Tutorial: Table of Contents</a> »</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        © Copyright 2003-2018, LLVM Project.
+      Last updated on 2018-05-10.
+      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file




More information about the llvm-commits mailing list