[llvm-commits] [www-releases] r129058 [2/5] - in /www-releases/trunk/2.9: ./ docs/ docs/CommandGuide/ docs/CommandGuide/html/ docs/CommandGuide/man/ docs/CommandGuide/man/man1/ docs/CommandGuide/ps/ docs/HistoricalNotes/ docs/img/ docs/tutorial/

Tanya Lattner tonic at nondot.org
Wed Apr 6 22:46:11 PDT 2011


Added: www-releases/trunk/2.9/docs/CommandGuide/ps/lli.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/lli.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/lli.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/lli.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,450 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 3
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 155.07<4c4c49283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<4c4c49283129>157.57 E/F1 10.95
+/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c6920ad206469726563746c792065>108 96 Q -.15<7865>-.15 G
+<637574652070726f6772616d732066726f6d204c4c>.15 E<564d20626974636f6465>
+-1 E F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c69>108
+124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5
+<5d5b>C F3<8c6c656e616d65>-2.5 E F0 2.5<5d5b>C F3<7072>-2.5 E -.1<6f67>
+-.45 G -.15<7261>.1 G 2.5<6d61>.15 G -.37<7267>-2.5 G<73>.37 E F0<5d>A
+F1<4445534352495054494f4e>72 141.6 Q F2<6c6c69>108 153.6 Q F0 1.246
+<6469726563746c792065>3.746 F -.15<7865>-.15 G 1.246
+<63757465732070726f6772616d7320696e>.15 F/F4 9/Times-Roman at 0 SF<4c4c>
+3.746 E<564d>-.9 E F0 1.246<626974636f646520666f726d61742e>3.746 F 1.246
+<49742074616b>6.246 F 1.246<657320612070726f6772616d20696e>-.1 F F4
+<4c4c>3.746 E<564d>-.9 E F0 1.246<626974636f646520666f726d617420616e64>
+3.746 F -.15<657865>108 165.6 S .141<6375746573206974207573696e67206120
+6a7573742d696e2d74696d6520636f6d70696c6572>.15 F 2.641<2c69>-.4 G 2.641
+<666f>-2.641 G .141<6e652069732061>-2.641 F -.25<7661>-.2 G .141<696c61
+626c6520666f72207468652063757272656e74206172636869746563747572652c206f72
+20616e20696e746572707265746572>.25 F<2e>-.55 E F2<6c6c69>5.142 E F0
+<74616b>108 177.6 Q .506<657320616c6c206f66207468652073616d6520636f6465
+2067656e657261746f72206f7074696f6e73206173206c6c632c2062>-.1 F .505
+<757420746865>-.2 F 3.005<7961>-.15 G .505<7265206f6e6c79206566>-3.005 F
+<6665637469>-.25 E .805 -.15<76652077>-.25 H<68656e>.15 E F2<6c6c69>
+3.005 E F0 .505<6973207573696e6720746865206a7573742d696e2d>3.005 F
+<74696d6520636f6d70696c6572>108 189.6 Q<2e>-.55 E<4966>108 206.4 Q F3
+<8c6c656e616d65>2.5 E F0<6973206e6f742073706563698c65642c207468656e>2.5
+E F2<6c6c69>2.5 E F0<726561647320746865>2.5 E F4<4c4c>2.5 E<564d>-.9 E
+F0<626974636f646520666f72207468652070726f6772616d2066726f6d207374616e64
+61726420696e7075742e>2.5 E<546865206f7074696f6e616c>108 223.2 Q F3<6172>
+2.5 E<6773>-.37 E F0<73706563698c6564206f6e2074686520636f6d6d616e64206c
+696e65206172652070617373656420746f207468652070726f6772616d206173206172>
+2.5 E<67756d656e74732e>-.18 E F1<47454e4552414c204f5054494f4e53>72 240 Q
+F2<ad66616b>108 252 Q<65ad6172>-.1 E<677630>-.1 E F0<3d>A F3 -.2<6578>C
+<6563757461626c65>.2 E F0<4f76>128 264 Q<65727269646520746865>-.15 E/F5
+10/Courier at 0 SF<617267765b305d>2.5 E F0 -.25<7661>2.5 G
+<6c75652070617373656420696e746f207468652065>.25 E -.15<7865>-.15 G
+<637574696e672070726f6772616d2e>.15 E F2<ad66>108 280.8 Q<6f72>-.25 E
+<6365ad696e746572>-.18 E<7072>-.1 E<65746572>-.18 E F0<3d>A F3
+<7b66616c7365>A<2c747275657d>-.1 E F0 1.988<49662073657420746f2074727565
+2c207573652074686520696e7465727072657465722065>128 292.8 R -.15<7665>
+-.25 G 4.489<6e69>.15 G 4.489<66616a>-4.489 G 1.989
+<7573742d696e2d74696d6520636f6d70696c65722069732061>-4.489 F -.25<7661>
+-.2 G 1.989<696c61626c6520666f722074686973206172636869746563747572652e>
+.25 F<446566>128 304.8 Q<61756c747320746f2066>-.1 E<616c73652e>-.1 E F2
+<ad68656c70>108 321.6 Q F0<5072696e7420612073756d6d617279206f6620636f6d
+6d616e64206c696e65206f7074696f6e732e>128 333.6 Q F2<ad6c6f6164>108 350.4
+Q F0<3d>A F3<707567696e8c6c656e616d65>A F0<436175736573>128 362.4 Q F2
+<6c6c69>2.5 E F0<746f206c6f61642074686520706c7567696e202873686172656420
+6f626a65637429206e616d6564>2.5 E F3<706c7567696e8c6c656e616d65>2.5 E F0
+<616e642075736520697420666f72206f7074696d697a6174696f6e2e>2.5 E F2
+<ad7374617473>108 379.2 Q F0 .422<5072696e742073746174697374696373206672
+6f6d2074686520636f64652d67656e65726174696f6e207061737365732e205468697320
+6973206f6e6c79206d65616e696e6766756c20666f7220746865206a7573742d696e2d74
+696d6520636f6d70696c6572>128 391.2 R<2c>-.4 E<61742070726573656e742e>128
+403.2 Q F2<ad74696d65ad706173736573>108 420 Q F0<5265636f72642074686520
+616d6f756e74206f662074696d65206e656564656420666f72206561636820636f64652d
+67656e65726174696f6e207061737320616e64207072696e7420697420746f207374616e
+64617264206572726f72>128 432 Q<2e>-.55 E F2<ad76>108 448.8 Q
+<657273696f6e>-.1 E F0<5072696e74206f7574207468652076>128 460.8 Q
+<657273696f6e206f66>-.15 E F2<6c6c69>2.5 E F0<616e642065>2.5 E
+<78697420776974686f757420646f696e6720616e>-.15 E
+<797468696e6720656c73652e>-.15 E F1 -.986<5441>72 477.6 S
+<52474554204f5054494f4e53>.986 E F2<ad6d747269706c65>108 489.6 Q F0<3d>A
+F3<746172>A -.1<6765>-.37 G 2.5<7474>.1 G<7269706c65>-2.5 E F0<4f76>128
+501.6 Q .09<6572726964652074686520746172>-.15 F .09<67657420747269706c65
+2073706563698c656420696e2074686520696e70757420626974636f6465208c6c652077
+697468207468652073706563698c656420737472696e672e>-.18 F .09
+<54686973206d617920726573756c7420696e>5.09 F 2.5<6163>128 513.6 S<726173
+6820696620796f75207069636b20616e2061726368697465637475726520776869636820
+6973206e6f7420636f6d70617469626c652077697468207468652063757272656e742073
+797374656d2e>-2.5 E F2<ad6d6172>108 530.4 Q<6368>-.18 E F0<3d>A F3<6172>
+A -.15<6368>-.37 G F0 .806<53706563696679207468652061726368697465637475
+726520666f7220776869636820746f2067656e657261746520617373656d626c79>128
+542.4 R 3.306<2c6f>-.65 G -.15<7665>-3.456 G .806
+<72726964696e672074686520746172>.15 F .805
+<67657420656e636f64656420696e2074686520626974636f6465>-.18 F 3.334
+<8c6c652e20536565>128 554.4 R .834<746865206f7574707574206f66>3.334 F F2
+.835<6c6c6320ad68656c70>3.334 F F0 .835<666f722061206c697374206f662076>
+3.335 F .835<616c696420617263686974656374757265732e>-.25 F .835
+<427920646566>5.835 F .835
+<61756c74207468697320697320696e6665727265642066726f6d20746865>-.1 F
+<746172>128 566.4 Q<67657420747269706c65206f72206175746f6465746563746564
+20746f207468652063757272656e74206172636869746563747572652e>-.18 E F2
+<ad6d637075>108 583.2 Q F0<3d>A F3<6370756e616d65>A F0 .178<537065636966
+7920612073706563698c63206368697020696e207468652063757272656e742061726368
+697465637475726520746f2067656e657261746520636f646520666f72>128 595.2 R
+5.178<2e42>-.55 G 2.678<7964>-5.178 G<6566>-2.678 E .178
+<61756c74207468697320697320696e6665727265642066726f6d>-.1 F .195
+<74686520746172>128 607.2 R .195<67657420747269706c6520616e64206175746f
+646574656374656420746f207468652063757272656e7420617263686974656374757265
+2e>-.18 F -.15<466f>5.196 G 2.696<72616c>.15 G .196<697374206f662061>
+-2.696 F -.25<7661>-.2 G .196<696c61626c6520435055732c207573653a>.25 F
+F2<6c6c766d2d6173>2.696 E 2.5<3c2f>128 619.2 S<6465>-2.5 E
+<762f6e756c6c207c206c6c6320ad6d6172>-.15 E
+<63683d78797a20ad6d6370753d68656c70>-.18 E<ad6d61747472>108 636 Q F0<3d>
+A F3<61312c2b61322cad61332c2e2e2e>A F0<4f76>128 648 Q .972
+<657272696465206f7220636f6e74726f6c2073706563698c6320617474726962>-.15 F
+.971<75746573206f662074686520746172>-.2 F .971
+<6765742c20737563682061732077686574686572>-.18 F F4<53494d44>3.471 E F0
+.971<6f7065726174696f6e732061726520656e61626c6564206f72>3.471 F 2.709
+<6e6f742e20546865>128 660 R<646566>2.709 E .209
+<61756c7420736574206f6620617474726962>-.1 F .209
+<7574657320697320736574206279207468652063757272656e74>-.2 F F4<435055>
+2.709 E F0 5.209<2e46>C .209<6f722061206c697374206f662061>-5.359 F -.25
+<7661>-.2 G .21<696c61626c6520617474726962>.25 F .21
+<757465732c207573653a>-.2 F F2<6c6c766d2d>2.71 E<6173203c202f6465>128
+672 Q<762f6e756c6c207c206c6c6320ad6d6172>-.15 E
+<63683d78797a20ad6d617474723d68656c70>-.18 E F1<464c4f>72 688.8 Q -1.04
+<4154>-.438 G<494e4720504f494e54204f5054494f4e53>1.04 E F2
+<ad64697361626c65ad657863657373ad6670ad7072>108 700.8 Q<65636973696f6e>
+-.18 E F0<44697361626c65206f7074696d697a6174696f6e732074686174206d617920
+696e637265617365208d6f6174696e6720706f696e7420707265636973696f6e2e>128
+712.8 Q 188.72<43565320323031302d31312d3136>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 155.07<4c4c49283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<4c4c49283129>157.57 E/F1 10
+/Times-Bold at 0 SF<ad656e61626c65ad6e6fad696e6673ad6670ad6d617468>108 84 Q
+F0<456e61626c65206f7074696d697a6174696f6e73207468617420617373756d65206e
+6f20496e662076>128 96 Q<616c7565732e>-.25 E F1
+<ad656e61626c65ad6e6fad6e616e73ad6670ad6d617468>108 112.8 Q F0
+<456e61626c65206f7074696d697a6174696f6e73207468617420617373756d65206e6f>
+128 124.8 Q/F2 9/Times-Roman at 0 SF -.315<4e41>2.5 G<4e>.315 E F0 -.25
+<7661>2.5 G<6c7565732e>.25 E F1
+<ad656e61626c65ad756e73616665ad6670ad6d617468>108 141.6 Q F0
+<436175736573>128 153.6 Q F1<6c6c69>2.5 E F0<746f20656e61626c65206f7074
+696d697a6174696f6e732074686174206d6179206465637265617365208d6f6174696e67
+20706f696e7420707265636973696f6e2e>2.5 E F1<ad736f6674ad8d6f6174>108
+170.4 Q F0<436175736573>128 182.4 Q F1<6c6c69>2.5 E F0
+<746f2067656e657261746520736f667477>2.5 E<617265208d6f6174696e6720706f69
+6e74206c6962726172792063616c6c7320696e7374656164206f662065717569>-.1 E
+-.25<7661>-.25 G<6c656e74206861726477>.25 E
+<61726520696e737472756374696f6e732e>-.1 E/F3 10.95/Times-Bold at 0 SF
+<434f44452047454e455241>72 199.2 Q<54494f4e204f5054494f4e53>-1.04 E F1
+<ad636f6465ad6d6f64656c>108 211.2 Q F0<3d>A/F4 10/Times-Italic at 0 SF
+<6d6f64656c>A F0<43686f6f73652074686520636f6465206d6f64656c2066726f6d3a>
+128 223.2 Q/F5 10/Courier at 0 SF
+<64656661756c743a205461726765742064656661756c7420636f6465206d6f64656c>
+152 241.2 Q<736d616c6c3a20536d616c6c20636f6465206d6f64656c>152 253.2 Q
+<6b65726e656c3a204b65726e656c20636f6465206d6f64656c>152 265.2 Q
+<6d656469756d3a204d656469756d20636f6465206d6f64656c>152 277.2 Q
+<6c617267653a204c6172676520636f6465206d6f64656c>152 289.2 Q F1
+<ad64697361626c65ad706f7374ad5241ad7363686564756c6572>108 306 Q F0
+<44697361626c65207363686564756c696e67206166746572207265>128 318 Q
+<67697374657220616c6c6f636174696f6e2e>-.15 E F1
+<ad64697361626c65ad7370696c6cad667573696e67>108 334.8 Q F0<44697361626c
+6520667573696e67206f66207370696c6c20636f646520696e746f20696e737472756374
+696f6e732e>128 346.8 Q F1<ad656e61626c65ad636f7272>108 363.6 Q
+<656374ad6568ad737570706f7274>-.18 E F0<4d616b>128 375.6 Q 2.5<6574>-.1
+G<686520ad6c6f>-2.5 E<776572696e>-.25 E -.2<766f>-.4 G .2 -.1<6b652070>
+.2 H<61737320696e736572742065>.1 E<7870656e7369>-.15 E -.15<7665>-.25 G
+2.5<2c62>.15 G<757420636f72726563742c>-2.7 E F2<4548>2.5 E F0
+<636f64652e>2.5 E F1<ad6a6974ad656e61626c65ad6568>108 392.4 Q F0<457863
+657074696f6e2068616e646c696e672073686f756c6420626520656e61626c656420696e
+20746865206a7573742d696e2d74696d6520636f6d70696c6572>128 404.4 Q<2e>-.55
+E F1<ad6a6f696ead6c69>108 421.2 Q -.1<7665>-.1 G<696e746572>.1 E -.1
+<7661>-.1 G<6c73>.1 E F0<436f616c6573636520636f706965732028646566>128
+433.2 Q<61756c743d74727565292e>-.1 E F1<ad6e6f7a6572>108 450 Q
+<6fad696e697469616c697a6564ad696ead627373>-.18 E F0<446f6e27>2.5 E 2.5
+<7470>-.18 G<6c616365207a65726f2d696e697469616c697a65642073796d626f6c73
+20696e746f20746865>-2.5 E F2<425353>2.5 E F0<73656374696f6e2e>2.5 E F1
+<ad7072>108 462 Q<65ad5241ad7363686564>-.18 E F0<3d>A F4<7363>A
+<686564756c6572>-.15 E F0
+<496e737472756374696f6e207363686564756c6572732061>128 474 Q -.25<7661>
+-.2 G<696c61626c6520286265666f7265207265>.25 E
+<67697374657220616c6c6f636174696f6e293a>-.15 E F5<3d64656661756c743a2042
+657374207363686564756c657220666f722074686520746172676574>152 492 Q<3d6e
+6f6e653a204e6f207363686564756c696e673a2062726561647468206669727374207365
+7175656e63696e67>152 504 Q<3d73696d706c653a2053696d706c652074776f207061
+7373207363686564756c696e673a206d696e696d697a6520637269746963616c20706174
+6820616e64206d6178696d697a652070726f636573736f72207574696c697a6174696f6e>
+152 516 Q<3d73696d706c65ad6e6f6974696e3a2053696d706c652074776f2070617373
+207363686564756c696e673a2053616d652061732073696d706c65206578636570742075
+73696e672067656e65726963206c6174656e6379>152 528 Q<3d6c697374ad62757272
+3a20426f74746f6dad757020726567697374657220726564756374696f6e206c69737420
+7363686564756c696e67>152 540 Q<3d6c697374ad746472723a20546f70ad646f776e
+20726567697374657220726564756374696f6e206c697374207363686564756c696e67>
+152 552 Q<3d6c697374ad74643a20546f70ad646f776e206c697374207363686564756c
+657220ad7072696e74ad6d616368696e65696e7374727320ad205072696e742067656e65
+7261746564206d616368696e6520636f6465>152 564 Q F1<ad72>108 580.8 Q
+<6567616c6c6f63>-.18 E F0<3d>A F4<616c6c6f6361746f72>A F0<5265>128 592.8
+Q<67697374657220616c6c6f6361746f7220746f207573652028646566>-.15 E
+<61756c743d6c696e6561727363616e29>-.1 E F5<3d626967626c6f636b3a20426967
+ad626c6f636b20726567697374657220616c6c6f6361746f72>152 610.8 Q<3d6c696e
+6561727363616e3a206c696e656172207363616e20726567697374657220616c6c6f6361
+746f72203d6c6f63616c20ad>152 622.8 Q
+<6c6f63616c20726567697374657220616c6c6f6361746f72>18 E
+<3d73696d706c653a2073696d706c6520726567697374657220616c6c6f6361746f72>
+152 634.8 Q F1<ad72>108 651.6 Q<656c6f636174696f6ead6d6f64656c>-.18 E F0
+<3d>A F4<6d6f64656c>A F0
+<43686f6f73652072656c6f636174696f6e206d6f64656c2066726f6d3a>128 663.6 Q
+F5<3d64656661756c743a205461726765742064656661756c742072656c6f636174696f
+6e206d6f64656c>152 681.6 Q<3d7374617469633a204e6f6ead72656c6f6361746162
+6c6520636f6465203d70696320ad>152 693.6 Q<46756c6c792072656c6f6361746162
+6c652c20706f736974696f6e20696e646570656e64656e7420636f6465>18 E<3d64796e
+616d6963ad6e6fad7069633a2052656c6f63617461626c652065787465726e616c207265
+666572656e6365732c206e6f6ead72656c6f63617461626c6520636f6465>152 705.6 Q
+F0 188.72<43565320323031302d31312d3136>72 768 R<32>205.67 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 155.07<4c4c49283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<4c4c49283129>157.57 E/F1 10
+/Times-Bold at 0 SF<ad7370696c6c6572>108 84 Q F0
+<5370696c6c657220746f207573652028646566>128 96 Q<61756c743d6c6f63616c29>
+-.1 E/F2 10/Courier at 0 SF<3d73696d706c653a2073696d706c65207370696c6c6572>
+152 114 Q<3d6c6f63616c3a206c6f63616c207370696c6c6572>152 126 Q F1
+<ad783836ad61736dad73796e746178>108 142.8 Q F0<3d>A/F3 10/Times-Italic at 0
+SF<73796e746178>A F0<43686f6f7365207374796c65206f6620636f646520746f2065
+6d69742066726f6d20583836206261636b>128 154.8 Q<656e643a>-.1 E F2
+<3d6174743a20456d69742041542654ad7374796c6520617373656d626c79>152 172.8
+Q<3d696e74656c3a20456d697420496e74656cad7374796c6520617373656d626c79>152
+184.8 Q/F4 10.95/Times-Bold at 0 SF<45584954205354>72 201.6 Q -1.04<4154>
+-.986 G<5553>1.04 E F0<4966>108 213.6 Q F1<6c6c69>2.964 E F0 -.1<6661>
+2.963 G .463
+<696c7320746f206c6f6164207468652070726f6772616d2c2069742077696c6c2065>.1
+F .463<786974207769746820616e2065>-.15 F .463
+<78697420636f6465206f6620312e>-.15 F .463
+<4f74686572776973652c2069742077696c6c2072657475726e207468652065>5.463 F
+.463<78697420636f6465206f66>-.15 F<7468652070726f6772616d2069742065>108
+225.6 Q -.15<7865>-.15 G<63757465732e>.15 E F4<53454520414c534f>72 242.4
+Q F0<6c6c63>108 254.4 Q F4 -.548<4155>72 271.2 S<54484f52>.548 E F0
+<4d61696e7461696e656420627920746865>108 283.2 Q/F5 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d31312d3136>72 768 R<33>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ar.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ar.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ar.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ar.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,938 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Courier
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 5
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Courier
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Courier at 0 ENC0/Courier RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.07<564d2d4152283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>128.57 E<564d2d4152283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad617220ad204c4c>108 96 Q<564d206172636869>-1 E -.15<7665>-.25
+G<72>.15 E F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF
+<6c6c766d2d6172>108 124.8 Q F0<5bad5d7b646d70717274787d5b5261628c6b>2.5
+E<6f757a5d205b72656c706f735d205b636f756e745d203c6172636869>-.1 E -.15
+<7665>-.25 G 2.5<3e5b>.15 G<8c6c65732e2e2e5d>-2.5 E F1
+<4445534352495054494f4e>72 141.6 Q F0<546865>108 153.6 Q F2
+<6c6c766d2d6172>3.486 E F0 .986<636f6d6d616e642069732073696d696c61722074
+6f2074686520636f6d6d6f6e20556e6978207574696c697479>3.486 F<2c>-.65 E/F3
+10/Courier at 0 SF<6172>3.486 E F0 3.486<2e49>C 3.486<7461>-3.486 G
+<72636869>-3.486 E -.15<7665>-.25 G 3.486<7373>.15 G -2.15 -.25
+<65762065>-3.486 H .986
+<72616c208c6c657320746f67657468657220696e746f2061>.25 F 1.061<73696e676c
+65208c6c652e2054686520696e74656e7420666f72207468697320697320746f2070726f
+64756365206172636869>108 165.6 R 1.362 -.15<7665206c>-.25 H 1.062
+<6962726172696573206279>.15 F/F4 9/Times-Roman at 0 SF<4c4c>3.562 E<564d>
+-.9 E F0 1.062<626974636f646520746861742063616e206265206c696e6b>3.562 F
+1.062<656420696e746f20616e>-.1 F F4<4c4c>108 177.6 Q<564d>-.9 E F0 .471
+<70726f6772616d2e20486f>2.971 F<7765>-.25 E -.15<7665>-.25 G 1.271 -.4
+<722c2074>.15 H .47<6865206172636869>.4 F .77 -.15<76652063>-.25 H .47
+<616e20636f6e7461696e20616e>.15 F 2.97<796b>-.15 G .47
+<696e64206f66208c6c652e20427920646566>-2.97 F<61756c742c>-.1 E F2
+<6c6c766d2d6172>2.97 E F0 .47<67656e65726174657320612073796d626f6c>2.97
+F .212<7461626c652074686174206d616b>108 189.6 R .212
+<6573206c696e6b696e672066>-.1 F .212<61737465722062656361757365206f6e6c
+79207468652073796d626f6c207461626c65206e6565647320746f20626520636f6e7375
+6c7465642c206e6f74206561636820696e6469>-.1 F .213<76696475616c208c6c65>
+-.25 F<6d656d626572206f6620746865206172636869>108 201.6 Q -.15<7665>-.25
+G<2e>.15 E<546865>108 218.4 Q F2<6c6c766d2d6172>3.299 E F0 .799
+<636f6d6d616e642063616e206265207573656420746f>3.299 F/F5 10
+/Times-Italic at 0 SF -.37<7265>3.299 G<6164>.37 E F0<626f7468>3.299 E F4
+<53565234>3.299 E F0<616e64>3.299 E F4<425344>3.299 E F0 .799
+<7374796c65206172636869>3.299 F 1.099 -.15<7665208c>-.25 H .799
+<6c65732e20486f>.15 F<7765>-.25 E -.15<7665>-.25 G 1.599 -.4<722c2069>
+.15 H 3.298<7463>.4 G .798<616e6e6f74206265>-3.298 F .235
+<7573656420746f207772697465207468656d2e>108 230.4 R .235
+<5768696c6520746865>5.235 F F2<6c6c766d2d6172>2.735 E F0 .235
+<636f6d6d616e642070726f6475636573208c6c6573207468617420617265>2.735 F F5
+<616c6d6f7374>2.735 E F0 .236
+<6964656e746963616c20746f2074686520666f726d61742075736564>2.736 F .407
+<6279206f74686572>108 242.4 R F3<6172>2.907 E F0 .406
+<696d706c656d656e746174696f6e732c20697420686173207477>2.907 F 2.906
+<6f73>-.1 G .406<69676e698c63616e74206465706172747572657320696e206f7264
+657220746f206d616b>-2.906 F 2.906<6574>-.1 G .406<6865206172636869>
+-2.906 F .706 -.15<76652061>-.25 H .406<7070726f70726961746520666f72>.15
+F F4<4c4c>108 254.4 Q<564d>-.9 E F0 2.666<2e54>C .166
+<6865208c727374206465706172747572652069732074686174>-2.666 F F2
+<6c6c766d2d6172>2.667 E F0 .167<6f6e6c792075736573>2.667 F F4<42534434>
+2.667 E F0 .167<2e34207374796c65206c6f6e672070617468206e616d657320287374
+6f72656420696d6d6564696174656c79206166746572>B .401
+<746865206865616465722920616e64206e65>108 266.4 R -.15<7665>-.25 G 2.901
+<7263>.15 G .4<6f6e7461696e73206120737472696e67207461626c6520666f72206c
+6f6e67206e616d65732e20546865207365636f6e64206465706172747572652069732074
+686174207468652073796d626f6c207461626c65>-2.901 F 1.556
+<697320666f726d6174656420666f72206566>108 278.4 R 1.557<8c6369656e742063
+6f6e737472756374696f6e206f6620616e20696e2d6d656d6f7279206461746120737472
+7563747572652074686174207065726d69747320726170696420287265642d626c61636b
+207472656529>-.25 F .508<6c6f6f6b7570732e20436f6e73657175656e746c79>108
+290.4 R 3.008<2c61>-.65 G<72636869>-3.008 E -.15<7665>-.25 G 3.007<7370>
+.15 G .507<726f64756365642077697468>-3.007 F F2<6c6c766d2d6172>3.007 E
+F0 .507<757375616c6c792077>3.007 F<6f6e27>-.1 E 3.007<7462>-.18 G 3.007
+<6572>-3.007 G .507
+<65616461626c65206f72206564697461626c65207769746820616e>-3.007 F<79>-.15
+E F3<6172>3.007 E F0 1.623<696d706c656d656e746174696f6e206f722075736566
+756c20666f72206c696e6b696e672e>108 302.4 R 1.623<5573696e6720746865>
+6.623 F F3<66>4.123 E F0 1.623<6d6f64698c657220746f208d617474656e208c6c
+65206e616d65732077696c6c206d616b>4.123 F 4.124<6574>-.1 G 1.624
+<6865206172636869>-4.124 F -.15<7665>-.25 G 1.326
+<7265616461626c65206279206f74686572>108 314.4 R F3<6172>3.826 E F0 1.325
+<696d706c656d656e746174696f6e732062>3.825 F 1.325<7574206e6f7420666f7220
+6c696e6b696e672062656361757365207468652073796d626f6c207461626c6520666f72
+6d617420666f72>-.2 F F4<4c4c>3.825 E<564d>-.9 E F0<6973>3.825 E 1.06
+<756e697175652e20496620616e>108 326.4 R F4<53565234>3.56 E F0<6f72>3.56
+E F4<425344>3.56 E F0 1.06<7374796c65206172636869>3.56 F 1.36 -.15
+<76652069>-.25 H 3.56<7375>.15 G 1.06<736564207769746820746865>-3.56 F
+F3<72>3.56 E F0 1.06<287265706c61636529206f72>3.56 F F3<71>3.56 E F0
+1.06<28717569636b2075706461746529206f7065726174696f6e732c20746865>3.56 F
+<6172636869>108 338.4 Q 2.858 -.15<76652077>-.25 H 2.557
+<696c6c206265207265636f6e737472756374656420696e>.15 F F4<4c4c>5.057 E
+<564d>-.9 E F0 2.557<666f726d61742e2054686973206d65616e7320746861742074
+686520737472696e67207461626c652077696c6c2062652064726f707065642028696e>
+5.057 F 1.752<6465666572656e636520746f>108 350.4 R F4<425344>4.252 E F0
+1.752<342e34206c6f6e67206e616d65732920616e6420616e>4.252 F F4<4c4c>4.252
+E<564d>-.9 E F0 1.752
+<73796d626f6c207461626c652077696c6c2062652061646465642028627920646566>
+4.252 F 1.753<61756c74292e205468652073797374656d>-.1 F
+<73796d626f6c207461626c652077696c6c2062652072657461696e65642e>108 362.4
+Q<4865726527>108 379.2 Q 2.5<7377>-.55 G<68657265>-2.5 E F2
+<6c6c766d2d6172>2.5 E F0<646570617274732066726f6d20707265>2.5 E
+<76696f7573>-.25 E F3<6172>2.5 E F0<696d706c656d656e746174696f6e733a>2.5
+E F5<53796d626f6c2054>108 396 Q<61626c65>-.92 E F0<53696e6365>128 408 Q
+F2<6c6c766d2d6172>4.948 E F0 2.448
+<697320696e74656e64656420746f206172636869>4.948 F 2.747 -.15<76652062>
+-.25 H 2.447
+<6974636f6465208c6c65732c207468652073796d626f6c207461626c652077>.15 F
+<6f6e27>-.1 E 4.947<746d>-.18 G<616b>-4.947 E 4.947<656d>-.1 G 2.447
+<7563682073656e736520746f>-4.947 F<616e>128 420 Q .223<797468696e672062>
+-.15 F<7574>-.2 E F4<4c4c>2.723 E<564d>-.9 E F0 2.723<2e43>C
+<6f6e73657175656e746c79>-2.723 E 2.723<2c74>-.65 G .223
+<68652073796d626f6c207461626c6527>-2.723 F 2.723<7366>-.55 G .223<6f726d
+617420686173206265656e2073696d706c698c65642e20497420636f6e73697374732073
+696d706c79206f66>-2.723 F 3.974<6173>128 432 S 1.473<657175656e6365206f
+66207061697273206f662061208c6c65206d656d62657220696e6465>-3.974 F 3.973
+<786e>-.15 G 1.473<756d62657220617320616e>-3.973 F F4<4c5342>3.973 E F0
+1.473<346279746520696e7465>3.973 F 1.473
+<67657220616e642061206e756c6c2d7465726d696e61746564>-.15 F
+<737472696e672e>128 444 Q F5<4c6f6e672050>108 460.8 Q<61746873>-.8 E F0
+<536f6d65>128 472.8 Q F3<6172>4.864 E F0 2.364
+<696d706c656d656e746174696f6e732028>4.864 F F4<53565234>A F0 4.864<2975>
+C 2.364<73652061207365706172617465208c6c65206d656d62657220746f207265636f
+7264206c6f6e672070617468206e616d657320283e203135>-4.864 F
+<63686172616374657273292e>128 484.8 Q F2<6c6c766d2d6172>3.047 E F0
+<74616b>3.047 E .547<657320746865>-.1 F F4<425344>3.047 E F0 .546
+<342e3420616e64204d6163>3.047 F F4<4f53>3.046 E F0 3.046<5861>3.046 G
+.546<7070726f61636820776869636820697320746f2073696d706c792073746f726520
+7468652066756c6c2070617468>-3.046 F .771<6e616d6520696d6d6564696174656c
+7920707265636564696e6720746865206461746120666f7220746865208c6c652e205468
+652070617468206e616d65206973206e756c6c207465726d696e6174656420616e64206d
+617920636f6e7461696e>128 496.8 R
+<74686520736c61736820282f2920636861726163746572>128 508.8 Q<2e>-.55 E F5
+<436f6d7072>108 525.6 Q<657373696f6e>-.37 E F2<6c6c766d2d6172>128 537.6
+Q F0 1.227<63616e20636f6d707265737320746865206d656d62657273206f6620616e
+206172636869>3.727 F 1.527 -.15<76652074>-.25 H 3.727<6f73>.15 G -2.25
+-.2<61762065>-3.727 H 1.226<73706163652e2054686520636f6d7072657373696f6e
+207573656420646570656e6473206f6e>3.927 F<7768617427>128 549.6 Q 3.528
+<7361>-.55 G -.25<7661>-3.728 G 1.028<696c61626c65206f6e2074686520706c61
+74666f726d20616e6420776861742063686f6963657320746865>.25 F F4<4c4c>3.528
+E<564d>-.9 E F0 1.028<436f6d70726573736f72207574696c697479206d616b>3.528
+F 1.028<65732e2049742067656e6572616c6c79>-.1 F -.1<6661>128 561.6 S -.2
+<766f>-.1 G .717<727320627a6970322062>.2 F .717
+<75742077696c6c2073656c656374206265747765656e2060>-.2 F .717
+<606e6f20636f6d7072657373696f6e27>-.74 F 3.217<276f>-.74 G 3.217<7262>
+-3.217 G .716<7a69703220646570656e64696e67206f6e2077686174206d616b>
+-3.217 F .716<65732073656e736520666f72>-.1 F<746865208c6c6527>128 573.6
+Q 2.5<7363>-.55 G<6f6e74656e742e>-2.5 E F5<446972>108 590.4 Q
+<6563746f7279205265637572>-.37 E<73696f6e>-.1 E F0<4d6f7374>128 602.4 Q
+F3<6172>3.202 E F0 .703<696d706c656d656e746174696f6e7320646f206e6f742072
+656375727365207468726f756768206469726563746f726965732062>3.202 F .703
+<75742073696d706c792069676e6f7265206469726563746f7269657320696620746865>
+-.2 F 3.203<7961>-.15 G<7265>-3.203 E .125
+<70726573656e74656420746f207468652070726f6772616d20696e20746865>128
+614.4 R F5<8c6c6573>2.625 E F0<6f7074696f6e2e>2.625 E F2<6c6c766d2d6172>
+2.625 E F0 2.625<2c68>C -.25<6f77>-2.625 G -2.15 -.25<65762065>.25 H
+.925 -.4<722c2063>.25 H .125<616e2072656375727365207468726f756768206469
+726563746f72792073747275637475726573>.4 F<616e642061646420616c6c20746865
+208c6c657320756e6465722061206469726563746f7279>128 626.4 Q 2.5<2c69>-.65
+G 2.5<6672>-2.5 G<65717565737465642e>-2.5 E/F6 9/Times-Italic at 0 SF -.162
+<544f>108 643.2 S<43>.162 E F5 -1.11<5665>2.5 G
+<72626f7365204f7574707574>1.11 E F0<5768656e>128 655.2 Q F2
+<6c6c766d2d6172>2.838 E F0 .339<7072696e7473206f7574207468652076>2.838 F
+.339<6572626f7365207461626c65206f6620636f6e74656e74732028>-.15 F F3
+<7476>A F0 .339<6f7074696f6e292c2069742070726563656465732074686520757375
+616c206f757470757420776974682061>2.839 F .361<63686172616374657220696e64
+69636174696e6720746865206261736963206b696e64206f6620636f6e74656e7420696e
+20746865208c6c652e204120626c616e6b206d65616e7320746865208c6c652069732061
+207265>128 667.2 R .361<67756c6172208c6c652e204120275a27>-.15 F .103<6d
+65616e7320746865208c6c6520697320636f6d707265737365642e204120274227206d65
+616e7320746865208c6c6520697320616e>128 679.2 R F4<4c4c>2.603 E<564d>-.9
+E F0 .103<626974636f6465208c6c652e20416e20275327206d65616e7320746865208c
+6c6520697320746865>2.603 F<73796d626f6c207461626c652e>128 691.2 Q 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.07<564d2d4152283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>128.57 E<564d2d4152283129>-1
+E/F1 10.95/Times-Bold at 0 SF<4f5054494f4e53>72 84 Q F0 .277
+<546865206f7074696f6e7320746f>108 96 R/F2 10/Times-Bold at 0 SF
+<6c6c766d2d6172>2.777 E F0 .277
+<61726520636f6d70617469626c652077697468206f74686572>2.777 F/F3 10
+/Courier at 0 SF<6172>2.777 E F0 2.777
+<696d706c656d656e746174696f6e732e20486f>2.777 F<7765>-.25 E -.15<7665>
+-.25 G 1.076 -.4<722c2074>.15 H .276<68657265206172652061206665>.4 F
+2.776<776d>-.25 G<6f64698c657273>-2.776 E<28>108 108 Q/F4 10
+/Times-Italic at 0 SF<7a52>A F0 2.912<2974>C .412
+<68617420617265206e6f7420666f756e6420696e206f74686572>-2.912 F F3<6172>
+2.912 E F0 .413<732e20546865206f7074696f6e7320746f>B F2<6c6c766d2d6172>
+2.913 E F0 .413<7370656369667920612073696e676c65206261736963206f70657261
+74696f6e20746f20706572666f726d206f6e>2.913 F .226<746865206172636869>108
+120 R -.15<7665>-.25 G 2.726<2c6176>.15 G .226<617269657479206f66206d6f
+64698c65727320666f722074686174206f7065726174696f6e2c20746865206e616d6520
+6f6620746865206172636869>-2.976 F .525 -.15<7665208c>-.25 H .225
+<6c652c20616e6420616e206f7074696f6e616c206c697374206f66208c6c65>.15 F<6e
+616d65732e205468657365206f7074696f6e7320617265207573656420746f2064657465
+726d696e6520686f>108 132 Q<77>-.25 E F2<6c6c766d2d6172>2.5 E F0
+<73686f756c642070726f6365737320746865206172636869>2.5 E .3 -.15
+<7665208c>-.25 H<6c652e>.15 E .033
+<546865204f7065726174696f6e7320616e64204d6f64698c657273206172652065>108
+148.8 R .033<78706c61696e656420696e207468652073656374696f6e732062656c6f>
+-.15 F 1.333 -.65<772e2054>-.25 H .034<6865206d696e696d616c20736574206f
+66206f7074696f6e73206973206174206c65617374206f6e65>.65 F .609
+<6f70657261746f7220616e6420746865206e616d65206f6620746865206172636869>
+108 160.8 R -.15<7665>-.25 G 3.109<2e54>.15 G .609
+<79706963616c6c79206172636869>-3.909 F .908 -.15<7665208c>-.25 H .608
+<6c657320656e6420776974682061>.15 F F3<2e61>3.108 E F0<737566>3.108 E
+.608<8c782c2062>-.25 F .608
+<75742074686973206973206e6f742072657175697265642e>-.2 F -.15<466f>108
+172.8 S<6c6c6f>.15 E .15<77696e6720746865>-.25 F F4<6172>2.65 E -.15
+<6368>-.37 G<6976652d6e616d65>.15 E F0 .15
+<636f6d65732061206c697374206f66>2.65 F F4<8c6c6573>2.65 E F0 .151<746861
+7420696e646963617465207468652073706563698c63206d656d62657273206f66207468
+65206172636869>2.651 F .451 -.15<76652074>-.25 H 2.651<6f6f>.15 G
+<706572617465>-2.651 E .049<6f6e2e20496620746865>108 184.8 R F4
+<8c6c6573>2.549 E F0 .048<6f7074696f6e206973206e6f742073706563698c65642c
+2069742067656e6572616c6c79206d65616e73206569746865722060>2.549 F
+<606e6f6e6527>-.74 E 2.548<276f>-.74 G 2.548<7260>-2.548 G<60616c6c27>
+-3.288 E 2.548<276d>-.74 G .048
+<656d626572732c20646570656e64696e67206f6e20746865>-2.548 F
+<6f7065726174696f6e2e>108 196.8 Q F2<4f7065726174696f6e73>87 213.6 Q F0
+15<6444>108 225.6 S .682
+<656c657465208c6c65732066726f6d20746865206172636869>-15 F -.15<7665>-.25
+G 3.182<2e4e>.15 G 3.183<6f6d>-3.182 G .683<6f64698c65727320617265206170
+706c696361626c6520746f2074686973206f7065726174696f6e2e>-3.183 F<546865>
+5.683 E F4<8c6c6573>3.183 E F0 .683<6f7074696f6e732073706563696679>3.183
+F 1.528<7768696368206d656d626572732073686f756c642062652072656d6f>128
+237.6 R -.15<7665>-.15 G 4.027<6466>.15 G 1.527
+<726f6d20746865206172636869>-4.027 F -.15<7665>-.25 G 4.027<2e49>.15 G
+4.027<7469>-4.027 G 4.027<736e>-4.027 G 1.527<6f7420616e206572726f722069
+6620612073706563698c6564208c6c6520646f6573206e6f74>-4.027 F
+<61707065617220696e20746865206172636869>128 249.6 Q -.15<7665>-.25 G 5
+<2e49>.15 G 2.5<666e>-5 G<6f>-2.5 E F4<8c6c6573>2.5 E F0
+<6172652073706563698c65642c20746865206172636869>2.5 E .3 -.15<76652069>
+-.25 H 2.5<736e>.15 G<6f74206d6f64698c65642e>-2.5 E<6d5b6162695d>108
+266.4 Q<4d6f>128 278.4 Q 2.658 -.15<7665208c>-.15 H 2.358
+<6c65732066726f6d206f6e65206c6f636174696f6e20696e20746865206172636869>
+.15 F 2.658 -.15<76652074>-.25 H 4.858<6f61>.15 G<6e6f74686572>-4.858 E
+4.858<2e54>-.55 G<6865>-4.858 E F4<61>4.858 E F0<2c>A F4<62>4.858 E F0
+4.859<2c61>C<6e64>-4.859 E F4<69>4.859 E F0 2.359
+<6d6f64698c657273206170706c7920746f2074686973>4.859 F .508
+<6f7065726174696f6e2e20546865>128 290.4 R F4<8c6c6573>3.008 E F0 .507
+<77696c6c20616c6c206265206d6f>3.008 F -.15<7665>-.15 G 3.007<6474>.15 G
+3.007<6f74>-3.007 G .507<6865206c6f636174696f6e206769>-3.007 F -.15
+<7665>-.25 G 3.007<6e62>.15 G 3.007<7974>-3.007 G .507<6865206d6f64698c
+6572732e204966206e6f206d6f64698c6572732061726520757365642c>-3.007 F
+<746865208c6c65732077696c6c206265206d6f>128 302.4 Q -.15<7665>-.15 G 2.5
+<6474>.15 G 2.5<6f74>-2.5 G<686520656e64206f6620746865206172636869>-2.5
+E -.15<7665>-.25 G 2.5<2e49>.15 G 2.5<666e>-2.5 G<6f>-2.5 E F4<8c6c6573>
+2.5 E F0<6172652073706563698c65642c20746865206172636869>2.5 E .3 -.15
+<76652069>-.25 H 2.5<736e>.15 G<6f74206d6f64698c65642e>-2.5 E<705b6b5d>
+108 319.2 Q .229<5072696e74208c6c657320746f20746865207374616e6461726420
+6f75747075742e20546865>128 331.2 R F4<6b>2.729 E F0 .23<6d6f64698c657220
+6170706c69657320746f2074686973206f7065726174696f6e2e2054686973206f706572
+6174696f6e2073696d706c79207072696e7473>2.729 F<746865>128 343.2 Q F4
+<8c6c6573>2.694 E F0 .194<696e6469636174656420746f20746865207374616e6461
+7264206f75747075742e204966206e6f>2.694 F F4<8c6c6573>2.694 E F0 .193
+<6172652073706563698c65642c2074686520656e74697265206172636869>2.693 F
+.493 -.15<76652069>-.25 H 2.693<7370>.15 G 2.693
+<72696e7465642e205072696e74696e67>-2.693 F .024
+<626974636f6465208c6c657320697320696c6c2d6164766973656420617320746865>
+128 355.2 R 2.524<796d>-.15 G .024<6967687420636f6e6675736520796f757220
+7465726d696e616c2073657474696e67732e20546865>-2.524 F F4<70>2.524 E F0
+.024<6f7065726174696f6e206e65>2.524 F -.15<7665>-.25 G 2.524<726d>.15 G
+<6f64698c6573>-2.524 E<746865206172636869>128 367.2 Q -.15<7665>-.25 G
+<2e>.15 E<715b52667a5d>108 384 Q .509<517569636b6c7920617070656e64208c6c
+657320746f2074686520656e64206f6620746865206172636869>128 396 R -.15
+<7665>-.25 G 3.008<2e54>.15 G<6865>-3.008 E F4<52>3.008 E F0<2c>A F4<66>
+3.008 E F0 3.008<2c61>C<6e64>-3.008 E F4<7a>3.008 E F0 .508
+<6d6f64698c657273206170706c7920746f2074686973206f7065726174696f6e2e>
+3.008 F<54686973>5.508 E .424
+<6f7065726174696f6e20717569636b6c79206164647320746865>128 408 R F4
+<8c6c6573>2.924 E F0 .425<746f20746865206172636869>2.924 F .725 -.15
+<76652077>-.25 H .425<6974686f757420636865636b696e6720666f72206475706c69
+636174657320746861742073686f756c642062652072656d6f>.15 F -.15<7665>-.15
+G<64>.15 E .56<8c7273742e204966206e6f>128 420 R F4<8c6c6573>3.06 E F0
+.56<6172652073706563698c65642c20746865206172636869>3.06 F .859 -.15
+<76652069>-.25 H 3.059<736e>.15 G .559<6f74206d6f64698c65642e>-3.059 F
+.559<42656361757365206f66207468652077>5.559 F .559<61792074686174>-.1 F
+F2<6c6c766d2d6172>3.059 E F0<636f6e73747275637473>3.059 E
+<746865206172636869>128 432 Q .3 -.15<7665208c>-.25 H
+<6c652c2069747320647562696f7573207768657468657220746865>.15 E F4<71>2.5
+E F0<6f7065726174696f6e20697320616e>2.5 E 2.5<7966>-.15 G
+<6173746572207468616e20746865>-2.6 E F4<72>2.5 E F0
+<6f7065726174696f6e2e>2.5 E<725b52616266757a5d>108 448.8 Q .078
+<5265706c616365206f7220696e73657274208c6c65206d656d626572732e20546865>
+128 460.8 R F4<52>2.578 E F0<2c>A F4<61>2.578 E F0<2c>A F4<62>2.578 E F0
+<2c>A F4<66>2.578 E F0<2c>A F4<75>2.578 E F0 2.578<2c61>C<6e64>-2.578 E
+F4<7a>2.578 E F0 .078<6d6f64698c657273206170706c7920746f2074686973206f70
+65726174696f6e2e2054686973206f7065726174696f6e>2.578 F 1.012
+<77696c6c207265706c6163652065>128 472.8 R<78697374696e67>-.15 E F4
+<8c6c6573>3.512 E F0 1.012<6f7220696e73657274207468656d2061742074686520
+656e64206f6620746865206172636869>3.512 F 1.312 -.15<76652069>-.25 H
+3.512<6674>.15 G<6865>-3.512 E 3.512<7964>-.15 G 3.512<6f6e>-3.512 G
+1.012<6f742065>-3.512 F 1.012<786973742e204966206e6f>-.15 F F4<8c6c6573>
+3.511 E F0<617265>3.511 E<73706563698c65642c20746865206172636869>128
+484.8 Q .3 -.15<76652069>-.25 H 2.5<736e>.15 G<6f74206d6f64698c65642e>
+-2.5 E 3.06<745b765d205072696e74>108 501.6 R .334
+<746865207461626c65206f6620636f6e74656e74732e2057>2.834 F .334
+<6974686f757420616e>-.4 F 2.834<796d>-.15 G .335<6f64698c6572732c207468
+6973206f7065726174696f6e206a757374207072696e747320746865206e616d6573206f
+6620746865206d656d62657273>-2.834 F 3.146
+<746f20746865207374616e64617264206f75747075742e2057>128 513.6 R 3.146
+<69746820746865>-.4 F F4<76>5.645 E F0<6d6f64698c6572>5.645 E<2c>-.4 E
+F2<6c6c766d2d6172>5.645 E F0 3.145<616c736f207072696e7473206f7574207468
+65208c6c6520747970652028423d626974636f64652c>5.645 F 1.085<5a3d636f6d70
+7265737365642c20533d73796d626f6c207461626c652c20626c616e6b3d7265>128
+525.6 R 1.086<67756c6172208c6c65292c20746865207065726d697373696f6e206d6f
+64652c20746865206f>-.15 F 1.086<776e657220616e642067726f75702c20746865>
+-.25 F .708<73697a652c20616e642074686520646174652e20496620616e>128 537.6
+R<79>-.15 E F4<8c6c6573>3.208 E F0 .708<6172652073706563698c65642c207468
+65206c697374696e67206973206f6e6c7920666f722074686f7365208c6c65732e204966
+206e6f>3.208 F F4<8c6c6573>3.208 E F0 .708<6172652073706563698c65642c>
+3.208 F<746865207461626c65206f6620636f6e74656e747320666f7220746865207768
+6f6c65206172636869>128 549.6 Q .3 -.15<76652069>-.25 H 2.5<7370>.15 G
+<72696e7465642e>-2.5 E<785b6f505d>108 566.4 Q 2.555
+<45787472616374206172636869>128 578.4 R 2.855 -.15<7665206d>-.25 H 2.555
+<656d62657273206261636b20746f208c6c65732e20546865>.15 F F4<6f>5.056 E F0
+2.556<6d6f64698c6572206170706c69657320746f2074686973206f7065726174696f6e
+2e2054686973206f7065726174696f6e>5.056 F<726574726965>128 590.4 Q -.15
+<7665>-.25 G 4.636<7374>.15 G 2.136<686520696e64696361746564>-4.636 F F4
+<8c6c6573>4.636 E F0 2.136<66726f6d20746865206172636869>4.636 F 2.435
+-.15<76652061>-.25 H 2.135<6e6420777269746573207468656d206261636b20746f
+20746865206f7065726174696e672073797374656d27>.15 F 4.635<738c>-.55 G
+<6c65>-4.635 E<73797374656d2e204966206e6f>128 602.4 Q F4<8c6c6573>2.5 E
+F0<6172652073706563698c65642c2074686520656e74697265206172636869>2.5 E .3
+-.15<76652069>-.25 H 2.5<7365>.15 G<7874726163742e>-2.65 E F2
+<4d6f64698c65727320286f7065726174696f6e2073706563698c6329>87 619.2 Q F0
+1.477<546865206d6f64698c6572732062656c6f>108 631.2 R 3.978<7761>-.25 G
+1.478<72652073706563698c6320746f206365727461696e206f7065726174696f6e732e
+2053656520746865204f7065726174696f6e732073656374696f6e202861626f>-3.978
+F -.15<7665>-.15 G 3.978<2974>.15 G 3.978<6f64>-3.978 G
+<657465726d696e65>-3.978 E<7768696368206d6f64698c6572732061726520617070
+6c696361626c6520746f207768696368206f7065726174696f6e732e>108 643.2 Q 6.4
+<5b615d205768656e>108 660 R .482<696e73657274696e67206f72206d6f>2.982 F
+.481<76696e67206d656d626572208c6c65732c2074686973206f7074696f6e20737065
+63698c6573207468652064657374696e6174696f6e206f6620746865206e65>-.15 F
+2.981<778c>-.25 G .481<6c6573206173206265696e67>-2.981 F F3<61>128 672 Q
+F0<6674657220746865>A F4 -.37<7265>2.5 G<6c706f73>.37 E F0<6d656d626572>
+2.5 E 2.5<2e49>-.55 G<66>-2.5 E F4 -.37<7265>2.5 G<6c706f73>.37 E F0<69
+73206e6f7420666f756e642c20746865208c6c65732061726520706c6163656420617420
+74686520656e64206f6620746865206172636869>2.5 E -.15<7665>-.25 G<2e>.15 E
+5.84<5b625d205768656e>108 688.8 R .481<696e73657274696e67206f72206d6f>
+2.981 F .481<76696e67206d656d626572208c6c65732c2074686973206f7074696f6e
+2073706563698c6573207468652064657374696e6174696f6e206f6620746865206e65>
+-.15 F 2.982<778c>-.25 G .482<6c6573206173206265696e67>-2.982 F F3<62>
+128 700.8 Q F0 .994<65666f726520746865>B F4 -.37<7265>3.494 G<6c706f73>
+.37 E F0<6d656d626572>3.494 E 3.494<2e49>-.55 G<66>-3.494 E F4 -.37
+<7265>3.494 G<6c706f73>.37 E F0 .994<6973206e6f7420666f756e642c20746865
+208c6c65732061726520706c616365642061742074686520656e64206f66207468652061
+72636869>3.494 F -.15<7665>-.25 G 3.493<2e54>.15 G<686973>-3.493 E
+<6d6f64698c6572206973206964656e746963616c20746f2074686520746865>128
+712.8 Q F4<69>2.5 E F0<6d6f64698c6572>2.5 E<2e>-.55 E 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.07<564d2d4152283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>128.57 E<564d2d4152283129>-1
+E 7.51<5b665d204e6f726d616c6c79>108 84 R<2c>-.65 E/F1 10/Times-Bold at 0 SF
+<6c6c766d2d6172>2.823 E F0 .323<73746f726573207468652066756c6c2070617468
+206e616d6520746f2061208c6c652061732070726573656e74656420746f206974206f6e
+2074686520636f6d6d616e64206c696e652e2057>2.823 F .324<6974682074686973>
+-.4 F 1.548<6f7074696f6e2c207472756e636174656420283135206368617261637465
+7273206d617829206e616d65732061726520757365642e205468697320656e7375726573
+206e616d6520636f6d7061746962696c6974792077697468206f6c646572>128 96 R
+-.15<7665>128 108 S .773<7273696f6e73206f66>.15 F/F2 10/Courier at 0 SF
+<6172>3.273 E F0 -.2<6275>3.273 G 3.273<746d>.2 G .773
+<617920616c736f20746877>-3.273 F .773<61727420636f72726563742065>-.1 F
+.773<787472616374696f6e206f6620746865208c6c657320286475706c696361746573
+206d6179206f>-.15 F -.15<7665>-.15 G .774
+<727772697465292e2049662075736564>.15 F .394<7769746820746865>128 120 R
+/F3 10/Times-Italic at 0 SF<52>2.894 E F0 .393<6f7074696f6e2c20746865206469
+726563746f727920726563757273696f6e2077696c6c20626520706572666f726d656420
+62>2.894 F .393
+<757420746865208c6c65206e616d65732077696c6c20616c6c206265>-.2 F F2<66>
+2.893 E F0 .393<6c617474656e656420746f>B
+<73696d706c65208c6c65206e616d65732e>128 132 Q 8.06<5b695d2041>108 148.8
+R<73796e6f6e>2.5 E<796d20666f7220746865>-.15 E F3<62>2.5 E F0
+<6f7074696f6e2e>2.5 E 5.84<5b6b5d204e6f726d616c6c79>108 165.6 R<2c>-.65
+E F1<6c6c766d2d6172>4.438 E F0 1.938<77696c6c206e6f74207072696e74207468
+6520636f6e74656e7473206f6620626974636f6465208c6c6573207768656e20746865>
+4.438 F F3<70>4.438 E F0 1.939
+<6f7065726174696f6e20697320757365642e2054686973>4.438 F
+<6d6f64698c657220646566656174732074686520646566>128 177.6 Q
+<61756c7420616e6420616c6c6f>-.1 E<77732074686520626974636f6465206d656d62
+65727320746f206265207072696e7465642e>-.25 E 3.62<5b4e5d2054686973>108
+194.4 R<6f7074696f6e2069732069676e6f726564206279>2.5 E F1
+<6c6c766d2d6172>2.5 E F0 -.2<6275>2.5 G 2.5<7470>.2 G<726f>-2.5 E
+<766964656420666f7220636f6d7061746962696c697479>-.15 E<2e>-.65 E 5.84
+<5b6f5d205768656e>108 211.2 R -.15<6578>2.804 G .304<7472616374696e6720
+8c6c65732c2074686973206f7074696f6e2077696c6c206361757365>.15 F F1
+<6c6c766d2d6172>2.804 E F0 .304<746f2070726573657276>2.804 F 2.804<6574>
+-.15 G .304<6865206f726967696e616c206d6f64698c636174696f6e2074696d657320
+6f6620746865>-2.804 F<8c6c6573206974207772697465732e>128 223.2 Q 5.28
+<5b505d20757365>108 240 R
+<66756c6c2070617468206e616d6573207768656e206d61746368696e67>2.5 E 4.17
+<5b525d2054686973>108 256.8 R 1.159
+<6d6f64698c657220696e737472756374696f6e7320746865>3.659 F F3<72>3.659 E
+F0 1.159<6f7074696f6e20746f2072656375727369>3.659 F -.15<7665>-.25 G
+1.159<6c792070726f63657373206469726563746f726965732e>.15 F -.4<5769>
+6.159 G<74686f7574>.4 E F3<52>3.66 E F0 3.66<2c64>C 1.16
+<69726563746f7269657320617265>-3.66 F 1.79
+<69676e6f72656420616e64206f6e6c792074686f7365>128 268.8 R F3<8c6c6573>
+4.29 E F0 1.789<7468617420726566657220746f208c6c65732077696c6c2062652061
+6464656420746f20746865206172636869>4.29 F -.15<7665>-.25 G 4.289<2e57>
+.15 G<68656e>-4.289 E F3<52>4.289 E F0 1.789<697320757365642c20616e>
+4.289 F<79>-.15 E .014
+<6469726563746f726965732073706563698c65642077697468>128 280.8 R F3
+<8c6c6573>2.514 E F0 .014
+<77696c6c206265207363616e6e6564202872656375727369>2.514 F -.15<7665>-.25
+G .014<6c792920746f208c6e64208c6c657320746f20626520616464656420746f2074
+6865206172636869>.15 F -.15<7665>-.25 G 2.515<2e41>.15 G -.15<6e79>
+-2.515 G<8c6c652077686f7365206e616d65206265>128 292.8 Q
+<67696e732077697468206120646f742077696c6c206e6f742062652061646465642e>
+-.15 E 5.84<5b755d205768656e>108 309.6 R .893<7265706c6163696e672065>
+3.393 F .893<78697374696e67208c6c657320696e20746865206172636869>-.15 F
+-.15<7665>-.25 G 3.393<2c6f>.15 G .893
+<6e6c79207265706c6163652074686f7365208c6c65732074686174206861>-3.393 F
+1.193 -.15<766520612074>-.2 H .893<696d65207374616d70207468616e20746865>
+.15 F<74696d65207374616d70206f6620746865206d656d62657220696e207468652061
+72636869>128 321.6 Q -.15<7665>-.25 G<2e>.15 E 6.4<5b7a5d205768656e>108
+338.4 R .283<696e73657274696e67206f72207265706c6163696e6720616e>2.783 F
+2.783<798c>-.15 G .283<6c6520696e20746865206172636869>-2.783 F -.15
+<7665>-.25 G 2.783<2c63>.15 G .283
+<6f6d707265737320746865208c6c65208c7273742e>-2.783 F .284
+<54686973206d6f64698c6572206973207361666520746f20757365>5.284 F .314
+<7768656e2028707265>128 350.4 R .314<76696f75736c792920636f6d7072657373
+656420626974636f6465208c6c65732061726520616464656420746f2074686520617263
+6869>-.25 F -.15<7665>-.25 G 2.813<3b74>.15 G .313
+<686520636f6d7072657373656420626974636f6465208c6c65732077696c6c>-2.813 F
+<6e6f7420626520646f75626c7920636f6d707265737365642e>128 362.4 Q F1
+<4d6f64698c657273202867656e6572696329>87 379.2 Q F0
+<546865206d6f64698c6572732062656c6f>108 391.2 Q 2.5<776d>-.25 G
+<6179206265206170706c69656420746f20616e>-2.5 E 2.5<796f>-.15 G
+<7065726174696f6e2e>-2.5 E 6.4<5b635d2046>108 408 R 1.141
+<6f7220616c6c206f7065726174696f6e732c>-.15 F F1<6c6c766d2d6172>3.641 E
+F0 1.141<77696c6c20616c>3.641 F -.1<7761>-.1 G 1.141
+<79732063726561746520746865206172636869>.1 F 1.441 -.15<76652069>-.25 H
+3.641<6669>.15 G 3.642<7464>-3.641 G<6f65736e27>-3.642 E 3.642<7465>-.18
+G 1.142<786973742e204e6f726d616c6c79>-3.792 F<2c>-.65 E F1
+<6c6c766d2d6172>3.642 E F0<77696c6c>3.642 E .436<7072696e7420612077>128
+420 R .436<61726e696e67206d65737361676520696e6469636174696e672074686174
+20746865206172636869>-.1 F .736 -.15<76652069>-.25 H 2.936<7362>.15 G
+.435<65696e6720637265617465642e205573696e672074686973206d6f64698c657220
+7475726e73206f66>-2.936 F 2.935<6674>-.25 G<686174>-2.935 E -.1<7761>128
+432 S<726e696e672e>.1 E 6.95<5b735d2054686973>108 448.8 R 1.418
+<6d6f64698c6572207265717565737473207468617420616e206172636869>3.918 F
+1.719 -.15<76652069>-.25 H<6e6465>.15 E 3.919<7828>-.15 G 1.419<6f722073
+796d626f6c207461626c652920626520616464656420746f20746865206172636869>
+-3.919 F -.15<7665>-.25 G 3.919<2e54>.15 G 1.419<68697320697320746865>
+-3.919 F<646566>128 460.8 Q .079<61756c74206d6f6465206f66206f7065726174
+696f6e2e205468652073796d626f6c207461626c652077696c6c20636f6e7461696e2061
+6c6c207468652065>-.1 F .078<787465726e616c6c792076697369626c652066756e63
+74696f6e7320616e6420676c6f62616c>-.15 F -.25<7661>128 472.8 S .336<7269
+61626c65732064658c6e656420627920616c6c2074686520626974636f6465208c6c6573
+20696e20746865206172636869>.25 F -.15<7665>-.25 G 2.836<2e55>.15 G .336
+<73696e672074686973206d6f64698c6572206973206d6f7265206566>-2.836 F .336
+<8c6369656e742074686174207573696e67>-.25 F<6c6c766d2d72616e6c6962207768
+69636820616c736f2063726561746573207468652073796d626f6c207461626c652e>128
+484.8 Q 5.28<5b535d2054686973>108 501.6 R 1.079
+<6d6f64698c657220697320746865206f70706f73697465206f6620746865>3.579 F F3
+<73>3.579 E F0<6d6f64698c6572>3.579 E 3.579<2e49>-.55 G 3.579<7469>
+-3.579 G<6e73747275637473>-3.579 E F1<6c6c766d2d6172>3.579 E F0 1.079
+<746f206e6f742062>3.579 F 1.079
+<75696c64207468652073796d626f6c207461626c652e204966>-.2 F<626f7468>128
+513.6 Q F3<73>2.5 E F0<616e64>2.5 E F3<53>2.5 E F0<61726520757365642c20
+746865206c617374206d6f64698c657220746f206f6363757220696e20746865206f7074
+696f6e732077696c6c20707265>2.5 E -.25<7661>-.25 G<696c2e>.25 E 5.84
+<5b765d2054686973>108 530.4 R 1.522<6d6f64698c657220696e73747275637473>
+4.022 F F1<6c6c766d2d6172>4.022 E F0 1.522<746f2062652076>4.022 F 1.523<
+6572626f73652061626f7574207768617420697420697320646f696e672e204561636820
+65646974696e67206f7065726174696f6e2074616b>-.15 F<656e>-.1 E<6167>128
+542.4 Q<61696e737420746865206172636869>-.05 E .3 -.15<76652077>-.25 H<69
+6c6c2070726f647563652061206c696e65206f66206f757470757420736179696e672077
+686174206973206265696e6720646f6e652e>.15 E/F4 10.95/Times-Bold at 0 SF
+<5354>72 559.2 Q<414e44>-.986 E<41524453>-.383 E F0<546865>108 571.2 Q
+F1<6c6c766d2d6172>2.711 E F0 .211
+<7574696c69747920697320696e74656e64656420746f2070726f>2.711 F .21
+<766964652061207375706572736574206f6620746865>-.15 F/F5 9/Times-Roman at 0
+SF<49454545>2.71 E F0 .21<53746420313030332e322028>2.71 F F5<504f534958>
+A F0 .21<2e32292066756e6374696f6e616c69747920666f72>B F2<6172>2.71 E F0
+<2e>A F1<6c6c766d2d6172>108 583.2 Q F0 .728<63616e207265616420626f7468>
+3.228 F F5<53565234>3.228 E F0<616e64>3.228 E F5<42534434>3.228 E F0
+.728<2e3420286f72204d6163>B F5<4f53>3.228 E F0 .729<5829206172636869>
+3.228 F -.15<7665>-.25 G .729<732e20496620746865>.15 F F2<66>3.229 E F0
+.729<6d6f64698c6572206973206769>3.229 F -.15<7665>-.25 G 3.229<6e74>.15
+G 3.229<6f74>-3.229 G<6865>-3.229 E F2<78>3.229 E F0<6f72>3.229 E F2<72>
+3.229 E F0 1.569<6f7065726174696f6e73207468656e>108 595.2 R F1
+<6c6c766d2d6172>4.069 E F0 1.569<77696c6c207772697465>4.069 F F5
+<53565234>4.069 E F0 1.569<636f6d70617469626c65206172636869>4.069 F -.15
+<7665>-.25 G 1.569<732e2057>.15 F 1.569
+<6974686f75742074686973206d6f64698c6572>-.4 F<2c>-.4 E F1
+<6c6c766d2d6172>4.069 E F0 1.568<77696c6c207772697465>4.068 F F5
+<42534434>108 607.2 Q F0 1.506<2e3420636f6d70617469626c65206172636869>B
+-.15<7665>-.25 G 4.006<7374>.15 G 1.507<686174206861>-4.006 F 1.807 -.15
+<7665206c>-.2 H 1.507<6f6e67206e616d657320696d6d6564696174656c7920616674
+6572207468652068656164657220616e6420696e64696361746564207573696e67207468
+65>.15 F -.74<6060>108 619.2 S<23312f64646427>.74 E 2.5<276e>-.74 G
+<6f746174696f6e20666f7220746865206e616d6520696e2074686520686561646572>
+-2.5 E<2e>-.55 E F4<46494c4520464f524d41>72 636 Q<54>-1.04 E F0 .012
+<546865208c6c6520666f726d617420666f72>108 648 R F5<4c4c>2.512 E<564d>-.9
+E F0<4172636869>2.512 E .312 -.15<7665208c>-.25 H .011
+<6c65732069732073696d696c617220746f2074686174206f66>.15 F F5<425344>
+2.511 E F0 .011<342e34206f72204d6163>2.511 F F5<4f5358>2.511 E F0
+<6172636869>2.511 E .311 -.15<7665208c>-.25 H .011<6c65732e20496e2066>
+.15 F .011<6163742c2065>-.1 F<7863657074>-.15 E .867
+<666f72207468652073796d626f6c207461626c652c20746865>108 660 R F2<6172>
+3.367 E F0 .867<636f6d6d616e6473206f6e2074686f7365206f7065726174696e6720
+73797374656d732073686f756c642062652061626c6520746f2072656164>3.367 F F5
+<4c4c>3.368 E<564d>-.9 E F0<6172636869>3.368 E -.15<7665>-.25 G<8c6c6573
+2e205468652064657461696c73206f6620746865208c6c6520666f726d617420666f6c6c
+6f>108 672 Q -.65<772e>-.25 G 1.225<45616368206172636869>108 688.8 R
+1.525 -.15<76652062>-.25 H -.15<6567>.15 G 1.225
+<696e73207769746820746865206172636869>.15 F 1.525 -.15<7665206d>-.25 H
+1.225<61676963206e756d62657220776869636820697320746865206569676874207072
+696e7461626c6520636861726163746572732060>.15 F<60213c617263683e5c6e27>
+-.74 E<27>-.74 E 1.134
+<7768657265205c6e20726570726573656e747320746865206e65>108 700.8 R 1.134
+<776c696e6520636861726163746572202830783041292e>-.25 F -.15<466f>6.135 G
+<6c6c6f>.15 E 1.135<77696e6720746865206d61676963206e756d626572>-.25 F
+3.635<2c74>-.4 G 1.135<6865208c6c6520697320636f6d706f736564206f66>-3.635
+F -2.15 -.25<65762065>108 712.8 T 2.67<6e6c>.25 G .17
+<656e677468206d656d626572732074686174206265>-2.67 F .17
+<67696e207769746820616e206172636869>-.15 F .47 -.15<76652068>-.25 H .17<
+656164657220616e6420656e6420776974682061205c6e2070616464696e672063686172
+6163746572206966206e65636573736172792028746f>.15 F<6d616b>108 724.8 Q
+3.561<6574>-.1 G 1.061<6865206c656e6774682065>-3.561 F -.15<7665>-.25 G
+1.061<6e292e2045616368208c6c65206d656d62657220697320636f6d706f736564206f
+66206120686561646572202864658c6e65642062656c6f>.15 F 1.062
+<77292c20616e206f7074696f6e616c206e65>-.25 F<776c696e652d>-.25 E 188.72
+<43565320323031302d30352d3036>72 768 R<33>205.67 E 0 Cg EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.07<564d2d4152283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>128.57 E<564d2d4152283129>-1
+E<7465726d696e617465642060>108 84 Q<606c6f6e67208c6c65206e616d6527>-.74
+E 2.5<2761>-.74 G
+<6e642074686520636f6e74656e7473206f6620746865208c6c652e>-2.5 E 1.776<54
+6865208c656c6473206f6620746865206865616465722061726520646573637269626564
+20696e20746865206974656d732062656c6f>108 100.8 R 3.076 -.65<772e2041>
+-.25 H 1.776
+<6c6c208c656c6473206f66207468652068656164657220636f6e7461696e206f6e6c79>
+.65 F/F1 9/Times-Roman at 0 SF<4153434949>4.276 E F0<636861726163746572732c
+20617265206c656674206a757374698c656420616e642061726520726967687420706164
+646564207769746820737061636520636861726163746572732e>108 112.8 Q
+<6e616d6520ad20636861725b31365d>108 129.6 Q 1.766
+<54686973208c656c64206f6620746865206865616465722070726f>128 141.6 R
+1.766<766964657320746865206e616d65206f6620746865206172636869>-.15 F
+2.066 -.15<7665206d>-.25 H<656d626572>.15 E 4.266<2e49>-.55 G 4.266
+<6674>-4.266 G 1.766<6865206e616d65206973206c6f6e676572207468616e203135>
+-4.266 F .798<63686172616374657273206f7220636f6e7461696e73206120736c6173
+6820282f2920636861726163746572>128 153.6 R 3.298<2c74>-.4 G .798
+<68656e2074686973208c656c6420636f6e7461696e73>-3.298 F/F2 10/Courier at 0
+SF<23312f6e6e6e>3.298 E F0<7768657265>3.298 E F2<6e6e6e>3.298 E F0
+<70726f>3.298 E .798<766964657320746865>-.15 F .808
+<6c656e677468206f6620746865206e616d6520616e6420746865>128 165.6 R F2
+<23312f>3.308 E F0 .808<6973206c69746572616c2e>3.308 F .809<496e20746869
+7320636173652c207468652061637475616c206e616d65206f6620746865208c6c652069
+732070726f>5.808 F .809<766964656420696e20746865>-.15 F F2<6e6e6e>128
+177.6 Q F0 1.797<627974657320696d6d6564696174656c7920666f6c6c6f>4.297 F
+1.797<77696e672074686520686561646572>-.25 F 4.297<2e49>-.55 G 4.297
+<6674>-4.297 G 1.797<6865206e616d65206973203135206368617261637465727320
+6f72206c6573732c20697420697320636f6e7461696e6564>-4.297 F<6469726563746c
+7920696e2074686973208c656c6420616e64207465726d696e6174656420776974682061
+20736c61736820282f2920636861726163746572>128 189.6 Q<2e>-.55 E
+<6461746520ad20636861725b31325d>108 206.4 Q .739
+<54686973208c656c642070726f>128 218.4 R .739<76696465732074686520646174
+65206f66206d6f64698c636174696f6e206f6620746865208c6c6520696e207468652066
+6f726d206f66206120646563696d616c20656e636f646564206e756d6265722074686174>
+-.15 F<70726f>128 230.4 Q<766964657320746865206e756d626572206f6620736563
+6f6e64732073696e6365207468652065706f6368202873696e63652030303a30303a3030
+204a616e20312c2031393730292070657220506f7369782073706563698c636174696f6e
+732e>-.15 E<75696420ad20636861725b365d>108 247.2 Q .126
+<54686973208c656c642070726f>128 259.2 R .126<76696465732074686520757365
+72206964206f6620746865208c6c6520656e636f646564206173206120646563696d616c>
+-.15 F F1<4153434949>2.626 E F0 2.626<737472696e672e2054686973>2.626 F
+.125<8c656c64206d69676874206e6f74206d616b>2.626 F<65>-.1 E .251<6d756368
+2073656e7365206f6e206e6f6e2d556e69782073797374656d732e204f6e20556e69782c
+206974206973207468652073616d652076>128 271.2 R .252<616c7565206173207468
+652073745f756964208c656c64206f6620746865207374617420737472756374757265>
+-.25 F<72657475726e656420627920746865>128 283.2 Q/F3 10/Times-Italic at 0
+SF<73746174>2.5 E F0
+<283229206f7065726174696e672073797374656d2063616c6c2e>1.666 E
+<67696420ad20636861725b365d>108 300 Q 1.099<54686973208c656c642070726f>
+128 312 R 1.099<7669646573207468652067726f7570206964206f6620746865208c6c
+6520656e636f646564206173206120646563696d616c>-.15 F F1<4153434949>3.599
+E F0 3.599<737472696e672e2054686973>3.599 F 1.099
+<8c656c64206d69676874206e6f74>3.599 F<6d616b>128 324 Q 3.458<656d>-.1 G
+.958<7563682073656e7365206f6e206e6f6e2d556e69782073797374656d732e204f6e
+20556e69782c206974206973207468652073616d652076>-3.458 F .959
+<616c7565206173207468652073745f676964208c656c64206f66207468652073746174>
+-.25 F<7374727563747572652072657475726e656420627920746865>128 336 Q F3
+<73746174>2.5 E F0<283229206f7065726174696e672073797374656d2063616c6c2e>
+1.666 E<6d6f646520ad20636861725b385d>108 352.8 Q .714
+<54686973208c656c642070726f>128 364.8 R .714<76696465732074686520616363
+657373206d6f6465206f6620746865208c6c6520656e636f64656420617320616e206f63
+74616c>-.15 F F1<4153434949>3.214 E F0 .714
+<737472696e672e2054686973208c656c64206d69676874206e6f74>3.214 F<6d616b>
+128 376.8 Q 2.961<656d>-.1 G .461<7563682073656e7365206f6e206e6f6e2d556e
+69782073797374656d732e204f6e20556e69782c206974206973207468652073616d6520
+76>-2.961 F .462<616c7565206173207468652073745f6d6f6465208c656c64206f66
+207468652073746174>-.25 F
+<7374727563747572652072657475726e656420627920746865>128 388.8 Q F3
+<73746174>2.5 E F0<283229206f7065726174696e672073797374656d2063616c6c2e>
+1.666 E<73697a6520ad20636861725b31305d>108 405.6 Q .588
+<54686973208c656c642070726f>128 417.6 R .588<7669646573207468652073697a
+65206f6620746865208c6c652c20696e2062797465732c20656e636f6465642061732061
+20646563696d616c>-.15 F F1<4153434949>3.087 E F0 .587
+<737472696e672e204966207468652073697a65208c656c64206973>3.087 F<6e65>128
+429.6 Q -.05<6761>-.15 G<7469>.05 E .335 -.15<76652028>-.25 H .035<7374
+6172747320776974682061206d696e7573207369676e2c203078303244292c207468656e
+20746865206172636869>.15 F .335 -.15<7665206d>-.25 H .035<656d6265722069
+732073746f72656420696e20636f6d7072657373656420666f726d2e20546865>.15 F
+1.785<8c7273742062797465206f6620746865206172636869>128 441.6 R 2.085
+-.15<7665206d>-.25 H<656d62657227>.15 E 4.285<7364>-.55 G 1.784<61746120
+696e646963617465732074686520636f6d7072657373696f6e207479706520757365642e
+20412076>-4.285 F 1.784<616c7565206f66203020283078333029>-.25 F 1.315
+<696e646963617465732074686174206e6f20636f6d7072657373696f6e2077>128
+453.6 R 1.315<617320757365642e20412076>-.1 F 1.316<616c7565206f66203220
+28307833322920696e64696361746573207468617420627a69703220636f6d7072657373
+696f6e2077>-.25 F<6173>-.1 E<757365642e>128 465.6 Q
+<666d616720ad20636861725b325d>108 482.4 Q .49
+<54686973208c656c6420697320746865206172636869>128 494.4 R .79 -.15
+<7665208c>-.25 H .49<6c65206d656d626572206d61676963206e756d626572>.15 F
+2.989<2e49>-.55 G .489<747320636f6e74656e7420697320616c>-2.989 F -.1
+<7761>-.1 G .489<797320746865207477>.1 F 2.989<6f63>-.1 G .489
+<686172616374657273206261636b207469636b>-2.989 F .843
+<28307836302920616e64206e65>128 506.4 R .843
+<776c696e65202830783041292e20546869732070726f>-.25 F .844<76696465732073
+6f6d65206d656173757265207574696c69747920696e206964656e74696679696e672061
+72636869>-.15 F 1.144 -.15<7665208c>-.25 H .844<6c65732074686174206861>
+.15 F -.15<7665>-.2 G<6265656e20636f727275707465642e>128 518.4 Q<546865>
+108 535.2 Q F1<4c4c>3.625 E<564d>-.9 E F0 1.125
+<73796d626f6c207461626c652068617320746865207370656369616c206e616d652060>
+3.625 F<60235f4c4c>-.74 E<564d5f53594d5f54>-1 E<41425f2327>-.93 E 1.124
+<272e2049742069732070726573756d65642074686174206e6f207265>-.74 F
+<67756c6172>-.15 E<6172636869>108 547.2 Q 1.486 -.15<7665206d>-.25 H
+1.186<656d626572208c6c652077696c6c2077>.15 F 1.186
+<616e742074686973206e616d652e20546865>-.1 F F1<4c4c>3.687 E<564d>-.9 E
+F0 1.187<73796d626f6c207461626c652069732073696d706c7920636f6d706f736564
+206f6620612073657175656e6365206f66>3.687 F .922
+<747269706c6574733a2062797465206f66>108 559.2 R .921<667365742c206c656e
+677468206f662073796d626f6c2c20616e64207468652073796d626f6c20697473656c66
+2e2053796d626f6c7320617265206e6f74206e756c6c206f72206e65>-.25 F .921
+<776c696e65207465726d696e617465642e>-.25 F<4865726520617265207468652064
+657461696c73206f6e2065616368206f66207468657365206974656d733a>108 571.2 Q
+<6f66>108 588 Q
+<6673657420ad2076627220656e636f646564203332ad62697420696e7465>-.25 E
+<676572>-.15 E 1.375<546865206f66>128 600 R 1.375
+<66736574206974656d2070726f>-.25 F 1.376<766964657320746865206f66>-.15 F
+1.376<6673657420696e746f20746865206172636869>-.25 F 1.676 -.15<7665208c>
+-.25 H 1.376<6c652077686572652074686520626974636f6465206d656d6265722069
+732073746f7265642074686174206973>.15 F .533
+<6173736f6369617465642077697468207468652073796d626f6c2e20546865206f66>
+128 612 R .533<667365742076>-.25 F .533<616c7565206973203020626173656420
+617420746865207374617274206f6620746865208c7273742060>-.25 F
+<606e6f726d616c27>-.74 E 3.032<278c>-.74 G .532<6c65206d656d626572>
+-3.032 F<2e>-.55 E 2.156 -.8<546f2064>128 624 T<657269>.8 E .856 -.15
+<76652074>-.25 H .557<68652061637475616c208c6c65206f66>.15 F .557
+<66736574206f6620746865206d656d626572>-.25 F 3.057<2c79>-.4 G .557<6f75
+206d7573742061646420746865206e756d626572206f66206279746573206f6363757069
+656420627920746865208c6c65>-3.057 F 1.261<7369676e6174757265202838206279
+7465732920616e64207468652073796d626f6c207461626c65732e205468652076>128
+636 R 1.261<616c7565206f662074686973206974656d20697320656e636f6465642075
+73696e672076>-.25 F 1.261<61726961626c65206269742072617465>-.25 F .3<65
+6e636f64696e6720746f20726564756365207468652073697a65206f6620746865207379
+6d626f6c207461626c652e>128 648 R -1.11<5661>5.3 G .3<726961626c65206269
+74207261746520656e636f64696e67207573657320746865206869676820626974202830
+78383029206f66>1.11 F 1.063<65616368206279746520746f20696e64696361746520
+696620746865726520617265206d6f726520627974657320746f20666f6c6c6f>128 660
+R 2.363 -.65<772e2054>-.25 H 1.063<68652072656d61696e696e67203720626974
+7320696e206561636820627974652063617272792062697473>.65 F
+<66726f6d207468652076>128 672 Q
+<616c75652e20546865208c6e616c206279746520646f6573206e6f74206861>-.25 E
+.3 -.15<76652074>-.2 H<6865206869676820626974207365742e>.15 E
+<6c656e67746820ad2076627220656e636f646564203332ad62697420696e7465>108
+688.8 Q<676572>-.15 E 1.415<546865206c656e677468206974656d2070726f>128
+700.8 R 1.416<766964657320746865206c656e677468206f66207468652073796d626f
+6c207468617420666f6c6c6f>-.15 F 1.416<77732e204c696b>-.25 F 3.916<6574>
+-.1 G<686973>-3.916 E F3<6f66>3.916 E<66736574>-.18 E F0 1.416
+<6974656d2c20746865206c656e677468206973>3.916 F -.25<7661>128 712.8 S
+<726961626c6520626974207261746520656e636f6465642e>.25 E 188.72
+<43565320323031302d30352d3036>72 768 R<34>205.67 E 0 Cg EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.07<564d2d4152283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>128.57 E<564d2d4152283129>-1
+E<73796d626f6c20ad20636861726163746572206172726179>108 84 Q .648
+<5468652073796d626f6c206974656d2070726f>128 96 R .648
+<766964657320746865207465>-.15 F .647<7874206f66207468652073796d626f6c20
+74686174206973206173736f636961746564207769746820746865>-.15 F/F1 10
+/Times-Italic at 0 SF<6f66>3.147 E<66736574>-.18 E F0 3.147<2e54>C .647
+<68652073796d626f6c206973206e6f74>-3.147 F 2.084
+<7465726d696e6174656420627920616e>128 108 R 4.584<7963>-.15 G
+<6861726163746572>-4.584 E 4.584<2e49>-.55 G 2.084
+<7473206c656e6774682069732070726f>-4.584 F 2.084
+<766964656420627920746865>-.15 F F1<6c656e677468>4.584 E F0 2.085
+<8c656c642e204e6f7465207468617420697320616c6c6f>4.585 F 2.085
+<776564202862>-.25 F<7574>-.2 E .53<756e776973652920746f20757365206e6f6e
+2d7072696e74696e672063686172616374657273202865>128 120 R -.15<7665>-.25
+G 3.03<6e30>.15 G .53
+<7830302920696e207468652073796d626f6c2e205468697320616c6c6f>-3.03 F .53
+<777320666f72206d756c7469706c6520656e636f64696e6773>-.25 F
+<6f662073796d626f6c206e616d65732e>128 132 Q/F2 10.95/Times-Bold at 0 SF
+<45584954205354>72 148.8 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108
+160.8 Q/F3 10/Times-Bold at 0 SF<6c6c766d2d6172>3.742 E F0 1.243
+<73756363656564732c2069742077696c6c2065>3.742 F 1.243
+<786974207769746820302e>-.15 F 3.743<4175>6.243 G 1.243
+<73616765206572726f72>-3.743 F 3.743<2c72>-.4 G 1.243
+<6573756c747320696e20616e2065>-3.743 F 1.243
+<78697420636f6465206f6620312e2041206861726420288c6c652073797374656d>-.15
+F<7479706963616c6c7929206572726f7220726573756c747320696e20616e2065>108
+172.8 Q<78697420636f6465206f6620322e204d697363656c6c616e656f7573206f7220
+756e6b6e6f>-.15 E<776e206572726f727320726573756c7420696e20616e2065>-.25
+E<78697420636f6465206f6620332e>-.15 E F2<53454520414c534f>72 189.6 Q F0
+<6c6c766d2d72616e6c69622c>108 201.6 Q F1<6172>2.5 E F0<283129>1.666 E F2
+-.548<4155>72 218.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 230.4 Q/F4 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<35>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-as.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-as.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-as.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-as.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,285 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 127.18<564d2d4153283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>129.68 E<564d2d4153283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad617320ad204c4c>108 96 Q<564d20617373656d626c6572>-1 E F1
+<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d2d6173>108
+124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5
+<5d5b>C F3<8c6c656e616d65>-2.5 E F0<5d>A F1<4445534352495054494f4e>72
+141.6 Q F2<6c6c766d2d6173>108 153.6 Q F0 2.229<697320746865>4.729 F/F4 9
+/Times-Roman at 0 SF<4c4c>4.729 E<564d>-.9 E F0<617373656d626c6572>4.729 E
+7.229<2e49>-.55 G 4.729<7472>-7.229 G 2.229<656164732061208c6c6520636f6e
+7461696e696e672068756d616e2d7265616461626c65>-4.729 F F4<4c4c>4.729 E
+<564d>-.9 E F0 2.228<617373656d626c79206c616e67756167652c>4.729 F
+<7472616e736c6174657320697420746f>108 165.6 Q F4<4c4c>2.5 E<564d>-.9 E
+F0<626974636f64652c20616e64207772697465732074686520726573756c7420696e74
+6f2061208c6c65206f7220746f207374616e64617264206f75747075742e>2.5 E<4966>
+108 182.4 Q F3<8c6c656e616d65>2.5 E F0<6973206f6d6974746564206f72206973>
+2.5 E/F5 10/Courier at 0 SF<ad>2.5 E F0 2.5<2c74>C<68656e>-2.5 E F2
+<6c6c766d2d6173>2.5 E F0<72656164732069747320696e7075742066726f6d207374
+616e6461726420696e7075742e>2.5 E .141<496620616e206f7574707574208c6c6520
+6973206e6f742073706563698c6564207769746820746865>108 199.2 R F2<ad6f>
+2.641 E F0 .141<6f7074696f6e2c207468656e>2.641 F F2<6c6c766d2d6173>2.641
+E F0 .142<73656e647320697473206f757470757420746f2061208c6c65206f72207374
+616e64617264206f7574707574>2.642 F<627920666f6c6c6f>108 211.2 Q
+<77696e672074686573652072756c65733a>-.25 E 16.5<8349>108 228 S 2.5<6674>
+-16.5 G<686520696e707574206973207374616e6461726420696e7075742c207468656e
+20746865206f7574707574206973207374616e64617264206f75747075742e>-2.5 E
+16.5<8349>108 244.8 S 2.803<6674>-16.5 G .303
+<686520696e7075742069732061208c6c65207468617420656e64732077697468>-2.803
+F F5<2e6c6c>2.802 E F0 2.802<2c74>C .302<68656e20746865206f757470757420
+8c6c65206973206f66207468652073616d65206e616d652c2065>-2.802 F .302
+<786365707420746861742074686520737566>-.15 F<8c78>-.25 E
+<6973206368616e67656420746f>128 256.8 Q F5<2e6263>2.5 E F0<2e>A 16.5
+<8349>108 273.6 S 2.565<6674>-16.5 G .065<686520696e7075742069732061208c
+6c65207468617420646f6573206e6f7420656e64207769746820746865>-2.565 F F5
+<2e6c6c>2.565 E F0<737566>2.565 E .065<8c782c207468656e20746865206f7574
+707574208c6c6520686173207468652073616d65206e616d6520617320746865>-.25 F
+<696e707574208c6c652c2065>128 285.6 Q<7863657074207468617420746865>-.15
+E F5<2e6263>2.5 E F0<737566>2.5 E<8c7820697320617070656e6465642e>-.25 E
+F1<4f5054494f4e53>72 302.4 Q F2<ad66>108 314.4 Q F0 1.042
+<456e61626c652062696e617279206f7574707574206f6e207465726d696e616c732e>
+10.97 F<4e6f726d616c6c79>6.042 E<2c>-.65 E F2<6c6c766d2d6173>3.541 E F0
+1.041<77696c6c2072656675736520746f207772697465207261>3.541 F 3.541<7762>
+-.15 G 1.041<6974636f6465206f757470757420696620746865>-3.541 F .798
+<6f75747075742073747265616d2069732061207465726d696e616c2e2057>128 326.4
+R .799<6974682074686973206f7074696f6e2c>-.4 F F2<6c6c766d2d6173>3.299 E
+F0 .799<77696c6c207772697465207261>3.299 F 3.299<7762>-.15 G .799
+<6974636f6465207265>-3.299 F -.05<6761>-.15 G .799
+<72646c657373206f6620746865206f7574707574>.05 F<6465>128 338.4 Q
+<766963652e>-.25 E F2<ad68656c70>108 355.2 Q F0<5072696e7420612073756d6d
+617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>128 367.2 Q F2
+<ad6f>108 384 Q F3<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c65206e616d652e>128 396 Q
+<4966>5 E F3<8c6c656e616d65>2.5 E F0<6973>2.5 E F5<ad>2.5 E F0 2.5<2c74>
+C<68656e>-2.5 E F2<6c6c766d2d6173>2.5 E F0<73656e647320697473206f757470
+757420746f207374616e64617264206f75747075742e>2.5 E F1<45584954205354>72
+412.8 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108 424.8 Q F2
+<6c6c766d2d6173>2.5 E F0<73756363656564732c2069742077696c6c2065>2.5 E
+<786974207769746820302e>-.15 E<4f74686572776973652c20696620616e20657272
+6f72206f63637572732c2069742077696c6c2065>5 E
+<78697420776974682061206e6f6e2d7a65726f2076>-.15 E<616c75652e>-.25 E F1
+<53454520414c534f>72 441.6 Q F0<6c6c766d2d6469732c206763636173>108 453.6
+Q F1 -.548<4155>72 470.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 482.4 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-bcanalyzer.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-bcanalyzer.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-bcanalyzer.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-bcanalyzer.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,581 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 4
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d4243414e>-1 E<414c>-.35 E
+74.09<595a4552283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1 E
+<4c4c>76.59 E<564d2d4243414e>-1 E<414c>-.35 E<595a4552283129>-1 E/F1
+10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad6263616e616c797a657220ad204c4c>108 96 Q
+<564d20626974636f646520616e616c797a6572>-1 E F1<53594e4f50534953>72
+112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d2d6263616e616c797a6572>108 124.8 Q
+F0<5b>2.5 E/F3 10/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5<5d5b>C F3
+<8c6c656e616d65>-2.5 E F0<5d>A F1<4445534352495054494f4e>72 141.6 Q F0
+<546865>108 153.6 Q F2<6c6c766d2d6263616e616c797a6572>3.184 E F0 .683<63
+6f6d6d616e64206973206120736d616c6c207574696c69747920666f7220616e616c797a
+696e6720626974636f6465208c6c65732e>3.184 F .683
+<54686520746f6f6c207265616473206120626974636f6465208c6c65>5.683 F .037
+<28737563682061732067656e657261746564207769746820746865>108 165.6 R F2
+<6c6c766d2d6173>2.538 E F0 .038<746f6f6c2920616e642070726f64756365732061
+20737461746973746963616c207265706f7274206f6e2074686520636f6e74656e747320
+6f662074686520626974636f6465208c6c652e>2.538 F .041
+<54686520746f6f6c2063616e20616c736f2064756d702061206c6f>108 177.6 R
+2.541<776c>-.25 G -2.15 -.25<65762065>-2.541 H 2.541<6c62>.25 G .041
+<75742068756d616e207265616461626c652076>-2.741 F .041
+<657273696f6e206f662074686520626974636f6465208c6c652e>-.15 F .041
+<5468697320746f6f6c2069732070726f6261626c79206e6f74>5.041 F .452
+<6f66206d75636820696e746572657374206f72207574696c6974792065>108 189.6 R
+.452<786365707420666f722074686f73652077>-.15 F .453<6f726b696e6720646972
+6563746c7920776974682074686520626974636f6465208c6c6520666f726d61742e204d
+6f7374>-.1 F/F4 9/Times-Roman at 0 SF<4c4c>2.953 E<564d>-.9 E F0
+<7573657273>2.953 E
+<63616e206a7573742069676e6f7265207468697320746f6f6c2e>108 201.6 Q<4966>
+108 218.4 Q F3<8c6c656e616d65>3.144 E F0 .644
+<6973206f6d6974746564206f72206973>3.144 F/F5 10/Courier at 0 SF<ad>3.144 E
+F0 3.144<2c74>C<68656e>-3.144 E F2<6c6c766d2d6263616e616c797a6572>3.144
+E F0 .644<72656164732069747320696e7075742066726f6d207374616e646172642069
+6e7075742e20546869732069732075736566756c20666f72>3.144 F
+<636f6d62696e696e672074686520746f6f6c20696e746f206120706970656c696e652e>
+108 230.4 Q<4f7574707574206973207772697474656e20746f20746865207374616e64
+617264206f75747075742e>5 E F1<4f5054494f4e53>72 247.2 Q F2
+<ad6e6f64657461696c73>108 259.2 Q F0<436175736573>128 271.2 Q F2
+<6c6c766d2d6263616e616c797a6572>3.789 E F0 1.289<746f206162627265>3.789
+F 1.289<766961746520697473206f75747075742062792077726974696e67206f757420
+6f6e6c792061206d6f64756c65206c65>-.25 F -.15<7665>-.25 G 3.79<6c73>.15 G
+<756d6d617279>-3.79 E 3.79<2e54>-.65 G<6865>-3.79 E
+<64657461696c7320666f7220696e6469>128 283.2 Q
+<76696475616c2066756e6374696f6e7320617265206e6f7420646973706c617965642e>
+-.25 E F2<ad64756d70>108 300 Q F0<436175736573>128 312 Q F2
+<6c6c766d2d6263616e616c797a6572>2.825 E F0 .324<746f2064756d702074686520
+626974636f646520696e20612068756d616e207265616461626c6520666f726d61742e20
+5468697320666f726d6174206973207369676e698c63616e746c79>2.825 F<646966>
+128 324 Q<666572656e742066726f6d>-.25 E F4<4c4c>2.5 E<564d>-.9 E F0
+<617373656d626c7920616e642070726f>2.5 E<76696465732064657461696c73206162
+6f75742074686520656e636f64696e67206f662074686520626974636f6465208c6c652e>
+-.15 E F2<ad76>108 340.8 Q<6572696679>-.1 E F0<436175736573>128 352.8 Q
+F2<6c6c766d2d6263616e616c797a6572>3.193 E F0 .693<746f2076>3.193 F .694<
+657269667920746865206d6f64756c652070726f64756365642062792072656164696e67
+2074686520626974636f64652e205468697320656e7375726573207468617420746865>
+-.15 F<737461746973746963732067656e65726174656420617265206261736564206f
+6e206120636f6e73697374656e74206d6f64756c652e>128 364.8 Q F2<ad68656c70>
+108 381.6 Q F0<5072696e7420612073756d6d617279206f6620636f6d6d616e64206c
+696e65206f7074696f6e732e>128 393.6 Q F1<45584954205354>72 410.4 Q -1.04
+<4154>-.986 G<5553>1.04 E F0<4966>108 422.4 Q F2
+<6c6c766d2d6263616e616c797a6572>2.987 E F0 .487
+<73756363656564732c2069742077696c6c2065>2.987 F .487
+<786974207769746820302e>-.15 F .487<4f74686572776973652c20696620616e2065
+72726f72206f63637572732c2069742077696c6c2065>5.487 F .486
+<78697420776974682061206e6f6e2d7a65726f>-.15 F -.25<7661>108 434.4 S
+<6c75652c20757375616c6c7920312e>.25 E F1<53554d4d4152>72 451.2 Q 2.738
+<594f>-.383 G<555450555420444546494e4954494f4e53>-2.738 E F0
+<54686520666f6c6c6f>108 463.2 Q<77696e67206974656d732061726520616c>-.25
+E -.1<7761>-.1 G
+<7973207072696e746564206279206c6c766d2d6263616e616c797a6572>.1 E 2.5
+<2e54>-.55 G<6865>-2.5 E 2.5<7963>-.15 G
+<6f6d7072697a65207468652073756d6d617279206f75747075742e>-2.5 E F2
+<426974636f646520416e616c79736973204f66204d6f64756c65>108 480 Q F0
+<54686973206a7573742070726f>128 492 Q<766964657320746865206e616d65206f66
+20746865206d6f64756c6520666f7220776869636820626974636f646520616e616c7973
+6973206973206265696e672067656e6572617465642e>-.15 E F2
+<426974636f64652056>108 508.8 Q<657273696f6e204e756d626572>-1 E F0
+<54686520626974636f64652076>128 520.8 Q<657273696f6e20286e6f74>-.15 E F4
+<4c4c>2.5 E<564d>-.9 E F0 -.15<7665>2.5 G<7273696f6e29206f6620746865208c
+6c6520726561642062792074686520616e616c797a6572>.15 E<2e>-.55 E F2
+<46696c652053697a65>108 537.6 Q F0<5468652073697a652c20696e206279746573
+2c206f662074686520656e7469726520626974636f6465208c6c652e>128 549.6 Q F2
+<4d6f64756c65204279746573>108 566.4 Q F0<5468652073697a652c20696e206279
+7465732c206f6620746865206d6f64756c6520626c6f636b2e2050657263656e74616765
+2069732072656c617469>128 578.4 Q .3 -.15<76652074>-.25 H 2.5<6f46>.15 G
+<696c652053697a652e>-2.5 E F2<46756e6374696f6e204279746573>108 595.2 Q
+F0<5468652073697a652c20696e2062797465732c206f6620616c6c207468652066756e
+6374696f6e20626c6f636b732e2050657263656e746167652069732072656c617469>128
+607.2 Q .3 -.15<76652074>-.25 H 2.5<6f46>.15 G<696c652053697a652e>-2.5 E
+F2<476c6f62616c2054>108 624 Q<79706573204279746573>-.74 E F0 .44
+<5468652073697a652c20696e2062797465732c206f662074686520476c6f62616c2054>
+128 636 R .44
+<7970657320506f6f6c2e2050657263656e746167652069732072656c617469>-.8 F
+.74 -.15<76652074>-.25 H 2.94<6f46>.15 G .44
+<696c652053697a652e2054686973206973207468652073697a65206f6620746865>
+-2.94 F<64658c6e6974696f6e73206f6620616c6c20747970657320696e207468652062
+6974636f6465208c6c652e>128 648 Q F2<436f6e7374616e742050>108 664.8 Q
+<6f6f6c204279746573>-.2 E F0<5468652073697a652c20696e2062797465732c206f
+662074686520436f6e7374616e7420506f6f6c20426c6f636b732050657263656e746167
+652069732072656c617469>128 676.8 Q .3 -.15<76652074>-.25 H 2.5<6f46>.15
+G<696c652053697a652e>-2.5 E F2<4d6f64756c6520476c6f62616c73204279746573>
+108 693.6 Q F0 1.108
+<5468732073697a652c20696e2062797465732c206f662074686520476c6f62616c2056>
+128 705.6 R 1.108<61726961626c652044658c6e6974696f6e7320616e642074686569
+7220696e697469616c697a6572732e>-1.11 F 1.108
+<50657263656e746167652069732072656c617469>6.108 F 1.408 -.15<76652074>
+-.25 H<6f>.15 E<46696c652053697a652e>128 717.6 Q 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d4243414e>-1 E<414c>-.35 E
+74.09<595a4552283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1 E
+<4c4c>76.59 E<564d2d4243414e>-1 E<414c>-.35 E<595a4552283129>-1 E/F1 10
+/Times-Bold at 0 SF<496e737472756374696f6e204c697374204279746573>108 84 Q
+F0 .953<5468652073697a652c20696e2062797465732c206f6620616c6c207468652069
+6e737472756374696f6e206c6973747320696e20616c6c207468652066756e6374696f6e
+732e>128 96 R .953<50657263656e746167652069732072656c617469>5.953 F
+1.253 -.15<76652074>-.25 H 3.453<6f46>.15 G .953<696c652053697a652e>
+-3.453 F<4e6f7465207468617420746869732076>128 108 Q<616c756520697320616c
+736f20696e636c7564656420696e207468652046756e6374696f6e2042797465732e>
+-.25 E F1<436f6d70616374696f6e2054>108 124.8 Q<61626c65204279746573>-.92
+E F0 .337<5468652073697a652c20696e2062797465732c206f6620616c6c2074686520
+636f6d70616374696f6e207461626c657320696e20616c6c207468652066756e6374696f
+6e732e>128 136.8 R .336<50657263656e746167652069732072656c617469>5.336 F
+.636 -.15<76652074>-.25 H 2.836<6f46>.15 G .336<696c652053697a652e>
+-2.836 F<4e6f7465207468617420746869732076>128 148.8 Q<616c75652069732061
+6c736f20696e636c7564656420696e207468652046756e6374696f6e2042797465732e>
+-.25 E F1<53796d626f6c2054>108 165.6 Q<61626c65204279746573>-.92 E F0
+.201<5468652073697a652c20696e2062797465732c206f6620616c6c20746865207379
+6d626f6c207461626c657320696e20616c6c207468652066756e6374696f6e732e205065
+7263656e746167652069732072656c617469>128 177.6 R .502 -.15<76652074>-.25
+H 2.702<6f46>.15 G .202<696c652053697a652e204e6f7465>-2.702 F
+<7468617420746869732076>128 189.6 Q<616c756520697320616c736f20696e636c75
+64656420696e207468652046756e6374696f6e2042797465732e>-.25 E F1
+<446570656e64656e74204c6962726172696573204279746573>108 206.4 Q F0 .63<
+5468652073697a652c20696e2062797465732c206f6620746865206c697374206f662064
+6570656e64656e74206c696272617269657320696e20746865206d6f64756c652e205065
+7263656e746167652069732072656c617469>128 218.4 R .93 -.15<76652074>-.25
+H 3.13<6f46>.15 G .63<696c652053697a652e>-3.13 F
+<4e6f7465207468617420746869732076>128 230.4 Q<616c756520697320616c736f20
+696e636c7564656420696e20746865204d6f64756c6520476c6f62616c2042797465732e>
+-.25 E F1<4e756d626572204f6620426974636f646520426c6f636b73>108 247.2 Q
+F0<54686520746f74616c206e756d626572206f6620626c6f636b73206f6620616e>128
+259.2 Q 2.5<796b>-.15 G<696e6420696e2074686520626974636f6465208c6c652e>
+-2.5 E F1<4e756d626572204f662046756e6374696f6e73>108 276 Q F0<5468652074
+6f74616c206e756d626572206f662066756e6374696f6e2064658c6e6974696f6e732069
+6e2074686520626974636f6465208c6c652e>128 288 Q F1
+<4e756d626572204f662054>108 304.8 Q<79706573>-.74 E F0<54686520746f7461
+6c206e756d626572206f662074797065732064658c6e656420696e2074686520476c6f62
+616c2054>128 316.8 Q<7970657320506f6f6c2e>-.8 E F1
+<4e756d626572204f6620436f6e7374616e7473>108 333.6 Q F0<54686520746f7461
+6c206e756d626572206f6620636f6e7374616e747320286f6620616e>128 345.6 Q 2.5
+<7974>-.15 G
+<797065292064658c6e656420696e2074686520436f6e7374616e7420506f6f6c2e>-2.5
+E F1<4e756d626572204f6620426173696320426c6f636b73>108 362.4 Q F0<546865
+20746f74616c206e756d626572206f6620626173696320626c6f636b732064658c6e6564
+20696e20616c6c2066756e6374696f6e7320696e2074686520626974636f6465208c6c65
+2e>128 374.4 Q F1<4e756d626572204f6620496e737472756374696f6e73>108 391.2
+Q F0<54686520746f74616c206e756d626572206f6620696e737472756374696f6e7320
+64658c6e656420696e20616c6c2066756e6374696f6e7320696e2074686520626974636f
+6465208c6c652e>128 403.2 Q F1
+<4e756d626572204f66204c6f6e6720496e737472756374696f6e73>108 420 Q F0
+.387<54686520746f74616c206e756d626572206f66206c6f6e6720696e737472756374
+696f6e732064658c6e656420696e20616c6c2066756e6374696f6e7320696e2074686520
+626974636f6465208c6c652e204c6f6e6720696e737472756374696f6e7320617265>128
+432 R .742<74686f73652074616b696e672067726561746572207468616e2034206279
+7465732e2054>128 444 R .741<79706963616c6c79206c6f6e6720696e737472756374
+696f6e732061726520476574456c656d656e745074722077697468207365>-.8 F -.15
+<7665>-.25 G .741<72616c20696e64696365732c>.15 F/F2 9/Times-Roman at 0 SF
+<504849>128 456 Q F0<6e6f6465732c20616e642063616c6c7320746f2066756e6374
+696f6e732077697468206c6172>2.5 E<6765206e756d62657273206f66206172>-.18 E
+<67756d656e74732e>-.18 E F1<4e756d626572204f66204f706572616e6473>108
+472.8 Q F0<54686520746f74616c206e756d626572206f66206f706572616e64732075
+73656420696e20616c6c20696e737472756374696f6e7320696e2074686520626974636f
+6465208c6c652e>128 484.8 Q F1
+<4e756d626572204f6620436f6d70616374696f6e2054>108 501.6 Q<61626c6573>
+-.92 E F0<54686520746f74616c206e756d626572206f6620636f6d70616374696f6e20
+7461626c657320696e20616c6c2066756e6374696f6e7320696e2074686520626974636f
+6465208c6c652e>128 513.6 Q F1<4e756d626572204f662053796d626f6c2054>108
+530.4 Q<61626c6573>-.92 E F0<54686520746f74616c206e756d626572206f662073
+796d626f6c207461626c657320696e20616c6c2066756e6374696f6e7320696e20746865
+20626974636f6465208c6c652e>128 542.4 Q F1
+<4e756d626572204f6620446570656e64656e74204c696273>108 559.2 Q F0<546865
+20746f74616c206e756d626572206f6620646570656e64656e74206c6962726172696573
+20666f756e6420696e2074686520626974636f6465208c6c652e>128 571.2 Q F1 -.92
+<546f>108 588 S<74616c20496e737472756374696f6e2053697a65>.92 E F0<546865
+20746f74616c2073697a65206f662074686520696e737472756374696f6e7320696e2061
+6c6c2066756e6374696f6e7320696e2074686520626974636f6465208c6c652e>128 600
+Q F1 -.6 -1<41762065>108 616.8 T
+<7261676520496e737472756374696f6e2053697a65>1 E F0 1.711<5468652061>128
+628.8 R -.15<7665>-.2 G 1.711<72616765206e756d626572206f6620627974657320
+70657220696e737472756374696f6e206163726f737320616c6c2066756e6374696f6e73
+20696e2074686520626974636f6465208c6c652e20546869732076>.15 F 1.712
+<616c7565206973>-.25 F<636f6d7075746564206279206469>128 640.8 Q
+<766964696e672054>-.25 E<6f74616c20496e737472756374696f6e2053697a652062
+79204e756d626572204f6620496e737472756374696f6e732e>-.8 E F1
+<4d6178696d756d2054>108 657.6 Q<79706520536c6f74204e756d626572>-.74 E F0
+1.653<546865206d6178696d756d2076>128 669.6 R 1.653
+<616c7565207573656420666f722061207479706527>-.25 F 4.153<7373>-.55 G
+1.653<6c6f74206e756d626572>-4.153 F 4.152<2e4c>-.55 G<6172>-4.152 E
+1.652<67657220736c6f74206e756d6265722076>-.18 F 1.652
+<616c7565732074616b>-.25 F 4.152<656d>-.1 G 1.652
+<6f726520627974657320746f>-4.152 F<656e636f64652e>128 681.6 Q F1
+<4d6178696d756d2056>108 698.4 Q<616c756520536c6f74204e756d626572>-.92 E
+F0 1.39<546865206d6178696d756d2076>128 710.4 R 1.39
+<616c7565207573656420666f7220612076>-.25 F<616c756527>-.25 E 3.891<7373>
+-.55 G 1.391<6c6f74206e756d626572>-3.891 F 3.891<2e4c>-.55 G<6172>-3.891
+E 1.391<67657220736c6f74206e756d6265722076>-.18 F 1.391
+<616c7565732074616b>-.25 F 3.891<656d>-.1 G 1.391
+<6f726520627974657320746f>-3.891 F<656e636f64652e>128 722.4 Q 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d4243414e>-1 E<414c>-.35 E
+74.09<595a4552283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1 E
+<4c4c>76.59 E<564d2d4243414e>-1 E<414c>-.35 E<595a4552283129>-1 E/F1 10
+/Times-Bold at 0 SF<42797465732050>108 84 Q<65722056>-.2 E<616c7565>-.92 E
+F0 .002<5468652061>128 96 R -.15<7665>-.2 G .001
+<726167652073697a65206f6620612056>.15 F .001
+<616c75652064658c6e6974696f6e20286f6620616e>-1.11 F 2.501<7974>-.15 G
+.001<797065292e205468697320697320636f6d7075746564206279206469>-2.501 F
+.001<766964696e672046696c652053697a652062792074686520746f74616c>-.25 F
+<6e756d626572206f662076>128 108 Q<616c756573206f6620616e>-.25 E 2.5
+<7974>-.15 G<7970652e>-2.5 E F1<42797465732050>108 124.8 Q
+<657220476c6f62616c>-.2 E F0<5468652061>128 136.8 Q -.15<7665>-.2 G<7261
+67652073697a65206f66206120676c6f62616c2064658c6e6974696f6e2028636f6e7374
+616e747320616e6420676c6f62616c2076>.15 E<61726961626c6573292e>-.25 E F1
+<42797465732050>108 153.6 Q<65722046756e6374696f6e>-.2 E F0 .397
+<5468652061>128 165.6 R -.15<7665>-.2 G .397<72616765206e756d626572206f
+66206279746573207065722066756e6374696f6e2064658c6e6974696f6e2e2054686973
+20697320636f6d7075746564206279206469>.15 F .398
+<766964696e672046756e6374696f6e204279746573206279>-.25 F
+<4e756d626572204f662046756e6374696f6e732e>128 177.6 Q F1 2.5<236f>108
+194.4 S<66>-2.5 E/F2 9/Times-Bold at 0 SF<564252>2.5 E F1
+<3332ad62697420496e746567657273>2.5 E F0
+<54686520746f74616c206e756d626572206f66203332ad62697420696e7465>128
+206.4 Q<6765727320656e636f646564207573696e67207468652056>-.15 E
+<61726961626c6520426974205261746520656e636f64696e6720736368656d652e>
+-1.11 E F1 2.5<236f>108 223.2 S<66>-2.5 E F2<564252>2.5 E F1
+<3634ad62697420496e746567657273>2.5 E F0
+<54686520746f74616c206e756d626572206f66203634ad62697420696e7465>128
+235.2 Q<6765727320656e636f646564207573696e67207468652056>-.15 E
+<61726961626c6520426974205261746520656e636f64696e6720736368656d652e>
+-1.11 E F1 2.5<236f>108 252 S<66>-2.5 E F2<564252>2.5 E F1<436f6d7072>
+2.5 E<6573736564204279746573>-.18 E F0 .625<54686520746f74616c206e756d62
+6572206f6620627974657320636f6e73756d656420627920746865203332ad6269742061
+6e64203634ad62697420696e7465>128 264 R .625
+<67657273207468617420757365207468652056>-.15 F .625
+<61726961626c65204269742052617465>-1.11 F
+<656e636f64696e6720736368656d652e>128 276 Q F1 2.5<236f>108 292.8 S<66>
+-2.5 E F2<564252>2.5 E F1<457870616e646564204279746573>2.5 E F0 .367
+<54686520746f74616c206e756d626572206f6620627974657320746861742077>128
+304.8 R .367<6f756c64206861>-.1 F .667 -.15<76652062>-.2 H .367<65656e20
+636f6e73756d656420627920746865203332ad62697420616e64203634ad62697420696e
+7465>.15 F .367<676572732068616420746865>-.15 F<79>-.15 E
+<6e6f74206265656e20636f6d707265737365642077697468207468652056>128 316.8
+Q<61726961626c6520426974205261676520656e636f64696e6720736368656d652e>
+-1.11 E F1<4279746573205361>108 333.6 Q -.1<7665>-.25 G 2.5<6457>.1 G
+<697468>-2.68 E F2<564252>2.5 E F0 .707
+<54686520746f74616c206e756d626572206f66206279746573207361>128 345.6 R
+-.15<7665>-.2 G 3.207<6462>.15 G 3.207<7975>-3.207 G .707
+<73696e67207468652056>-3.207 F .707
+<61726961626c6520426974205261746520656e636f64696e6720736368656d652e>
+-1.11 F .706<5468652070657263656e74616765206973>5.707 F<72656c617469>128
+357.6 Q .3 -.15<76652074>-.25 H 2.5<6f236f>.15 G<66>-2.5 E/F3 9
+/Times-Roman at 0 SF<564252>2.5 E F0<457870616e6465642042797465732e>2.5 E
+/F4 10.95/Times-Bold at 0 SF<444554>72 374.4 Q
+<41494c4544204f555450555420444546494e4954494f4e53>-.986 E F0 .689
+<54686520666f6c6c6f>108 386.4 R .689<77696e672064658c6e6974696f6e73206f
+63637572206f6e6c792069662074686520ad6e6f64657461696c73206f7074696f6e2077>
+-.25 F .689<6173206e6f74206769>-.1 F -.15<7665>-.25 G 3.19<6e2e20546865>
+.15 F .69<64657461696c6564206f75747075742070726f>3.19 F<7669646573>-.15
+E<6164646974696f6e616c20696e666f726d6174696f6e206f6e206120706572>108
+398.4 Q<2d66756e6374696f6e2062617369732e>-.2 E F1 -.74<5479>108 415.2 S
+<7065>.74 E F0
+<5468652074797065207369676e6174757265206f66207468652066756e6374696f6e2e>
+128 427.2 Q F1<427974652053697a65>108 444 Q F0<54686520746f74616c206e75
+6d626572206f6620627974657320696e207468652066756e6374696f6e27>128 456 Q
+2.5<7362>-.55 G<6c6f636b2e>-2.5 E F1<426173696320426c6f636b73>108 472.8
+Q F0<546865206e756d626572206f6620626173696320626c6f636b732064658c6e6564
+206279207468652066756e6374696f6e2e>128 484.8 Q F1
+<496e737472756374696f6e73>108 501.6 Q F0<546865206e756d626572206f662069
+6e737472756374696f6e732064658c6e6564206279207468652066756e6374696f6e2e>
+128 513.6 Q F1<4c6f6e6720496e737472756374696f6e73>108 530.4 Q F0<546865
+206e756d626572206f6620696e737472756374696f6e73207573696e6720746865206c6f
+6e6720696e737472756374696f6e20666f726d617420696e207468652066756e6374696f
+6e2e>128 542.4 Q F1<4f706572616e6473>108 559.2 Q F0<546865206e756d626572
+206f66206f706572616e6473207573656420627920616c6c20696e737472756374696f6e
+7320696e207468652066756e6374696f6e2e>128 571.2 Q F1
+<496e737472756374696f6e2053697a65>108 588 Q F0<546865206e756d626572206f
+6620627974657320636f6e73756d656420627920696e737472756374696f6e7320696e20
+7468652066756e6374696f6e2e>128 600 Q F1 -.6 -1<41762065>108 616.8 T
+<7261676520496e737472756374696f6e2053697a65>1 E F0 .6<5468652061>128
+628.8 R -.15<7665>-.2 G .599<72616765206e756d626572206f6620627974657320
+636f6e73756d65642062792074686520696e737472756374696f6e7320696e2074686520
+66756e74696f6e2e20546869732076>.15 F .599
+<616c756520697320636f6d7075746564206279>-.25 F<6469>128 640.8 Q<76696469
+6e6720496e737472756374696f6e2053697a6520627920496e737472756374696f6e732e>
+-.25 E F1<42797465732050>108 657.6 Q<657220496e737472756374696f6e>-.2 E
+F0 .337<5468652061>128 669.6 R -.15<7665>-.2 G .337<72616765206e756d6265
+72206f662062797465732075736564206279207468652066756e6374696f6e2070657220
+696e737472756374696f6e2e20546869732076>.15 F .338
+<616c756520697320636f6d7075746564206279206469>-.25 F<766964696e67>-.25 E
+1.137<427974652053697a6520627920496e737472756374696f6e732e204e6f74652074
+6861742074686973206973206e6f74207468652073616d652061732041>128 681.6 R
+-.15<7665>-.74 G 1.136<7261676520496e737472756374696f6e2053697a652e2049
+7420636f6d70757465732061>.15 F<6e756d6265722072656c617469>128 693.6 Q .3
+-.15<76652074>-.25 H 2.5<6f74>.15 G<686520746f74616c2066756e6374696f6e20
+73697a65206e6f74206a757374207468652073697a65206f662074686520696e73747275
+6374696f6e206c6973742e>-2.5 E 188.72<43565320323031302d30352d3036>72 768
+R<33>205.67 E 0 Cg EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d4243414e>-1 E<414c>-.35 E
+74.09<595a4552283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1 E
+<4c4c>76.59 E<564d2d4243414e>-1 E<414c>-.35 E<595a4552283129>-1 E/F1 10
+/Times-Bold at 0 SF<4e756d626572206f66>108 84 Q/F2 9/Times-Bold at 0 SF
+<564252>2.5 E F1<3332ad62697420496e746567657273>2.5 E F0
+<54686520746f74616c206e756d626572206f66203332ad62697420696e7465>128 96 Q
+<6765727320666f756e6420696e20746869732066756e6374696f6e2028666f7220616e>
+-.15 E 2.5<7975>-.15 G<7365292e>-2.5 E F1<4e756d626572206f66>108 112.8 Q
+F2<564252>2.5 E F1<3634ad62697420496e746567657273>2.5 E F0
+<54686520746f74616c206e756d626572206f66203634ad62697420696e7465>128
+124.8 Q
+<6765727320666f756e6420696e20746869732066756e6374696f6e2028666f7220616e>
+-.15 E 2.5<7975>-.15 G<7365292e>-2.5 E F1<4e756d626572206f66>108 141.6 Q
+F2<564252>2.5 E F1<436f6d7072>2.5 E<6573736564204279746573>-.18 E F0
+1.115<54686520746f74616c206e756d626572206f6620627974657320696e2074686973
+2066756e6374696f6e20636f6e73756d656420627920746865203332ad62697420616e64
+203634ad62697420696e7465>128 153.6 R 1.115
+<6765727320746861742075736520746865>-.15 F -1.11<5661>128 165.6 S
+<726961626c6520426974205261746520656e636f64696e6720736368656d652e>1.11 E
+F1<4e756d626572206f66>108 182.4 Q F2<564252>2.5 E F1
+<457870616e646564204279746573>2.5 E F0 .806<54686520746f74616c206e756d62
+6572206f6620627974657320696e20746869732066756e6374696f6e20746861742077>
+128 194.4 R .806<6f756c64206861>-.1 F 1.106 -.15<76652062>-.2 H .806<65
+656e20636f6e73756d656420627920746865203332ad62697420616e64203634ad626974>
+.15 F<696e7465>128 206.4 Q<676572732068616420746865>-.15 E 2.5<796e>-.15
+G<6f74206265656e20636f6d707265737365642077697468207468652056>-2.5 E
+<61726961626c6520426974205261746520656e636f64696e6720736368656d652e>
+-1.11 E F1<4279746573205361>108 223.2 Q -.1<7665>-.25 G 2.5<6457>.1 G
+<697468>-2.68 E F2<564252>2.5 E F0 .337
+<54686520746f74616c206e756d626572206f66206279746573207361>128 235.2 R
+-.15<7665>-.2 G 2.837<6469>.15 G 2.837<6e74>-2.837 G .337
+<6869732066756e6374696f6e206279207573696e67207468652056>-2.837 F .337<61
+726961626c6520426974205261746520656e636f64696e6720736368656d652e20546865>
+-1.11 F<70657263656e746167652069732072656c617469>128 247.2 Q .3 -.15
+<76652074>-.25 H 2.5<6f236f>.15 G<66>-2.5 E/F3 9/Times-Roman at 0 SF
+<564252>2.5 E F0<457870616e6465642042797465732e>2.5 E/F4 10.95
+/Times-Bold at 0 SF<53454520414c534f>72 264 Q F0
+<6c6c766d2d6469732c203c687474703a2f2f6c6c766d2e6f72>108 276 Q
+<672f646f63732f426974436f646546>-.18 E<6f726d61742e68746d6c3e>-.15 E F4
+-.548<4155>72 292.8 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 304.8 Q F3<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<34>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-config.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-config.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-config.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-config.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,341 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 102.74
+<564d2d434f4e464947283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1
+E<4c4c>105.24 E<564d2d434f4e464947283129>-1 E/F1 10.95/Times-Bold at 0 SF
+-.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad636f6e8c6720ad205072696e74204c4c>108 96 Q
+<564d20636f6d70696c6174696f6e206f7074696f6e73>-1 E F1<53594e4f50534953>
+72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d2d636f6e8c67>108 124.8 Q/F3 10
+/Times-Italic at 0 SF<6f7074696f6e>2.5 E F0<5b>2.5 E F3
+<636f6d706f6e656e7473>A F0<2e2e2e5d>A F1<4445534352495054494f4e>72 141.6
+Q F2<6c6c766d2d636f6e8c67>108 153.6 Q F0<6d616b>2.667 E .167
+<65732069742065617369657220746f2062>-.1 F .167
+<75696c64206170706c69636174696f6e73207468617420757365>-.2 F/F4 9
+/Times-Roman at 0 SF<4c4c>2.667 E<564d>-.9 E F0 5.167<2e49>C 2.667<7463>
+-5.167 G .166
+<616e207072696e742074686520636f6d70696c6572208d6167732c206c696e6b>-2.667
+F .166<6572208d616773>-.1 F<616e64206f626a656374206c6962726172696573206e
+656564656420746f206c696e6b206167>108 165.6 Q<61696e7374>-.05 E F4<4c4c>
+2.5 E<564d>-.9 E F0<2e>A F1<4558414d504c4553>72 182.4 Q F0 1.6 -.8
+<546f206c>108 194.4 T<696e6b206167>.8 E<61696e737420746865>-.05 E F4
+<4a4954>2.5 E<3a>-.45 E/F5 10/Courier at 0 SF<672b2b20926c6c766dad636f6e66
+696720adad637878666c6167739220ad6f20486f77546f5573654a49542e6f20ad632048
+6f77546f5573654a49542e637070>120 211.2 Q<672b2b20926c6c766dad636f6e6669
+6720adad6c64666c6167739220ad6f20486f77546f5573654a495420486f77546f557365
+4a49542e6f205c>120 223.2 Q<926c6c766dad636f6e66696720adad6c69627320656e
+67696e65206263726561646572207363616c61726f70747392>144 235.2 Q F1
+<4f5054494f4e53>72 252 Q F2<adad76>108 264 Q<657273696f6e>-.1 E F0
+<5072696e74207468652076>128 276 Q<657273696f6e206e756d626572206f66>-.15
+E F4<4c4c>2.5 E<564d>-.9 E F0<2e>A F2<ad68656c70>108 292.8 Q F0
+<5072696e7420612073756d6d617279206f66>128 304.8 Q F2
+<6c6c766d2d636f6e8c67>2.5 E F0<6172>2.5 E<67756d656e74732e>-.18 E F2
+<adad7072>108 321.6 Q<658c78>-.18 E F0
+<5072696e742074686520696e7374616c6c6174696f6e207072658c7820666f72>128
+333.6 Q F4<4c4c>2.5 E<564d>-.9 E F0<2e>A F2<adad7372>108 350.4 Q<63ad72>
+-.18 E<6f6f74>-.18 E F0
+<5072696e742074686520736f7572636520726f6f742066726f6d207768696368>128
+362.4 Q F4<4c4c>2.5 E<564d>-.9 E F0 -.1<7761>2.5 G 2.5<7362>.1 G
+<75696c742e>-2.7 E F2<adad6f626aad72>108 379.2 Q<6f6f74>-.18 E F0
+<5072696e7420746865206f626a65637420726f6f74207573656420746f2062>128
+391.2 Q<75696c64>-.2 E F4<4c4c>2.5 E<564d>-.9 E F0<2e>A F2
+<adad62696e646972>108 408 Q F0<5072696e742074686520696e7374616c6c617469
+6f6e206469726563746f727920666f72>128 420 Q F4<4c4c>2.5 E<564d>-.9 E F0
+<62696e61726965732e>2.5 E F2<adad696e636c756465646972>108 436.8 Q F0<50
+72696e742074686520696e7374616c6c6174696f6e206469726563746f727920666f72>
+128 448.8 Q F4<4c4c>2.5 E<564d>-.9 E F0<686561646572732e>2.5 E F2
+<adad6c6962646972>108 465.6 Q F0<5072696e742074686520696e7374616c6c6174
+696f6e206469726563746f727920666f72>128 477.6 Q F4<4c4c>2.5 E<564d>-.9 E
+F0<6c69627261726965732e>2.5 E F2<adad6378788d616773>108 494.4 Q F0
+<5072696e74207468652043>128 506.4 Q/F6 8/Times-Roman at 0 SF -1<2b2b>-1
+-1.2 O F0<636f6d70696c6572208d616773206e656564656420746f20757365>2.5 1.2
+M F4<4c4c>2.5 E<564d>-.9 E F0<686561646572732e>2.5 E F2
+<adad6c648d616773>108 523.2 Q F0
+<5072696e7420746865208d616773206e656564656420746f206c696e6b206167>128
+535.2 Q<61696e7374>-.05 E F4<4c4c>2.5 E<564d>-.9 E F0
+<6c69627261726965732e>2.5 E F2<adad6c696273>108 552 Q F0 3.878<5072696e
+7420616c6c20746865206c6962726172696573206e656564656420746f206c696e6b2061
+67>128 564 R 3.878<61696e7374207468652073706563698c6564>-.05 F F4<4c4c>
+6.378 E<564d>-.9 E F3<636f6d706f6e656e7473>6.378 E F0 6.378<2c69>C 3.878
+<6e636c7564696e6720616e>-6.378 F<79>-.15 E<646570656e64656e636965732e>
+128 576 Q F2<adad6c69626e616d6573>108 592.8 Q F0 .998
+<53696d696c617220746f>128 604.8 R F2<adad6c696273>3.498 E F0 3.498<2c62>
+C .998<7574207072696e7473207468652062617265208c6c656e616d6573206f662074
+6865206c696272617269657320776974686f7574>-3.698 F F2<ad6c>3.497 E F0
+.997<6f7220706174686e616d65732e>3.497 F .997<55736566756c20666f72>5.997
+F<6c696e6b696e67206167>128 616.8 Q
+<61696e73742061206e6f742d7965742d696e7374616c6c656420636f70>-.05 E 2.5
+<796f>-.1 G<66>-2.5 E F4<4c4c>2.5 E<564d>-.9 E F0<2e>A F2
+<adad6c69628c6c6573>108 633.6 Q F0 1.23<53696d696c617220746f>128 645.6 R
+F2<adad6c696273>3.73 E F0 3.73<2c62>C 1.23<7574207072696e74207468652066
+756c6c207061746820746f2065616368206c696272617279208c6c652e>-3.93 F 1.231
+<546869732069732075736566756c207768656e206372656174696e67206d616b>6.231
+F<658c6c65>-.1 E<646570656e64656e636965732c20746f20656e7375726520746861
+74206120746f6f6c2069732072656c696e6b>128 657.6 Q<656420696620616e>-.1 E
+2.5<796c>-.15 G<6962726172792069742075736573206368616e6765732e>-2.5 E F2
+<adad636f6d706f6e656e7473>108 674.4 Q F0<5072696e7420616c6c2076>128
+686.4 Q<616c696420636f6d706f6e656e74206e616d65732e>-.25 E F2<adad746172>
+108 703.2 Q<67657473ad62>-.1 E<75696c74>-.2 E F0<5072696e74207468652063
+6f6d706f6e656e74206e616d657320666f7220616c6c20746172>128 715.2 Q
+<6765747320737570706f72746564206279207468697320636f70>-.18 E 2.5<796f>
+-.1 G<66>-2.5 E F4<4c4c>2.5 E<564d>-.9 E F0<2e>A 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 102.74
+<564d2d434f4e464947283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1
+E<4c4c>105.24 E<564d2d434f4e464947283129>-1 E/F1 10/Times-Bold at 0 SF
+<adad62>108 84 Q<75696c64ad6d6f6465>-.2 E F0<5072696e74207468652062>128
+96 Q<75696c64206d6f64652075736564207768656e>-.2 E/F2 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d>-.9 E F0 -.1<7761>2.5 G 2.5<7362>.1 G
+<75696c742028652e672e20446562>-2.7 E<7567206f722052656c6561736529>-.2 E
+/F3 10.95/Times-Bold at 0 SF<434f4d504f4e454e5453>72 112.8 Q F0 2.885 -.8
+<546f2070>108 124.8 T 1.285<72696e742061206c697374206f6620616c6c2061>.8
+F -.25<7661>-.2 G 1.285<696c61626c6520636f6d706f6e656e74732c2072756e>.25
+F F1 1.285<6c6c766d2d636f6e8c6720adad636f6d706f6e656e7473>3.785 F F0
+6.285<2e49>C 3.785<6e6d>-6.285 G 1.285
+<6f73742063617365732c20636f6d706f6e656e7473>-3.785 F
+<636f72726573706f6e64206469726563746c7920746f>108 136.8 Q F2<4c4c>2.5 E
+<564d>-.9 E F0 2.5<6c69627261726965732e2055736566756c>2.5 F -.74<6060>
+2.5 G<7669727475616c27>.74 E 2.5<2763>-.74 G
+<6f6d706f6e656e747320696e636c7564653a>-2.5 E F1<616c6c>108 153.6 Q F0
+<496e636c7564657320616c6c>9.44 E F2<4c4c>2.5 E<564d>-.9 E F0 2.5
+<6c696261726965732e20546865>2.5 F<646566>2.5 E
+<61756c74206966206e6f20636f6d706f6e656e7473206172652073706563698c65642e>
+-.1 E F1<6261636b>108 170.4 Q<656e64>-.1 E F0
+<496e636c75646573206569746865722061206e617469>128 182.4 Q .3 -.15
+<76652062>-.25 H<61636b>.15 E<656e64206f72207468652043206261636b>-.1 E
+<656e642e>-.1 E F1<656e67696e65>108 199.2 Q F0
+<496e636c75646573206569746865722061206e617469>128 211.2 Q -.15<7665>-.25
+G F2<4a4954>2.65 E F0
+<6f722074686520626974636f646520696e746572707265746572>2.5 E<2e>-.55 E F3
+<45584954205354>72 228 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108 240
+Q F1<6c6c766d2d636f6e8c67>2.681 E F0 .181
+<73756363656564732c2069742077696c6c2065>2.681 F .181
+<786974207769746820302e>-.15 F .182<4f74686572776973652c20696620616e2065
+72726f72206f63637572732c2069742077696c6c2065>5.181 F .182
+<78697420776974682061206e6f6e2d7a65726f2076>-.15 F<616c75652e>-.25 E F3
+-.548<4155>72 256.8 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 268.8 Q F2<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-diff.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-diff.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-diff.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-diff.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,290 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 118.29<564d2d44494646283129204c4c>
+-1 F<564d20436f6d6d616e64204775696465>-1 E<4c4c>120.79 E
+<564d2d44494646283129>-1 E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S
+<4d45>.219 E F0<6c6c766dad646966>108 96 Q 2.5<66ad4c>-.25 G -1<4c56>-2.5
+G 2.5<4d73>1 G<74727563747572616c2027>-2.5 E<646966>-.5 E .55<6627>-.25
+G F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF
+<6c6c766d2d64696666>108 124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF
+<6f7074696f6e73>A F0<5d>A F3<6d6f64756c652031206d6f64756c652032>2.5 E F0
+<5b>2.5 E F3<676c6f62616c206e616d65202e2e2e>A F0<5d>A F1
+<4445534352495054494f4e>72 141.6 Q F2<6c6c766d2d64696666>108 153.6 Q F0
+1.969<636f6d70617265732074686520737472756374757265206f66207477>4.469 F
+<6f>-.1 E/F4 9/Times-Roman at 0 SF<4c4c>4.469 E<564d>-.9 E F0 1.969
+<6d6f64756c65732c207072696d6172696c7920666f637573696e67206f6e20646966>
+4.469 F 1.968<666572656e63657320696e2066756e6374696f6e>-.25 F 3.53
+<64658c6e6974696f6e732e20496e7369676e698c63616e74>108 165.6 R<646966>
+3.53 E 1.03<666572656e6365732c2073756368206173206368616e67657320696e2074
+6865206f72646572696e67206f6620676c6f62616c73206f7220696e20746865206e616d
+6573206f66206c6f63616c>-.25 F -.25<7661>108 177.6 S
+<6c7565732c206172652069676e6f7265642e>.25 E .137<416e20696e707574206d6f
+64756c652077696c6c20626520696e74657270726574656420617320616e20617373656d
+626c79208c6c6520696620697473206e616d6520656e647320696e20272e6c6c273b>108
+194.4 R .136<6f74686572776973652069742077696c6c206265207265616420696e>
+5.136 F<6173206120626974636f6465208c6c652e>108 206.4 Q 1.477
+<49662061206c697374206f6620676c6f62616c206e616d6573206973206769>108
+223.2 R -.15<7665>-.25 G 1.477<6e2c206a757374207468652076>.15 F 1.477<61
+6c75657320776974682074686f7365206e616d65732061726520636f6d70617265643b20
+6f74686572776973652c20616c6c20676c6f62616c>-.25 F -.25<7661>108 235.2 S
+1.344<6c7565732061726520636f6d70617265642c20616e6420646961676e6f73746963
+73206172652070726f647563656420666f7220676c6f62616c73207768696368206f6e6c
+792061707065617220696e206f6e65206d6f64756c65206f7220746865>.25 F
+<6f74686572>108 247.2 Q<2e>-.55 E F2<6c6c766d2d64696666>108 264 Q F0
+.412<636f6d7061726573207477>2.912 F 2.912<6f66>-.1 G .413<756e6374696f6e
+7320627920636f6d706172696e6720746865697220626173696320626c6f636b732c2062
+65>-2.912 F .413
+<67696e6e696e6720776974682074686520656e74727920626c6f636b732e>-.15 F
+.413<496620746865>5.413 F 1.092<7465726d696e61746f7273207365656d20746f20
+6d617463682c207468656e2074686520636f72726573706f6e64696e6720737563636573
+736f72732061726520636f6d70617265643b206f746865727769736520746865>108 276
+R 3.591<7961>-.15 G 1.091<72652069676e6f7265642e>-3.591 F 1.232
+<5468697320616c676f726974686d2069732076>108 288 R 1.232
+<6572792073656e73697469>-.15 F 1.532 -.15<76652074>-.25 H 3.732<6f63>.15
+G 1.232<68616e67657320696e20636f6e74726f6c208d6f>-3.732 F 2.533 -.65
+<772c2077>-.25 H 1.233<686963682074656e6420746f2073746f7020616e>.65 F
+3.733<7964>-.15 G -.25<6f77>-3.733 G 1.233
+<6e73747265616d206368616e676573>.25 F
+<66726f6d206265696e672064657465637465642e>108 300 Q F2
+<6c6c766d2d64696666>108 316.8 Q F0 1.279
+<697320696e74656e646564206173206120646562>3.779 F 1.279
+<756767696e6720746f6f6c20666f722077726974657273206f66>-.2 F F4<4c4c>
+3.778 E<564d>-.9 E F0 1.278<70617373657320616e642066726f6e74656e64732e>
+3.778 F 1.278<497420646f6573206e6f74206861>6.278 F 1.578 -.15<76652061>
+-.2 H<737461626c65206f757470757420666f726d61742e>108 328.8 Q F1
+<45584954205354>72 345.6 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108
+357.6 Q F2<6c6c766d2d64696666>2.677 E F0 .177<8c6e6473206e6f20646966>
+2.677 F .177<666572656e636573206265747765656e20746865206d6f64756c65732c
+2069742077696c6c2065>-.25 F .177
+<7869742077697468203020616e642070726f64756365206e6f206f75747075742e>-.15
+F<4f7468657277697365>5.178 E<69742077696c6c2065>108 369.6 Q
+<78697420776974682061206e6f6e2d7a65726f2076>-.15 E<616c75652e>-.25 E F1
+-.11<4255>72 386.4 S<4753>.11 E F0<4d616e>108 398.4 Q 2.5<7969>-.15 G
+<6d706f7274616e7420646966>-2.5 E<666572656e6365732c206c696b>-.25 E 2.5
+<6563>-.1 G<68616e67657320696e206c696e6b616765206f722066756e6374696f6e20
+617474726962>-2.5 E<757465732c20617265206e6f7420646961676e6f7365642e>-.2
+E 1.393<4368616e67657320696e206d656d6f72792062656861>108 415.2 R 1.393
+<76696f722028666f722065>-.2 F 1.393<78616d706c652c20636f616c657363696e67
+206c6f616473292063616e206361757365206d61737369>-.15 F 1.693 -.15
+<76652064>-.25 H 1.393<6574656374656420646966>.15 F 1.393
+<666572656e63657320696e>-.25 F<626c6f636b732e>108 427.2 Q F1 -.548<4155>
+72 444 S<54484f5253>.548 E F0<4d61696e7461696e656420627920746865>108 456
+Q F4<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30392d3037>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-dis.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-dis.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-dis.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-dis.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,278 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 123.85<564d2d444953283129204c4c>-1
+F<564d20436f6d6d616e64204775696465>-1 E<4c4c>126.35 E
+<564d2d444953283129>-1 E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S
+<4d45>.219 E F0<6c6c766dad64697320ad204c4c>108 96 Q
+<564d20646973617373656d626c6572>-1 E F1<53594e4f50534953>72 112.8 Q/F2
+10/Times-Bold at 0 SF<6c6c766d2d646973>108 124.8 Q F0<5b>2.5 E/F3 10
+/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5<5d5b>C F3<8c6c656e616d65>-2.5
+E F0<5d>A F1<4445534352495054494f4e>72 141.6 Q F0<546865>108 153.6 Q F2
+<6c6c766d2d646973>4.454 E F0 1.954<636f6d6d616e6420697320746865>4.454 F
+/F4 9/Times-Roman at 0 SF<4c4c>4.454 E<564d>-.9 E F0
+<646973617373656d626c6572>4.454 E 6.954<2e49>-.55 G 4.454<7474>-6.954 G
+<616b>-4.454 E 1.953<657320616e>-.1 F F4<4c4c>4.453 E<564d>-.9 E F0
+1.953<626974636f6465208c6c6520616e6420636f6e>4.453 F -.15<7665>-.4 G
+1.953<72747320697420696e746f>.15 F<68756d616e2d7265616461626c65>108
+165.6 Q F4<4c4c>2.5 E<564d>-.9 E F0
+<617373656d626c79206c616e67756167652e>2.5 E<4966208c6c656e616d6520697320
+6f6d6974746564206f722073706563698c6564206173>108 182.4 Q/F5 10/Courier at 0
+SF<ad>2.5 E F0<2c>A F2<6c6c766d2d646973>2.5 E F0<7265616473206974732069
+6e7075742066726f6d207374616e6461726420696e7075742e>2.5 E 1.516<49662074
+686520696e707574206973206265696e6720726561642066726f6d207374616e64617264
+20696e7075742c207468656e>108 199.2 R F2<6c6c766d2d646973>4.016 E F0
+1.516<77696c6c2073656e6420697473206f757470757420746f207374616e6461726420
+6f7574707574206279>4.016 F<646566>108 211.2 Q 3.156
+<61756c742e204f74686572776973652c>-.1 F .655<746865206f7574707574207769
+6c6c206265207772697474656e20746f2061208c6c65206e616d65642061667465722074
+686520696e707574208c6c652c20776974682061>3.156 F F5<2e6c6c>3.155 E F0
+<737566>3.155 E .655<8c78206164646564>-.25 F<28616e>108 223.2 Q 3.675
+<7965>-.15 G<78697374696e67>-3.825 E F5<2e6263>3.675 E F0<737566>3.675 E
+1.175<8c782077696c6c208c7273742062652072656d6f>-.25 F -.15<7665>-.15 G
+3.675<64292e2059>.15 F 1.175<6f752063616e206f>-1.1 F -.15<7665>-.15 G
+1.175<7272696465207468652063686f696365206f66206f7574707574208c6c65207573
+696e6720746865>.15 F F2<ad6f>3.675 E F0<6f7074696f6e2e>108 235.2 Q F1
+<4f5054494f4e53>72 252 Q F2<ad66>108 264 Q F0 .819
+<456e61626c652062696e617279206f7574707574206f6e207465726d696e616c732e>
+10.97 F<4e6f726d616c6c79>5.819 E<2c>-.65 E F2<6c6c766d2d646973>3.319 E
+F0 .819<77696c6c2072656675736520746f207772697465207261>3.319 F 3.318
+<7762>-.15 G .818<6974636f6465206f757470757420696620746865>-3.318 F .59
+<6f75747075742073747265616d2069732061207465726d696e616c2e2057>128 276 R
+.59<6974682074686973206f7074696f6e2c>-.4 F F2<6c6c766d2d646973>3.09 E F0
+.59<77696c6c207772697465207261>3.09 F 3.09<7762>-.15 G .59
+<6974636f6465207265>-3.09 F -.05<6761>-.15 G .59
+<72646c657373206f6620746865206f7574707574>.05 F<6465>128 288 Q
+<766963652e>-.25 E F2<ad68656c70>108 304.8 Q F0<5072696e7420612073756d6d
+617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>128 316.8 Q F2
+<ad6f>108 333.6 Q F3<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c65206e616d652e>128 345.6 Q
+<4966>5 E F3<8c6c656e616d65>2.5 E F0<697320ad2c207468656e20746865206f75
+747075742069732073656e7420746f207374616e64617264206f75747075742e>2.5 E
+F1<45584954205354>72 362.4 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108
+374.4 Q F2<6c6c766d2d646973>2.5 E F0
+<73756363656564732c2069742077696c6c2065>2.5 E<786974207769746820302e>
+-.15 E<4f74686572776973652c20696620616e206572726f72206f63637572732c2069
+742077696c6c2065>5 E<78697420776974682061206e6f6e2d7a65726f2076>-.15 E
+<616c75652e>-.25 E F1<53454520414c534f>72 391.2 Q F0<6c6c766d2d6173>108
+403.2 Q F1 -.548<4155>72 420 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 432 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-extract.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-extract.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-extract.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-extract.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,298 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d4558545241>-1 E 94.25
+<4354283129204c4c>-.4 F<564d20436f6d6d616e64204775696465>-1 E<4c4c>96.75
+E<564d2d4558545241>-1 E<4354283129>-.4 E/F1 10.95/Times-Bold at 0 SF -.219
+<4e41>72 84 S<4d45>.219 E F0<6c6c766dad65>108 96 Q<78747261637420ad2065>
+-.15 E<78747261637420612066756e6374696f6e2066726f6d20616e204c4c>-.15 E
+<564d206d6f64756c65>-1 E F1<53594e4f50534953>72 112.8 Q/F2 10
+/Times-Bold at 0 SF<6c6c766d2d65787472616374>108 124.8 Q F0<5b>2.5 E/F3 10
+/Times-Italic at 0 SF<6f7074696f6e73>A F0<5d>A F2<adad66756e63>2.5 E F3
+<66756e6374696f6e2d6e616d65>2.5 E F0<5b>2.5 E F3<8c6c656e616d65>A F0<5d>
+A F1<4445534352495054494f4e>72 141.6 Q F0<546865>108 153.6 Q F2
+<6c6c766d2d65787472616374>3.262 E F0 .762<636f6d6d616e642074616b>3.262 F
+.762<657320746865206e616d65206f6620612066756e6374696f6e20616e642065>-.1
+F .761<787472616374732069742066726f6d207468652073706563698c6564>-.15 F
+/F4 9/Times-Roman at 0 SF<4c4c>3.261 E<564d>-.9 E F0<626974636f6465>3.261 E
+2.877<8c6c652e204974>108 165.6 R .378
+<6973207072696d6172696c792075736564206173206120646562>2.877 F .378<7567
+67696e6720746f6f6c20746f2072656475636520746573742063617365732066726f6d20
+6c6172>-.2 F .378
+<6765722070726f6772616d732074686174206172652074726967676572696e672061>
+-.18 F -.2<6275>108 177.6 S<672e>.2 E .915
+<496e206164646974696f6e20746f2065>108 194.4 R .915<787472616374696e6720
+74686520626974636f6465206f66207468652073706563698c65642066756e6374696f6e
+2c>-.15 F F2<6c6c766d2d65787472616374>3.415 E F0 .915
+<77696c6c20616c736f2072656d6f>3.415 F 1.215 -.15<76652075>-.15 H
+<6e726561636861626c65>.15 E<676c6f62616c2076>108 206.4 Q<61726961626c65
+732c2070726f746f74797065732c20616e6420756e757365642074797065732e>-.25 E
+<546865>108 223.2 Q F2<6c6c766d2d65787472616374>3.432 E F0 .932<636f6d6d
+616e642072656164732069747320696e7075742066726f6d207374616e6461726420696e
+707574206966208c6c656e616d65206973206f6d6974746564206f72206966208c6c656e
+616d6520697320ad2e>3.432 F<546865206f757470757420697320616c>108 235.2 Q
+-.1<7761>-.1 G<7973207772697474656e20746f207374616e64617264206f75747075
+742c20756e6c65737320746865>.1 E F2<ad6f>2.5 E F0
+<6f7074696f6e2069732073706563698c656420287365652062656c6f>2.5 E<77292e>
+-.25 E F1<4f5054494f4e53>72 252 Q F2<ad66>108 264 Q F0 .661
+<456e61626c652062696e617279206f7574707574206f6e207465726d696e616c732e>
+10.97 F<4e6f726d616c6c79>5.661 E<2c>-.65 E F2<6c6c766d2d65787472616374>
+3.161 E F0 .661<77696c6c2072656675736520746f207772697465207261>3.161 F
+3.16<7762>-.15 G .66<6974636f6465206f7574707574206966>-3.16 F .314
+<746865206f75747075742073747265616d2069732061207465726d696e616c2e2057>
+128 276 R .314<6974682074686973206f7074696f6e2c>-.4 F F2
+<6c6c766d2d65787472616374>2.814 E F0 .315<77696c6c207772697465207261>
+2.814 F 2.815<7762>-.15 G .315<6974636f6465207265>-2.815 F -.05<6761>
+-.15 G .315<72646c657373206f6620746865>.05 F<6f7574707574206465>128 288
+Q<766963652e>-.25 E F2<adad66756e63>108 304.8 Q F3
+<66756e6374696f6e2d6e616d65>2.5 E F0 .274
+<45787472616374207468652066756e6374696f6e206e616d6564>128 316.8 R F3
+<66756e6374696f6e2d6e616d65>2.774 E F0 .274<66726f6d20746865>2.774 F F4
+<4c4c>2.774 E<564d>-.9 E F0 .274<626974636f64652e204d617920626520737065
+63698c6564206d756c7469706c652074696d657320746f>2.774 F -.15<6578>128
+328.8 S
+<7472616374206d756c7469706c652066756e6374696f6e73206174206f6e63652e>.15
+E F2<adad676c6f62>108 345.6 Q F3<676c6f62616c2d6e616d65>2.5 E F0 1.49
+<457874726163742074686520676c6f62616c2076>128 357.6 R 1.49
+<61726961626c65206e616d6564>-.25 F F3<676c6f62616c2d6e616d65>3.99 E F0
+1.49<66726f6d20746865>3.99 F F4<4c4c>3.99 E<564d>-.9 E F0 1.491
+<626974636f64652e204d61792062652073706563698c6564206d756c7469706c65>3.99
+F<74696d657320746f2065>128 369.6 Q
+<787472616374206d756c7469706c6520676c6f62616c2076>-.15 E
+<61726961626c6573206174206f6e63652e>-.25 E F2<ad68656c70>108 386.4 Q F0<
+5072696e7420612073756d6d617279206f6620636f6d6d616e64206c696e65206f707469
+6f6e732e>128 398.4 Q F2<ad6f>108 415.2 Q F3<8c6c656e616d65>2.5 E F0 1.2
+<5370656369667920746865206f7574707574208c6c656e616d652e>128 427.2 R 1.2
+<4966208c6c656e616d652069732060>6.2 F<60ad27>-.74 E 3.7<2728>-.74 G 1.2
+<74686520646566>-3.7 F 1.2<61756c74292c207468656e>-.1 F F2
+<6c6c766d2d65787472616374>3.7 E F0 1.2
+<73656e647320697473206f757470757420746f>3.7 F
+<7374616e64617264206f75747075742e>128 439.2 Q F2<ad53>108 456 Q F0
+<5772697465206f757470757420696e>8.74 E F4<4c4c>2.5 E<564d>-.9 E F0<696e
+7465726d656469617465206c616e67756167652028696e7374656164206f662062697463
+6f6465292e>2.5 E F1<45584954205354>72 472.8 Q -1.04<4154>-.986 G<5553>
+1.04 E F0<4966>108 484.8 Q F2<6c6c766d2d65787472616374>3.913 E F0 1.413
+<73756363656564732c2069742077696c6c2065>3.913 F 1.413
+<786974207769746820302e>-.15 F 1.413<4f74686572776973652c20696620616e20
+6572726f72206f63637572732c2069742077696c6c2065>6.413 F 1.414
+<78697420776974682061206e6f6e2d7a65726f>-.15 F -.25<7661>108 496.8 S
+<6c75652e>.25 E F1<53454520414c534f>72 513.6 Q F0 -.2<6275>108 525.6 S
+<67706f696e74>.2 E F1 -.548<4155>72 542.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 554.4 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ld.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ld.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ld.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ld.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,518 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 3
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.63<564d2d4c44283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>129.13 E<564d2d4c44283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad6c6420ad204c4c>108 96 Q<564d206c696e6b>-1 E<6572>-.1 E F1
+<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d2d6c64>108
+124.8 Q F0<3c6f7074696f6e733e203c8c6c65733e>2.5 E F1
+<4445534352495054494f4e>72 141.6 Q F0<546865>108 153.6 Q F2
+<6c6c766d2d6c64>2.918 E F0 .418<746f6f6c2074616b>2.918 F .417
+<6573206120736574206f66>-.1 F/F3 9/Times-Roman at 0 SF<4c4c>2.917 E<564d>
+-.9 E F0 .417<626974636f6465208c6c657320616e64206c696e6b73207468656d2074
+6f67657468657220696e746f20612073696e676c65>2.917 F F3<4c4c>2.917 E<564d>
+-.9 E F0 .417<626974636f6465208c6c652e>2.917 F 1.547<546865206f75747075
+7420626974636f6465208c6c652063616e20626520616e6f7468657220626974636f6465
+208c6c65206f7220616e2065>108 165.6 R -.15<7865>-.15 G 1.547
+<63757461626c6520626974636f64652070726f6772616d2e>.15 F 1.547
+<5573696e67206164646974696f6e616c>6.547 F<6f7074696f6e732c>108 177.6 Q
+F2<6c6c766d2d6c64>2.5 E F0
+<69732061626c6520746f2070726f64756365206e617469>2.5 E .3 -.15<76652063>
+-.25 H<6f64652065>.15 E -.15<7865>-.15 G<63757461626c65732e>.15 E
+<546865>108 194.4 Q F2<6c6c766d2d6c64>3.912 E F0 1.412
+<746f6f6c20697320746865206d61696e206c696e6b>3.912 F 1.412<657220666f72>
+-.1 F F3<4c4c>3.911 E<564d>-.9 E F0 3.911<2e49>C 3.911<7469>-3.911 G
+3.911<7375>-3.911 G 1.411
+<73656420746f206c696e6b20746f67657468657220746865206f7574707574206f66>
+-3.911 F F3<4c4c>3.911 E<564d>-.9 E F0<66726f6e742d656e64>3.911 E
+<636f6d70696c65727320616e642072756e2060>108 206.4 Q
+<606c696e6b2074696d6527>-.74 E 2.5<276f>-.74 G
+<7074696d697a6174696f6e7320286d6f73746c792074686520696e746572>-2.5 E
+<2d70726f6365647572616c206b696e64292e>-.2 E<546865>108 223.2 Q F2
+<6c6c766d2d6c64>2.762 E F0 .262
+<746f6f6c7320617474656d70747320746f206d696d69632074686520696e74657266>
+2.762 F .263<6163652070726f>-.1 F .263<76696465642062792074686520646566>
+-.15 F .263<61756c742073797374656d206c696e6b>-.1 F .263
+<657220736f20746861742069742063616e20616374206173>-.1 F<61>108 235.2 Q
+/F4 10/Times-Italic at 0 SF<6472>2.5 E<6f702d696e>-.45 E F0
+<7265706c6163656d656e742e>2.5 E F2<53656172>87 252 Q<6368204f72646572>
+-.18 E F0 1.46<5768656e206c6f6f6b696e6720666f72206f626a6563747320737065
+63698c6564206f6e2074686520636f6d6d616e64206c696e652c>108 264 R F2
+<6c6c766d2d6c64>3.96 E F0 1.46<77696c6c2073656172636820666f722074686520
+6f626a656374208c72737420696e20746865>3.96 F 2.567<63757272656e7420646972
+6563746f727920616e64207468656e20696e20746865206469726563746f727920737065
+63698c656420627920746865>108 276 R/F5 9/Times-Bold at 0 SF<4c4c>5.067 E
+<564d5f4c49425f5345415243485f50>-.828 E -.855<4154>-.666 G<48>.855 E F0
+<656e>5.067 E<7669726f6e6d656e74>-.4 E -.25<7661>108 288 S 2.5
+<726961626c652e204966>.25 F
+<69742063616e6e6f74208c6e6420746865206f626a6563742c2069742066>2.5 E
+<61696c732e>-.1 E .45<5768656e206c6f6f6b696e6720666f722061206c6962726172
+792073706563698c6564207769746820746865>108 304.8 R F2<ad6c>2.95 E F0
+<6f7074696f6e2c>2.95 E F2<6c6c766d2d6c64>2.949 E F0 .449<8c727374206174
+74656d70747320746f206c6f61642061208c6c6520776974682074686174206e616d65>
+2.949 F .902<66726f6d207468652063757272656e74206469726563746f7279>108
+316.8 R 5.903<2e49>-.65 G 3.403<6674>-5.903 G .903<6861742066>-3.403 F
+.903<61696c732c206974206c6f6f6b7320666f72206c6962>-.1 F F4<6c696272>A
+<617279>-.15 E F0 .903<2e62632c206c6962>B F4<6c696272>A<617279>-.15 E F0
+.903<2e612c206f72206c6962>B F4<6c696272>A<617279>-.15 E F0<2e>A F4
+<73686172>A .903<6564206c696272>-.37 F<617279>-.15 E -.2<6578>108 328.8
+S<74656e73696f6e>.2 E F0 4.332<2c69>C 4.332<6e74>-4.332 G 1.832
+<686174206f72646572>-4.332 F 4.332<2c69>-.4 G 4.332<6e65>-4.332 G 1.832<
+616368206469726563746f727920616464656420746f20746865206c6962726172792073
+65617263682070617468207769746820746865>-4.332 F F2<ad4c>4.331 E F0 4.331
+<6f7074696f6e2e205468657365>4.331 F .394<6469726563746f7269657320617265
+20736561726368656420696e20746865206f7264657220746865>108 340.8 R 2.894
+<7961>-.15 G .394<72652073706563698c65642e>-2.894 F .394<49662074686520
+6c6962726172792063616e6e6f74206265206c6f63617465642c207468656e>5.394 F
+F2<6c6c766d2d6c64>2.895 E F0<6c6f6f6b73>2.895 E 1.181
+<696e20746865206469726563746f72792073706563698c656420627920746865>108
+352.8 R F5<4c4c>3.681 E<564d5f4c49425f5345415243485f50>-.828 E -.855
+<4154>-.666 G<48>.855 E F0<656e>3.681 E 1.18<7669726f6e6d656e742076>-.4
+F 3.68<61726961626c652e204966>-.25 F 1.18
+<697420646f6573206e6f74208c6e642061>3.68 F
+<6c6962726172792074686572652c2069742066>108 364.8 Q<61696c732e>-.1 E
+<546865>108 381.6 Q F4<73686172>2.5 E<6564206c696272>-.37 E<6172792065>
+-.15 E<7874656e73696f6e>-.2 E F0<6d6179206265>2.5 E F4<2e736f>2.5 E F0
+<2c>A F4<2e64796c64>2.5 E F0<2c>A F4<2e646c6c>2.5 E F0 2.5<2c6f>C 2.5
+<7273>-2.5 G<6f6d657468696e6720646966>-2.5 E
+<666572656e742c20646570656e64696e672075706f6e207468652073797374656d2e>
+-.25 E<546865>108 398.4 Q F2<ad4c>2.769 E F0 .269
+<6f7074696f6e20697320676c6f62616c2e>2.769 F .27<497420646f6573206e6f7420
+6d61747465722077686572652069742069732073706563698c656420696e20746865206c
+697374206f6620636f6d6d616e64206c696e65206172>5.269 F .27
+<67756d656e74733b20746865>-.18 F .671<6469726563746f72792069732073696d70
+6c7920616464656420746f2074686520736561726368207061746820616e642069732061
+70706c69656420746f20616c6c206c69627261726965732c20707265636564696e67206f
+722073756363656564696e672c20696e20746865>108 410.4 R
+<636f6d6d616e64206c696e652e>108 422.4 Q F2<4c696e6b206f72646572>87 439.2
+Q F0 1.609<416c6c206f626a65637420616e6420626974636f6465208c6c6573206172
+65206c696e6b>108 451.2 R 1.609
+<6564208c72737420696e20746865206f7264657220746865>-.1 F 4.11<7977>-.15 G
+1.61<6572652073706563698c6564206f6e2074686520636f6d6d616e64206c696e652e>
+-4.11 F<416c6c>6.61 E<6c696272617279208c6c657320617265206c696e6b>108
+463.2 Q<6564206e65>-.1 E 2.5<78742e20536f6d65>-.15 F
+<6c6962726172696573206d6179206e6f74206265206c696e6b>2.5 E<656420696e746f
+20746865206f626a6563742070726f6772616d3b207365652062656c6f>-.1 E -.65
+<772e>-.25 G F2<4c696272617279204c696e6b616765>87 480 Q F0 .391<4f626a65
+6374208c6c657320616e642073746174696320626974636f6465206f626a656374732061
+726520616c>108 492 R -.1<7761>-.1 G .391<7973206c696e6b>.1 F .391
+<656420696e746f20746865206f7574707574208c6c652e>-.1 F .391
+<4c696272617279206172636869>5.391 F -.15<7665>-.25 G 2.891<7328>.15 G
+.391<2e61208c6c657329206c6f6164>-2.891 F .046
+<6f6e6c7920746865206f626a656374732077697468696e20746865206172636869>108
+504 R .346 -.15<76652074>-.25 H .046<6861742064658c6e652073796d626f6c73
+206e656564656420627920746865206f7574707574208c6c652e>.15 F .046
+<48656e63652c206c69627261726965732073686f756c64206265>5.046 F .614<6c69
+7374656420616674657220746865206f626a656374208c6c657320616e64206c69627261
+72696573207768696368206e656564207468656d3b206f74686572776973652c20746865
+206c696272617279206d6179206e6f74206265206c696e6b>108 516 R .613
+<656420696e2c20616e64>-.1 F
+<74686520646570656e64656e74206c6962726172792077696c6c206e6f74206861>108
+528 Q .3 -.15<76652069>-.2 H
+<747320756e64658c6e65642073796d626f6c732064658c6e65642e>.15 E F2
+<4e617469>87 544.8 Q .2 -.1<76652063>-.1 H<6f64652067656e65726174696f6e>
+.1 E F0<546865>108 556.8 Q F2<6c6c766d2d6c64>6.111 E F0 3.611<70726f6772
+616d20686173206c696d6974656420737570706f727420666f72206e617469>6.111 F
+3.911 -.15<76652063>-.25 H 3.612
+<6f64652067656e65726174696f6e2c207768656e207573696e6720746865>.15 F F2
+<ad6e617469>6.112 E -.1<7665>-.1 G F0<6f72>6.212 E F2<ad6e617469>108
+568.8 Q -.1<7665>-.1 G<ad636265>.1 E F0 1.673
+<6f7074696f6e732e204e617469>4.174 F 1.973 -.15<76652063>-.25 H 1.673
+<6f64652067656e65726174696f6e20697320706572666f726d656420627920636f6e>
+.15 F -.15<7665>-.4 G 1.673<7274696e6720746865206c696e6b>.15 F 1.673
+<656420626974636f646520696e746f206e617469>-.1 F -.15<7665>-.25 G<617373
+656d626c7920282e7329206f72204320636f646520616e642072756e6e696e6720746865
+2073797374656d20636f6d70696c657220287479706963616c6c792067636329206f6e20
+74686520726573756c742e>108 580.8 Q F1<4f5054494f4e53>72 597.6 Q F2
+<47656e6572616c204f7074696f6e73>87 609.6 Q<ad68656c70>108 621.6 Q F0<50
+72696e7420612073756d6d617279206f6620636f6d6d616e64206c696e65206f7074696f
+6e732e>128 633.6 Q F2<ad76>108 650.4 Q F0 .818<53706563698c65732076>9.3
+F .818
+<6572626f7365206d6f64652e20496e2074686973206d6f646520746865206c696e6b>
+-.15 F .818<65722077696c6c207072696e74206164646974696f6e616c20696e666f72
+6d6174696f6e2061626f75742074686520616374696f6e73206974>-.1 F<74616b>128
+662.4 Q<65732c2070726f6772616d732069742065>-.1 E -.15<7865>-.15 G
+<63757465732c206574632e>.15 E F2<ad7374617473>108 679.2 Q F0
+<5072696e7420737461746973746963732e>128 691.2 Q 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.63<564d2d4c44283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>129.13 E<564d2d4c44283129>-1
+E/F1 10/Times-Bold at 0 SF<ad74696d65ad706173736573>108 84 Q F0<5265636f72
+642074686520616d6f756e74206f662074696d65206e656564656420666f722065616368
+207061737320616e64207072696e7420697420746f207374616e64617264206572726f72>
+128 96 Q<2e>-.55 E F1<496e7075742f4f7574707574204f7074696f6e73>87 112.8
+Q<ad6f>108 124.8 Q/F2 10/Times-Italic at 0 SF<8c6c656e616d65>2.5 E F0 .322
+<54686973206f>128 136.8 R -.15<7665>-.15 G .322
+<7272696465732074686520646566>.15 F .322<61756c74206f7574707574208c6c65
+20616e642073706563698c657320746865206e616d65206f6620746865208c6c65207468
+61742073686f756c642062652067656e65726174656420627920746865>-.1 F
+<6c696e6b>128 148.8 Q<6572>-.1 E 3.298<2e42>-.55 G 3.298<7964>-3.298 G
+<6566>-3.298 E<61756c742c>-.1 E F1<6c6c766d2d6c64>3.298 E F0 .798
+<67656e6572617465732061208c6c65206e616d6564>3.298 F F2<612e6f7574>3.298
+E F0 .798<666f7220636f6d7061746962696c6974792077697468>3.298 F F1<6c64>
+3.298 E F0 3.298<2e54>C .799<6865206f75747075742077696c6c206265>-3.298 F
+<7772697474656e20746f>128 160.8 Q F2<8c6c656e616d65>2.5 E F0<2e>A F1
+<ad62>108 177.6 Q F2<8c6c656e616d65>2.5 E F0 .63
+<54686973206f7074696f6e2063616e206265207573656420746f206f>128 189.6 R
+-.15<7665>-.15 G .63<727269646520746865206f757470757420626974636f646520
+8c6c65206e616d652e20427920646566>.15 F .63
+<61756c742c20746865206e616d65206f662074686520626974636f6465>-.1 F
+<6f7574707574208c6c65206973206f6e65206d6f72652060>128 201.6 Q
+<602e626327>-.74 E 2.5<2773>-.74 G<7566>-2.5 E
+<8c7820616464656420746f20746865206e616d652073706563698c6564206279>-.25 E
+F1<ad6f208c6c656e616d65>2.5 E F0<6f7074696f6e2e>2.5 E F1<ad6c>108 218.4
+Q F2<6e616d65>A F0 .023
+<54686973206f7074696f6e2073706563698c657320746865>128 230.4 R F2
+<6e616d65>2.523 E F0 .023<6f662061206c69627261727920746f2073656172636820
+7768656e207265736f6c76696e672073796d626f6c7320666f72207468652070726f6772
+616d2e204f6e6c7920746865>2.523 F
+<62617365206e616d652073686f756c642062652073706563698c6564206173>128
+242.4 Q F2<6e616d65>2.5 E F0 2.5<2c77>C<6974686f75742061>-2.5 E F2
+<6c6962>2.5 E F0<7072658c78206f7220616e>2.5 E 2.5<7973>-.15 G<7566>-2.5
+E<8c782e>-.25 E F1<ad4c>108 259.2 Q F2 -.8<5061>C<7468>.8 E F0 .524
+<54686973206f7074696f6e2074656c6c73>128 271.2 R F1<6c6c766d2d6c64>3.024
+E F0 .524<746f206c6f6f6b20696e>3.024 F F2 -.8<5061>3.024 G<7468>.8 E F0
+.524<746f208c6e6420616e>3.024 F 3.023<796c>-.15 G .523<6962726172792073
+756273657175656e746c792073706563698c6564207769746820746865>-3.023 F F1
+<ad6c>3.023 E F0<6f7074696f6e2e>3.023 E .263<5468652070617468732077696c
+6c20626520736561726368656420696e20746865206f7264657220696e20776869636820
+746865>128 283.2 R 2.764<7961>-.15 G .264<72652073706563698c6564206f6e20
+74686520636f6d6d616e64206c696e652e20496620746865206c696272617279>-2.764
+F 1.019<6973207374696c6c206e6f7420666f756e642c206120736d616c6c2073657420
+6f662073797374656d2073706563698c63206469726563746f726965732077696c6c2061
+6c736f2062652073656172636865642e204e6f74652074686174206c6962726172696573>
+128 295.2 R .146<73706563698c6564207769746820746865>128 307.2 R F1<ad6c>
+2.646 E F0 .147<6f7074696f6e2074686174206f63637572>2.647 F F2
+<6265666f72>2.647 E<65>-.37 E F0<616e>2.647 E<79>-.15 E F1<ad4c>2.647 E
+F0 .147<6f7074696f6e732077696c6c206e6f7420736561726368207468652070617468
+73206769>2.647 F -.15<7665>-.25 G 2.647<6e62>.15 G 2.647<7974>-2.647 G
+<6865>-2.647 E F1<ad4c>2.647 E F0<6f7074696f6e7320666f6c6c6f>128 319.2 Q
+<77696e672069742e>-.25 E F1<ad6c696e6bad6173ad6c696272617279>108 336 Q
+F0 .34<4c696e6b2074686520626974636f6465208c6c657320746f6765746865722061
+732061206c696272617279>128 348 R 2.839<2c6e>-.65 G .339<6f7420616e2065>
+-2.839 F -.15<7865>-.15 G .339<63757461626c652e20496e2074686973206d6f64
+652c20756e64658c6e65642073796d626f6c732077696c6c206265>.15 F
+<7065726d69747465642e>128 360 Q F1<ad72>108 376.8 Q F0
+<416e20616c69617320666f7220ad6c696e6bad6173ad6c696272617279>9.86 E<2e>
+-.65 E F1<ad6e617469>108 393.6 Q -.1<7665>-.1 G F0
+<47656e65726174652061206e617469>128 405.6 Q .3 -.15<7665206d>-.25 H
+<616368696e6520636f64652065>.15 E -.15<7865>-.15 G<63757461626c652e>.15
+E .417<5768656e2067656e65726174696e67206e617469>128 423.6 R .717 -.15
+<766520657865>-.25 H<63757461626c65732c>.15 E F1<6c6c766d2d6c64>2.917 E
+F0 .417<8c72737420636865636b7320666f72206120626974636f64652076>2.917 F
+.418<657273696f6e206f6620746865206c69627261727920616e64206c696e6b73>-.15
+F .442<697420696e2c206966206e6563657373617279>128 435.6 R 5.441<2e49>
+-.65 G 2.941<6674>-5.441 G .441
+<6865206c696272617279206973206d697373696e672c>-2.941 F F1
+<6c6c766d2d6c64>2.941 E F0 .441<736b6970732069742e>2.941 F<5468656e2c>
+5.441 E F1<6c6c766d2d6c64>2.941 E F0 .441
+<6c696e6b7320696e207468652073616d65206c6962726172696573>2.941 F
+<6173206e617469>128 447.6 Q .3 -.15<76652063>-.25 H<6f64652e>.15 E .457
+<496e20746869732077>128 465.6 R<6179>-.1 E<2c>-.65 E F1<6c6c766d2d6c64>
+2.957 E F0 .457<73686f756c642062652061626c6520746f206c696e6b20696e206f70
+74696d697a656420626974636f64652073756273657473206f6620636f6d6d6f6e206c69
+6272617269657320616e64207468656e>2.957 F<6c696e6b20696e20616e>128 477.6
+Q 2.5<7970>-.15 G
+<617274206f6620746865206c6962726172792074686174206861736e27>-2.5 E 2.5
+<7462>-.18 G<65656e20636f6e>-2.5 E -.15<7665>-.4 G
+<7274656420746f20626974636f64652e>.15 E F1<ad6e617469>108 494.4 Q -.1
+<7665>-.1 G<ad636265>.1 E F0<47656e65726174652061206e617469>128 506.4 Q
+.3 -.15<7665206d>-.25 H<616368696e6520636f64652065>.15 E -.15<7865>-.15
+G<63757461626c65207769746820746865>.15 E/F3 9/Times-Roman at 0 SF<4c4c>2.5
+E<564d>-.9 E F0 2.5<4362>2.5 G<61636b>-2.5 E<656e642e>-.1 E .149
+<54686973206f7074696f6e206973206964656e746963616c20746f20746865>128
+524.4 R F1<ad6e617469>2.649 E -.1<7665>-.1 G F0 .149<6f7074696f6e2c2062>
+2.749 F .149<75742075736573207468652043206261636b>-.2 F .149<656e642074
+6f2067656e657261746520636f646520666f72207468652070726f6772616d>-.1 F
+<696e7374656164206f6620616e>128 536.4 Q F3<4c4c>2.5 E<564d>-.9 E F0
+<6e617469>2.5 E .3 -.15<76652063>-.25 H<6f64652067656e657261746f72>.15 E
+<2e>-.55 E F1<4f7074696d697a6174696f6e204f7074696f6e73>87 553.2 Q
+<ad64697361626c65ad696e6c696e696e67>108 565.2 Q F0<446f206e6f742072756e
+2074686520696e6c696e696e6720706173732e2046756e6374696f6e732077696c6c206e
+6f7420626520696e6c696e656420696e746f206f746865722066756e6374696f6e732e>
+128 577.2 Q F1<ad64697361626c65ad6f7074>108 594 Q F0
+<436f6d706c6574656c792064697361626c65206f7074696d697a6174696f6e2e>128
+606 Q F1<ad64697361626c65ad696e746572>108 622.8 Q<6e616c697a65>-.15 E F0
+<446f206e6f74206d61726b20616c6c2073796d626f6c7320617320696e7465726e616c
+2e>128 634.8 Q F1<ad76>108 651.6 Q<6572696679ad65616368>-.1 E F0
+<52756e207468652076>128 663.6 Q<6572698c636174696f6e20706173732061667465
+722065616368206f66207468652070617373657320746f2076>-.15 E
+<657269667920696e7465726d65646961746520726573756c74732e>-.15 E F1
+<ad7374726970ad616c6c>108 680.4 Q F0<537472697020616c6c20646562>128
+692.4 Q<756720616e642073796d626f6c20696e666f726d6174696f6e2066726f6d2074
+68652065>-.2 E -.15<7865>-.15 G<63757461626c6520746f206d616b>.15 E 2.5
+<6569>-.1 G 2.5<7473>-2.5 G<6d616c6c6572>-2.5 E<2e>-.55 E 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 126.63<564d2d4c44283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>129.13 E<564d2d4c44283129>-1
+E/F1 10/Times-Bold at 0 SF<ad7374726970ad646562>108 84 Q<7567>-.2 E F0
+<537472697020616c6c20646562>128 96 Q
+<756720696e666f726d6174696f6e2066726f6d207468652065>-.2 E -.15<7865>-.15
+G<63757461626c6520746f206d616b>.15 E 2.5<6569>-.1 G 2.5<7473>-2.5 G
+<6d616c6c6572>-2.5 E<2e>-.55 E F1<ad73>108 112.8 Q F0
+<416e20616c69617320666f72>10.41 E F1<ad7374726970ad616c6c>2.5 E F0<2e>A
+F1<ad53>108 129.6 Q F0<416e20616c69617320666f72>8.74 E F1
+<ad7374726970ad646562>2.5 E<7567>-.2 E F0<2e>A F1
+<ad6578706f7274ad64796e616d6963>108 146.4 Q F0<416e20616c69617320666f72>
+128 158.4 Q F1<ad64697361626c65ad696e746572>2.5 E<6e616c697a65>-.15 E
+<ad706f7374ad6c696e6bad6f7074>108 175.2 Q/F2 10/Times-Italic at 0 SF -.8
+<5061>C<7468>.8 E F0 .191<52756e20706f73742d6c696e6b206f7074696d697a6174
+696f6e2070726f6772616d2e204166746572206c696e6b696e6720697320636f6d706c65
+746564206120626974636f6465208c6c652077696c6c2062652067656e6572617465642e
+2049742077696c6c>128 187.2 R .288<62652070617373656420746f20746865207072
+6f6772616d2073706563698c6564206279>128 199.2 R F2 -.8<5061>2.788 G<7468>
+.8 E F0 .288<617320746865208c727374206172>2.788 F .287
+<67756d656e742e20546865207365636f6e64206172>-.18 F .287
+<67756d656e7420746f207468652070726f6772616d>-.18 F 1.109<77696c6c206265
+20746865206e616d65206f6620612074656d706f72617279208c6c6520696e746f207768
+696368207468652070726f6772616d2073686f756c6420706c61636520697473206f7074
+696d697a6564206f75747075742e2046>128 211.2 R<6f72>-.15 E -.15<6578>128
+223.2 S<616d706c652c207468652060>.15 E
+<606e6f2d6f70206f7074696d697a6174696f6e27>-.74 E 2.5<2777>-.74 G
+<6f756c6420626520612073696d706c65207368656c6c207363726970743a>-2.6 E/F3
+10/Courier at 0 SF<23212f62696e2f62617368>152 241.2 Q<6370202431202432>152
+253.2 Q/F4 10.95/Times-Bold at 0 SF<45584954205354>72 270 Q -1.04<4154>
+-.986 G<5553>1.04 E F0<4966>108 282 Q F1<6c6c766d2d6c64>3.425 E F0 .925
+<73756363656564732c2069742077696c6c2065>3.425 F .925
+<786974207769746820302072657475726e20636f64652e>-.15 F .924
+<496620616e206572726f72206f63637572732c2069742077696c6c2065>5.925 F .924
+<78697420776974682061206e6f6e2d7a65726f2072657475726e>-.15 F<636f64652e>
+108 294 Q F4<454e564952>72 310.8 Q<4f4e4d454e54>-.329 E F0<546865>108
+322.8 Q F3<4c4c564d5f4c49425f5345415243485f50415448>5.737 E F0<656e>
+5.737 E 3.237<7669726f6e6d656e742076>-.4 F 3.237<61726961626c6520697320
+7573656420746f208c6e6420626974636f6465206c69627261726965732e20416e>-.25
+F 5.738<7970>-.15 G<61746873>-5.738 E
+<73706563698c656420696e20746869732076>108 334.8 Q
+<61726961626c652077696c6c20626520736561726368656420616674657220746865>
+-.25 E F3<ad4c>2.5 E F0<6f7074696f6e732e>2.5 E F4<53454520414c534f>72
+351.6 Q F0<6c6c766d2d6c696e6b>108 363.6 Q F4 -.548<4155>72 380.4 S
+<54484f5253>.548 E F0<4d61696e7461696e656420627920746865>108 392.4 Q/F5
+9/Times-Roman at 0 SF<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<33>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-link.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-link.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-link.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-link.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,303 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 116.08<564d2d4c494e4b283129204c4c>
+-1 F<564d20436f6d6d616e64204775696465>-1 E<4c4c>118.58 E
+<564d2d4c494e4b283129>-1 E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S
+<4d45>.219 E F0<6c6c766dad6c696e6b20ad204c4c>108 96 Q<564d206c696e6b>-1
+E<6572>-.1 E F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF
+<6c6c766d2d6c696e6b>108 124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF
+<6f7074696f6e73>A F0<5d>A F3<8c6c656e616d65202e2e2e>2.5 E F1
+<4445534352495054494f4e>72 141.6 Q F2<6c6c766d2d6c696e6b>108 153.6 Q F0
+<74616b>4.097 E 1.597<6573207365>-.1 F -.15<7665>-.25 G<72616c>.15 E/F4
+9/Times-Roman at 0 SF<4c4c>4.097 E<564d>-.9 E F0 1.597<626974636f6465208c6c
+657320616e64206c696e6b73207468656d20746f67657468657220696e746f2061207369
+6e676c65>4.097 F F4<4c4c>4.096 E<564d>-.9 E F0 1.596
+<626974636f6465208c6c652e>4.096 F<4974>6.596 E<77726974657320746865206f
+7574707574208c6c6520746f207374616e64617264206f75747075742c20756e6c657373
+20746865>108 165.6 Q F2<ad6f>2.5 E F0<6f7074696f6e206973207573656420746f
+20737065636966792061208c6c656e616d652e>2.5 E F2<6c6c766d2d6c696e6b>108
+182.4 Q F0 .936<617474656d70747320746f206c6f61642074686520696e707574208c
+6c65732066726f6d207468652063757272656e74206469726563746f7279>3.435 F
+5.936<2e49>-.65 G 3.436<6674>-5.936 G .936<6861742066>-3.436 F .936
+<61696c732c206974206c6f6f6b7320666f722065616368208c6c6520696e>-.1 F
+1.536<65616368206f6620746865206469726563746f726965732073706563698c656420
+627920746865>108 194.4 R F2<ad4c>4.035 E F0 1.535
+<6f7074696f6e73206f6e2074686520636f6d6d616e64206c696e652e>4.035 F 1.535
+<546865206c6962726172792073656172636820706174687320617265>6.535 F .308
+<676c6f62616c3b2065616368206f6e6520697320736561726368656420666f722065>
+108 206.4 R -.15<7665>-.25 G .308
+<727920696e707574208c6c65206966206e6563657373617279>.15 F 5.308<2e54>
+-.65 G .309<6865206469726563746f726965732061726520736561726368656420696e
+20746865206f7264657220746865>-5.308 F<79>-.15 E
+<776572652073706563698c6564206f6e2074686520636f6d6d616e64206c696e652e>
+108 218.4 Q F1<4f5054494f4e53>72 235.2 Q F2<ad4c>108 247.2 Q F3<646972>
+2.5 E<6563746f7279>-.37 E F0 .346<416464207468652073706563698c6564>128
+259.2 R F3<646972>2.846 E<6563746f7279>-.37 E F0 .346
+<746f20746865206c6962726172792073656172636820706174682e>2.846 F .346
+<5768656e206c6f6f6b696e6720666f72206c69627261726965732c>5.346 F F2
+<6c6c766d2d6c696e6b>2.846 E F0 .346<77696c6c206c6f6f6b>2.846 F .968
+<696e2070617468206e616d6520666f72206c69627261726965732e>128 271.2 R .968
+<54686973206f7074696f6e2063616e2062652073706563698c6564206d756c7469706c
+652074696d65733b>5.968 F F2<6c6c766d2d6c696e6b>3.468 E F0 .968
+<77696c6c2073656172636820696e73696465>3.468 F<7468657365206469726563746f
+7269657320696e20746865206f7264657220696e20776869636820746865>128 283.2 Q
+2.5<7977>-.15 G
+<6572652073706563698c6564206f6e2074686520636f6d6d616e64206c696e652e>-2.5
+E F2<ad66>108 300 Q F0 .522
+<456e61626c652062696e617279206f7574707574206f6e207465726d696e616c732e>
+10.97 F<4e6f726d616c6c79>5.522 E<2c>-.65 E F2<6c6c766d2d6c696e6b>3.022 E
+F0 .522<77696c6c2072656675736520746f207772697465207261>3.022 F 3.022
+<7762>-.15 G .522<6974636f6465206f757470757420696620746865>-3.022 F .312
+<6f75747075742073747265616d2069732061207465726d696e616c2e2057>128 312 R
+.312<6974682074686973206f7074696f6e2c>-.4 F F2<6c6c766d2d6c696e6b>2.812
+E F0 .312<77696c6c207772697465207261>2.812 F 2.812<7762>-.15 G .312
+<6974636f6465207265>-2.812 F -.05<6761>-.15 G .312
+<72646c657373206f6620746865206f7574707574>.05 F<6465>128 324 Q
+<766963652e>-.25 E F2<ad6f>108 340.8 Q F3<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c65206e616d652e>128 352.8 Q
+<4966>5 E F3<8c6c656e616d65>2.5 E F0<6973>2.5 E/F5 10/Courier at 0 SF<ad>
+2.5 E F0 2.5<2c74>C<68656e>-2.5 E F2<6c6c766d2d6c696e6b>2.5 E F0<77696c
+6c20777269746520697473206f757470757420746f207374616e64617264206f75747075
+742e>2.5 E F2<ad53>108 369.6 Q F0<5772697465206f757470757420696e>8.74 E
+F4<4c4c>2.5 E<564d>-.9 E F0<696e7465726d656469617465206c616e677561676520
+28696e7374656164206f6620626974636f6465292e>2.5 E F2<ad64>108 386.4 Q F0
+<49662073706563698c65642c>8.74 E F2<6c6c766d2d6c696e6b>2.5 E F0
+<7072696e747320612068756d616e2d7265616461626c652076>2.5 E<657273696f6e20
+6f6620746865206f757470757420626974636f6465208c6c6520746f207374616e646172
+64206572726f72>-.15 E<2e>-.55 E F2<ad68656c70>108 403.2 Q F0<5072696e74
+20612073756d6d617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>
+128 415.2 Q F2<ad76>108 432 Q F0 -1.11<5665>9.3 G 1.074
+<72626f7365206d6f64652e>1.11 F 1.074
+<5072696e7420696e666f726d6174696f6e2061626f75742077686174>6.074 F F2
+<6c6c766d2d6c696e6b>3.574 E F0 1.074<697320646f696e672e>3.574 F 1.074
+<54686973207479706963616c6c7920696e636c756465732061206d657373616765>
+6.074 F<666f72206561636820626974636f6465208c6c65206c696e6b>128 444 Q
+<656420696e20616e6420666f722065616368206c69627261727920666f756e642e>-.1
+E F1<45584954205354>72 460.8 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>
+108 472.8 Q F2<6c6c766d2d6c696e6b>2.5 E F0
+<73756363656564732c2069742077696c6c2065>2.5 E<786974207769746820302e>
+-.15 E<4f74686572776973652c20696620616e206572726f72206f63637572732c2069
+742077696c6c2065>5 E<78697420776974682061206e6f6e2d7a65726f2076>-.15 E
+<616c75652e>-.25 E F1<53454520414c534f>72 489.6 Q F0<6763636c64>108
+501.6 Q F1 -.548<4155>72 518.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 530.4 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-nm.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-nm.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-nm.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-nm.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,331 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 123.85<564d2d4e4d283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>126.35 E<564d2d4e4d283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad6e6d20ad206c697374204c4c>108 96 Q
+<564d20626974636f6465208c6c6527>-1 E 2.5<7373>-.55 G
+<796d626f6c207461626c65>-2.5 E F1<53594e4f50534953>72 112.8 Q/F2 10
+/Times-Bold at 0 SF<6c6c766d2d6e6d>108 124.8 Q F0<5b>2.5 E/F3 10
+/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5<5d5b>C F3
+<8c6c656e616d65732e2e2e>-2.5 E F0<5d>A F1<4445534352495054494f4e>72
+141.6 Q F0<546865>108 153.6 Q F2<6c6c766d2d6e6d>3.944 E F0 1.444<757469
+6c697479206c6973747320746865206e616d6573206f662073796d626f6c732066726f6d
+20746865>3.944 F/F4 9/Times-Roman at 0 SF<4c4c>3.944 E<564d>-.9 E F0 1.444
+<626974636f6465208c6c65732c206f72>3.944 F F2<6172>3.944 E F0<6172636869>
+3.944 E -.15<7665>-.25 G 3.943<7363>.15 G<6f6e7461696e696e67>-3.943 E F4
+<4c4c>108 165.6 Q<564d>-.9 E F0 3.161<626974636f6465208c6c65732c206e616d
+6564206f6e2074686520636f6d6d616e64206c696e652e>5.66 F 3.161<456163682073
+796d626f6c206973206c697374656420616c6f6e67207769746820736f6d652073696d70
+6c65>8.161 F .924<696e666f726d6174696f6e2061626f7574206974732070726f>108
+177.6 R -.15<7665>-.15 G 3.423<6e616e63652e204966>.15 F .923
+<6e6f208c6c65206e616d652069732073706563698c65642c206f72>3.423 F F3<ad>
+3.423 E F0 .923<697320757365642061732061208c6c65206e616d652c>3.423 F F2
+<6c6c766d2d6e6d>3.423 E F0<77696c6c>3.423 E<70726f6365737320612062697463
+6f6465208c6c65206f6e20697473207374616e6461726420696e7075742073747265616d
+2e>108 189.6 Q F2<6c6c766d2d6e6d>108 206.4 Q F0 1.241 -.55<27732064>D
+<6566>.55 E .141<61756c74206f757470757420666f726d6174206973207468652074
+7261646974696f6e616c>-.1 F F4<425344>2.642 E F2<6e6d>2.642 E F0 .142
+<6f757470757420666f726d61742e>2.642 F .142
+<456163682073756368206f7574707574207265636f726420636f6e7369737473>5.142
+F .8<6f6620616e20286f7074696f6e616c292038ad6469676974206865>108 218.4 R
+.8<7861646563696d616c20616464726573732c20666f6c6c6f>-.15 F .799
+<7765642062792061207479706520636f646520636861726163746572>-.25 F 3.299
+<2c66>-.4 G<6f6c6c6f>-3.299 E .799<7765642062792061206e616d652c20666f72>
+-.25 F .409<656163682073796d626f6c2e204f6e65207265636f726420697320707269
+6e74656420706572206c696e653b208c656c647320617265207365706172617465642062
+79207370616365732e205768656e207468652061646472657373206973206f6d69747465
+642c206974>108 230.4 R<6973207265706c616365642062792038207370616365732e>
+108 242.4 Q -.8<5479>108 259.2 S<706520636f6465206368617261637465727320
+63757272656e746c7920737570706f727465642c20616e64207468656972206d65616e69
+6e67732c2061726520617320666f6c6c6f>.8 E<77733a>-.25 E 12.78<554e>108 276
+S<616d6564206f626a656374206973207265666572656e6365642062>-12.78 E
+<757420756e64658c6e656420696e207468697320626974636f6465208c6c65>-.2 E
+13.33<4343>108 292.8 S<6f6d6d6f6e20286d756c7469706c652064658c6e6974696f
+6e73206c696e6b20746f67657468657220696e746f206f6e652064656629>-13.33 E
+10.56<5757>108 309.6 S<65616b207265666572656e636520286d756c7469706c6520
+64658c6e6974696f6e73206c696e6b20746f67657468657220696e746f207a65726f206f
+72206f6e652064658c6e6974696f6e7329>-11.36 E 17.22<744c>108 326.4 S
+<6f63616c2066756e6374696f6e20287465>-17.22 E<787429206f626a656374>-.15 E
+13.89<5447>108 343.2 S<6c6f62616c2066756e6374696f6e20287465>-13.89 E
+<787429206f626a656374>-.15 E 15<644c>108 360 S
+<6f63616c2064617461206f626a656374>-15 E 12.78<4447>108 376.8 S
+<6c6f62616c2064617461206f626a656374>-12.78 E 15.56<3f53>108 393.6 S
+<6f6d657468696e6720756e7265636f676e697a61626c65>-15.56 E<42656361757365>
+108 410.4 Q F4<4c4c>3.457 E<564d>-.9 E F0 .957<626974636f6465208c6c6573
+207479706963616c6c7920636f6e7461696e206f626a6563747320746861742061726520
+6e6f7420636f6e7369646572656420746f206861>3.457 F 1.257 -.15<76652061>-.2
+H .956<646472657373657320756e74696c20746865>.15 F<79>-.15 E 1.174
+<617265206c696e6b>108 422.4 R 1.174<656420696e746f20616e2065>-.1 F -.15
+<7865>-.15 G 1.174<63757461626c6520696d616765206f722064796e616d6963616c
+6c7920636f6d70696c65642060>.15 F<606a7573742d696e2d74696d6527>-.74 E
+<272c>-.74 E F2<6c6c766d2d6e6d>3.674 E F0 1.175
+<646f6573206e6f74207072696e7420616e>3.675 F
+<6164647265737320666f7220616e>108 434.4 Q 2.5<7973>-.15 G
+<796d626f6c2c2065>-2.5 E -.15<7665>-.25 G 2.5<6e73>.15 G<796d626f6c7320
+7768696368206172652064658c6e656420696e2074686520626974636f6465208c6c652e>
+-2.5 E F1<4f5054494f4e53>72 451.2 Q F2<ad50>108 463.2 Q F0<557365>8.19 E
+F4<504f534958>2.5 E F0
+<2e32206f757470757420666f726d61742e20416c69617320666f72>A F2<adad66>2.5
+E<6f726d61743d706f736978>-.25 E F0<2e>A F2<ad42>108 480 Q F0<28646566>10
+E<61756c7429>-.1 E<557365>128 492 Q F4<425344>2.5 E F0
+<6f757470757420666f726d61742e20416c69617320666f72>2.5 E F2<adad66>2.5 E
+<6f726d61743d627364>-.25 E F0<2e>A F2<ad68656c70>108 508.8 Q F0<5072696e
+7420612073756d6d617279206f6620636f6d6d616e642d6c696e65206f7074696f6e7320
+616e64207468656972206d65616e696e67732e>128 520.8 Q F2
+<adad64658c6e6564ad6f6e6c79>108 537.6 Q F0 1.134<5072696e74206f6e6c7920
+73796d626f6c732064658c6e656420696e207468697320626974636f6465208c6c652028
+6173206f70706f73656420746f2073796d626f6c73207768696368206d61792062652072
+65666572656e636564206279>128 549.6 R
+<6f626a6563747320696e2074686973208c6c652c2062>128 561.6 Q
+<7574206e6f742064658c6e656420696e2074686973208c6c652e29>-.2 E F2
+<adad6578746572>108 578.4 Q<6ead6f6e6c79>-.15 E F0<2c>A F2<ad67>2.5 E F0
+<5072696e74206f6e6c792073796d626f6c732077686f73652064658c6e6974696f6e73
+206172652065>128 590.4 Q<787465726e616c3b20746861742069732c206163636573
+7369626c652066726f6d206f7468657220626974636f6465208c6c65732e>-.15 E F2
+<adad756e64658c6e6564ad6f6e6c79>108 607.2 Q F0<2c>A F2<ad75>2.5 E F0
+<5072696e74206f6e6c792073796d626f6c73207265666572656e6365642062>128
+619.2 Q
+<7574206e6f742064658c6e656420696e207468697320626974636f6465208c6c652e>
+-.2 E F2<adad66>108 636 Q<6f726d61743d>-.25 E F3<666d74>A F0<2c>A F2
+<ad66>2.5 E F0<53656c65637420616e206f757470757420666f726d61743b>128 648
+Q F3<666d74>2.5 E F0<6d6179206265>2.5 E F3<73797376>2.5 E F0<2c>A F3
+<706f736978>2.5 E F0 2.5<2c6f>C<72>-2.5 E F3<627364>2.5 E F0 2.5<2e54>C
+<686520646566>-2.5 E<61756c74206973>-.1 E F3<627364>2.5 E F0<2e>A F1
+-.11<4255>72 664.8 S<4753>.11 E F2<6c6c766d2d6e6d>108 676.8 Q F0
+<63616e6e6f742064656d616e676c652043>2.5 E/F5 8/Times-Roman at 0 SF -1<2b2b>
+-1 -1.2 O F0<6d616e676c6564206e616d65732c206c696b>2.5 1.2 M<65>-.1 E F4
+<474e55>2.5 E F2<6e6d>2.5 E F0<63616e2e>2.5 E F1<45584954205354>72 693.6
+Q -1.04<4154>-.986 G<5553>1.04 E F2<6c6c766d2d6e6d>108 705.6 Q F0 -.15
+<6578>2.5 G<697473207769746820616e2065>.15 E
+<78697420636f6465206f66207a65726f2e>-.15 E 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 123.85<564d2d4e4d283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>126.35 E<564d2d4e4d283129>-1
+E/F1 10.95/Times-Bold at 0 SF<53454520414c534f>72 84 Q F0
+<6c6c766d2d6469732c>108 96 Q/F2 10/Times-Italic at 0 SF<6172>2.5 E F0
+<2831292c>1.666 E F2<6e6d>2.5 E F0<283129>1.666 E F1 -.548<4155>72 112.8
+S<54484f52>.548 E F0<4d61696e7461696e656420627920746865>108 124.8 Q/F3 9
+/Times-Roman at 0 SF<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-prof.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-prof.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-prof.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-prof.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,280 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q<564d2d5052>-1 E 115.35
+<4f46283129204c4c>-.4 F<564d20436f6d6d616e64204775696465>-1 E<4c4c>
+117.85 E<564d2d5052>-1 E<4f46283129>-.4 E/F1 10.95/Times-Bold at 0 SF -.219
+<4e41>72 84 S<4d45>.219 E F0<6c6c766dad70726f6620ad207072696e742065>108
+96 Q -.15<7865>-.15 G<637574696f6e2070726f8c6c65206f66204c4c>.15 E
+<564d2070726f6772616d>-1 E F1<53594e4f50534953>72 112.8 Q/F2 10
+/Times-Bold at 0 SF<6c6c766d2d7072>108 124.8 Q<6f66>-.18 E F0<5b>2.5 E/F3
+10/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5<5d5b>C F3
+<626974636f6465208c6c65>-2.5 E F0 2.5<5d5b>C F3<6c6c766d7072>-2.5 E
+<6f66>-.45 E<2e6f7574>-.15 E F0<5d>A F1<4445534352495054494f4e>72 141.6
+Q F0<546865>108 153.6 Q F2<6c6c766d2d7072>4.039 E<6f66>-.18 E F0 1.539
+<746f6f6c20726561647320696e20616e>4.039 F F3<6c6c766d7072>4.038 E<6f66>
+-.45 E<2e6f7574>-.15 E F0 1.538<8c6c65202877686963682063616e206f7074696f
+6e616c6c792075736520612073706563698c63208c6c6520776974682074686520746869
+7264>4.038 F 1.67<70726f6772616d206172>108 165.6 R 1.671<67756d656e7429
+2c206120626974636f6465208c6c6520666f72207468652070726f6772616d2c20616e64
+2070726f647563657320612068756d616e207265616461626c65207265706f72742c2073
+75697461626c6520666f72>-.18 F<64657465726d696e696e6720776865726520746865
+2070726f6772616d20686f7473706f7473206172652e>108 177.6 Q 3.064<54686973
+2070726f6772616d206973206f6674656e207573656420696e20636f6e6a756e6374696f
+6e207769746820746865>108 194.4 R F3<7574696c732f7072>5.564 E<6f8c6c65>
+-.45 E<2e706c>-.15 E F0 5.564<7363726970742e2054686973>5.564 F 3.063
+<736372697074206175746f6d61746963616c6c79>5.563 F 2.887<696e737472756d65
+6e747320612070726f6772616d2c2072756e73206974207769746820746865>108 206.4
+R/F4 9/Times-Roman at 0 SF<4a4954>5.387 E F0 5.387<2c74>C 2.887
+<68656e2072756e73>-5.387 F F2<6c6c766d2d7072>5.387 E<6f66>-.18 E F0
+2.887<746f20666f726d61742061207265706f72742e>5.387 F 4.488 -.8<546f2067>
+7.888 H 2.888<6574206d6f7265>.8 F<696e666f726d6174696f6e2061626f7574>108
+218.4 Q F3<7574696c732f7072>2.5 E<6f8c6c65>-.45 E<2e706c>-.15 E F0 2.5
+<2c65>C -.15<7865>-2.65 G<63757465206974207769746820746865>.15 E F2
+<ad68656c70>2.5 E F0<6f7074696f6e2e>2.5 E F1<4f5054494f4e53>72 235.2 Q
+F2<adad616e6e6f7461746564ad6c6c766d>108 247.2 Q F0<6f72>2.5 E F2<ad41>
+2.5 E F0 .599<496e206164646974696f6e20746f20746865206e6f726d616c20726570
+6f7274207072696e7465642c207072696e74206f75742074686520636f646520666f7220
+7468652070726f6772616d2c20616e6e6f746174656420776974682065>128 259.2 R
+-.15<7865>-.15 G<637574696f6e>.15 E<6672657175656e63>128 271.2 Q 3.331
+<7969>-.15 G .831<6e666f726d6174696f6e2e20546869732063616e20626520706172
+746963756c61726c792075736566756c207768656e20747279696e6720746f2076697375
+616c697a6520686f>-3.331 F 3.332<7766>-.25 G .832
+<72657175656e746c79206261736963>-3.332 F<626c6f636b73206172652065>128
+283.2 Q -.15<7865>-.15 G 2.5<63757465642e2054686973>.15 F<6973206d6f7374
+2075736566756c207769746820626173696320626c6f636b2070726f8c6c696e6720696e
+666f726d6174696f6e206f7220626574746572>2.5 E<2e>-.55 E F2
+<adad7072696e74ad616c6cad636f6465>108 300 Q F0 .136
+<5573696e672074686973206f7074696f6e20656e61626c657320746865>128 312 R F2
+<adad616e6e6f7461746564ad6c6c766d>2.636 E F0 .136<6f7074696f6e2c2062>
+2.636 F .136<7574206974207072696e74732074686520656e74697265206d6f64756c
+652c20696e7374656164206f66206a757374>-.2 F
+<746865206d6f737420636f6d6d6f6e6c792065>128 324 Q -.15<7865>-.15 G
+<63757465642066756e6374696f6e732e>.15 E F2<adad74696d65ad706173736573>
+108 340.8 Q F0<5265636f72642074686520616d6f756e74206f662074696d65206e65
+6564656420666f722065616368207061737320616e64207072696e7420697420746f2073
+74616e64617264206572726f72>128 352.8 Q<2e>-.55 E F1<45584954205354>72
+369.6 Q -1.04<4154>-.986 G<5553>1.04 E F2<6c6c766d2d7072>108 381.6 Q
+<6f66>-.18 E F0 .117<72657475726e7320312069662069742063616e6e6f74206c6f
+61642074686520626974636f6465208c6c65206f72207468652070726f8c6c6520696e66
+6f726d6174696f6e2e204f74686572776973652c2069742065>2.616 F .117
+<786974732077697468207a65726f2e>-.15 F F1 -.548<4155>72 398.4 S
+<54484f52>.548 E F2<6c6c766d2d7072>108 410.4 Q<6f66>-.18 E F0
+<6973206d61696e7461696e656420627920746865>2.5 E F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ranlib.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ranlib.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ranlib.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvm-ranlib.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,276 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Courier
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Courier
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Courier at 0 ENC0/Courier RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 102.74
+<564d2d52414e4c4942283129204c4c>-1 F<564d20436f6d6d616e64204775696465>-1
+E<4c4c>105.24 E<564d2d52414e4c4942283129>-1 E/F1 10.95/Times-Bold at 0 SF
+-.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad72616e6c696220ad2047656e657261746520696e6465>108 96 Q 2.5
+<7866>-.15 G<6f72204c4c>-2.5 E<564d206172636869>-1 E -.15<7665>-.25 G F1
+<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF
+<6c6c766d2d72616e6c6962>108 124.8 Q F0<5badad76>2.5 E
+<657273696f6e5d205bad68656c705d203c6172636869>-.15 E -.15<7665>-.25 G
+<ad8c6c653e>.15 E F1<4445534352495054494f4e>72 141.6 Q F0<546865>108
+153.6 Q F2<6c6c766d2d72616e6c6962>3.124 E F0 .624<636f6d6d616e6420697320
+73696d696c617220746f2074686520636f6d6d6f6e20556e6978207574696c697479>
+3.124 F<2c>-.65 E/F3 10/Courier at 0 SF<72616e6c6962>3.124 E F0 3.124<2e49>
+C 3.124<7461>-3.124 G .623
+<646473206f722075706461746573207468652073796d626f6c>-3.124 F .372
+<7461626c6520696e20616e>108 165.6 R/F4 9/Times-Roman at 0 SF<4c4c>2.872 E
+<564d>-.9 E F0<6172636869>2.872 E .672 -.15<7665208c>-.25 H .372
+<6c652e204e6f74652074686174207573696e6720746865>.15 F F2<6c6c766d2d6172>
+2.872 E F0<6d6f64698c6572>2.872 E/F5 10/Times-Italic at 0 SF<73>2.873 E F0
+.373<697320757375616c6c79206d6f7265206566>2.873 F .373
+<8c6369656e74207468616e2072756e6e696e67>-.25 F F2
+<6c6c766d2d72616e6c6962>108 177.6 Q F0 .544
+<7768696368206973206f6e6c792070726f>3.044 F .543<7669646564206f6e6c7920
+666f7220636f6d706c65746e65737320616e6420636f6d7061746962696c697479>-.15
+F 3.043<2e55>-.65 G<6e6c696b>-3.043 E 3.043<656f>-.1 G .543
+<7468657220696d706c656d656e746174696f6e73>-3.043 F<6f66>108 189.6 Q F3
+<72616e6c6962>3.196 E F0<2c>A F2<6c6c766d2d72616e6c6962>3.196 E F0
+<696e6465>3.196 E -.15<7865>-.15 G<73>.15 E F4<4c4c>3.196 E<564d>-.9 E
+F0 .696<626974636f6465208c6c65732c206e6f74206e617469>3.196 F .996 -.15
+<7665206f>-.25 H .696<626a656374206d6f64756c65732e2059>.15 F .697
+<6f752063616e206c6973742074686520636f6e74656e7473>-1.1 F
+<6f66207468652073796d626f6c207461626c65207769746820746865>108 201.6 Q F3
+<6c6c766dad6e6d20ad73>2.5 E F0<636f6d6d616e642e>2.5 E F1<4f5054494f4e53>
+72 218.4 Q F5<6172>108 230.4 Q -.15<6368>-.37 G<6976652d8c6c65>.15 E F0
+<53706563698c657320746865206172636869>128 242.4 Q -.15<7665>-.25 G<2d8c
+6c6520746f207768696368207468652073796d626f6c207461626c652069732061646465
+64206f7220757064617465642e>.15 E F5<adad766572>108 259.2 Q<73696f6e>-.1
+E F0<5072696e74207468652076>128 271.2 Q<657273696f6e206f66>-.15 E F2
+<6c6c766d2d72616e6c6962>2.5 E F0<616e642065>2.5 E
+<78697420776974686f75742062>-.15 E
+<75696c64696e6720612073796d626f6c207461626c652e>-.2 E F5<ad68656c70>108
+288 Q F0<5072696e742075736167652068656c7020666f72>128 300 Q F2
+<6c6c766d2d72616e6c6962>2.5 E F0<616e642065>2.5 E
+<78697420776974686f75742062>-.15 E
+<75696c64696e6720612073796d626f6c207461626c652e>-.2 E F1<45584954205354>
+72 316.8 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108 328.8 Q F2
+<6c6c766d2d72616e6c6962>2.5 E F0<73756363656564732c2069742077696c6c2065>
+2.5 E<786974207769746820302e>-.15 E
+<496620616e206572726f72206f63637572732c2061206e6f6e2d7a65726f2065>5 E
+<78697420636f64652077696c6c2062652072657475726e65642e>-.15 E F1
+<53454520414c534f>72 345.6 Q F0<6c6c766d2d6172>108 357.6 Q<2c>-.4 E F5
+-.15<7261>2.5 G<6e6c6962>.15 E F0<283129>1.666 E F1 -.548<4155>72 374.4
+S<54484f5253>.548 E F0<4d61696e7461696e656420627920746865>108 386.4 Q F4
+<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvmc.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvmc.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvmc.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvmc.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,415 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 136.62<564d43283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>139.12 E<564d43283129>-1 E
+/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766d6320ad20546865204c4c>108 96 Q<564d20436f6d70696c657220447269>-1
+E -.15<7665>-.25 G 2.5<7228>.15 G<57495029>-2.5 E F1<53594e4f50534953>72
+112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d63>108 124.8 Q F0<5b>2.5 E/F3 10
+/Times-Italic at 0 SF<6f7074696f6e73>A F0<5d>A F3<8c6c656e616d65732e2e2e>
+2.5 E F1<4445534352495054494f4e>72 141.6 Q F2<6c6c766d63>108 153.6 Q F0
+2.483<6973206120636f6e8c67757261626c6520647269>4.983 F -.15<7665>-.25 G
+4.982<7266>.15 G 2.482<6f7220696e>-4.982 F -.2<766f>-.4 G 2.482
+<6b696e67206f74686572>.2 F/F4 9/Times-Roman at 0 SF<4c4c>4.982 E<564d>-.9 E
+F0 2.482<28616e64206e6f6e2d4c4c>4.982 F 2.482
+<564d2920746f6f6c7320696e206f7264657220746f20636f6d70696c652c>-1 F .311
+<6f7074696d697a6520616e64206c696e6b20736f667477>108 165.6 R .311
+<61726520666f72206d756c7469706c65206c616e6775616765732e2046>-.1 F .311
+<6f722074686f73652066>-.15 F .311<616d696c6961722077697468>-.1 F F4
+<465346>2.811 E F0 -.55<2773>C F2<676363>3.361 E F0 .311
+<746f6f6c2c2069742069732076>2.811 F .312<6572792073696d696c6172>-.15 F
+<2e>-.55 E<506c65617365206e6f74652074686174>108 177.6 Q F2<6c6c766d63>
+2.5 E F0<697320636f6e7369646572656420616e2065>2.5 E
+<78706572696d656e74616c20746f6f6c2e>-.15 E F1<4f5054494f4e53>72 194.4 Q
+F2<4275696c742d696e204f7074696f6e73>87 206.4 Q F4<4c4c>108 218.4 Q
+<564d43>-.9 E F0<68617320736f6d652062>2.5 E
+<75696c742d696e206f7074696f6e7320746861742063616e27>-.2 E 2.5<7462>-.18
+G 2.5<656f>-2.5 G -.15<7665>-2.65 G<7272696464656e20696e2074686520636f6e
+8c6775726174696f6e206c69627261726965732e>.15 E F2<ad6f>108 235.2 Q F3
+<8c6c656e616d65>2.5 E F0<4f7574707574208c6c65206e616d652e>128 247.2 Q F2
+<ad78>108 264 Q F3<6c616e677561>2.5 E -.1<6765>-.1 G F0
+<5370656369667920746865206c616e6775616765206f662074686520666f6c6c6f>128
+276 Q<77696e6720696e707574208c6c657320756e74696c20746865206e65>-.25 E
+<7874>-.15 E F2<ad78>2.5 E F0<6f7074696f6e2e>2.5 E F2<ad6c6f6164>108
+292.8 Q F3<706c7567696e5f6e616d65>2.5 E F0
+<4c6f6164207468652073706563698c656420706c7567696e>128 304.8 Q F4<444c4c>
+2.5 E F0 2.5<2e45>C<78616d706c653a20ad6c6f6164>-2.5 E/F5 10/Courier at 0 SF
+<244c4c564d5f444952>2.5 E F0<2f52656c656173652f6c69622f4c4c>A
+<564d4353696d706c652e736f2e>-1 E F2<ad76>108 321.6 Q F0<6f72>2.5 E F2
+<adad76>2.5 E<6572626f7365>-.1 E F0<456e61626c652076>128 333.6 Q
+<6572626f7365206d6f64652c20692e652e207072696e74206f757420616c6c2065>-.15
+E -.15<7865>-.15 G<637574656420636f6d6d616e64732e>.15 E F2
+<adad636865636bad6772617068>108 350.4 Q F0 1.759<436865636b207468652063
+6f6d70696c6174696f6e20666f7220636f6d6d6f6e206572726f7273206c696b>128
+362.4 R 4.259<656d>-.1 G 1.759<69736d617463686564206f75747075742f696e70
+7574206c616e6775616765206e616d65732c206d756c7469706c65>-4.259 F<646566>
+128 374.4 Q .914<61756c7420656467657320616e642063>-.1 F .914<79636c6573
+2e2042656361757365206f6620706c7567696e732c20746865736520636865636b732063
+616e27>-.15 F 3.414<7462>-.18 G 3.415<6570>-3.414 G .915
+<6572666f726d656420617420636f6d70696c652d74696d652e2045786974>-3.415 F
+1.659<7769746820636f6465207a65726f206966206e6f206572726f7273207765726520
+666f756e642c20616e642072657475726e20746865206e756d626572206f6620666f756e
+64206572726f7273206f74686572776973652e2048696464656e>128 386.4 R
+<6f7074696f6e2c2075736566756c20666f7220646562>128 398.4 Q<756767696e67>
+-.2 E F4<4c4c>2.5 E<564d43>-.9 E F0<706c7567696e732e>2.5 E F2
+<adad76696577ad6772617068>108 415.2 Q F0<53686f>128 427.2 Q 2.971
+<776167>-.25 G .471<726170686963616c20726570726573656e746174696f6e206f66
+2074686520636f6d70696c6174696f6e20677261706820616e642065>-2.971 F .471
+<7869742e205265717569726573207468617420796f75206861>-.15 F -.15<7665>-.2
+G F3<646f74>3.122 E F0<616e64>2.972 E F3<6776>2.972 E F0<70726f6772616d
+7320696e7374616c6c65642e2048696464656e206f7074696f6e2c2075736566756c2066
+6f7220646562>128 439.2 Q<756767696e67>-.2 E F4<4c4c>2.5 E<564d43>-.9 E
+F0<706c7567696e732e>2.5 E F2<adad7772697465ad6772617068>108 456 Q F0
+.675<57726974652061>128 468 R F3<636f6d70696c6174696f6ead6772>3.175 E
+<6170682e646f74>-.15 E F0 .675<8c6c6520696e207468652063757272656e742064
+69726563746f727920776974682074686520636f6d70696c6174696f6e20677261706820
+6465736372697074696f6e20696e>3.175 F .63<477261706876697a20666f726d6174
+20286964656e746963616c20746f20746865208c6c65207573656420627920746865>128
+480 R F2<adad76696577ad6772617068>3.13 E F0 .63
+<6f7074696f6e292e20546865>3.13 F F2<ad6f>3.13 E F0 .63
+<6f7074696f6e2063616e2062652075736564>3.13 F<746f2073657420746865206f75
+74707574208c6c65206e616d652e2048696464656e206f7074696f6e2c2075736566756c
+20666f7220646562>128 492 Q<756767696e67>-.2 E F4<4c4c>2.5 E<564d43>-.9 E
+F0<706c7567696e732e>2.5 E F2<adad7361>108 508.8 Q -.1<7665>-.25 G
+<ad74656d7073>.1 E F0 .206<57726974652074656d706f72617279208c6c65732074
+6f207468652063757272656e74206469726563746f727920616e6420646f206e6f742064
+656c657465207468656d206f6e2065>128 520.8 R .205
+<7869742e2054686973206f7074696f6e2063616e20616c736f2074616b>-.15 F<65>
+-.1 E 1.001<616e206172>128 532.8 R 1.001<67756d656e743a20746865>-.18 F
+F3<adad73617665ad74656d70733d6f626a>3.501 E F0 1.002<737769746368207769
+6c6c207772697465208c6c657320696e746f20746865206469726563746f727920737065
+63698c6564207769746820746865>3.501 F F3<ad6f>3.502 E F0 2.228
+<6f7074696f6e2e20546865>128 544.8 R F3<adad73617665ad74656d70733d637764>
+4.728 E F0<616e64>4.728 E F3<adad73617665ad74656d7073>4.727 E F0 2.227
+<73776974636865732061726520626f74682073796e6f6e>4.727 F 2.227
+<796d7320666f722074686520646566>-.15 F<61756c74>-.1 E<62656861>128 556.8
+Q<76696f7572>-.2 E<2e>-.55 E F2<adad74656d70ad646972>108 573.6 Q F3
+<646972>2.5 E<6563746f7279>-.37 E F0 .57
+<53746f72652074656d706f72617279208c6c657320696e20746865206769>128 585.6
+R -.15<7665>-.25 G 3.07<6e64>.15 G<69726563746f7279>-3.07 E 3.07<2e54>
+-.65 G .57<686973206469726563746f72792069732064656c65746564206f6e2065>
+-3.07 F .57<78697420756e6c657373>-.15 F F3<adad73617665ad74656d7073>3.07
+E F0<6973>3.07 E<73706563698c65642e204966>128 597.6 Q F3
+<adad73617665ad74656d70733d6f626a>2.5 E F0
+<697320616c736f2073706563698c65642c>2.5 E F3<adad74656d70ad646972>2.5 E
+F0<6973206769>2.5 E -.15<7665>-.25 G 2.5<6e74>.15 G
+<686520707265636564656e63652e>-2.5 E F2<ad68656c70>108 614.4 Q F0<507269
+6e7420612073756d6d617279206f6620636f6d6d616e642d6c696e65206f7074696f6e73
+20616e642065>128 626.4 Q<7869742e>-.15 E F2<ad68656c70ad68696464656e>108
+643.2 Q F0 3.3<5072696e7420612073756d6d617279206f6620636f6d6d616e642d6c
+696e65206f7074696f6e7320616e642065>128 655.2 R 3.299
+<7869742e205072696e742068656c702065>-.15 F -.15<7665>-.25 G 5.799<6e66>
+.15 G 3.299<6f72206f7074696f6e7320696e74656e64656420666f72>-5.799 F
+<6465>128 667.2 Q -.15<7665>-.25 G<6c6f706572732e>.15 E F2<adad76>108
+684 Q<657273696f6e>-.1 E F0<5072696e742076>128 696 Q
+<657273696f6e20696e666f726d6174696f6e20616e642065>-.15 E<7869742e>-.15 E
+188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 136.62<564d43283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>139.12 E<564d43283129>-1 E
+/F1 10/Times-Bold at 0 SF<40>108 84 Q/F2 10/Times-Italic at 0 SF<8c6c65>A F0
+1.634<5265616420636f6d6d616e642d6c696e65206f7074696f6e732066726f6d>128
+96 R F2<8c6c65>4.134 E F0 4.134<2e54>C 1.635<6865206f7074696f6e73207265
+61642061726520696e73657274656420696e20706c616365206f6620746865206f726967
+696e616c2040>-4.134 F F2<8c6c65>A F0 2.01<6f7074696f6e2e204966>128 108 R
+F2<8c6c65>4.51 E F0 2.01<646f6573206e6f742065>4.51 F 2.01<786973742c206f
+722063616e6e6f7420626520726561642c207468656e20746865206f7074696f6e207769
+6c6c2062652074726561746564206c69746572616c6c79>-.15 F 4.51<2c61>-.65 G
+2.01<6e64206e6f74>-4.51 F<72656d6f>128 120 Q -.15<7665>-.15 G<642e>.15 E
+.703<4f7074696f6e7320696e>128 138 R F2<8c6c65>3.203 E F0 .704<6172652073
+657061726174656420627920776869746573706163652e20412077686974657370616365
+20636861726163746572206d617920626520696e636c7564656420696e20616e206f7074
+696f6e206279>3.203 F .575<737572726f756e64696e672074686520656e7469726520
+6f7074696f6e20696e206569746865722073696e676c65206f7220646f75626c65207175
+6f7465732e20416e>128 150 R 3.075<7963>-.15 G .575
+<68617261637465722028696e636c7564696e672061206261636b736c61736829>-3.075
+F .187<6d617920626520696e636c75646564206279207072658c78696e672074686520
+63686172616374657220746f20626520696e636c7564656420776974682061206261636b
+736c6173682e20546865208c6c65206d617920697473656c6620636f6e7461696e>128
+162 R<6164646974696f6e616c2040>128 174 Q F2<8c6c65>A F0
+<6f7074696f6e733b20616e>2.5 E 2.5<7973>-.15 G<756368206f7074696f6e732077
+696c6c2062652070726f6365737365642072656375727369>-2.5 E -.15<7665>-.25 G
+<6c79>.15 E<2e>-.65 E F1<436f6e7472>87 190.8 Q<6f6c204f7074696f6e73>-.18
+E F0<427920646566>108 202.8 Q<61756c742c>-.1 E/F3 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d43>-.9 E F0<69732062>2.5 E<75696c74207769746820736f6d65
+207374616e6461726420636f6e8c6775726174696f6e206c696272617269657320746861
+742064658c6e652074686520666f6c6c6f>-.2 E<77696e67206f7074696f6e733a>-.25
+E F1<ad636c616e67>108 219.6 Q F0
+<55736520436c616e6720696e7374656164206f66206c6c766d2d6763632e>128 231.6
+Q F1<ad6f7074>108 248.4 Q F0
+<456e61626c65206f7074696d697a6174696f6e207061737365732077697468>128
+260.4 Q F1<6f7074>2.5 E F0 2.5<2e54>C 2.5<6f70>-3.3 G
+<617373206f7074696f6e7320746f20746865>-2.5 E F1<6f7074>2.5 E F0
+<70726f6772616d2075736520746865>2.5 E F1<ad57>2.5 E<6f2c>-.75 E F0
+<6f7074696f6e2e>2.5 E F1<ad49>108 277.2 Q F2<646972>2.5 E<6563746f7279>
+-.37 E F0<4164642061206469726563746f727920746f2074686520686561646572208c
+6c652073656172636820706174682e>128 289.2 Q F1<ad4c>108 306 Q F2<646972>
+2.5 E<6563746f7279>-.37 E F0<416464>128 318 Q F2<646972>2.5 E
+<6563746f7279>-.37 E F0
+<746f20746865206c6962726172792073656172636820706174682e>2.5 E F1<ad46>
+108 334.8 Q F2<646972>2.5 E<6563746f7279>-.37 E F0<416464>128 346.8 Q F2
+<646972>2.5 E<6563746f7279>-.37 E F0<746f20746865206672616d65>2.5 E -.1
+<776f>-.25 G<726b2073656172636820706174682e>.1 E F1<ad6c>108 363.6 Q F2
+<6e616d65>A F0<4c696e6b20696e20746865206c696272617279206c6962>128 375.6
+Q F2<6e616d65>A F0<2e5b6263207c2061207c20736f5d2e>A<54686973206c69627261
+72792073686f756c64206265206120626974636f6465206c696272617279>5 E<2e>-.65
+E F1<ad6672616d6577>108 392.4 Q<6f726b>-.1 E F2<6e616d65>2.5 E F0
+<4c696e6b20696e20746865206c696272617279206c6962>128 404.4 Q F2<6e616d65>
+A F0<2e5b6263207c2061207c20736f5d2e>A<54686973206c6962726172792073686f75
+6c64206265206120626974636f6465206c696272617279>5 E<2e>-.65 E F1
+<ad656d6974ad6c6c766d>108 421.2 Q F0<4f7574707574>128 433.2 Q F3<4c4c>
+4.357 E<564d>-.9 E F0 1.857<626974636f6465202877697468>4.357 F F1<ad63>
+4.356 E F0 4.356<296f>C 4.356<7261>-4.356 G 1.856
+<7373656d626c79202877697468>-4.356 F F1<ad53>4.356 E F0 4.356<2969>C
+1.856<6e7374656164206f66206e617469>-4.356 F 2.156 -.15<7665206f>-.25 H
+1.856<626a65637420286f7220617373656d626c79292e>.15 F<4966>6.856 E F1
+<ad656d6974ad6c6c766d>128 445.2 Q F0<6973206769>2.5 E -.15<7665>-.25 G
+2.5<6e77>.15 G<6974686f757420656974686572>-2.5 E F1<ad63>2.5 E F0<6f72>
+2.5 E F1<ad53>2.5 E F0<697420686173206e6f206566>2.5 E<666563742e>-.25 E
+F1<ad57>108 462 Q<61>-.65 E F0 -.15<5061>128 474 S
+<7373206f7074696f6e7320746f20617373656d626c6572>.15 E<2e>-.55 E F1
+<ad576c>108 490.8 Q F0 -.15<5061>128 502.8 S
+<7373206f7074696f6e7320746f206c696e6b>.15 E<6572>-.1 E<2e>-.55 E F1
+<ad57>108 519.6 Q<6f>-.75 E F0 -.15<5061>128 531.6 S
+<7373206f7074696f6e7320746f206f70742e>.15 E F1<ad576c6c63>108 548.4 Q F0
+-.15<5061>128 560.4 S
+<7373206f7074696f6e7320746f206c6c632028636f64652067656e657261746f72292e>
+.15 E/F4 10.95/Times-Bold at 0 SF<45584954205354>72 577.2 Q -1.04<4154>
+-.986 G<5553>1.04 E F0<4966>108 589.2 Q F1<6c6c766d63>2.826 E F0 .326
+<73756363656564732c2069742077696c6c2065>2.826 F .326
+<786974207769746820636f646520302e>-.15 F .326<4f74686572776973652c206966
+20616e206572726f72206f63637572732c2069742077696c6c2065>5.326 F .326
+<78697420776974682061206e6f6e2d7a65726f2076>-.15 F<616c75652e>-.25 E
+.611<4966206f6e65206f662074686520636f6d70696c6174696f6e20746f6f6c732072
+657475726e732061206e6f6e2d7a65726f207374617475732c2070656e64696e67206163
+74696f6e732077696c6c2062652064697363617264656420616e64>108 601.2 R F1
+<6c6c766d63>3.111 E F0<77696c6c>3.111 E<72657475726e207468652073616d6520
+726573756c7420636f6465206173207468652066>108 613.2 Q
+<61696c696e6720636f6d70696c6174696f6e20746f6f6c2e>-.1 E F4
+<53454520414c534f>72 630 Q F0<6c6c766d2d6763632c206c6c766dad672b2b2c206c
+6c766d2d61732c206c6c766d2d6469732c206c6c632c206c6c766d2d6c696e6b>108 642
+Q F4 -.548<4155>72 658.8 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 670.8 Q F3<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgcc.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgcc.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgcc.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgcc.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,294 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 122.73<564d474343283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>125.23 E<564d474343283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad67636320ad204c4c>108 96 Q<564d20432066726f6e74ad656e64>-1 E
+F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766d2d676363>
+108 124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF<6f7074696f6e73>A F0<5d>A
+F3<8c6c656e616d65>2.5 E F1<4445534352495054494f4e>72 141.6 Q F0<546865>
+108 153.6 Q F2<6c6c766d2d676363>3.632 E F0 1.132
+<636f6d6d616e6420697320746865>3.632 F/F4 9/Times-Roman at 0 SF<4c4c>3.632 E
+<564d>-.9 E F0 3.631<4366>3.631 G 1.131<726f6e7420656e642e>-3.631 F
+1.131<49742069732061206d6f64698c65642076>6.131 F 1.131
+<657273696f6e206f6620676363207468617420636f6d70696c657320432f4f626a43>
+-.15 F<70726f6772616d7320696e746f206e617469>108 165.6 Q .3 -.15
+<7665206f>-.25 H<626a656374732c>.15 E F4<4c4c>2.5 E<564d>-.9 E F0
+<626974636f6465206f72>2.5 E F4<4c4c>2.5 E<564d>-.9 E F0<617373656d626c79
+206c616e67756167652c20646570656e64696e672075706f6e20746865206f7074696f6e
+732e>2.5 E .725<427920646566>108 182.4 R<61756c742c>-.1 E F2
+<6c6c766d2d676363>3.225 E F0 .725<636f6d70696c657320746f206e617469>3.225
+F 1.025 -.15<7665206f>-.25 H .725<626a65637473206a757374206c696b>.15 F
+<65>-.1 E F4<474343>3.225 E F0 .725<646f65732e20496620746865>3.225 F F2
+<ad656d6974ad6c6c766d>3.225 E F0<616e64>3.225 E F2<ad63>3.225 E F0 .726
+<6f7074696f6e7320617265>3.225 F<6769>108 194.4 Q -.15<7665>-.25 G 2.565
+<6e74>.15 G .065<68656e2069742077696c6c2067656e6572617465>-2.565 F F4
+<4c4c>2.565 E<564d>-.9 E F0 .065
+<626974636f6465208c6c657320696e73746561642e204966>2.565 F F2
+<ad656d6974ad6c6c766d>2.565 E F0<616e64>2.565 E F2<ad53>2.564 E F0 .064
+<617265206769>2.564 F -.15<7665>-.25 G .064
+<6e2c207468656e2069742077696c6c2067656e6572617465>.15 F F4<4c4c>108
+206.4 Q<564d>-.9 E F0<617373656d626c79>2.5 E<2e>-.65 E .108
+<4265696e672064657269>108 223.2 R -.15<7665>-.25 G 2.608<6466>.15 G .108
+<726f6d20746865>-2.608 F F4<474e55>2.608 E F0 .108
+<436f6d70696c657220436f6c6c656374696f6e2c>2.608 F F2<6c6c766d2d676363>
+2.608 E F0 .109<686173206d616e>2.608 F 2.609<796f>-.15 G 2.609<6667>
+-2.609 G<636327>-2.609 E 2.609<7366>-.55 G .109
+<6561747572657320616e642061636365707473206d6f7374206f66>-2.609 F
+<67636327>108 235.2 Q 4.479<736f>-.55 G 4.479<7074696f6e732e204974>
+-4.479 F 1.978<68616e646c65732061206e756d626572206f662067636327>4.478 F
+4.478<7365>-.55 G 1.978<7874656e73696f6e7320746f2074686520432070726f6772
+616d6d696e67206c616e67756167652e>-4.628 F 1.978<5365652074686520676363>
+6.978 F<646f63756d656e746174696f6e20666f722064657461696c732e>108 247.2 Q
+F1<4f5054494f4e53>72 264 Q F2<adad68656c70>108 276 Q F0<5072696e74206120
+73756d6d617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>128 288
+Q F2<ad6f>108 304.8 Q F3<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c6520746f206265>128 316.8 Q F3
+<8c6c656e616d65>2.5 E F0<2e>A F2<ad49>108 333.6 Q F3<646972>2.5 E
+<6563746f7279>-.37 E F0<4164642061206469726563746f727920746f207468652068
+6561646572208c6c652073656172636820706174682e>128 345.6 Q
+<54686973206f7074696f6e2063616e2062652072657065617465642e>5 E F2<ad4c>
+108 362.4 Q F3<646972>2.5 E<6563746f7279>-.37 E F0<416464>128 374.4 Q F3
+<646972>2.5 E<6563746f7279>-.37 E F0
+<746f20746865206c6962726172792073656172636820706174682e>2.5 E
+<54686973206f7074696f6e2063616e2062652072657065617465642e>5 E F2<ad6c>
+108 391.2 Q F3<6e616d65>A F0
+<4c696e6b20696e20746865206c696272617279206c6962>128 403.2 Q F3<6e616d65>
+A F0<2e5b6263207c2061207c20736f5d2e>A<54686973206c6962726172792073686f75
+6c64206265206120626974636f6465206c696272617279>5 E<2e>-.65 E F2
+<ad656d6974ad6c6c766d>108 420 Q F0<4d616b>128 432 Q 4.819<6574>-.1 G
+2.319<6865206f7574707574206265>-4.819 F F4<4c4c>4.819 E<564d>-.9 E F0
+2.319<626974636f6465202877697468>4.819 F F2<ad63>4.819 E F0 4.82<296f>C
+4.82<7261>-4.82 G 2.32<7373656d626c79202877697468>-4.82 F F2<ad73>4.82 E
+F0 4.82<2969>C 2.32<6e7374656164206f66206e617469>-4.82 F 2.62 -.15
+<7665206f>-.25 H 2.32<626a65637420286f72>.15 F 2.5
+<617373656d626c79292e204966>128 444 R F2<ad656d6974ad6c6c766d>2.5 E F0
+<6973206769>2.5 E -.15<7665>-.25 G 2.5<6e77>.15 G
+<6974686f757420656974686572>-2.5 E F2<ad63>2.5 E F0<6f72>2.5 E F2<ad53>
+2.5 E F0<697420686173206e6f206566>2.5 E<666563742e>-.25 E F1
+<45584954205354>72 460.8 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108
+472.8 Q F2<6c6c766d2d676363>2.5 E F0
+<73756363656564732c2069742077696c6c2065>2.5 E<786974207769746820302e>
+-.15 E<4f74686572776973652c20696620616e206572726f72206f63637572732c2069
+742077696c6c2065>5 E<78697420776974682061206e6f6e2d7a65726f2076>-.15 E
+<616c75652e>-.25 E F1<53454520414c534f>72 489.6 Q F0<6c6c766dad672b2b>
+108 501.6 Q F1 -.548<4155>72 518.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 530.4 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgxx.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgxx.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgxx.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/llvmgxx.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,303 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:42 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Times-Italic at 0 ENC0/Times-Italic RE/Times-Bold at 0 ENC0/Times-Bold RE
+/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF<4c4c>72 48 Q 121.63<564d475858283129204c4c>-1 F
+<564d20436f6d6d616e64204775696465>-1 E<4c4c>124.13 E<564d475858283129>-1
+E/F1 10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<6c6c766dad672b2b20ad204c4c>108 96 Q<564d20432b2b2066726f6e74ad656e64>-1
+E F1<53594e4f50534953>72 112.8 Q/F2 10/Times-Bold at 0 SF<6c6c766dad672b2b>
+108 124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF<6f7074696f6e73>A F0<5d>A
+F3<8c6c656e616d65>2.5 E F1<4445534352495054494f4e>72 141.6 Q F0<546865>
+108 153.6 Q F2<6c6c766dad672b2b>4.893 E F0 2.393
+<636f6d6d616e6420697320746865>4.893 F/F4 9/Times-Roman at 0 SF<4c4c>4.893 E
+<564d>-.9 E F0<43>4.892 E/F5 8/Times-Roman at 0 SF -1<2b2b>-1 -1.2 O F0
+2.392<66726f6e7420656e642e>4.892 1.2 N 2.392
+<49742069732061206d6f64698c65642076>7.392 F 2.392
+<657273696f6e206f6620672b2b207468617420636f6d70696c6573>-.15 F<43>108
+165.6 Q F5 -1<2b2b>-1 -1.2 O F0
+<2f4f626a432b2b2070726f6772616d7320696e746f206e617469>1.2 I .3 -.15
+<76652063>-.25 H<6f64652c>.15 E F4<4c4c>2.5 E<564d>-.9 E F0<626974636f64
+65206f7220617373656d626c79206c616e67756167652c20646570656e64696e67207570
+6f6e20746865206f7074696f6e732e>2.5 E .141<427920646566>108 182.4 R
+<61756c742c>-.1 E F2<6c6c766dad672b2b>2.641 E F0 .141
+<636f6d70696c657320746f206e617469>2.641 F .441 -.15<7665206f>-.25 H .141
+<626a65637473206a757374206c696b>.15 F<65>-.1 E F4<474343>2.642 E F0 .142
+<646f65732e20496620746865>2.642 F F2<ad656d6974ad6c6c766d>2.642 E F0
+.142<6f7074696f6e206973206769>2.642 F -.15<7665>-.25 G 2.642<6e74>.15 G
+<68656e>-2.642 E 1.457<69742077696c6c2067656e6572617465>108 194.4 R F4
+<4c4c>3.957 E<564d>-.9 E F0 1.457
+<626974636f6465208c6c657320696e73746561642e>3.957 F<4966>6.457 E F2
+<ad53>3.957 E F0 1.457<28617373656d626c792920697320616c736f206769>3.957
+F -.15<7665>-.25 G 1.457
+<6e2c207468656e2069742077696c6c2067656e6572617465>.15 F F4<4c4c>3.956 E
+<564d>-.9 E F0<617373656d626c79>108 206.4 Q<2e>-.65 E .351
+<4265696e672064657269>108 223.2 R -.15<7665>-.25 G 2.851<6466>.15 G .351
+<726f6d20746865>-2.851 F F4<474e55>2.851 E F0 .352
+<436f6d70696c657220436f6c6c656374696f6e2c>2.852 F F2<6c6c766dad672b2b>
+2.852 E F0 .352<686173206d616e>2.852 F 2.852<796f>-.15 G 2.852<6667>
+-2.852 G<2b2b27>-2.852 E 2.852<7366>-.55 G .352
+<6561747572657320616e642061636365707473206d6f7374>-2.852 F
+<6f6620672b2b27>108 235.2 Q 2.5<736f>-.55 G 2.5<7074696f6e732e204974>
+-2.5 F<68616e646c65732061206e756d626572206f6620672b2b27>2.5 E 2.5<7365>
+-.55 G<7874656e73696f6e7320746f207468652043>-2.65 E F5 -1<2b2b>-1 -1.2 O
+F0<70726f6772616d6d696e67206c616e67756167652e>2.5 1.2 M F1
+<4f5054494f4e53>72 252 Q F2<adad68656c70>108 264 Q F0<5072696e7420612073
+756d6d617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>128 276 Q
+F2<ad53>108 292.8 Q F0 2.365<446f206e6f742067656e657261746520616e>8.74 F
+F4<4c4c>4.865 E<564d>-.9 E F0 2.365<626974636f6465208c6c652e>4.865 F
+<526174686572>7.365 E 4.865<2c63>-.4 G 2.365
+<6f6d70696c652074686520736f75726365208c6c6520696e746f20616e>-4.865 F F4
+<4c4c>4.865 E<564d>-.9 E F0<617373656d626c79>4.865 E
+<6c616e6775616765208c6c652e>128 304.8 Q F2<ad63>108 321.6 Q F0 .603
+<446f206e6f742067656e65726174652061206c696e6b>9.86 F .603<65642065>-.1 F
+-.15<7865>-.15 G 3.103<63757461626c652e20526174686572>.15 F 3.103<2c63>
+-.4 G .603<6f6d70696c652074686520736f75726365208c6c6520696e746f20616e>
+-3.103 F F4<4c4c>3.104 E<564d>-.9 E F0 .604<626974636f6465208c6c652e>
+3.104 F<54686973>5.604 E
+<626974636f6465208c6c652063616e207468656e206265206c696e6b>128 333.6 Q<65
+642077697468206f7468657220626974636f6465208c6c6573206c61746572206f6e2074
+6f2067656e657261746520612066756c6c>-.1 E F4<4c4c>2.5 E<564d>-.9 E F0
+-.15<657865>2.5 G<63757461626c652e>.15 E F2<ad6f>108 350.4 Q F3
+<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c6520746f206265>128 362.4 Q F3
+<8c6c656e616d65>2.5 E F0<2e>A F2<ad49>108 379.2 Q F3<646972>2.5 E
+<6563746f7279>-.37 E F0<4164642061206469726563746f727920746f207468652068
+6561646572208c6c652073656172636820706174682e>128 391.2 Q
+<54686973206f7074696f6e2063616e2062652072657065617465642e>5 E F2<ad4c>
+108 408 Q F3<646972>2.5 E<6563746f7279>-.37 E F0<416464>128 420 Q F3
+<646972>2.5 E<6563746f7279>-.37 E F0
+<746f20746865206c6962726172792073656172636820706174682e>2.5 E
+<54686973206f7074696f6e2063616e2062652072657065617465642e>5 E F2<ad6c>
+108 436.8 Q F3<6e616d65>A F0
+<4c696e6b20696e20746865206c696272617279206c6962>128 448.8 Q F3<6e616d65>
+A F0<2e5b6263207c2061207c20736f5d2e>A<54686973206c6962726172792073686f75
+6c64206265206120626974636f6465206c696272617279>5 E<2e>-.65 E F2
+<ad656d6974ad6c6c766d>108 465.6 Q F0<4d616b>128 477.6 Q 2.5<6574>-.1 G
+<6865206f7574707574206265>-2.5 E F4<4c4c>2.5 E<564d>-.9 E F0<626974636f
+646520286f7220617373656d626c792920696e7374656164206f66206e617469>2.5 E
+.3 -.15<7665206f>-.25 H<626a65637420286f7220617373656d626c79292e>.15 E
+F1<45584954205354>72 494.4 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108
+506.4 Q F2<6c6c766dad672b2b>2.5 E F0
+<73756363656564732c2069742077696c6c2065>2.5 E<786974207769746820302e>
+-.15 E<4f74686572776973652c20696620616e206572726f72206f63637572732c2069
+742077696c6c2065>5 E<78697420776974682061206e6f6e2d7a65726f2076>-.15 E
+<616c75652e>-.25 E F1<53454520414c534f>72 523.2 Q F0<6c6c766d2d676363>
+108 535.2 Q F1 -.548<4155>72 552 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 564 Q F4<4c4c>2.5 E<564d>-.9 E
+F0 -.7<5465>2.5 G<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>
+-.18 E 188.72<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/opt.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/opt.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/opt.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/opt.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,412 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:43 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 151.73<4f5054283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<4f5054283129>154.23 E/F1 10.95
+/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0<6f707420ad204c4c>108
+96 Q<564d206f7074696d697a6572>-1 E F1<53594e4f50534953>72 112.8 Q/F2 10
+/Times-Bold at 0 SF<6f7074>108 124.8 Q F0<5b>2.5 E/F3 10/Times-Italic at 0 SF
+<6f7074696f6e73>A F0 2.5<5d5b>C F3<8c6c656e616d65>-2.5 E F0<5d>A F1
+<4445534352495054494f4e>72 141.6 Q F0<546865>108 153.6 Q F2<6f7074>3.099
+E F0 .599<636f6d6d616e6420697320746865206d6f64756c6172>3.099 F/F4 9
+/Times-Roman at 0 SF<4c4c>3.099 E<564d>-.9 E F0 .599
+<6f7074696d697a657220616e6420616e616c797a6572>3.099 F 5.599<2e49>-.55 G
+3.098<7474>-5.599 G<616b>-3.098 E<6573>-.1 E F4<4c4c>3.098 E<564d>-.9 E
+F0 .598<736f75726365208c6c657320617320696e7075742c2072756e73>3.098 F
+.086<7468652073706563698c6564206f7074696d697a6174696f6e73206f7220616e61
+6c79736573206f6e2069742c20616e64207468656e206f75747075747320746865206f70
+74696d697a6564208c6c65206f722074686520616e616c7973697320726573756c74732e>
+108 165.6 R<546865>5.087 E<66756e6374696f6e206f66>108 177.6 Q F2<6f7074>
+2.5 E F0<646570656e6473206f6e207768657468657220746865>2.5 E F2
+<ad616e616c797a65>2.5 E F0<6f7074696f6e206973206769>2.5 E -.15<7665>-.25
+G<6e2e>.15 E<5768656e>108 194.4 Q F2<ad616e616c797a65>3.659 E F0 1.159
+<69732073706563698c65642c>3.659 F F2<6f7074>3.659 E F0 1.159
+<706572666f726d732076>3.659 F 1.159<6172696f757320616e616c79736573206f66
+2074686520696e70757420736f757263652e>-.25 F 1.158
+<49742077696c6c20757375616c6c79207072696e7420746865>6.159 F .106
+<726573756c7473206f6e207374616e64617264206f75747075742c2062>108 206.4 R
+.106<757420696e2061206665>-.2 F 2.606<7763>-.25 G .106<617365732c206974
+2077696c6c207072696e74206f757470757420746f207374616e64617264206572726f72
+206f722067656e65726174652061208c6c65207769746820746865>-2.606 F<616e616c
+79736973206f75747075742c20776869636820697320757375616c6c7920646f6e652077
+68656e20746865206f7574707574206973206d65616e7420666f7220616e6f7468657220
+70726f6772616d2e>108 218.4 Q<5768696c65>108 235.2 Q F2<ad616e616c797a65>
+2.645 E F0<6973>2.645 E F3<6e6f74>2.645 E F0<6769>2.645 E -.15<7665>-.25
+G<6e2c>.15 E F2<6f7074>2.645 E F0 .145<617474656d70747320746f2070726f64
+75636520616e206f7074696d697a6564206f7574707574208c6c652e>2.645 F .144
+<546865206f7074696d697a6174696f6e732061>5.144 F -.25<7661>-.2 G
+<696c61626c65>.25 E<766961>108 247.2 Q F2<6f7074>3.666 E F0 1.166<646570
+656e642075706f6e2077686174206c69627261726965732077657265206c696e6b>3.666
+F 1.167<656420696e746f2069742061732077656c6c20617320616e>-.1 F 3.667
+<7961>-.15 G 1.167
+<64646974696f6e616c206c69627261726965732074686174206861>-3.667 F 1.467
+-.15<76652062>-.2 H<65656e>.15 E<6c6f61646564207769746820746865>108
+259.2 Q F2<ad6c6f6164>2.5 E F0 2.5<6f7074696f6e2e20557365>2.5 F<746865>
+2.5 E F2<ad68656c70>2.5 E F0<6f7074696f6e20746f2064657465726d696e652077
+686174206f7074696d697a6174696f6e7320796f752063616e207573652e>2.5 E<4966>
+108 276 Q F3<8c6c656e616d65>2.709 E F0 .209<6973206f6d69747465642066726f
+6d2074686520636f6d6d616e64206c696e65206f72206973>2.709 F F3<ad>2.709 E
+F0<2c>A F2<6f7074>2.709 E F0 .209<72656164732069747320696e7075742066726f
+6d207374616e6461726420696e7075742e20496e707574732063616e206265>2.709 F
+<696e2065697468657220746865>108 288 Q F4<4c4c>2.5 E<564d>-.9 E F0<617373
+656d626c79206c616e677561676520666f726d617420282e6c6c29206f7220746865>2.5
+E F4<4c4c>2.5 E<564d>-.9 E F0
+<626974636f646520666f726d617420282e6263292e>2.5 E<496620616e206f75747075
+74208c6c656e616d65206973206e6f742073706563698c6564207769746820746865>108
+304.8 Q F2<ad6f>2.5 E F0<6f7074696f6e2c>2.5 E F2<6f7074>2.5 E F0<777269
+74657320697473206f757470757420746f20746865207374616e64617264206f75747075
+742e>2.5 E F1<4f5054494f4e53>72 321.6 Q F2<ad66>108 333.6 Q F0 .298
+<456e61626c652062696e617279206f7574707574206f6e207465726d696e616c732e>
+10.97 F<4e6f726d616c6c79>5.299 E<2c>-.65 E F2<6f7074>2.799 E F0 .299
+<77696c6c2072656675736520746f207772697465207261>2.799 F 2.799<7762>-.15
+G .299<6974636f6465206f757470757420696620746865206f7574707574>-2.799 F
+<73747265616d2069732061207465726d696e616c2e2057>128 345.6 Q
+<6974682074686973206f7074696f6e2c>-.4 E F2<6f7074>2.5 E F0
+<77696c6c207772697465207261>2.5 E 2.5<7762>-.15 G<6974636f6465207265>
+-2.5 E -.05<6761>-.15 G<72646c657373206f6620746865206f7574707574206465>
+.05 E<766963652e>-.25 E F2<ad68656c70>108 362.4 Q F0<5072696e7420612073
+756d6d617279206f6620636f6d6d616e64206c696e65206f7074696f6e732e>128 374.4
+Q F2<ad6f>108 391.2 Q F3<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c656e616d652e>128 403.2 Q F2
+<ad53>108 420 Q F0<5772697465206f757470757420696e>8.74 E F4<4c4c>2.5 E
+<564d>-.9 E F0<696e7465726d656469617465206c616e67756167652028696e737465
+6164206f6620626974636f6465292e>2.5 E F2<ad7b706173736e616d657d>108 436.8
+Q<6f7074>128 448.8 Q F0<70726f>2.922 E .422
+<766964657320746865206162696c69747920746f2072756e20616e>-.15 F 2.922
+<796f>-.15 G<66>-2.922 E F4<4c4c>2.922 E<564d>-.9 E F0 1.522 -.55
+<2773206f>D .422<7074696d697a6174696f6e206f7220616e616c7973697320706173
+73657320696e20616e>.55 F 2.922<796f>-.15 G<72646572>-2.922 E 2.922<2e54>
+-.55 G<6865>-2.922 E F2<ad68656c70>2.921 E F0 .309
+<6f7074696f6e206c6973747320616c6c20746865207061737365732061>128 460.8 R
+-.25<7661>-.2 G .309<696c61626c652e20546865206f7264657220696e2077686963
+6820746865206f7074696f6e73206f63637572206f6e2074686520636f6d6d616e64206c
+696e652061726520746865>.25 F<6f7264657220696e20776869636820746865>128
+472.8 Q 2.5<7961>-.15 G<72652065>-2.5 E -.15<7865>-.15 G
+<6375746564202877697468696e207061737320636f6e73747261696e7473292e>.15 E
+F2<ad737464ad636f6d70696c65ad6f707473>108 489.6 Q F0 1.181<546869732069
+732073686f72742068616e6420666f722061207374616e64617264206c697374206f66>
+128 501.6 R F3 1.181<636f6d70696c652074696d65206f7074696d697a6174696f6e>
+3.681 F F0 3.68<7061737365732e2054686973>3.68 F 1.18
+<6973207479706963616c6c79207573656420746f>3.68 F .938<6f7074696d697a6520
+746865206f75747075742066726f6d20746865206c6c766d2d6763632066726f6e742065
+6e642e204974206d696768742062652075736566756c20666f72206f746865722066726f
+6e7420656e6420636f6d70696c657273206173>128 513.6 R<77656c6c2e2054>128
+525.6 Q 2.5<6f64>-.8 G<6973636f>-2.5 E -.15<7665>-.15 G 2.5<7274>.15 G
+<68652066756c6c20736574206f66206f7074696f6e732061>-2.5 E -.25<7661>-.2 G
+<696c61626c652c207573652074686520666f6c6c6f>.25 E
+<77696e6720636f6d6d616e643a>-.25 E/F5 10/Courier at 0 SF<6c6c766dad6173203c
+202f6465762f6e756c6c207c206f707420ad737464ad636f6d70696c65ad6f70747320ad
+64697361626c65ad6f757470757420ad6465627567ad706173733d417267756d656e7473>
+146 543.6 Q F2<ad64697361626c65ad696e6c696e696e67>108 560.4 Q F0 .182
+<54686973206f7074696f6e206973206f6e6c79206d65616e696e6766756c207768656e>
+128 572.4 R F2<ad737464ad636f6d70696c65ad6f707473>2.682 E F0 .181
+<6973206769>2.681 F -.15<7665>-.25 G .181
+<6e2e2049742073696d706c792072656d6f>.15 F -.15<7665>-.15 G 2.681<7374>
+.15 G .181<686520696e6c696e696e672070617373>-2.681 F
+<66726f6d20746865207374616e64617264206c6973742e>128 584.4 Q F2
+<ad64697361626c65ad6f7074>108 601.2 Q F0 .395
+<54686973206f7074696f6e206973206f6e6c79206d65616e696e6766756c207768656e>
+128 613.2 R F2<ad737464ad636f6d70696c65ad6f707473>2.895 E F0 .396
+<6973206769>2.896 F -.15<7665>-.25 G .396
+<6e2e2049742064697361626c6573206d6f73742c2062>.15 F .396
+<7574206e6f7420616c6c2c206f6620746865>-.2 F F2
+<ad737464ad636f6d70696c65ad6f707473>128 625.2 Q F0 2.5<2e54>C
+<6865206f6e657320746861742072656d61696e20617265>-2.5 E F2<ad76>2.5 E
+<6572696679>-.1 E F0<2c>A F2<ad6c6f>2.5 E<776572ad7365746a6d70>-.1 E F0
+2.5<2c61>C<6e64>-2.5 E F2<ad66756e6372>2.5 E<65736f6c76>-.18 E<65>-.1 E
+F0<2e>A F2<ad7374726970ad646562>108 642 Q<7567>-.2 E F0 4.424
+<54686973206f7074696f6e20636175736573206f707420746f20737472697020646562>
+128 654 R 4.424<756720696e666f726d6174696f6e2066726f6d20746865206d6f6475
+6c65206265666f7265206170706c79696e67206f74686572>-.2 F .506<6f7074696d69
+7a6174696f6e732e20497420697320657373656e7469616c6c79207468652073616d6520
+6173>128 666 R F2<ad7374726970>3.006 E F0 -.2<6275>3.006 G 3.006<7469>.2
+G 3.006<7465>-3.006 G .506
+<6e7375726573207468617420737472697070696e67206f6620646562>-3.006 F .507
+<756720696e666f726d6174696f6e206973>-.2 F<646f6e65208c7273742e>128 678 Q
+F2<ad76>108 694.8 Q<6572696679ad65616368>-.1 E F0 .661
+<54686973206f7074696f6e20636175736573206f707420746f2061646420612076>128
+706.8 R .661<657269667920706173732061667465722065>-.15 F -.15<7665>-.25
+G .66<72792070617373206f74686572776973652073706563698c6564206f6e20746865
+20636f6d6d616e64206c696e65>.15 F<28696e636c7564696e67>128 718.8 Q F2
+<ad76>3.686 E<6572696679>-.1 E F0 3.686<292e2054686973>B 1.187<69732075
+736566756c20666f72206361736573207768657265206974206973207375737065637465
+64207468617420612070617373206973206372656174696e6720616e20696e>3.686 F
+-.25<7661>-.4 G<6c6964>.25 E 2.6<6d6f64756c652062>128 730.8 R 2.6<757420
+6974206973206e6f7420636c656172207768696368207061737320697320646f696e6720
+69742e2054686520636f6d62696e6174696f6e206f66>-.2 F F2
+<ad737464ad636f6d70696c65ad6f707473>5.1 E F0<616e64>5.1 E 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 151.73<4f5054283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<4f5054283129>154.23 E/F1 10
+/Times-Bold at 0 SF<ad76>128 84 Q<6572696679ad65616368>-.1 E F0
+<63616e20717569636b6c7920747261636b20646f>2.5 E
+<776e2074686973206b696e64206f662070726f626c656d2e>-.25 E F1<ad7072>108
+100.8 Q<6f8c6c65ad696e66>-.18 E<6fad8c6c65>-.25 E/F2 10/Times-Italic at 0
+SF<8c6c656e616d65>2.5 E F0<5370656369667920746865206e616d65206f66207468
+65208c6c65206c6f616465642062792074686520ad70726f8c6c65ad6c6f61646572206f
+7074696f6e2e>128 112.8 Q F1<ad7374617473>108 129.6 Q F0
+<5072696e7420737461746973746963732e>128 141.6 Q F1
+<ad74696d65ad706173736573>108 158.4 Q F0<5265636f72642074686520616d6f75
+6e74206f662074696d65206e656564656420666f722065616368207061737320616e6420
+7072696e7420697420746f207374616e64617264206572726f72>128 170.4 Q<2e>-.55
+E F1<ad646562>108 187.2 Q<7567>-.2 E F0 .98
+<49662074686973206973206120646562>128 199.2 R .98<75672062>-.2 F .98
+<75696c642c2074686973206f7074696f6e2077696c6c20656e61626c6520646562>-.2
+F .981<7567207072696e746f7574732066726f6d207061737365732077686963682075
+736520746865>-.2 F/F3 9/Times-Italic at 0 SF<444542>3.481 E<5547>-.09 E F2
+<2829>A F0 2.5<6d6163726f2e20536565>128 211.2 R<746865>2.5 E/F4 9
+/Times-Bold at 0 SF<4c4c>2.5 E<564d>-.828 E F1<5072>2.5 E
+<6f6772616d6d657227>-.18 E 2.5<734d>-.37 G<616e75616c>-2.5 E F0 2.5
+<2c73>C<656374696f6e>-2.5 E F2<23444542>2.5 E<5547>-.1 E F0
+<666f72206d6f726520696e666f726d6174696f6e2e>2.5 E F1<ad6c6f6164>108 228
+Q F0<3d>A F2<706c7567696e>A F0 1.769
+<4c6f6164207468652064796e616d6963206f626a656374>128 240 R F2
+<706c7567696e>4.269 E F0 6.769<2e54>C 1.768
+<686973206f626a6563742073686f756c64207265>-6.769 F 1.768
+<676973746572206e65>-.15 F 4.268<776f>-.25 G 1.768
+<7074696d697a6174696f6e206f7220616e616c79736973207061737365732e>-4.268 F
+2.423
+<4f6e6365206c6f616465642c20746865206f626a6563742077696c6c20616464206e65>
+128 252 R 4.924<7763>-.25 G 2.424
+<6f6d6d616e64206c696e65206f7074696f6e7320746f20656e61626c652076>-4.924 F
+2.424<6172696f7573206f7074696d697a6174696f6e73206f72>-.25 F 2.579
+<616e616c797365732e2054>128 264 R 2.579<6f73>-.8 G .079
+<656520746865206e65>-2.579 F 2.579<7763>-.25 G .079<6f6d706c657465206c69
+7374206f66206f7074696d697a6174696f6e732c2075736520746865>-2.579 F F1
+<ad68656c70>2.579 E F0<616e64>2.579 E F1<ad6c6f6164>2.578 E F0 .078
+<6f7074696f6e7320746f676574686572>2.578 F 2.578<2e46>-.55 G<6f72>-2.728
+E -.15<6578>128 276 S<616d706c653a>.15 E/F5 10/Courier at 0 SF
+<6f707420ad6c6f61643d706c7567696e2e736f20ad68656c70>146 294 Q F1<ad70>
+108 310.8 Q F0<5072696e74206d6f64756c652061667465722065616368207472616e
+73666f726d6174696f6e2e>8.74 E/F6 10.95/Times-Bold at 0 SF<45584954205354>72
+327.6 Q -1.04<4154>-.986 G<5553>1.04 E F0<4966>108 339.6 Q F1<6f7074>2.5
+E F0<73756363656564732c2069742077696c6c2065>2.5 E
+<786974207769746820302e>-.15 E<4f74686572776973652c20696620616e20657272
+6f72206f63637572732c2069742077696c6c2065>5 E
+<78697420776974682061206e6f6e2d7a65726f2076>-.15 E<616c75652e>-.25 E F6
+-.548<4155>72 356.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920746865>108 368.4 Q/F7 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/ps/tblgen.ps
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/ps/tblgen.ps?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/ps/tblgen.ps (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/ps/tblgen.ps Thu Apr  7 00:46:10 2011
@@ -0,0 +1,323 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.18.1
+%%CreationDate: Thu Apr  7 00:34:43 2011
+%%DocumentNeededResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.18 1
+%%Pages: 2
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.18 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/Fr{
+setrgbcolor fill
+}bind def
+/Fk{
+setcmykcolor fill
+}bind def
+/Fg{
+setgray fill
+}bind def
+/FL/fill load def
+/LW/setlinewidth load def
+/Cr/setrgbcolor load def
+/Ck/setcmykcolor load def
+/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier at 0 ENC0/Courier RE/Times-Italic at 0 ENC0/Times-Italic RE
+/Times-Bold at 0 ENC0/Times-Bold RE/Times-Roman at 0 ENC0/Times-Roman RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 131.18<54424c47454e283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<54424c47454e283129>133.68 E/F1
+10.95/Times-Bold at 0 SF -.219<4e41>72 84 S<4d45>.219 E F0
+<74626c67656e20ad2054>108 96 Q<6172>-.8 E
+<676574204465736372697074696f6e2054>-.18 E 2.5<6f43>-.8 G
+<2b2b20436f64652047656e657261746f72>-2.5 E F1<53594e4f50534953>72 112.8
+Q/F2 10/Times-Bold at 0 SF<74626c67656e>108 124.8 Q F0<5b>2.5 E/F3 10
+/Times-Italic at 0 SF<6f7074696f6e73>A F0 2.5<5d5b>C F3<8c6c656e616d65>-2.5
+E F0<5d>A F1<4445534352495054494f4e>72 141.6 Q F2<74626c67656e>108 153.6
+Q F0 .36<7472616e736c617465732066726f6d20746172>2.86 F .36
+<676574206465736372697074696f6e20282e746429208c6c657320696e746f2043>-.18
+F/F4 8/Times-Roman at 0 SF -1<2b2b>-1 -1.2 O F0 .36<636f646520746861742063
+616e20626520696e636c7564656420696e207468652064658c6e6974696f6e206f662061
+6e>2.86 1.2 N/F5 9/Times-Roman at 0 SF<4c4c>108 165.6 Q<564d>-.9 E F0
+<746172>3.613 E 1.113<676574206c696272617279>-.18 F 3.613<2e4d>-.65 G
+1.113<6f7374207573657273206f66>-3.613 F F5<4c4c>3.613 E<564d>-.9 E F0
+1.114<77696c6c206e6f74206e65656420746f2075736520746869732070726f6772616d
+2e204974206973206f6e6c7920666f7220617373697374696e672077697468>3.613 F
+<77726974696e6720616e>108 177.6 Q F5<4c4c>2.5 E<564d>-.9 E F0<746172>2.5
+E<676574206261636b>-.18 E<656e642e>-.1 E 4.077
+<54686520696e70757420616e64206f7574707574206f66>108 194.4 R F2
+<74626c67656e>6.577 E F0 4.077<6973206265>6.577 F 4.077<796f6e6420746865
+2073636f7065206f6620746869732073686f727420696e74726f64756374696f6e2e2050
+6c656173652073656520746865>-.15 F F3<436f646547656e6572>108 206.4 Q
+<6174696f6e>-.15 E F0<7061676520696e20746865>2.5 E F5<4c4c>2.5 E<564d>
+-.9 E F0<646f63756d656e746174696f6e2e>2.5 E<546865>108 223.2 Q F3
+<8c6c656e616d65>2.5 E F0<6172>2.5 E
+<67756d656e742073706563698c657320746865206e616d65206f6620612054>-.18 E
+<6172>-.8 E<676574204465736372697074696f6e20282e746429208c6c6520746f2072
+65616420617320696e7075742e>-.18 E F1<4f5054494f4e53>72 240 Q F2
+<ad68656c70>108 252 Q F0<5072696e7420612073756d6d617279206f6620636f6d6d
+616e64206c696e65206f7074696f6e732e>128 264 Q F2<ad6f>108 280.8 Q F3
+<8c6c656e616d65>2.5 E F0
+<5370656369667920746865206f7574707574208c6c65206e616d652e>128 292.8 Q
+<4966>5 E F3<8c6c656e616d65>2.5 E F0<6973>2.5 E/F6 10/Courier at 0 SF<ad>
+2.5 E F0 2.5<2c74>C<68656e>-2.5 E F2<74626c67656e>2.5 E F0<73656e647320
+697473206f757470757420746f207374616e64617264206f75747075742e>2.5 E F2
+<ad49>108 309.6 Q F3<646972>2.5 E<6563746f7279>-.37 E F0 .004
+<5370656369667920776865726520746f208c6e64206f7468657220746172>128 321.6
+R .005<676574206465736372697074696f6e208c6c657320666f7220696e636c757369
+6f6e2e20546865>-.18 F F3<646972>2.505 E<6563746f7279>-.37 E F0 -.25
+<7661>2.505 G .005<6c75652073686f756c6420626520612066756c6c206f72>.25 F<
+7061727469616c207061746820746f2061206469726563746f7279207468617420636f6e
+7461696e7320746172>128 333.6 Q
+<676574206465736372697074696f6e208c6c65732e>-.18 E F2
+<ad61736d777269746572>108 350.4 Q<6e756d>-.15 E F3<4e>2.5 E F0<4d616b>
+128 362.4 Q 2.5<65ad>-.1 G<67656ead61736dad77726974657220656d6974206173
+73656d626c7920777269746572206e756d626572>-2.5 E F3<4e>2.5 E F0<2e>A F2
+<ad636c617373>108 379.2 Q F3<636c617373204e616d65>2.5 E F0<5072696e7420
+74686520656e756d65726174696f6e206c69737420666f72207468697320636c6173732e>
+128 391.2 Q F2<ad7072696e74ad72>108 408 Q<65636f726473>-.18 E F0<507269
+6e7420616c6c207265636f72647320746f207374616e64617264206f7574707574202864
+6566>128 420 Q<61756c74292e>-.1 E F2<ad7072696e74ad656e756d73>108 436.8
+Q F0<5072696e7420656e756d65726174696f6e2076>128 448.8 Q
+<616c75657320666f72206120636c617373>-.25 E F2<ad67656ead656d6974746572>
+108 465.6 Q F0
+<47656e6572617465206d616368696e6520636f646520656d6974746572>128 477.6 Q
+<2e>-.55 E F2<ad67656ead72>108 494.4 Q<65676973746572ad656e756d73>-.18 E
+F0<47656e65726174652074686520656e756d65726174696f6e2076>128 506.4 Q
+<616c75657320666f7220616c6c207265>-.25 E<676973746572732e>-.15 E F2
+<ad67656ead72>108 523.2 Q<65676973746572ad64657363>-.18 E F0
+<47656e65726174652061207265>128 535.2 Q
+<67697374657220696e666f206465736372697074696f6e20666f722065616368207265>
+-.15 E<676973746572>-.15 E<2e>-.55 E F2<ad67656ead72>108 552 Q
+<65676973746572ad64657363ad686561646572>-.18 E F0
+<47656e65726174652061207265>128 564 Q<67697374657220696e666f206465736372
+697074696f6e2068656164657220666f722065616368207265>-.15 E<676973746572>
+-.15 E<2e>-.55 E F2<ad67656ead696e737472ad656e756d73>108 580.8 Q F0
+<47656e657261746520656e756d65726174696f6e2076>128 592.8 Q
+<616c75657320666f7220696e737472756374696f6e732e>-.25 E F2
+<ad67656ead696e737472ad64657363>108 609.6 Q F0
+<47656e657261746520696e737472756374696f6e206465736372697074696f6e732e>
+128 621.6 Q F2<ad67656ead61736dad777269746572>108 638.4 Q F0
+<47656e65726174652074686520617373656d626c7920777269746572>128 650.4 Q
+<2e>-.55 E F2<ad67656ead646167ad6973656c>108 667.2 Q F0
+<47656e65726174652061>128 679.2 Q F5 -.36<444147>2.5 G F0
+<284469726563746564204163>2.86 E
+<79636c652047726170682920696e737472756374696f6e2073656c6563746f72>-.15 E
+<2e>-.55 E F2<ad67656ead737562746172>108 696 Q<676574>-.1 E F0
+<47656e657261746520737562746172>128 708 Q
+<67657420656e756d65726174696f6e732e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<31>205.67 E 0 Cg EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman at 0 SF 131.18<54424c47454e283129204c4c>72 48 R
+<564d20436f6d6d616e64204775696465>-1 E<54424c47454e283129>133.68 E/F1 10
+/Times-Bold at 0 SF<ad67656ead696e7472696e736963>108 84 Q F0
+<47656e657261746520696e7472696e73696320696e666f726d6174696f6e2e>128 96 Q
+F1<ad76>108 112.8 Q<657273696f6e>-.1 E F0<53686f>128 124.8 Q 2.5<7774>
+-.25 G<68652076>-2.5 E
+<657273696f6e206e756d626572206f6620746869732070726f6772616d2e>-.15 E/F2
+10.95/Times-Bold at 0 SF<45584954205354>72 141.6 Q -1.04<4154>-.986 G<5553>
+1.04 E F0<4966>108 153.6 Q F1<74626c67656e>2.5 E F0
+<73756363656564732c2069742077696c6c2065>2.5 E<786974207769746820302e>
+-.15 E<4f74686572776973652c20696620616e206572726f72206f63637572732c2069
+742077696c6c2065>5 E<78697420776974682061206e6f6e2d7a65726f2076>-.15 E
+<616c75652e>-.25 E F2 -.548<4155>72 170.4 S<54484f5253>.548 E F0
+<4d61696e7461696e656420627920546865>108 182.4 Q/F3 9/Times-Roman at 0 SF
+<4c4c>2.5 E<564d>-.9 E F0 -.7<5465>2.5 G
+<616d20283c687474703a2f2f6c6c766d2e6f72>.7 E<673e292e>-.18 E 188.72
+<43565320323031302d30352d3036>72 768 R<32>205.67 E 0 Cg EP
+%%Trailer
+end
+%%EOF

Added: www-releases/trunk/2.9/docs/CommandGuide/tblgen.pod
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandGuide/tblgen.pod?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandGuide/tblgen.pod (added)
+++ www-releases/trunk/2.9/docs/CommandGuide/tblgen.pod Thu Apr  7 00:46:10 2011
@@ -0,0 +1,115 @@
+
+=pod
+
+=head1 NAME
+
+tblgen - Target Description To C++ Code Generator
+
+=head1 SYNOPSIS
+
+B<tblgen> [I<options>] [I<filename>]
+
+=head1 DESCRIPTION
+
+B<tblgen> translates from target description (.td) files into C++ code that can
+be included in the definition of an LLVM target library. Most users of LLVM will
+not need to use this program. It is only for assisting with writing an LLVM
+target backend.
+
+The input and output of B<tblgen> is beyond the scope of this short
+introduction. Please see the I<CodeGeneration> page in the LLVM documentation.
+
+The F<filename> argument specifies the name of a Target Description (.td) file
+to read as input.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-help>
+
+Print a summary of command line options.
+
+=item B<-o> F<filename>
+
+Specify the output file name.  If F<filename> is C<->, then B<tblgen>
+sends its output to standard output.
+
+=item B<-I> F<directory>
+
+Specify where to find other target description files for inclusion. The
+F<directory> value should be a full or partial path to a directory that contains
+target description files.
+
+=item B<-asmwriternum> F<N>
+
+Make -gen-asm-writer emit assembly writer number F<N>.
+
+=item B<-class> F<class Name>
+
+Print the enumeration list for this class.
+
+=item B<-print-records>
+
+Print all records to standard output (default).
+
+=item B<-print-enums>
+
+Print enumeration values for a class
+
+=item B<-gen-emitter>
+
+Generate machine code emitter.
+
+=item B<-gen-register-enums>
+
+Generate the enumeration values for all registers.
+
+=item B<-gen-register-desc>
+
+Generate a register info description for each register.
+
+=item B<-gen-register-desc-header>
+
+Generate a register info description header for each register.
+
+=item B<-gen-instr-enums>
+
+Generate enumeration values for instructions.
+
+=item B<-gen-instr-desc>
+
+Generate instruction descriptions.
+
+=item B<-gen-asm-writer>
+
+Generate the assembly writer.
+
+=item B<-gen-dag-isel>
+
+Generate a DAG (Directed Acycle Graph) instruction selector.
+
+=item B<-gen-subtarget>
+
+Generate subtarget enumerations.
+
+=item B<-gen-intrinsic>
+
+Generate intrinsic information.
+
+=item B<-version>
+
+Show the version number of this program.
+
+=back
+
+=head1 EXIT STATUS
+
+If B<tblgen> succeeds, it will exit with 0.  Otherwise, if an error
+occurs, it will exit with a non-zero value.
+
+=head1 AUTHORS
+
+Maintained by The LLVM Team (L<http://llvm.org>).
+
+=cut

Added: www-releases/trunk/2.9/docs/CommandLine.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CommandLine.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CommandLine.html (added)
+++ www-releases/trunk/2.9/docs/CommandLine.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,1979 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>CommandLine 2.0 Library Manual</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">
+  CommandLine 2.0 Library Manual
+</div>
+
+<ol>
+  <li><a href="#introduction">Introduction</a></li>
+
+  <li><a href="#quickstart">Quick Start Guide</a>
+    <ol>
+      <li><a href="#bool">Boolean Arguments</a></li>
+      <li><a href="#alias">Argument Aliases</a></li>
+      <li><a href="#onealternative">Selecting an alternative from a
+                                    set of possibilities</a></li>
+      <li><a href="#namedalternatives">Named alternatives</a></li>
+      <li><a href="#list">Parsing a list of options</a></li>
+      <li><a href="#bits">Collecting options as a set of flags</a></li>
+      <li><a href="#description">Adding freeform text to help output</a></li>
+    </ol></li>
+
+  <li><a href="#referenceguide">Reference Guide</a>
+    <ol>
+      <li><a href="#positional">Positional Arguments</a>
+        <ul>
+        <li><a href="#--">Specifying positional options with hyphens</a></li>
+        <li><a href="#getPosition">Determining absolute position with
+          getPosition</a></li>
+        <li><a href="#cl::ConsumeAfter">The <tt>cl::ConsumeAfter</tt>
+             modifier</a></li>
+        </ul></li>
+
+      <li><a href="#storage">Internal vs External Storage</a></li>
+
+      <li><a href="#attributes">Option Attributes</a></li>
+
+      <li><a href="#modifiers">Option Modifiers</a>
+        <ul>
+        <li><a href="#hiding">Hiding an option from <tt>-help</tt>
+            output</a></li>
+        <li><a href="#numoccurrences">Controlling the number of occurrences
+                                     required and allowed</a></li>
+        <li><a href="#valrequired">Controlling whether or not a value must be
+                                   specified</a></li>
+        <li><a href="#formatting">Controlling other formatting options</a></li>
+        <li><a href="#misc">Miscellaneous option modifiers</a></li>
+        <li><a href="#response">Response files</a></li>
+        </ul></li>
+
+      <li><a href="#toplevel">Top-Level Classes and Functions</a>
+        <ul>
+        <li><a href="#cl::ParseCommandLineOptions">The
+            <tt>cl::ParseCommandLineOptions</tt> function</a></li>
+        <li><a href="#cl::ParseEnvironmentOptions">The
+            <tt>cl::ParseEnvironmentOptions</tt> function</a></li>
+        <li><a href="#cl::SetVersionPrinter">The <tt>cl::SetVersionPrinter</tt>
+          function</a></li>
+        <li><a href="#cl::opt">The <tt>cl::opt</tt> class</a></li>
+        <li><a href="#cl::list">The <tt>cl::list</tt> class</a></li>
+        <li><a href="#cl::bits">The <tt>cl::bits</tt> class</a></li>
+        <li><a href="#cl::alias">The <tt>cl::alias</tt> class</a></li>
+        <li><a href="#cl::extrahelp">The <tt>cl::extrahelp</tt> class</a></li>
+        </ul></li>
+
+      <li><a href="#builtinparsers">Builtin parsers</a>
+        <ul>
+        <li><a href="#genericparser">The Generic <tt>parser<t></tt>
+            parser</a></li>
+        <li><a href="#boolparser">The <tt>parser<bool></tt>
+            specialization</a></li>
+        <li><a href="#boolOrDefaultparser">The <tt>parser<boolOrDefault></tt>
+            specialization</a></li>
+        <li><a href="#stringparser">The <tt>parser<string></tt>
+            specialization</a></li>
+        <li><a href="#intparser">The <tt>parser<int></tt>
+            specialization</a></li>
+        <li><a href="#doubleparser">The <tt>parser<double></tt> and
+            <tt>parser<float></tt> specializations</a></li>
+        </ul></li>
+    </ol></li>
+  <li><a href="#extensionguide">Extension Guide</a>
+    <ol>
+      <li><a href="#customparser">Writing a custom parser</a></li>
+      <li><a href="#explotingexternal">Exploiting external storage</a></li>
+      <li><a href="#dynamicopts">Dynamically adding command line
+          options</a></li>
+    </ol></li>
+</ol>
+
+<div class="doc_author">
+  <p>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a></p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="introduction">Introduction</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This document describes the CommandLine argument processing library.  It will
+show you how to use it, and what it can do.  The CommandLine library uses a
+declarative approach to specifying the command line options that your program
+takes.  By default, these options declarations implicitly hold the value parsed
+for the option declared (of course this <a href="#storage">can be
+changed</a>).</p>
+
+<p>Although there are a <b>lot</b> of command line argument parsing libraries
+out there in many different languages, none of them fit well with what I needed.
+By looking at the features and problems of other libraries, I designed the
+CommandLine library to have the following features:</p>
+
+<ol>
+<li>Speed: The CommandLine library is very quick and uses little resources.  The
+parsing time of the library is directly proportional to the number of arguments
+parsed, not the the number of options recognized.  Additionally, command line
+argument values are captured transparently into user defined global variables,
+which can be accessed like any other variable (and with the same
+performance).</li>
+
+<li>Type Safe: As a user of CommandLine, you don't have to worry about
+remembering the type of arguments that you want (is it an int?  a string? a
+bool? an enum?) and keep casting it around.  Not only does this help prevent
+error prone constructs, it also leads to dramatically cleaner source code.</li>
+
+<li>No subclasses required: To use CommandLine, you instantiate variables that
+correspond to the arguments that you would like to capture, you don't subclass a
+parser.  This means that you don't have to write <b>any</b> boilerplate
+code.</li>
+
+<li>Globally accessible: Libraries can specify command line arguments that are
+automatically enabled in any tool that links to the library.  This is possible
+because the application doesn't have to keep a list of arguments to pass to
+the parser.  This also makes supporting <a href="#dynamicopts">dynamically
+loaded options</a> trivial.</li>
+
+<li>Cleaner: CommandLine supports enum and other types directly, meaning that
+there is less error and more security built into the library.  You don't have to
+worry about whether your integral command line argument accidentally got
+assigned a value that is not valid for your enum type.</li>
+
+<li>Powerful: The CommandLine library supports many different types of
+arguments, from simple <a href="#boolparser">boolean flags</a> to <a
+href="#cl::opt">scalars arguments</a> (<a href="#stringparser">strings</a>, <a
+href="#intparser">integers</a>, <a href="#genericparser">enums</a>, <a
+href="#doubleparser">doubles</a>), to <a href="#cl::list">lists of
+arguments</a>.  This is possible because CommandLine is...</li>
+
+<li>Extensible: It is very simple to add a new argument type to CommandLine.
+Simply specify the parser that you want to use with the command line option when
+you declare it.  <a href="#customparser">Custom parsers</a> are no problem.</li>
+
+<li>Labor Saving: The CommandLine library cuts down on the amount of grunt work
+that you, the user, have to do.  For example, it automatically provides a
+<tt>-help</tt> option that shows the available command line options for your
+tool.  Additionally, it does most of the basic correctness checking for
+you.</li>
+
+<li>Capable: The CommandLine library can handle lots of different forms of
+options often found in real programs.  For example, <a
+href="#positional">positional</a> arguments, <tt>ls</tt> style <a
+href="#cl::Grouping">grouping</a> options (to allow processing '<tt>ls
+-lad</tt>' naturally), <tt>ld</tt> style <a href="#cl::Prefix">prefix</a>
+options (to parse '<tt>-lmalloc -L/usr/lib</tt>'), and <a
+href="#cl::ConsumeAfter">interpreter style options</a>.</li>
+
+</ol>
+
+<p>This document will hopefully let you jump in and start using CommandLine in
+your utility quickly and painlessly.  Additionally it should be a simple
+reference manual to figure out how stuff works.  If it is failing in some area
+(or you want an extension to the library), nag the author, <a
+href="mailto:sabre at nondot.org">Chris Lattner</a>.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="quickstart">Quick Start Guide</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This section of the manual runs through a simple CommandLine'ification of a
+basic compiler tool.  This is intended to show you how to jump into using the
+CommandLine library in your own program, and show you some of the cool things it
+can do.</p>
+
+<p>To start out, you need to include the CommandLine header file into your
+program:</p>
+
+<div class="doc_code"><pre>
+  #include "llvm/Support/CommandLine.h"
+</pre></div>
+
+<p>Additionally, you need to add this as the first line of your main
+program:</p>
+
+<div class="doc_code"><pre>
+int main(int argc, char **argv) {
+  <a href="#cl::ParseCommandLineOptions">cl::ParseCommandLineOptions</a>(argc, argv);
+  ...
+}
+</pre></div>
+
+<p>... which actually parses the arguments and fills in the variable
+declarations.</p>
+
+<p>Now that you are ready to support command line arguments, we need to tell the
+system which ones we want, and what type of arguments they are.  The CommandLine
+library uses a declarative syntax to model command line arguments with the
+global variable declarations that capture the parsed values.  This means that
+for every command line option that you would like to support, there should be a
+global variable declaration to capture the result.  For example, in a compiler,
+we would like to support the Unix-standard '<tt>-o <filename></tt>' option
+to specify where to put the output.  With the CommandLine library, this is
+represented like this:</p>
+
+<a name="value_desc_example"></a>
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> OutputFilename("<i>o</i>", <a href="#cl::desc">cl::desc</a>("<i>Specify output filename</i>"), <a href="#cl::value_desc">cl::value_desc</a>("<i>filename</i>"));
+</pre></div>
+
+<p>This declares a global variable "<tt>OutputFilename</tt>" that is used to
+capture the result of the "<tt>o</tt>" argument (first parameter).  We specify
+that this is a simple scalar option by using the "<tt><a
+href="#cl::opt">cl::opt</a></tt>" template (as opposed to the <a
+href="#list">"<tt>cl::list</tt> template</a>), and tell the CommandLine library
+that the data type that we are parsing is a string.</p>
+
+<p>The second and third parameters (which are optional) are used to specify what
+to output for the "<tt>-help</tt>" option.  In this case, we get a line that
+looks like this:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options]
+
+OPTIONS:
+  -help             - display available options (-help-hidden for more)
+  <b>-o <filename>     - Specify output filename</b>
+</pre></div>
+
+<p>Because we specified that the command line option should parse using the
+<tt>string</tt> data type, the variable declared is automatically usable as a
+real string in all contexts that a normal C++ string object may be used.  For
+example:</p>
+
+<div class="doc_code"><pre>
+  ...
+  std::ofstream Output(OutputFilename.c_str());
+  if (Output.good()) ...
+  ...
+</pre></div>
+
+<p>There are many different options that you can use to customize the command
+line option handling library, but the above example shows the general interface
+to these options.  The options can be specified in any order, and are specified
+with helper functions like <a href="#cl::desc"><tt>cl::desc(...)</tt></a>, so
+there are no positional dependencies to remember.  The available options are
+discussed in detail in the <a href="#referenceguide">Reference Guide</a>.</p>
+
+<p>Continuing the example, we would like to have our compiler take an input
+filename as well as an output filename, but we do not want the input filename to
+be specified with a hyphen (ie, not <tt>-filename.c</tt>).  To support this
+style of argument, the CommandLine library allows for <a
+href="#positional">positional</a> arguments to be specified for the program.
+These positional arguments are filled with command line parameters that are not
+in option form.  We use this feature like this:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> InputFilename(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<i><input file></i>"), <a href="#cl::init">cl::init</a>("<i>-</i>"));
+</pre></div>
+
+<p>This declaration indicates that the first positional argument should be
+treated as the input filename.  Here we use the <tt><a
+href="#cl::init">cl::init</a></tt> option to specify an initial value for the
+command line option, which is used if the option is not specified (if you do not
+specify a <tt><a href="#cl::init">cl::init</a></tt> modifier for an option, then
+the default constructor for the data type is used to initialize the value).
+Command line options default to being optional, so if we would like to require
+that the user always specify an input filename, we would add the <tt><a
+href="#cl::Required">cl::Required</a></tt> flag, and we could eliminate the
+<tt><a href="#cl::init">cl::init</a></tt> modifier, like this:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> InputFilename(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<i><input file></i>"), <b><a href="#cl::Required">cl::Required</a></b>);
+</pre></div>
+
+<p>Again, the CommandLine library does not require the options to be specified
+in any particular order, so the above declaration is equivalent to:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> InputFilename(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::Required">cl::Required</a>, <a href="#cl::desc">cl::desc</a>("<i><input file></i>"));
+</pre></div>
+
+<p>By simply adding the <tt><a href="#cl::Required">cl::Required</a></tt> flag,
+the CommandLine library will automatically issue an error if the argument is not
+specified, which shifts all of the command line option verification code out of
+your application into the library.  This is just one example of how using flags
+can alter the default behaviour of the library, on a per-option basis.  By
+adding one of the declarations above, the <tt>-help</tt> option synopsis is now
+extended to:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options] <b><input file></b>
+
+OPTIONS:
+  -help             - display available options (-help-hidden for more)
+  -o <filename>     - Specify output filename
+</pre></div>
+
+<p>... indicating that an input filename is expected.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="bool">Boolean Arguments</a>
+</div>
+
+<div class="doc_text">
+
+<p>In addition to input and output filenames, we would like the compiler example
+to support three boolean flags: "<tt>-f</tt>" to force writing binary output to
+a terminal, "<tt>--quiet</tt>" to enable quiet mode, and "<tt>-q</tt>" for
+backwards compatibility with some of our users.  We can support these by
+declaring options of boolean type like this:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><bool> Force ("<i>f</i>", <a href="#cl::desc">cl::desc</a>("<i>Enable binary output on terminals</i>"));
+<a href="#cl::opt">cl::opt</a><bool> Quiet ("<i>quiet</i>", <a href="#cl::desc">cl::desc</a>("<i>Don't print informational messages</i>"));
+<a href="#cl::opt">cl::opt</a><bool> Quiet2("<i>q</i>", <a href="#cl::desc">cl::desc</a>("<i>Don't print informational messages</i>"), <a href="#cl::Hidden">cl::Hidden</a>);
+</pre></div>
+
+<p>This does what you would expect: it declares three boolean variables
+("<tt>Force</tt>", "<tt>Quiet</tt>", and "<tt>Quiet2</tt>") to recognize these
+options.  Note that the "<tt>-q</tt>" option is specified with the "<a
+href="#cl::Hidden"><tt>cl::Hidden</tt></a>" flag.  This modifier prevents it
+from being shown by the standard "<tt>-help</tt>" output (note that it is still
+shown in the "<tt>-help-hidden</tt>" output).</p>
+
+<p>The CommandLine library uses a <a href="#builtinparsers">different parser</a>
+for different data types.  For example, in the string case, the argument passed
+to the option is copied literally into the content of the string variable... we
+obviously cannot do that in the boolean case, however, so we must use a smarter
+parser.  In the case of the boolean parser, it allows no options (in which case
+it assigns the value of true to the variable), or it allows the values
+"<tt>true</tt>" or "<tt>false</tt>" to be specified, allowing any of the
+following inputs:</p>
+
+<div class="doc_code"><pre>
+ compiler -f          # No value, 'Force' == true
+ compiler -f=true     # Value specified, 'Force' == true
+ compiler -f=TRUE     # Value specified, 'Force' == true
+ compiler -f=FALSE    # Value specified, 'Force' == false
+</pre></div>
+
+<p>... you get the idea.  The <a href="#boolparser">bool parser</a> just turns
+the string values into boolean values, and rejects things like '<tt>compiler
+-f=foo</tt>'.  Similarly, the <a href="#doubleparser">float</a>, <a
+href="#doubleparser">double</a>, and <a href="#intparser">int</a> parsers work
+like you would expect, using the '<tt>strtol</tt>' and '<tt>strtod</tt>' C
+library calls to parse the string value into the specified data type.</p>
+
+<p>With the declarations above, "<tt>compiler -help</tt>" emits this:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options] <input file>
+
+OPTIONS:
+  <b>-f     - Enable binary output on terminals</b>
+  -o     - Override output filename
+  <b>-quiet - Don't print informational messages</b>
+  -help  - display available options (-help-hidden for more)
+</pre></div>
+
+<p>and "<tt>compiler -help-hidden</tt>" prints this:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options] <input file>
+
+OPTIONS:
+  -f     - Enable binary output on terminals
+  -o     - Override output filename
+  <b>-q     - Don't print informational messages</b>
+  -quiet - Don't print informational messages
+  -help  - display available options (-help-hidden for more)
+</pre></div>
+
+<p>This brief example has shown you how to use the '<tt><a
+href="#cl::opt">cl::opt</a></tt>' class to parse simple scalar command line
+arguments.  In addition to simple scalar arguments, the CommandLine library also
+provides primitives to support CommandLine option <a href="#alias">aliases</a>,
+and <a href="#list">lists</a> of options.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="alias">Argument Aliases</a>
+</div>
+
+<div class="doc_text">
+
+<p>So far, the example works well, except for the fact that we need to check the
+quiet condition like this now:</p>
+
+<div class="doc_code"><pre>
+...
+  if (!Quiet && !Quiet2) printInformationalMessage(...);
+...
+</pre></div>
+
+<p>... which is a real pain!  Instead of defining two values for the same
+condition, we can use the "<tt><a href="#cl::alias">cl::alias</a></tt>" class to make the "<tt>-q</tt>"
+option an <b>alias</b> for the "<tt>-quiet</tt>" option, instead of providing
+a value itself:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><bool> Force ("<i>f</i>", <a href="#cl::desc">cl::desc</a>("<i>Overwrite output files</i>"));
+<a href="#cl::opt">cl::opt</a><bool> Quiet ("<i>quiet</i>", <a href="#cl::desc">cl::desc</a>("<i>Don't print informational messages</i>"));
+<a href="#cl::alias">cl::alias</a>     QuietA("<i>q</i>", <a href="#cl::desc">cl::desc</a>("<i>Alias for -quiet</i>"), <a href="#cl::aliasopt">cl::aliasopt</a>(Quiet));
+</pre></div>
+
+<p>The third line (which is the only one we modified from above) defines a
+"<tt>-q</tt>" alias that updates the "<tt>Quiet</tt>" variable (as specified by
+the <tt><a href="#cl::aliasopt">cl::aliasopt</a></tt> modifier) whenever it is
+specified.  Because aliases do not hold state, the only thing the program has to
+query is the <tt>Quiet</tt> variable now.  Another nice feature of aliases is
+that they automatically hide themselves from the <tt>-help</tt> output
+(although, again, they are still visible in the <tt>-help-hidden
+output</tt>).</p>
+
+<p>Now the application code can simply use:</p>
+
+<div class="doc_code"><pre>
+...
+  if (!Quiet) printInformationalMessage(...);
+...
+</pre></div>
+
+<p>... which is much nicer!  The "<tt><a href="#cl::alias">cl::alias</a></tt>"
+can be used to specify an alternative name for any variable type, and has many
+uses.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="onealternative">Selecting an alternative from a set of
+  possibilities</a>
+</div>
+
+<div class="doc_text">
+
+<p>So far we have seen how the CommandLine library handles builtin types like
+<tt>std::string</tt>, <tt>bool</tt> and <tt>int</tt>, but how does it handle
+things it doesn't know about, like enums or '<tt>int*</tt>'s?</p>
+
+<p>The answer is that it uses a table-driven generic parser (unless you specify
+your own parser, as described in the <a href="#extensionguide">Extension
+Guide</a>).  This parser maps literal strings to whatever type is required, and
+requires you to tell it what this mapping should be.</p>
+
+<p>Let's say that we would like to add four optimization levels to our
+optimizer, using the standard flags "<tt>-g</tt>", "<tt>-O0</tt>",
+"<tt>-O1</tt>", and "<tt>-O2</tt>".  We could easily implement this with boolean
+options like above, but there are several problems with this strategy:</p>
+
+<ol>
+<li>A user could specify more than one of the options at a time, for example,
+"<tt>compiler -O3 -O2</tt>".  The CommandLine library would not be able to
+catch this erroneous input for us.</li>
+
+<li>We would have to test 4 different variables to see which ones are set.</li>
+
+<li>This doesn't map to the numeric levels that we want... so we cannot easily
+see if some level >= "<tt>-O1</tt>" is enabled.</li>
+
+</ol>
+
+<p>To cope with these problems, we can use an enum value, and have the
+CommandLine library fill it in with the appropriate level directly, which is
+used like this:</p>
+
+<div class="doc_code"><pre>
+enum OptLevel {
+  g, O1, O2, O3
+};
+
+<a href="#cl::opt">cl::opt</a><OptLevel> OptimizationLevel(<a href="#cl::desc">cl::desc</a>("<i>Choose optimization level:</i>"),
+  <a href="#cl::values">cl::values</a>(
+    clEnumVal(g , "<i>No optimizations, enable debugging</i>"),
+    clEnumVal(O1, "<i>Enable trivial optimizations</i>"),
+    clEnumVal(O2, "<i>Enable default optimizations</i>"),
+    clEnumVal(O3, "<i>Enable expensive optimizations</i>"),
+   clEnumValEnd));
+
+...
+  if (OptimizationLevel >= O2) doPartialRedundancyElimination(...);
+...
+</pre></div>
+
+<p>This declaration defines a variable "<tt>OptimizationLevel</tt>" of the
+"<tt>OptLevel</tt>" enum type.  This variable can be assigned any of the values
+that are listed in the declaration (Note that the declaration list must be
+terminated with the "<tt>clEnumValEnd</tt>" argument!).  The CommandLine
+library enforces
+that the user can only specify one of the options, and it ensure that only valid
+enum values can be specified.  The "<tt>clEnumVal</tt>" macros ensure that the
+command line arguments matched the enum values.  With this option added, our
+help output now is:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options] <input file>
+
+OPTIONS:
+  <b>Choose optimization level:
+    -g          - No optimizations, enable debugging
+    -O1         - Enable trivial optimizations
+    -O2         - Enable default optimizations
+    -O3         - Enable expensive optimizations</b>
+  -f            - Enable binary output on terminals
+  -help         - display available options (-help-hidden for more)
+  -o <filename> - Specify output filename
+  -quiet        - Don't print informational messages
+</pre></div>
+
+<p>In this case, it is sort of awkward that flag names correspond directly to
+enum names, because we probably don't want a enum definition named "<tt>g</tt>"
+in our program.  Because of this, we can alternatively write this example like
+this:</p>
+
+<div class="doc_code"><pre>
+enum OptLevel {
+  Debug, O1, O2, O3
+};
+
+<a href="#cl::opt">cl::opt</a><OptLevel> OptimizationLevel(<a href="#cl::desc">cl::desc</a>("<i>Choose optimization level:</i>"),
+  <a href="#cl::values">cl::values</a>(
+   clEnumValN(Debug, "g", "<i>No optimizations, enable debugging</i>"),
+    clEnumVal(O1        , "<i>Enable trivial optimizations</i>"),
+    clEnumVal(O2        , "<i>Enable default optimizations</i>"),
+    clEnumVal(O3        , "<i>Enable expensive optimizations</i>"),
+   clEnumValEnd));
+
+...
+  if (OptimizationLevel == Debug) outputDebugInfo(...);
+...
+</pre></div>
+
+<p>By using the "<tt>clEnumValN</tt>" macro instead of "<tt>clEnumVal</tt>", we
+can directly specify the name that the flag should get.  In general a direct
+mapping is nice, but sometimes you can't or don't want to preserve the mapping,
+which is when you would use it.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="namedalternatives">Named Alternatives</a>
+</div>
+
+<div class="doc_text">
+
+<p>Another useful argument form is a named alternative style.  We shall use this
+style in our compiler to specify different debug levels that can be used.
+Instead of each debug level being its own switch, we want to support the
+following options, of which only one can be specified at a time:
+"<tt>--debug-level=none</tt>", "<tt>--debug-level=quick</tt>",
+"<tt>--debug-level=detailed</tt>".  To do this, we use the exact same format as
+our optimization level flags, but we also specify an option name.  For this
+case, the code looks like this:</p>
+
+<div class="doc_code"><pre>
+enum DebugLev {
+  nodebuginfo, quick, detailed
+};
+
+// Enable Debug Options to be specified on the command line
+<a href="#cl::opt">cl::opt</a><DebugLev> DebugLevel("<i>debug_level</i>", <a href="#cl::desc">cl::desc</a>("<i>Set the debugging level:</i>"),
+  <a href="#cl::values">cl::values</a>(
+    clEnumValN(nodebuginfo, "none", "<i>disable debug information</i>"),
+     clEnumVal(quick,               "<i>enable quick debug information</i>"),
+     clEnumVal(detailed,            "<i>enable detailed debug information</i>"),
+    clEnumValEnd));
+</pre></div>
+
+<p>This definition defines an enumerated command line variable of type "<tt>enum
+DebugLev</tt>", which works exactly the same way as before.  The difference here
+is just the interface exposed to the user of your program and the help output by
+the "<tt>-help</tt>" option:</p>
+
+<div class="doc_code"><pre>
+USAGE: compiler [options] <input file>
+
+OPTIONS:
+  Choose optimization level:
+    -g          - No optimizations, enable debugging
+    -O1         - Enable trivial optimizations
+    -O2         - Enable default optimizations
+    -O3         - Enable expensive optimizations
+  <b>-debug_level  - Set the debugging level:
+    =none       - disable debug information
+    =quick      - enable quick debug information
+    =detailed   - enable detailed debug information</b>
+  -f            - Enable binary output on terminals
+  -help         - display available options (-help-hidden for more)
+  -o <filename> - Specify output filename
+  -quiet        - Don't print informational messages
+</pre></div>
+
+<p>Again, the only structural difference between the debug level declaration and
+the optimization level declaration is that the debug level declaration includes
+an option name (<tt>"debug_level"</tt>), which automatically changes how the
+library processes the argument.  The CommandLine library supports both forms so
+that you can choose the form most appropriate for your application.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="list">Parsing a list of options</a>
+</div>
+
+<div class="doc_text">
+
+<p>Now that we have the standard run-of-the-mill argument types out of the way,
+lets get a little wild and crazy.  Lets say that we want our optimizer to accept
+a <b>list</b> of optimizations to perform, allowing duplicates.  For example, we
+might want to run: "<tt>compiler -dce -constprop -inline -dce -strip</tt>".  In
+this case, the order of the arguments and the number of appearances is very
+important.  This is what the "<tt><a href="#cl::list">cl::list</a></tt>"
+template is for.  First, start by defining an enum of the optimizations that you
+would like to perform:</p>
+
+<div class="doc_code"><pre>
+enum Opts {
+  // 'inline' is a C++ keyword, so name it 'inlining'
+  dce, constprop, inlining, strip
+};
+</pre></div>
+
+<p>Then define your "<tt><a href="#cl::list">cl::list</a></tt>" variable:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::list">cl::list</a><Opts> OptimizationList(<a href="#cl::desc">cl::desc</a>("<i>Available Optimizations:</i>"),
+  <a href="#cl::values">cl::values</a>(
+    clEnumVal(dce               , "<i>Dead Code Elimination</i>"),
+    clEnumVal(constprop         , "<i>Constant Propagation</i>"),
+   clEnumValN(inlining, "<i>inline</i>", "<i>Procedure Integration</i>"),
+    clEnumVal(strip             , "<i>Strip Symbols</i>"),
+  clEnumValEnd));
+</pre></div>
+
+<p>This defines a variable that is conceptually of the type
+"<tt>std::vector<enum Opts></tt>".  Thus, you can access it with standard
+vector methods:</p>
+
+<div class="doc_code"><pre>
+  for (unsigned i = 0; i != OptimizationList.size(); ++i)
+    switch (OptimizationList[i])
+       ...
+</pre></div>
+
+<p>... to iterate through the list of options specified.</p>
+
+<p>Note that the "<tt><a href="#cl::list">cl::list</a></tt>" template is
+completely general and may be used with any data types or other arguments that
+you can use with the "<tt><a href="#cl::opt">cl::opt</a></tt>" template.  One
+especially useful way to use a list is to capture all of the positional
+arguments together if there may be more than one specified.  In the case of a
+linker, for example, the linker takes several '<tt>.o</tt>' files, and needs to
+capture them into a list.  This is naturally specified as:</p>
+
+<div class="doc_code"><pre>
+...
+<a href="#cl::list">cl::list</a><std::string> InputFilenames(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<Input files>"), <a href="#cl::OneOrMore">cl::OneOrMore</a>);
+...
+</pre></div>
+
+<p>This variable works just like a "<tt>vector<string></tt>" object.  As
+such, accessing the list is simple, just like above.  In this example, we used
+the <tt><a href="#cl::OneOrMore">cl::OneOrMore</a></tt> modifier to inform the
+CommandLine library that it is an error if the user does not specify any
+<tt>.o</tt> files on our command line.  Again, this just reduces the amount of
+checking we have to do.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="bits">Collecting options as a set of flags</a>
+</div>
+
+<div class="doc_text">
+
+<p>Instead of collecting sets of options in a list, it is also possible to
+gather information for enum values in a <b>bit vector</b>.  The representation used by
+the <a href="#bits"><tt>cl::bits</tt></a> class is an <tt>unsigned</tt>
+integer.  An enum value is represented by a 0/1 in the enum's ordinal value bit
+position. 1 indicating that the enum was specified, 0 otherwise.  As each
+specified value is parsed, the resulting enum's bit is set in the option's bit
+vector:</p>
+
+<div class="doc_code"><pre>
+  <i>bits</i> |= 1 << (unsigned)<i>enum</i>;
+</pre></div>
+
+<p>Options that are specified multiple times are redundant.  Any instances after
+the first are discarded.</p>
+
+<p>Reworking the above list example, we could replace <a href="#list">
+<tt>cl::list</tt></a> with <a href="#bits"><tt>cl::bits</tt></a>:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::bits">cl::bits</a><Opts> OptimizationBits(<a href="#cl::desc">cl::desc</a>("<i>Available Optimizations:</i>"),
+  <a href="#cl::values">cl::values</a>(
+    clEnumVal(dce               , "<i>Dead Code Elimination</i>"),
+    clEnumVal(constprop         , "<i>Constant Propagation</i>"),
+   clEnumValN(inlining, "<i>inline</i>", "<i>Procedure Integration</i>"),
+    clEnumVal(strip             , "<i>Strip Symbols</i>"),
+  clEnumValEnd));
+</pre></div>
+
+<p>To test to see if <tt>constprop</tt> was specified, we can use the
+<tt>cl:bits::isSet</tt> function:</p>
+
+<div class="doc_code"><pre>
+  if (OptimizationBits.isSet(constprop)) {
+    ...
+  }
+</pre></div>
+
+<p>It's also possible to get the raw bit vector using the
+<tt>cl::bits::getBits</tt> function:</p>
+
+<div class="doc_code"><pre>
+  unsigned bits = OptimizationBits.getBits();
+</pre></div>
+
+<p>Finally, if external storage is used, then the location specified must be of
+<b>type</b> <tt>unsigned</tt>. In all other ways a <a
+href="#bits"><tt>cl::bits</tt></a> option is equivalent to a <a
+href="#list"> <tt>cl::list</tt></a> option.</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="description">Adding freeform text to help output</a>
+</div>
+
+<div class="doc_text">
+
+<p>As our program grows and becomes more mature, we may decide to put summary
+information about what it does into the help output.  The help output is styled
+to look similar to a Unix <tt>man</tt> page, providing concise information about
+a program.  Unix <tt>man</tt> pages, however often have a description about what
+the program does.  To add this to your CommandLine program, simply pass a third
+argument to the <a
+href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>
+call in main.  This additional argument is then printed as the overview
+information for your program, allowing you to include any additional information
+that you want.  For example:</p>
+
+<div class="doc_code"><pre>
+int main(int argc, char **argv) {
+  <a href="#cl::ParseCommandLineOptions">cl::ParseCommandLineOptions</a>(argc, argv, " CommandLine compiler example\n\n"
+                              "  This program blah blah blah...\n");
+  ...
+}
+</pre></div>
+
+<p>would yield the help output:</p>
+
+<div class="doc_code"><pre>
+<b>OVERVIEW: CommandLine compiler example
+
+  This program blah blah blah...</b>
+
+USAGE: compiler [options] <input file>
+
+OPTIONS:
+  ...
+  -help             - display available options (-help-hidden for more)
+  -o <filename>     - Specify output filename
+</pre></div>
+
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="referenceguide">Reference Guide</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Now that you know the basics of how to use the CommandLine library, this
+section will give you the detailed information you need to tune how command line
+options work, as well as information on more "advanced" command line option
+processing capabilities.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="positional">Positional Arguments</a>
+</div>
+
+<div class="doc_text">
+
+<p>Positional arguments are those arguments that are not named, and are not
+specified with a hyphen.  Positional arguments should be used when an option is
+specified by its position alone.  For example, the standard Unix <tt>grep</tt>
+tool takes a regular expression argument, and an optional filename to search
+through (which defaults to standard input if a filename is not specified).
+Using the CommandLine library, this would be specified as:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> Regex   (<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<i><regular expression></i>"), <a href="#cl::Required">cl::Required</a>);
+<a href="#cl::opt">cl::opt</a><string> Filename(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<i><input file></i>"), <a href="#cl::init">cl::init</a>("<i>-</i>"));
+</pre></div>
+
+<p>Given these two option declarations, the <tt>-help</tt> output for our grep
+replacement would look like this:</p>
+
+<div class="doc_code"><pre>
+USAGE: spiffygrep [options] <b><regular expression> <input file></b>
+
+OPTIONS:
+  -help - display available options (-help-hidden for more)
+</pre></div>
+
+<p>... and the resultant program could be used just like the standard
+<tt>grep</tt> tool.</p>
+
+<p>Positional arguments are sorted by their order of construction.  This means
+that command line options will be ordered according to how they are listed in a
+.cpp file, but will not have an ordering defined if the positional arguments
+are defined in multiple .cpp files.  The fix for this problem is simply to
+define all of your positional arguments in one .cpp file.</p>
+
+</div>
+
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="--">Specifying positional options with hyphens</a>
+</div>
+
+<div class="doc_text">
+
+<p>Sometimes you may want to specify a value to your positional argument that
+starts with a hyphen (for example, searching for '<tt>-foo</tt>' in a file).  At
+first, you will have trouble doing this, because it will try to find an argument
+named '<tt>-foo</tt>', and will fail (and single quotes will not save you).
+Note that the system <tt>grep</tt> has the same problem:</p>
+
+<div class="doc_code"><pre>
+  $ spiffygrep '-foo' test.txt
+  Unknown command line argument '-foo'.  Try: spiffygrep -help'
+
+  $ grep '-foo' test.txt
+  grep: illegal option -- f
+  grep: illegal option -- o
+  grep: illegal option -- o
+  Usage: grep -hblcnsviw pattern file . . .
+</pre></div>
+
+<p>The solution for this problem is the same for both your tool and the system
+version: use the '<tt>--</tt>' marker.  When the user specifies '<tt>--</tt>' on
+the command line, it is telling the program that all options after the
+'<tt>--</tt>' should be treated as positional arguments, not options.  Thus, we
+can use it like this:</p>
+
+<div class="doc_code"><pre>
+  $ spiffygrep -- -foo test.txt
+    ...output...
+</pre></div>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="getPosition">Determining absolute position with getPosition()</a>
+</div>
+<div class="doc_text">
+  <p>Sometimes an option can affect or modify the meaning of another option. For
+  example, consider <tt>gcc</tt>'s <tt>-x LANG</tt> option. This tells
+  <tt>gcc</tt> to ignore the suffix of subsequent positional arguments and force
+  the file to be interpreted as if it contained source code in language
+  <tt>LANG</tt>. In order to handle this properly, you need to know the
+  absolute position of each argument, especially those in lists, so their
+  interaction(s) can be applied correctly. This is also useful for options like
+  <tt>-llibname</tt> which is actually a positional argument that starts with
+  a dash.</p>
+  <p>So, generally, the problem is that you have two <tt>cl::list</tt> variables
+  that interact in some way. To ensure the correct interaction, you can use the
+  <tt>cl::list::getPosition(optnum)</tt> method. This method returns the
+  absolute position (as found on the command line) of the <tt>optnum</tt>
+  item in the <tt>cl::list</tt>.</p>
+  <p>The idiom for usage is like this:</p>
+
+  <div class="doc_code"><pre>
+  static cl::list<std::string> Files(cl::Positional, cl::OneOrMore);
+  static cl::list<std::string> Libraries("l", cl::ZeroOrMore);
+
+  int main(int argc, char**argv) {
+    // ...
+    std::vector<std::string>::iterator fileIt = Files.begin();
+    std::vector<std::string>::iterator libIt  = Libraries.begin();
+    unsigned libPos = 0, filePos = 0;
+    while ( 1 ) {
+      if ( libIt != Libraries.end() )
+        libPos = Libraries.getPosition( libIt - Libraries.begin() );
+      else
+        libPos = 0;
+      if ( fileIt != Files.end() )
+        filePos = Files.getPosition( fileIt - Files.begin() );
+      else
+        filePos = 0;
+
+      if ( filePos != 0 && (libPos == 0 || filePos < libPos) ) {
+        // Source File Is next
+        ++fileIt;
+      }
+      else if ( libPos != 0 && (filePos == 0 || libPos < filePos) ) {
+        // Library is next
+        ++libIt;
+      }
+      else
+        break; // we're done with the list
+    }
+  }</pre></div>
+
+  <p>Note that, for compatibility reasons, the <tt>cl::opt</tt> also supports an
+  <tt>unsigned getPosition()</tt> option that will provide the absolute position
+  of that option. You can apply the same approach as above with a
+  <tt>cl::opt</tt> and a <tt>cl::list</tt> option as you can with two lists.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::ConsumeAfter">The <tt>cl::ConsumeAfter</tt> modifier</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::ConsumeAfter</tt> <a href="#formatting">formatting option</a> is
+used to construct programs that use "interpreter style" option processing.  With
+this style of option processing, all arguments specified after the last
+positional argument are treated as special interpreter arguments that are not
+interpreted by the command line argument.</p>
+
+<p>As a concrete example, lets say we are developing a replacement for the
+standard Unix Bourne shell (<tt>/bin/sh</tt>).  To run <tt>/bin/sh</tt>, first
+you specify options to the shell itself (like <tt>-x</tt> which turns on trace
+output), then you specify the name of the script to run, then you specify
+arguments to the script.  These arguments to the script are parsed by the Bourne
+shell command line option processor, but are not interpreted as options to the
+shell itself.  Using the CommandLine library, we would specify this as:</p>
+
+<div class="doc_code"><pre>
+<a href="#cl::opt">cl::opt</a><string> Script(<a href="#cl::Positional">cl::Positional</a>, <a href="#cl::desc">cl::desc</a>("<i><input script></i>"), <a href="#cl::init">cl::init</a>("-"));
+<a href="#cl::list">cl::list</a><string>  Argv(<a href="#cl::ConsumeAfter">cl::ConsumeAfter</a>, <a href="#cl::desc">cl::desc</a>("<i><program arguments>...</i>"));
+<a href="#cl::opt">cl::opt</a><bool>    Trace("<i>x</i>", <a href="#cl::desc">cl::desc</a>("<i>Enable trace output</i>"));
+</pre></div>
+
+<p>which automatically provides the help output:</p>
+
+<div class="doc_code"><pre>
+USAGE: spiffysh [options] <b><input script> <program arguments>...</b>
+
+OPTIONS:
+  -help - display available options (-help-hidden for more)
+  <b>-x    - Enable trace output</b>
+</pre></div>
+
+<p>At runtime, if we run our new shell replacement as `<tt>spiffysh -x test.sh
+-a -x -y bar</tt>', the <tt>Trace</tt> variable will be set to true, the
+<tt>Script</tt> variable will be set to "<tt>test.sh</tt>", and the
+<tt>Argv</tt> list will contain <tt>["-a", "-x", "-y", "bar"]</tt>, because they
+were specified after the last positional argument (which is the script
+name).</p>
+
+<p>There are several limitations to when <tt>cl::ConsumeAfter</tt> options can
+be specified.  For example, only one <tt>cl::ConsumeAfter</tt> can be specified
+per program, there must be at least one <a href="#positional">positional
+argument</a> specified, there must not be any <a href="#cl::list">cl::list</a>
+positional arguments, and the <tt>cl::ConsumeAfter</tt> option should be a <a
+href="#cl::list">cl::list</a> option.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="storage">Internal vs External Storage</a>
+</div>
+
+<div class="doc_text">
+
+<p>By default, all command line options automatically hold the value that they
+parse from the command line.  This is very convenient in the common case,
+especially when combined with the ability to define command line options in the
+files that use them.  This is called the internal storage model.</p>
+
+<p>Sometimes, however, it is nice to separate the command line option processing
+code from the storage of the value parsed.  For example, lets say that we have a
+'<tt>-debug</tt>' option that we would like to use to enable debug information
+across the entire body of our program.  In this case, the boolean value
+controlling the debug code should be globally accessible (in a header file, for
+example) yet the command line option processing code should not be exposed to
+all of these clients (requiring lots of .cpp files to #include
+<tt>CommandLine.h</tt>).</p>
+
+<p>To do this, set up your .h file with your option, like this for example:</p>
+
+<div class="doc_code">
+<pre>
+<i>// DebugFlag.h - Get access to the '-debug' command line option
+//
+
+// DebugFlag - This boolean is set to true if the '-debug' command line option
+// is specified.  This should probably not be referenced directly, instead, use
+// the DEBUG macro below.
+//</i>
+extern bool DebugFlag;
+
+<i>// DEBUG macro - This macro should be used by code to emit debug information.
+// In the '-debug' option is specified on the command line, and if this is a
+// debug build, then the code specified as the option to the macro will be
+// executed.  Otherwise it will not be.</i>
+<span class="doc_hilite">#ifdef NDEBUG
+#define DEBUG(X)
+#else
+#define DEBUG(X)</span> do { if (DebugFlag) { X; } } while (0)
+<span class="doc_hilite">#endif</span>
+</pre>
+</div>
+
+<p>This allows clients to blissfully use the <tt>DEBUG()</tt> macro, or the
+<tt>DebugFlag</tt> explicitly if they want to.  Now we just need to be able to
+set the <tt>DebugFlag</tt> boolean when the option is set.  To do this, we pass
+an additional argument to our command line argument processor, and we specify
+where to fill in with the <a href="#cl::location">cl::location</a>
+attribute:</p>
+
+<div class="doc_code">
+<pre>
+bool DebugFlag;                  <i>// the actual value</i>
+static <a href="#cl::opt">cl::opt</a><bool, true>       <i>// The parser</i>
+Debug("<i>debug</i>", <a href="#cl::desc">cl::desc</a>("<i>Enable debug output</i>"), <a href="#cl::Hidden">cl::Hidden</a>, <a href="#cl::location">cl::location</a>(DebugFlag));
+</pre>
+</div>
+
+<p>In the above example, we specify "<tt>true</tt>" as the second argument to
+the <tt><a href="#cl::opt">cl::opt</a></tt> template, indicating that the
+template should not maintain a copy of the value itself.  In addition to this,
+we specify the <tt><a href="#cl::location">cl::location</a></tt> attribute, so
+that <tt>DebugFlag</tt> is automatically set.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="attributes">Option Attributes</a>
+</div>
+
+<div class="doc_text">
+
+<p>This section describes the basic attributes that you can specify on
+options.</p>
+
+<ul>
+
+<li>The option name attribute (which is required for all options, except <a
+href="#positional">positional options</a>) specifies what the option name is.
+This option is specified in simple double quotes:
+
+<pre>
+<a href="#cl::opt">cl::opt</a><<b>bool</b>> Quiet("<i>quiet</i>");
+</pre>
+
+</li>
+
+<li><a name="cl::desc">The <b><tt>cl::desc</tt></b></a> attribute specifies a
+description for the option to be shown in the <tt>-help</tt> output for the
+program.</li>
+
+<li><a name="cl::value_desc">The <b><tt>cl::value_desc</tt></b></a> attribute
+specifies a string that can be used to fine tune the <tt>-help</tt> output for
+a command line option.  Look <a href="#value_desc_example">here</a> for an
+example.</li>
+
+<li><a name="cl::init">The <b><tt>cl::init</tt></b></a> attribute specifies an
+initial value for a <a href="#cl::opt">scalar</a> option.  If this attribute is
+not specified then the command line option value defaults to the value created
+by the default constructor for the type. <b>Warning</b>: If you specify both
+<b><tt>cl::init</tt></b> and <b><tt>cl::location</tt></b> for an option,
+you must specify <b><tt>cl::location</tt></b> first, so that when the
+command-line parser sees <b><tt>cl::init</tt></b>, it knows where to put the
+initial value. (You will get an error at runtime if you don't put them in
+the right order.)</li>
+
+<li><a name="cl::location">The <b><tt>cl::location</tt></b></a> attribute where
+to store the value for a parsed command line option if using external storage.
+See the section on <a href="#storage">Internal vs External Storage</a> for more
+information.</li>
+
+<li><a name="cl::aliasopt">The <b><tt>cl::aliasopt</tt></b></a> attribute
+specifies which option a <tt><a href="#cl::alias">cl::alias</a></tt> option is
+an alias for.</li>
+
+<li><a name="cl::values">The <b><tt>cl::values</tt></b></a> attribute specifies
+the string-to-value mapping to be used by the generic parser.  It takes a
+<b>clEnumValEnd terminated</b> list of (option, value, description) triplets
+that
+specify the option name, the value mapped to, and the description shown in the
+<tt>-help</tt> for the tool.  Because the generic parser is used most
+frequently with enum values, two macros are often useful:
+
+<ol>
+
+<li><a name="clEnumVal">The <b><tt>clEnumVal</tt></b></a> macro is used as a
+nice simple way to specify a triplet for an enum.  This macro automatically
+makes the option name be the same as the enum name.  The first option to the
+macro is the enum, the second is the description for the command line
+option.</li>
+
+<li><a name="clEnumValN">The <b><tt>clEnumValN</tt></b></a> macro is used to
+specify macro options where the option name doesn't equal the enum name.  For
+this macro, the first argument is the enum value, the second is the flag name,
+and the second is the description.</li>
+
+</ol>
+
+You will get a compile time error if you try to use cl::values with a parser
+that does not support it.</li>
+
+<li><a name="cl::multi_val">The <b><tt>cl::multi_val</tt></b></a>
+attribute specifies that this option takes has multiple values
+(example: <tt>-sectalign segname sectname sectvalue</tt>). This
+attribute takes one unsigned argument - the number of values for the
+option. This attribute is valid only on <tt>cl::list</tt> options (and
+will fail with compile error if you try to use it with other option
+types). It is allowed to use all of the usual modifiers on
+multi-valued options (besides <tt>cl::ValueDisallowed</tt>,
+obviously).</li>
+
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="modifiers">Option Modifiers</a>
+</div>
+
+<div class="doc_text">
+
+<p>Option modifiers are the flags and expressions that you pass into the
+constructors for <tt><a href="#cl::opt">cl::opt</a></tt> and <tt><a
+href="#cl::list">cl::list</a></tt>.  These modifiers give you the ability to
+tweak how options are parsed and how <tt>-help</tt> output is generated to fit
+your application well.</p>
+
+<p>These options fall into five main categories:</p>
+
+<ol>
+<li><a href="#hiding">Hiding an option from <tt>-help</tt> output</a></li>
+<li><a href="#numoccurrences">Controlling the number of occurrences
+                             required and allowed</a></li>
+<li><a href="#valrequired">Controlling whether or not a value must be
+                           specified</a></li>
+<li><a href="#formatting">Controlling other formatting options</a></li>
+<li><a href="#misc">Miscellaneous option modifiers</a></li>
+</ol>
+
+<p>It is not possible to specify two options from the same category (you'll get
+a runtime error) to a single option, except for options in the miscellaneous
+category.  The CommandLine library specifies defaults for all of these settings
+that are the most useful in practice and the most common, which mean that you
+usually shouldn't have to worry about these.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="hiding">Hiding an option from <tt>-help</tt> output</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::NotHidden</tt>, <tt>cl::Hidden</tt>, and
+<tt>cl::ReallyHidden</tt> modifiers are used to control whether or not an option
+appears in the <tt>-help</tt> and <tt>-help-hidden</tt> output for the
+compiled program:</p>
+
+<ul>
+
+<li><a name="cl::NotHidden">The <b><tt>cl::NotHidden</tt></b></a> modifier
+(which is the default for <tt><a href="#cl::opt">cl::opt</a></tt> and <tt><a
+href="#cl::list">cl::list</a></tt> options) indicates the option is to appear
+in both help listings.</li>
+
+<li><a name="cl::Hidden">The <b><tt>cl::Hidden</tt></b></a> modifier (which is the
+default for <tt><a href="#cl::alias">cl::alias</a></tt> options) indicates that
+the option should not appear in the <tt>-help</tt> output, but should appear in
+the <tt>-help-hidden</tt> output.</li>
+
+<li><a name="cl::ReallyHidden">The <b><tt>cl::ReallyHidden</tt></b></a> modifier
+indicates that the option should not appear in any help output.</li>
+
+</ul>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="numoccurrences">Controlling the number of occurrences required and
+  allowed</a>
+</div>
+
+<div class="doc_text">
+
+<p>This group of options is used to control how many time an option is allowed
+(or required) to be specified on the command line of your program.  Specifying a
+value for this setting allows the CommandLine library to do error checking for
+you.</p>
+
+<p>The allowed values for this option group are:</p>
+
+<ul>
+
+<li><a name="cl::Optional">The <b><tt>cl::Optional</tt></b></a> modifier (which
+is the default for the <tt><a href="#cl::opt">cl::opt</a></tt> and <tt><a
+href="#cl::alias">cl::alias</a></tt> classes) indicates that your program will
+allow either zero or one occurrence of the option to be specified.</li>
+
+<li><a name="cl::ZeroOrMore">The <b><tt>cl::ZeroOrMore</tt></b></a> modifier
+(which is the default for the <tt><a href="#cl::list">cl::list</a></tt> class)
+indicates that your program will allow the option to be specified zero or more
+times.</li>
+
+<li><a name="cl::Required">The <b><tt>cl::Required</tt></b></a> modifier
+indicates that the specified option must be specified exactly one time.</li>
+
+<li><a name="cl::OneOrMore">The <b><tt>cl::OneOrMore</tt></b></a> modifier
+indicates that the option must be specified at least one time.</li>
+
+<li>The <b><tt>cl::ConsumeAfter</tt></b> modifier is described in the <a
+href="#positional">Positional arguments section</a>.</li>
+
+</ul>
+
+<p>If an option is not specified, then the value of the option is equal to the
+value specified by the <tt><a href="#cl::init">cl::init</a></tt> attribute.  If
+the <tt><a href="#cl::init">cl::init</a></tt> attribute is not specified, the
+option value is initialized with the default constructor for the data type.</p>
+
+<p>If an option is specified multiple times for an option of the <tt><a
+href="#cl::opt">cl::opt</a></tt> class, only the last value will be
+retained.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="valrequired">Controlling whether or not a value must be specified</a>
+</div>
+
+<div class="doc_text">
+
+<p>This group of options is used to control whether or not the option allows a
+value to be present.  In the case of the CommandLine library, a value is either
+specified with an equal sign (e.g. '<tt>-index-depth=17</tt>') or as a trailing
+string (e.g. '<tt>-o a.out</tt>').</p>
+
+<p>The allowed values for this option group are:</p>
+
+<ul>
+
+<li><a name="cl::ValueOptional">The <b><tt>cl::ValueOptional</tt></b></a> modifier
+(which is the default for <tt>bool</tt> typed options) specifies that it is
+acceptable to have a value, or not.  A boolean argument can be enabled just by
+appearing on the command line, or it can have an explicit '<tt>-foo=true</tt>'.
+If an option is specified with this mode, it is illegal for the value to be
+provided without the equal sign.  Therefore '<tt>-foo true</tt>' is illegal.  To
+get this behavior, you must use the <a
+href="#cl::ValueRequired">cl::ValueRequired</a> modifier.</li>
+
+<li><a name="cl::ValueRequired">The <b><tt>cl::ValueRequired</tt></b></a> modifier
+(which is the default for all other types except for <a
+href="#onealternative">unnamed alternatives using the generic parser</a>)
+specifies that a value must be provided.  This mode informs the command line
+library that if an option is not provides with an equal sign, that the next
+argument provided must be the value.  This allows things like '<tt>-o
+a.out</tt>' to work.</li>
+
+<li><a name="cl::ValueDisallowed">The <b><tt>cl::ValueDisallowed</tt></b></a>
+modifier (which is the default for <a href="#onealternative">unnamed
+alternatives using the generic parser</a>) indicates that it is a runtime error
+for the user to specify a value.  This can be provided to disallow users from
+providing options to boolean options (like '<tt>-foo=true</tt>').</li>
+
+</ul>
+
+<p>In general, the default values for this option group work just like you would
+want them to.  As mentioned above, you can specify the <a
+href="#cl::ValueDisallowed">cl::ValueDisallowed</a> modifier to a boolean
+argument to restrict your command line parser.  These options are mostly useful
+when <a href="#extensionguide">extending the library</a>.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="formatting">Controlling other formatting options</a>
+</div>
+
+<div class="doc_text">
+
+<p>The formatting option group is used to specify that the command line option
+has special abilities and is otherwise different from other command line
+arguments.  As usual, you can only specify one of these arguments at most.</p>
+
+<ul>
+
+<li><a name="cl::NormalFormatting">The <b><tt>cl::NormalFormatting</tt></b></a>
+modifier (which is the default all options) specifies that this option is
+"normal".</li>
+
+<li><a name="cl::Positional">The <b><tt>cl::Positional</tt></b></a> modifier
+specifies that this is a positional argument that does not have a command line
+option associated with it.  See the <a href="#positional">Positional
+Arguments</a> section for more information.</li>
+
+<li>The <b><a href="#cl::ConsumeAfter"><tt>cl::ConsumeAfter</tt></a></b> modifier
+specifies that this option is used to capture "interpreter style" arguments.  See <a href="#cl::ConsumeAfter">this section for more information</a>.</li>
+
+<li><a name="cl::Prefix">The <b><tt>cl::Prefix</tt></b></a> modifier specifies
+that this option prefixes its value.  With 'Prefix' options, the equal sign does
+not separate the value from the option name specified. Instead, the value is
+everything after the prefix, including any equal sign if present. This is useful
+for processing odd arguments like <tt>-lmalloc</tt> and <tt>-L/usr/lib</tt> in a
+linker tool or <tt>-DNAME=value</tt> in a compiler tool.   Here, the
+'<tt>l</tt>', '<tt>D</tt>' and '<tt>L</tt>' options are normal string (or list)
+options, that have the <b><tt><a href="#cl::Prefix">cl::Prefix</a></tt></b>
+modifier added to allow the CommandLine library to recognize them.  Note that
+<b><tt><a href="#cl::Prefix">cl::Prefix</a></tt></b> options must not have the
+<b><tt><a href="#cl::ValueDisallowed">cl::ValueDisallowed</a></tt></b> modifier
+specified.</li>
+
+<li><a name="cl::Grouping">The <b><tt>cl::Grouping</tt></b></a> modifier is used
+to implement Unix-style tools (like <tt>ls</tt>) that have lots of single letter
+arguments, but only require a single dash.  For example, the '<tt>ls -labF</tt>'
+command actually enables four different options, all of which are single
+letters.  Note that <b><tt><a href="#cl::Grouping">cl::Grouping</a></tt></b>
+options cannot have values.</li>
+
+</ul>
+
+<p>The CommandLine library does not restrict how you use the <b><tt><a
+href="#cl::Prefix">cl::Prefix</a></tt></b> or <b><tt><a
+href="#cl::Grouping">cl::Grouping</a></tt></b> modifiers, but it is possible to
+specify ambiguous argument settings.  Thus, it is possible to have multiple
+letter options that are prefix or grouping options, and they will still work as
+designed.</p>
+
+<p>To do this, the CommandLine library uses a greedy algorithm to parse the
+input option into (potentially multiple) prefix and grouping options.  The
+strategy basically looks like this:</p>
+
+<div class="doc_code"><tt>parse(string OrigInput) {</tt>
+
+<ol>
+<li><tt>string input = OrigInput;</tt>
+<li><tt>if (isOption(input)) return getOption(input).parse();</tt>    <i>// Normal option</i>
+<li><tt>while (!isOption(input) && !input.empty()) input.pop_back();</tt>    <i>// Remove the last letter</i>
+<li><tt>if (input.empty()) return error();</tt>    <i>// No matching option</i>
+<li><tt>if (getOption(input).isPrefix())<br>
+  return getOption(input).parse(input);</tt>
+<li><tt>while (!input.empty()) {    <i>// Must be grouping options</i><br>
+  getOption(input).parse();<br>
+  OrigInput.erase(OrigInput.begin(), OrigInput.begin()+input.length());<br>
+  input = OrigInput;<br>
+  while (!isOption(input) && !input.empty()) input.pop_back();<br>
+}</tt>
+<li><tt>if (!OrigInput.empty()) error();</tt></li>
+</ol>
+
+<p><tt>}</tt></p>
+</div>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="misc">Miscellaneous option modifiers</a>
+</div>
+
+<div class="doc_text">
+
+<p>The miscellaneous option modifiers are the only flags where you can specify
+more than one flag from the set: they are not mutually exclusive.  These flags
+specify boolean properties that modify the option.</p>
+
+<ul>
+
+<li><a name="cl::CommaSeparated">The <b><tt>cl::CommaSeparated</tt></b></a> modifier
+indicates that any commas specified for an option's value should be used to
+split the value up into multiple values for the option.  For example, these two
+options are equivalent when <tt>cl::CommaSeparated</tt> is specified:
+"<tt>-foo=a -foo=b -foo=c</tt>" and "<tt>-foo=a,b,c</tt>".  This option only
+makes sense to be used in a case where the option is allowed to accept one or
+more values (i.e. it is a <a href="#cl::list">cl::list</a> option).</li>
+
+<li><a name="cl::PositionalEatsArgs">The
+<b><tt>cl::PositionalEatsArgs</tt></b></a> modifier (which only applies to
+positional arguments, and only makes sense for lists) indicates that positional
+argument should consume any strings after it (including strings that start with
+a "-") up until another recognized positional argument.  For example, if you
+have two "eating" positional arguments, "<tt>pos1</tt>" and "<tt>pos2</tt>", the
+string "<tt>-pos1 -foo -bar baz -pos2 -bork</tt>" would cause the "<tt>-foo -bar
+-baz</tt>" strings to be applied to the "<tt>-pos1</tt>" option and the
+"<tt>-bork</tt>" string to be applied to the "<tt>-pos2</tt>" option.</li>
+
+<li><a name="cl::Sink">The <b><tt>cl::Sink</tt></b></a> modifier is
+used to handle unknown options. If there is at least one option with
+<tt>cl::Sink</tt> modifier specified, the parser passes
+unrecognized option strings to it as values instead of signaling an
+error. As with <tt>cl::CommaSeparated</tt>, this modifier
+only makes sense with a <a href="#cl::list">cl::list</a> option.</li>
+
+</ul>
+
+<p>So far, these are the only three miscellaneous option modifiers.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="response">Response files</a>
+</div>
+
+<div class="doc_text">
+
+<p>Some systems, such as certain variants of Microsoft Windows and
+some older Unices have a relatively low limit on command-line
+length. It is therefore customary to use the so-called 'response
+files' to circumvent this restriction. These files are mentioned on
+the command-line (using the "@file") syntax. The program reads these
+files and inserts the contents into argv, thereby working around the
+command-line length limits. Response files are enabled by an optional
+fourth argument to
+<a href="#cl::ParseEnvironmentOptions"><tt>cl::ParseEnvironmentOptions</tt></a>
+and
+<a href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>.
+</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="toplevel">Top-Level Classes and Functions</a>
+</div>
+
+<div class="doc_text">
+
+<p>Despite all of the built-in flexibility, the CommandLine option library
+really only consists of one function (<a
+href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>)
+and three main classes: <a href="#cl::opt"><tt>cl::opt</tt></a>, <a
+href="#cl::list"><tt>cl::list</tt></a>, and <a
+href="#cl::alias"><tt>cl::alias</tt></a>.  This section describes these three
+classes in detail.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::ParseCommandLineOptions">The <tt>cl::ParseCommandLineOptions</tt>
+  function</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::ParseCommandLineOptions</tt> function is designed to be called
+directly from <tt>main</tt>, and is used to fill in the values of all of the
+command line option variables once <tt>argc</tt> and <tt>argv</tt> are
+available.</p>
+
+<p>The <tt>cl::ParseCommandLineOptions</tt> function requires two parameters
+(<tt>argc</tt> and <tt>argv</tt>), but may also take an optional third parameter
+which holds <a href="#description">additional extra text</a> to emit when the
+<tt>-help</tt> option is invoked, and a fourth boolean parameter that enables
+<a href="#response">response files</a>.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::ParseEnvironmentOptions">The <tt>cl::ParseEnvironmentOptions</tt>
+  function</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::ParseEnvironmentOptions</tt> function has mostly the same effects
+as <a
+href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>,
+except that it is designed to take values for options from an environment
+variable, for those cases in which reading the command line is not convenient or
+desired. It fills in the values of all the command line option variables just
+like <a
+href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>
+does.</p>
+
+<p>It takes four parameters: the name of the program (since <tt>argv</tt> may
+not be available, it can't just look in <tt>argv[0]</tt>), the name of the
+environment variable to examine, the optional
+<a href="#description">additional extra text</a> to emit when the
+<tt>-help</tt> option is invoked, and the boolean
+switch that controls whether <a href="#response">response files</a>
+should be read.</p>
+
+<p><tt>cl::ParseEnvironmentOptions</tt> will break the environment
+variable's value up into words and then process them using
+<a href="#cl::ParseCommandLineOptions"><tt>cl::ParseCommandLineOptions</tt></a>.
+<b>Note:</b> Currently <tt>cl::ParseEnvironmentOptions</tt> does not support
+quoting, so an environment variable containing <tt>-option "foo bar"</tt> will
+be parsed as three words, <tt>-option</tt>, <tt>"foo</tt>, and <tt>bar"</tt>,
+which is different from what you would get from the shell with the same
+input.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::SetVersionPrinter">The <tt>cl::SetVersionPrinter</tt>
+  function</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::SetVersionPrinter</tt> function is designed to be called
+directly from <tt>main</tt> and <i>before</i>
+<tt>cl::ParseCommandLineOptions</tt>. Its use is optional. It simply arranges
+for a function to be called in response to the <tt>--version</tt> option instead
+of having the <tt>CommandLine</tt> library print out the usual version string
+for LLVM. This is useful for programs that are not part of LLVM but wish to use
+the <tt>CommandLine</tt> facilities. Such programs should just define a small
+function that takes no arguments and returns <tt>void</tt> and that prints out
+whatever version information is appropriate for the program. Pass the address
+of that function to <tt>cl::SetVersionPrinter</tt> to arrange for it to be
+called when the <tt>--version</tt> option is given by the user.</p>
+
+</div>
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::opt">The <tt>cl::opt</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::opt</tt> class is the class used to represent scalar command line
+options, and is the one used most of the time.  It is a templated class which
+can take up to three arguments (all except for the first have default values
+though):</p>
+
+<div class="doc_code"><pre>
+<b>namespace</b> cl {
+  <b>template</b> <<b>class</b> DataType, <b>bool</b> ExternalStorage = <b>false</b>,
+            <b>class</b> ParserClass = parser<DataType> >
+  <b>class</b> opt;
+}
+</pre></div>
+
+<p>The first template argument specifies what underlying data type the command
+line argument is, and is used to select a default parser implementation.  The
+second template argument is used to specify whether the option should contain
+the storage for the option (the default) or whether external storage should be
+used to contain the value parsed for the option (see <a href="#storage">Internal
+vs External Storage</a> for more information).</p>
+
+<p>The third template argument specifies which parser to use.  The default value
+selects an instantiation of the <tt>parser</tt> class based on the underlying
+data type of the option.  In general, this default works well for most
+applications, so this option is only used when using a <a
+href="#customparser">custom parser</a>.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::list">The <tt>cl::list</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::list</tt> class is the class used to represent a list of command
+line options.  It too is a templated class which can take up to three
+arguments:</p>
+
+<div class="doc_code"><pre>
+<b>namespace</b> cl {
+  <b>template</b> <<b>class</b> DataType, <b>class</b> Storage = <b>bool</b>,
+            <b>class</b> ParserClass = parser<DataType> >
+  <b>class</b> list;
+}
+</pre></div>
+
+<p>This class works the exact same as the <a
+href="#cl::opt"><tt>cl::opt</tt></a> class, except that the second argument is
+the <b>type</b> of the external storage, not a boolean value.  For this class,
+the marker type '<tt>bool</tt>' is used to indicate that internal storage should
+be used.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::bits">The <tt>cl::bits</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::bits</tt> class is the class used to represent a list of command
+line options in the form of a bit vector.  It is also a templated class which
+can take up to three arguments:</p>
+
+<div class="doc_code"><pre>
+<b>namespace</b> cl {
+  <b>template</b> <<b>class</b> DataType, <b>class</b> Storage = <b>bool</b>,
+            <b>class</b> ParserClass = parser<DataType> >
+  <b>class</b> bits;
+}
+</pre></div>
+
+<p>This class works the exact same as the <a
+href="#cl::opt"><tt>cl::lists</tt></a> class, except that the second argument
+must be of <b>type</b> <tt>unsigned</tt> if external storage is used.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::alias">The <tt>cl::alias</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::alias</tt> class is a nontemplated class that is used to form
+aliases for other arguments.</p>
+
+<div class="doc_code"><pre>
+<b>namespace</b> cl {
+  <b>class</b> alias;
+}
+</pre></div>
+
+<p>The <a href="#cl::aliasopt"><tt>cl::aliasopt</tt></a> attribute should be
+used to specify which option this is an alias for.  Alias arguments default to
+being <a href="#cl::Hidden">Hidden</a>, and use the aliased options parser to do
+the conversion from string to data.</p>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">
+  <a name="cl::extrahelp">The <tt>cl::extrahelp</tt> class</a>
+</div>
+
+<div class="doc_text">
+
+<p>The <tt>cl::extrahelp</tt> class is a nontemplated class that allows extra
+help text to be printed out for the <tt>-help</tt> option.</p>
+
+<div class="doc_code"><pre>
+<b>namespace</b> cl {
+  <b>struct</b> extrahelp;
+}
+</pre></div>
+
+<p>To use the extrahelp, simply construct one with a <tt>const char*</tt>
+parameter to the constructor. The text passed to the constructor will be printed
+at the bottom of the help message, verbatim. Note that multiple
+<tt>cl::extrahelp</tt> <b>can</b> be used, but this practice is discouraged. If
+your tool needs to print additional help information, put all that help into a
+single <tt>cl::extrahelp</tt> instance.</p>
+<p>For example:</p>
+<div class="doc_code"><pre>
+  cl::extrahelp("\nADDITIONAL HELP:\n\n  This is the extra help\n");
+</pre></div>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="builtinparsers">Builtin parsers</a>
+</div>
+
+<div class="doc_text">
+
+<p>Parsers control how the string value taken from the command line is
+translated into a typed value, suitable for use in a C++ program.  By default,
+the CommandLine library uses an instance of <tt>parser<type></tt> if the
+command line option specifies that it uses values of type '<tt>type</tt>'.
+Because of this, custom option processing is specified with specializations of
+the '<tt>parser</tt>' class.</p>
+
+<p>The CommandLine library provides the following builtin parser
+specializations, which are sufficient for most applications. It can, however,
+also be extended to work with new data types and new ways of interpreting the
+same data.  See the <a href="#customparser">Writing a Custom Parser</a> for more
+details on this type of library extension.</p>
+
+<ul>
+
+<li><a name="genericparser">The <b>generic <tt>parser<t></tt> parser</b></a>
+can be used to map strings values to any data type, through the use of the <a
+href="#cl::values">cl::values</a> property, which specifies the mapping
+information.  The most common use of this parser is for parsing enum values,
+which allows you to use the CommandLine library for all of the error checking to
+make sure that only valid enum values are specified (as opposed to accepting
+arbitrary strings).  Despite this, however, the generic parser class can be used
+for any data type.</li>
+
+<li><a name="boolparser">The <b><tt>parser<bool></tt> specialization</b></a>
+is used to convert boolean strings to a boolean value.  Currently accepted
+strings are "<tt>true</tt>", "<tt>TRUE</tt>", "<tt>True</tt>", "<tt>1</tt>",
+"<tt>false</tt>", "<tt>FALSE</tt>", "<tt>False</tt>", and "<tt>0</tt>".</li>
+
+<li><a name="boolOrDefaultparser">The <b><tt>parser<boolOrDefault></tt>
+ specialization</b></a> is used for cases where the value is boolean,
+but we also need to know whether the option was specified at all.  boolOrDefault
+is an enum with 3 values, BOU_UNSET, BOU_TRUE and BOU_FALSE.  This parser accepts
+the same strings as <b><tt>parser<bool></tt></b>.</li>
+
+<li><a name="stringparser">The <b><tt>parser<string></tt>
+specialization</b></a> simply stores the parsed string into the string value
+specified.  No conversion or modification of the data is performed.</li>
+
+<li><a name="intparser">The <b><tt>parser<int></tt> specialization</b></a>
+uses the C <tt>strtol</tt> function to parse the string input.  As such, it will
+accept a decimal number (with an optional '+' or '-' prefix) which must start
+with a non-zero digit.  It accepts octal numbers, which are identified with a
+'<tt>0</tt>' prefix digit, and hexadecimal numbers with a prefix of
+'<tt>0x</tt>' or '<tt>0X</tt>'.</li>
+
+<li><a name="doubleparser">The <b><tt>parser<double></tt></b></a> and
+<b><tt>parser<float></tt> specializations</b> use the standard C
+<tt>strtod</tt> function to convert floating point strings into floating point
+values.  As such, a broad range of string formats is supported, including
+exponential notation (ex: <tt>1.7e15</tt>) and properly supports locales.
+</li>
+
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="extensionguide">Extension Guide</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Although the CommandLine library has a lot of functionality built into it
+already (as discussed previously), one of its true strengths lie in its
+extensibility.  This section discusses how the CommandLine library works under
+the covers and illustrates how to do some simple, common, extensions.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="customparser">Writing a custom parser</a>
+</div>
+
+<div class="doc_text">
+
+<p>One of the simplest and most common extensions is the use of a custom parser.
+As <a href="#builtinparsers">discussed previously</a>, parsers are the portion
+of the CommandLine library that turns string input from the user into a
+particular parsed data type, validating the input in the process.</p>
+
+<p>There are two ways to use a new parser:</p>
+
+<ol>
+
+<li>
+
+<p>Specialize the <a href="#genericparser"><tt>cl::parser</tt></a> template for
+your custom data type.<p>
+
+<p>This approach has the advantage that users of your custom data type will
+automatically use your custom parser whenever they define an option with a value
+type of your data type.  The disadvantage of this approach is that it doesn't
+work if your fundamental data type is something that is already supported.</p>
+
+</li>
+
+<li>
+
+<p>Write an independent class, using it explicitly from options that need
+it.</p>
+
+<p>This approach works well in situations where you would line to parse an
+option using special syntax for a not-very-special data-type.  The drawback of
+this approach is that users of your parser have to be aware that they are using
+your parser instead of the builtin ones.</p>
+
+</li>
+
+</ol>
+
+<p>To guide the discussion, we will discuss a custom parser that accepts file
+sizes, specified with an optional unit after the numeric size.  For example, we
+would like to parse "102kb", "41M", "1G" into the appropriate integer value.  In
+this case, the underlying data type we want to parse into is
+'<tt>unsigned</tt>'.  We choose approach #2 above because we don't want to make
+this the default for all <tt>unsigned</tt> options.</p>
+
+<p>To start out, we declare our new <tt>FileSizeParser</tt> class:</p>
+
+<div class="doc_code"><pre>
+<b>struct</b> FileSizeParser : <b>public</b> cl::basic_parser<<b>unsigned</b>> {
+  <i>// parse - Return true on error.</i>
+  <b>bool</b> parse(cl::Option &O, <b>const char</b> *ArgName, <b>const</b> std::string &ArgValue,
+             <b>unsigned</b> &Val);
+};
+</pre></div>
+
+<p>Our new class inherits from the <tt>cl::basic_parser</tt> template class to
+fill in the default, boiler plate code for us.  We give it the data type that
+we parse into, the last argument to the <tt>parse</tt> method, so that clients of
+our custom parser know what object type to pass in to the parse method.  (Here we
+declare that we parse into '<tt>unsigned</tt>' variables.)</p>
+
+<p>For most purposes, the only method that must be implemented in a custom
+parser is the <tt>parse</tt> method.  The <tt>parse</tt> method is called
+whenever the option is invoked, passing in the option itself, the option name,
+the string to parse, and a reference to a return value.  If the string to parse
+is not well-formed, the parser should output an error message and return true.
+Otherwise it should return false and set '<tt>Val</tt>' to the parsed value.  In
+our example, we implement <tt>parse</tt> as:</p>
+
+<div class="doc_code"><pre>
+<b>bool</b> FileSizeParser::parse(cl::Option &O, <b>const char</b> *ArgName,
+                           <b>const</b> std::string &Arg, <b>unsigned</b> &Val) {
+  <b>const char</b> *ArgStart = Arg.c_str();
+  <b>char</b> *End;
+
+  <i>// Parse integer part, leaving 'End' pointing to the first non-integer char</i>
+  Val = (unsigned)strtol(ArgStart, &End, 0);
+
+  <b>while</b> (1) {
+    <b>switch</b> (*End++) {
+    <b>case</b> 0: <b>return</b> false;   <i>// No error</i>
+    <b>case</b> 'i':               <i>// Ignore the 'i' in KiB if people use that</i>
+    <b>case</b> 'b': <b>case</b> 'B':     <i>// Ignore B suffix</i>
+      <b>break</b>;
+
+    <b>case</b> 'g': <b>case</b> 'G': Val *= 1024*1024*1024; <b>break</b>;
+    <b>case</b> 'm': <b>case</b> 'M': Val *= 1024*1024;      <b>break</b>;
+    <b>case</b> 'k': <b>case</b> 'K': Val *= 1024;           <b>break</b>;
+
+    default:
+      <i>// Print an error message if unrecognized character!</i>
+      <b>return</b> O.error("'" + Arg + "' value invalid for file size argument!");
+    }
+  }
+}
+</pre></div>
+
+<p>This function implements a very simple parser for the kinds of strings we are
+interested in.  Although it has some holes (it allows "<tt>123KKK</tt>" for
+example), it is good enough for this example.  Note that we use the option
+itself to print out the error message (the <tt>error</tt> method always returns
+true) in order to get a nice error message (shown below).  Now that we have our
+parser class, we can use it like this:</p>
+
+<div class="doc_code"><pre>
+<b>static</b> <a href="#cl::opt">cl::opt</a><<b>unsigned</b>, <b>false</b>, FileSizeParser>
+MFS(<i>"max-file-size"</i>, <a href="#cl::desc">cl::desc</a>(<i>"Maximum file size to accept"</i>),
+    <a href="#cl::value_desc">cl::value_desc</a>("<i>size</i>"));
+</pre></div>
+
+<p>Which adds this to the output of our program:</p>
+
+<div class="doc_code"><pre>
+OPTIONS:
+  -help                 - display available options (-help-hidden for more)
+  ...
+  <b>-max-file-size=<size> - Maximum file size to accept</b>
+</pre></div>
+
+<p>And we can test that our parse works correctly now (the test program just
+prints out the max-file-size argument value):</p>
+
+<div class="doc_code"><pre>
+$ ./test
+MFS: 0
+$ ./test -max-file-size=123MB
+MFS: 128974848
+$ ./test -max-file-size=3G
+MFS: 3221225472
+$ ./test -max-file-size=dog
+-max-file-size option: 'dog' value invalid for file size argument!
+</pre></div>
+
+<p>It looks like it works.  The error message that we get is nice and helpful,
+and we seem to accept reasonable file sizes.  This wraps up the "custom parser"
+tutorial.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="explotingexternal">Exploiting external storage</a>
+</div>
+
+<div class="doc_text">
+  <p>Several of the LLVM libraries define static <tt>cl::opt</tt> instances that
+  will automatically be included in any program that links with that library.
+  This is a feature. However, sometimes it is necessary to know the value of the
+  command line option outside of the library. In these cases the library does or
+  should provide an external storage location that is accessible to users of the
+  library. Examples of this include the <tt>llvm::DebugFlag</tt> exported by the
+  <tt>lib/Support/Debug.cpp</tt> file and the <tt>llvm::TimePassesIsEnabled</tt>
+  flag exported by the <tt>lib/VMCore/Pass.cpp</tt> file.</p>
+
+<p>TODO: complete this section</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="dynamicopts">Dynamically adding command line options</a>
+</div>
+
+<div class="doc_text">
+
+<p>TODO: fill in this section</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-05-06 17:28:04 -0700 (Thu, 06 May 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/CompilerDriver.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CompilerDriver.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CompilerDriver.html (added)
+++ www-releases/trunk/2.9/docs/CompilerDriver.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,756 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!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" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
+<title>Customizing LLVMC: Reference Manual</title>
+<link rel="stylesheet" href="llvm.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="customizing-llvmc-reference-manual">
+<h1 class="title">Customizing LLVMC: Reference Manual</h1>
+
+<!-- This file was automatically generated by rst2html.
+Please do not edit directly!
+The ReST source lives in the directory 'tools/llvmc/doc'. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id8">Introduction</a></li>
+<li><a class="reference internal" href="#compiling-with-llvmc" id="id9">Compiling with LLVMC</a></li>
+<li><a class="reference internal" href="#predefined-options" id="id10">Predefined options</a></li>
+<li><a class="reference internal" href="#compiling-llvmc-plugins" id="id11">Compiling LLVMC plugins</a></li>
+<li><a class="reference internal" href="#compiling-standalone-llvmc-based-drivers" id="id12">Compiling standalone LLVMC-based drivers</a></li>
+<li><a class="reference internal" href="#customizing-llvmc-the-compilation-graph" id="id13">Customizing LLVMC: the compilation graph</a></li>
+<li><a class="reference internal" href="#describing-options" id="id14">Describing options</a><ul>
+<li><a class="reference internal" href="#external-options" id="id15">External options</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#conditional-evaluation" id="id16">Conditional evaluation</a></li>
+<li><a class="reference internal" href="#writing-a-tool-description" id="id17">Writing a tool description</a><ul>
+<li><a class="reference internal" href="#id5" id="id18">Actions</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#language-map" id="id19">Language map</a></li>
+<li><a class="reference internal" href="#option-preprocessor" id="id20">Option preprocessor</a></li>
+<li><a class="reference internal" href="#more-advanced-topics" id="id21">More advanced topics</a><ul>
+<li><a class="reference internal" href="#hooks-and-environment-variables" id="id22">Hooks and environment variables</a></li>
+<li><a class="reference internal" href="#how-plugins-are-loaded" id="id23">How plugins are loaded</a></li>
+<li><a class="reference internal" href="#debugging" id="id24">Debugging</a></li>
+<li><a class="reference internal" href="#conditioning-on-the-executable-name" id="id25">Conditioning on the executable name</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="doc_author">
+<p>Written by <a href="mailto:foldr at codedgers.com">Mikhail Glushenkov</a></p>
+</div><div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id8">Introduction</a></h1>
+<p>LLVMC is a generic compiler driver, designed to be customizable and
+extensible. It plays the same role for LLVM as the <tt class="docutils literal"><span class="pre">gcc</span></tt> program
+does for GCC - LLVMC's job is essentially to transform a set of input
+files into a set of targets depending on configuration rules and user
+options. What makes LLVMC different is that these transformation rules
+are completely customizable - in fact, LLVMC knows nothing about the
+specifics of transformation (even the command-line options are mostly
+not hard-coded) and regards the transformation structure as an
+abstract graph. The structure of this graph is completely determined
+by plugins, which can be either statically or dynamically linked. This
+makes it possible to easily adapt LLVMC for other purposes - for
+example, as a build tool for game resources.</p>
+<p>Because LLVMC employs <a class="reference external" href="http://llvm.org/docs/TableGenFundamentals.html">TableGen</a> as its configuration language, you
+need to be familiar with it to customize LLVMC.</p>
+</div>
+<div class="section" id="compiling-with-llvmc">
+<h1><a class="toc-backref" href="#id9">Compiling with LLVMC</a></h1>
+<p>LLVMC tries hard to be as compatible with <tt class="docutils literal"><span class="pre">gcc</span></tt> as possible,
+although there are some small differences. Most of the time, however,
+you shouldn't be able to notice them:</p>
+<pre class="literal-block">
+$ # This works as expected:
+$ llvmc -O3 -Wall hello.cpp
+$ ./a.out
+hello
+</pre>
+<p>One nice feature of LLVMC is that one doesn't have to distinguish between
+different compilers for different languages (think <tt class="docutils literal"><span class="pre">g++</span></tt> vs.  <tt class="docutils literal"><span class="pre">gcc</span></tt>) - the
+right toolchain is chosen automatically based on input language names (which
+are, in turn, determined from file extensions). If you want to force files
+ending with ".c" to compile as C++, use the <tt class="docutils literal"><span class="pre">-x</span></tt> option, just like you would
+do it with <tt class="docutils literal"><span class="pre">gcc</span></tt>:</p>
+<pre class="literal-block">
+$ # hello.c is really a C++ file
+$ llvmc -x c++ hello.c
+$ ./a.out
+hello
+</pre>
+<p>On the other hand, when using LLVMC as a linker to combine several C++
+object files you should provide the <tt class="docutils literal"><span class="pre">--linker</span></tt> option since it's
+impossible for LLVMC to choose the right linker in that case:</p>
+<pre class="literal-block">
+$ llvmc -c hello.cpp
+$ llvmc hello.o
+[A lot of link-time errors skipped]
+$ llvmc --linker=c++ hello.o
+$ ./a.out
+hello
+</pre>
+<p>By default, LLVMC uses <tt class="docutils literal"><span class="pre">llvm-gcc</span></tt> to compile the source code. It is also
+possible to choose the <tt class="docutils literal"><span class="pre">clang</span></tt> compiler with the <tt class="docutils literal"><span class="pre">-clang</span></tt> option.</p>
+</div>
+<div class="section" id="predefined-options">
+<h1><a class="toc-backref" href="#id10">Predefined options</a></h1>
+<p>LLVMC has some built-in options that can't be overridden in the
+configuration libraries:</p>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">-o</span> <span class="pre">FILE</span></tt> - Output file name.</li>
+<li><tt class="docutils literal"><span class="pre">-x</span> <span class="pre">LANGUAGE</span></tt> - Specify the language of the following input files
+until the next -x option.</li>
+<li><tt class="docutils literal"><span class="pre">-load</span> <span class="pre">PLUGIN_NAME</span></tt> - Load the specified plugin DLL. Example:
+<tt class="docutils literal"><span class="pre">-load</span> <span class="pre">$LLVM_DIR/Release/lib/LLVMCSimple.so</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">-v</span></tt> - Enable verbose mode, i.e. print out all executed commands.</li>
+<li><tt class="docutils literal"><span class="pre">--save-temps</span></tt> - Write temporary files to the current directory and do not
+delete them on exit. This option can also take an argument: the
+<tt class="docutils literal"><span class="pre">--save-temps=obj</span></tt> switch will write files into the directory specified with
+the <tt class="docutils literal"><span class="pre">-o</span></tt> option. The <tt class="docutils literal"><span class="pre">--save-temps=cwd</span></tt> and <tt class="docutils literal"><span class="pre">--save-temps</span></tt> switches are
+both synonyms for the default behaviour.</li>
+<li><tt class="docutils literal"><span class="pre">--temp-dir</span> <span class="pre">DIRECTORY</span></tt> - Store temporary files in the given directory. This
+directory is deleted on exit unless <tt class="docutils literal"><span class="pre">--save-temps</span></tt> is specified. If
+<tt class="docutils literal"><span class="pre">--save-temps=obj</span></tt> is also specified, <tt class="docutils literal"><span class="pre">--temp-dir</span></tt> is given the
+precedence.</li>
+<li><tt class="docutils literal"><span class="pre">--check-graph</span></tt> - Check the compilation for common errors like mismatched
+output/input language names, multiple default edges and cycles. Because of
+plugins, these checks can't be performed at compile-time. Exit with code zero
+if no errors were found, and return the number of found errors
+otherwise. Hidden option, useful for debugging LLVMC plugins.</li>
+<li><tt class="docutils literal"><span class="pre">--view-graph</span></tt> - Show a graphical representation of the compilation graph
+and exit. Requires that you have <tt class="docutils literal"><span class="pre">dot</span></tt> and <tt class="docutils literal"><span class="pre">gv</span></tt> programs installed. Hidden
+option, useful for debugging LLVMC plugins.</li>
+<li><tt class="docutils literal"><span class="pre">--write-graph</span></tt> - Write a <tt class="docutils literal"><span class="pre">compilation-graph.dot</span></tt> file in the current
+directory with the compilation graph description in Graphviz format (identical
+to the file used by the <tt class="docutils literal"><span class="pre">--view-graph</span></tt> option). The <tt class="docutils literal"><span class="pre">-o</span></tt> option can be
+used to set the output file name. Hidden option, useful for debugging LLVMC
+plugins.</li>
+<li><tt class="docutils literal"><span class="pre">-help</span></tt>, <tt class="docutils literal"><span class="pre">-help-hidden</span></tt>, <tt class="docutils literal"><span class="pre">--version</span></tt> - These options have
+their standard meaning.</li>
+</ul>
+</div>
+<div class="section" id="compiling-llvmc-plugins">
+<h1><a class="toc-backref" href="#id11">Compiling LLVMC plugins</a></h1>
+<p>It's easiest to start working on your own LLVMC plugin by copying the
+skeleton project which lives under <tt class="docutils literal"><span class="pre">$LLVMC_DIR/plugins/Simple</span></tt>:</p>
+<pre class="literal-block">
+$ cd $LLVMC_DIR/plugins
+$ cp -r Simple MyPlugin
+$ cd MyPlugin
+$ ls
+Makefile PluginMain.cpp Simple.td
+</pre>
+<p>As you can see, our basic plugin consists of only two files (not
+counting the build script). <tt class="docutils literal"><span class="pre">Simple.td</span></tt> contains TableGen
+description of the compilation graph; its format is documented in the
+following sections. <tt class="docutils literal"><span class="pre">PluginMain.cpp</span></tt> is just a helper file used to
+compile the auto-generated C++ code produced from TableGen source. It
+can also contain hook definitions (see <a class="reference internal" href="#hooks">below</a>).</p>
+<p>The first thing that you should do is to change the <tt class="docutils literal"><span class="pre">LLVMC_PLUGIN</span></tt>
+variable in the <tt class="docutils literal"><span class="pre">Makefile</span></tt> to avoid conflicts (since this variable
+is used to name the resulting library):</p>
+<pre class="literal-block">
+LLVMC_PLUGIN=MyPlugin
+</pre>
+<p>It is also a good idea to rename <tt class="docutils literal"><span class="pre">Simple.td</span></tt> to something less
+generic:</p>
+<pre class="literal-block">
+$ mv Simple.td MyPlugin.td
+</pre>
+<p>To build your plugin as a dynamic library, just <tt class="docutils literal"><span class="pre">cd</span></tt> to its source
+directory and run <tt class="docutils literal"><span class="pre">make</span></tt>. The resulting file will be called
+<tt class="docutils literal"><span class="pre">plugin_llvmc_$(LLVMC_PLUGIN).$(DLL_EXTENSION)</span></tt> (in our case,
+<tt class="docutils literal"><span class="pre">plugin_llvmc_MyPlugin.so</span></tt>). This library can be then loaded in with the
+<tt class="docutils literal"><span class="pre">-load</span></tt> option. Example:</p>
+<pre class="literal-block">
+$ cd $LLVMC_DIR/plugins/Simple
+$ make
+$ llvmc -load $LLVM_DIR/Release/lib/plugin_llvmc_Simple.so
+</pre>
+</div>
+<div class="section" id="compiling-standalone-llvmc-based-drivers">
+<h1><a class="toc-backref" href="#id12">Compiling standalone LLVMC-based drivers</a></h1>
+<p>By default, the <tt class="docutils literal"><span class="pre">llvmc</span></tt> executable consists of a driver core plus several
+statically linked plugins (<tt class="docutils literal"><span class="pre">Base</span></tt> and <tt class="docutils literal"><span class="pre">Clang</span></tt> at the moment). You can
+produce a standalone LLVMC-based driver executable by linking the core with your
+own plugins. The recommended way to do this is by starting with the provided
+<tt class="docutils literal"><span class="pre">Skeleton</span></tt> example (<tt class="docutils literal"><span class="pre">$LLVMC_DIR/example/Skeleton</span></tt>):</p>
+<pre class="literal-block">
+$ cd $LLVMC_DIR/example/
+$ cp -r Skeleton mydriver
+$ cd mydriver
+$ vim Makefile
+[...]
+$ make
+</pre>
+<p>If you're compiling LLVM with different source and object directories, then you
+must perform the following additional steps before running <tt class="docutils literal"><span class="pre">make</span></tt>:</p>
+<pre class="literal-block">
+# LLVMC_SRC_DIR = $LLVM_SRC_DIR/tools/llvmc/
+# LLVMC_OBJ_DIR = $LLVM_OBJ_DIR/tools/llvmc/
+$ cp $LLVMC_SRC_DIR/example/mydriver/Makefile \
+  $LLVMC_OBJ_DIR/example/mydriver/
+$ cd $LLVMC_OBJ_DIR/example/mydriver
+$ make
+</pre>
+<p>Another way to do the same thing is by using the following command:</p>
+<pre class="literal-block">
+$ cd $LLVMC_DIR
+$ make LLVMC_BUILTIN_PLUGINS=MyPlugin LLVMC_BASED_DRIVER_NAME=mydriver
+</pre>
+<p>This works with both srcdir == objdir and srcdir != objdir, but assumes that the
+plugin source directory was placed under <tt class="docutils literal"><span class="pre">$LLVMC_DIR/plugins</span></tt>.</p>
+<p>Sometimes, you will want a 'bare-bones' version of LLVMC that has no
+built-in plugins. It can be compiled with the following command:</p>
+<pre class="literal-block">
+$ cd $LLVMC_DIR
+$ make LLVMC_BUILTIN_PLUGINS=""
+</pre>
+</div>
+<div class="section" id="customizing-llvmc-the-compilation-graph">
+<h1><a class="toc-backref" href="#id13">Customizing LLVMC: the compilation graph</a></h1>
+<p>Each TableGen configuration file should include the common
+definitions:</p>
+<pre class="literal-block">
+include "llvm/CompilerDriver/Common.td"
+</pre>
+<p>Internally, LLVMC stores information about possible source
+transformations in form of a graph. Nodes in this graph represent
+tools, and edges between two nodes represent a transformation path. A
+special "root" node is used to mark entry points for the
+transformations. LLVMC also assigns a weight to each edge (more on
+this later) to choose between several alternative edges.</p>
+<p>The definition of the compilation graph (see file
+<tt class="docutils literal"><span class="pre">plugins/Base/Base.td</span></tt> for an example) is just a list of edges:</p>
+<pre class="literal-block">
+def CompilationGraph : CompilationGraph<[
+    Edge<"root", "llvm_gcc_c">,
+    Edge<"root", "llvm_gcc_assembler">,
+    ...
+
+    Edge<"llvm_gcc_c", "llc">,
+    Edge<"llvm_gcc_cpp", "llc">,
+    ...
+
+    OptionalEdge<"llvm_gcc_c", "opt", (case (switch_on "opt"),
+                                      (inc_weight))>,
+    OptionalEdge<"llvm_gcc_cpp", "opt", (case (switch_on "opt"),
+                                              (inc_weight))>,
+    ...
+
+    OptionalEdge<"llvm_gcc_assembler", "llvm_gcc_cpp_linker",
+        (case (input_languages_contain "c++"), (inc_weight),
+              (or (parameter_equals "linker", "g++"),
+                  (parameter_equals "linker", "c++")), (inc_weight))>,
+    ...
+
+    ]>;
+</pre>
+<p>As you can see, the edges can be either default or optional, where
+optional edges are differentiated by an additional <tt class="docutils literal"><span class="pre">case</span></tt> expression
+used to calculate the weight of this edge. Notice also that we refer
+to tools via their names (as strings). This makes it possible to add
+edges to an existing compilation graph in plugins without having to
+know about all tool definitions used in the graph.</p>
+<p>The default edges are assigned a weight of 1, and optional edges get a
+weight of 0 + 2*N where N is the number of tests that evaluated to
+true in the <tt class="docutils literal"><span class="pre">case</span></tt> expression. It is also possible to provide an
+integer parameter to <tt class="docutils literal"><span class="pre">inc_weight</span></tt> and <tt class="docutils literal"><span class="pre">dec_weight</span></tt> - in this case,
+the weight is increased (or decreased) by the provided value instead
+of the default 2. It is also possible to change the default weight of
+an optional edge by using the <tt class="docutils literal"><span class="pre">default</span></tt> clause of the <tt class="docutils literal"><span class="pre">case</span></tt>
+construct.</p>
+<p>When passing an input file through the graph, LLVMC picks the edge
+with the maximum weight. To avoid ambiguity, there should be only one
+default edge between two nodes (with the exception of the root node,
+which gets a special treatment - there you are allowed to specify one
+default edge <em>per language</em>).</p>
+<p>When multiple plugins are loaded, their compilation graphs are merged
+together. Since multiple edges that have the same end nodes are not
+allowed (i.e. the graph is not a multigraph), an edge defined in
+several plugins will be replaced by the definition from the plugin
+that was loaded last. Plugin load order can be controlled by using the
+plugin priority feature described above.</p>
+<p>To get a visual representation of the compilation graph (useful for
+debugging), run <tt class="docutils literal"><span class="pre">llvmc</span> <span class="pre">--view-graph</span></tt>. You will need <tt class="docutils literal"><span class="pre">dot</span></tt> and
+<tt class="docutils literal"><span class="pre">gsview</span></tt> installed for this to work properly.</p>
+</div>
+<div class="section" id="describing-options">
+<h1><a class="toc-backref" href="#id14">Describing options</a></h1>
+<p>Command-line options that the plugin supports are defined by using an
+<tt class="docutils literal"><span class="pre">OptionList</span></tt>:</p>
+<pre class="literal-block">
+def Options : OptionList<[
+(switch_option "E", (help "Help string")),
+(alias_option "quiet", "q")
+...
+]>;
+</pre>
+<p>As you can see, the option list is just a list of DAGs, where each DAG
+is an option description consisting of the option name and some
+properties. A plugin can define more than one option list (they are
+all merged together in the end), which can be handy if one wants to
+separate option groups syntactically.</p>
+<ul>
+<li><p class="first">Possible option types:</p>
+<blockquote>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">switch_option</span></tt> - a simple boolean switch without arguments, for example
+<tt class="docutils literal"><span class="pre">-O2</span></tt> or <tt class="docutils literal"><span class="pre">-time</span></tt>. At most one occurrence is allowed.</li>
+<li><tt class="docutils literal"><span class="pre">parameter_option</span></tt> - option that takes one argument, for example
+<tt class="docutils literal"><span class="pre">-std=c99</span></tt>. It is also allowed to use spaces instead of the equality
+sign: <tt class="docutils literal"><span class="pre">-std</span> <span class="pre">c99</span></tt>. At most one occurrence is allowed.</li>
+<li><tt class="docutils literal"><span class="pre">parameter_list_option</span></tt> - same as the above, but more than one option
+occurence is allowed.</li>
+<li><tt class="docutils literal"><span class="pre">prefix_option</span></tt> - same as the parameter_option, but the option name and
+argument do not have to be separated. Example: <tt class="docutils literal"><span class="pre">-ofile</span></tt>. This can be also
+specified as <tt class="docutils literal"><span class="pre">-o</span> <span class="pre">file</span></tt>; however, <tt class="docutils literal"><span class="pre">-o=file</span></tt> will be parsed incorrectly
+(<tt class="docutils literal"><span class="pre">=file</span></tt> will be interpreted as option value). At most one occurrence is
+allowed.</li>
+<li><tt class="docutils literal"><span class="pre">prefix_list_option</span></tt> - same as the above, but more than one occurence of
+the option is allowed; example: <tt class="docutils literal"><span class="pre">-lm</span> <span class="pre">-lpthread</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">alias_option</span></tt> - a special option type for creating aliases. Unlike other
+option types, aliases are not allowed to have any properties besides the
+aliased option name. Usage example: <tt class="docutils literal"><span class="pre">(alias_option</span> <span class="pre">"preprocess",</span> <span class="pre">"E")</span></tt></li>
+</ul>
+</blockquote>
+</li>
+<li><p class="first">Possible option properties:</p>
+<blockquote>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">help</span></tt> - help string associated with this option. Used for <tt class="docutils literal"><span class="pre">-help</span></tt>
+output.</li>
+<li><tt class="docutils literal"><span class="pre">required</span></tt> - this option must be specified exactly once (or, in case of
+the list options without the <tt class="docutils literal"><span class="pre">multi_val</span></tt> property, at least
+once). Incompatible with <tt class="docutils literal"><span class="pre">zero_or_one</span></tt> and <tt class="docutils literal"><span class="pre">one_or_more</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">one_or_more</span></tt> - the option must be specified at least one time. Useful
+only for list options in conjunction with <tt class="docutils literal"><span class="pre">multi_val</span></tt>; for ordinary lists
+it is synonymous with <tt class="docutils literal"><span class="pre">required</span></tt>. Incompatible with <tt class="docutils literal"><span class="pre">required</span></tt> and
+<tt class="docutils literal"><span class="pre">zero_or_one</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">optional</span></tt> - the option can be specified zero or one times. Useful only
+for list options in conjunction with <tt class="docutils literal"><span class="pre">multi_val</span></tt>. Incompatible with
+<tt class="docutils literal"><span class="pre">required</span></tt> and <tt class="docutils literal"><span class="pre">one_or_more</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">hidden</span></tt> - the description of this option will not appear in
+the <tt class="docutils literal"><span class="pre">-help</span></tt> output (but will appear in the <tt class="docutils literal"><span class="pre">-help-hidden</span></tt>
+output).</li>
+<li><tt class="docutils literal"><span class="pre">really_hidden</span></tt> - the option will not be mentioned in any help
+output.</li>
+<li><tt class="docutils literal"><span class="pre">comma_separated</span></tt> - Indicates that any commas specified for an option's
+value should be used to split the value up into multiple values for the
+option. This property is valid only for list options. In conjunction with
+<tt class="docutils literal"><span class="pre">forward_value</span></tt> can be used to implement option forwarding in style of
+gcc's <tt class="docutils literal"><span class="pre">-Wa,</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">multi_val</span> <span class="pre">n</span></tt> - this option takes <em>n</em> arguments (can be useful in some
+special cases). Usage example: <tt class="docutils literal"><span class="pre">(parameter_list_option</span> <span class="pre">"foo",</span> <span class="pre">(multi_val</span>
+<span class="pre">3))</span></tt>; the command-line syntax is '-foo a b c'. Only list options can have
+this attribute; you can, however, use the <tt class="docutils literal"><span class="pre">one_or_more</span></tt>, <tt class="docutils literal"><span class="pre">optional</span></tt>
+and <tt class="docutils literal"><span class="pre">required</span></tt> properties.</li>
+<li><tt class="docutils literal"><span class="pre">init</span></tt> - this option has a default value, either a string (if it is a
+parameter), or a boolean (if it is a switch; as in C++, boolean constants
+are called <tt class="docutils literal"><span class="pre">true</span></tt> and <tt class="docutils literal"><span class="pre">false</span></tt>). List options can't have <tt class="docutils literal"><span class="pre">init</span></tt>
+attribute.
+Usage examples: <tt class="docutils literal"><span class="pre">(switch_option</span> <span class="pre">"foo",</span> <span class="pre">(init</span> <span class="pre">true))</span></tt>; <tt class="docutils literal"><span class="pre">(prefix_option</span>
+<span class="pre">"bar",</span> <span class="pre">(init</span> <span class="pre">"baz"))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">extern</span></tt> - this option is defined in some other plugin, see <a class="reference internal" href="#extern">below</a>.</li>
+</ul>
+</blockquote>
+</li>
+</ul>
+<div class="section" id="external-options">
+<span id="extern"></span><h2><a class="toc-backref" href="#id15">External options</a></h2>
+<p>Sometimes, when linking several plugins together, one plugin needs to
+access options defined in some other plugin. Because of the way
+options are implemented, such options must be marked as
+<tt class="docutils literal"><span class="pre">extern</span></tt>. This is what the <tt class="docutils literal"><span class="pre">extern</span></tt> option property is
+for. Example:</p>
+<pre class="literal-block">
+...
+(switch_option "E", (extern))
+...
+</pre>
+<p>If an external option has additional attributes besides 'extern', they are
+ignored. See also the section on plugin <a class="reference internal" href="#priorities">priorities</a>.</p>
+</div>
+</div>
+<div class="section" id="conditional-evaluation">
+<span id="case"></span><h1><a class="toc-backref" href="#id16">Conditional evaluation</a></h1>
+<p>The 'case' construct is the main means by which programmability is
+achieved in LLVMC. It can be used to calculate edge weights, program
+actions and modify the shell commands to be executed. The 'case'
+expression is designed after the similarly-named construct in
+functional languages and takes the form <tt class="docutils literal"><span class="pre">(case</span> <span class="pre">(test_1),</span> <span class="pre">statement_1,</span>
+<span class="pre">(test_2),</span> <span class="pre">statement_2,</span> <span class="pre">...</span> <span class="pre">(test_N),</span> <span class="pre">statement_N)</span></tt>. The statements
+are evaluated only if the corresponding tests evaluate to true.</p>
+<p>Examples:</p>
+<pre class="literal-block">
+// Edge weight calculation
+
+// Increases edge weight by 5 if "-A" is provided on the
+// command-line, and by 5 more if "-B" is also provided.
+(case
+    (switch_on "A"), (inc_weight 5),
+    (switch_on "B"), (inc_weight 5))
+
+
+// Tool command line specification
+
+// Evaluates to "cmdline1" if the option "-A" is provided on the
+// command line; to "cmdline2" if "-B" is provided;
+// otherwise to "cmdline3".
+
+(case
+    (switch_on "A"), "cmdline1",
+    (switch_on "B"), "cmdline2",
+    (default), "cmdline3")
+</pre>
+<p>Note the slight difference in 'case' expression handling in contexts
+of edge weights and command line specification - in the second example
+the value of the <tt class="docutils literal"><span class="pre">"B"</span></tt> switch is never checked when switch <tt class="docutils literal"><span class="pre">"A"</span></tt> is
+enabled, and the whole expression always evaluates to <tt class="docutils literal"><span class="pre">"cmdline1"</span></tt> in
+that case.</p>
+<p>Case expressions can also be nested, i.e. the following is legal:</p>
+<pre class="literal-block">
+(case (switch_on "E"), (case (switch_on "o"), ..., (default), ...)
+      (default), ...)
+</pre>
+<p>You should, however, try to avoid doing that because it hurts
+readability. It is usually better to split tool descriptions and/or
+use TableGen inheritance instead.</p>
+<ul class="simple">
+<li>Possible tests are:<ul>
+<li><tt class="docutils literal"><span class="pre">switch_on</span></tt> - Returns true if a given command-line switch is provided by
+the user. Can be given a list as argument, in that case <tt class="docutils literal"><span class="pre">(switch_on</span> <span class="pre">["foo",</span>
+<span class="pre">"bar",</span> <span class="pre">"baz"])</span></tt> is equivalent to <tt class="docutils literal"><span class="pre">(and</span> <span class="pre">(switch_on</span> <span class="pre">"foo"),</span> <span class="pre">(switch_on</span>
+<span class="pre">"bar"),</span> <span class="pre">(switch_on</span> <span class="pre">"baz"))</span></tt>.
+Example: <tt class="docutils literal"><span class="pre">(switch_on</span> <span class="pre">"opt")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">any_switch_on</span></tt> - Given a list of switch options, returns true if any of
+the switches is turned on.
+Example: <tt class="docutils literal"><span class="pre">(any_switch_on</span> <span class="pre">["foo",</span> <span class="pre">"bar",</span> <span class="pre">"baz"])</span></tt> is equivalent to <tt class="docutils literal"><span class="pre">(or</span>
+<span class="pre">(switch_on</span> <span class="pre">"foo"),</span> <span class="pre">(switch_on</span> <span class="pre">"bar"),</span> <span class="pre">(switch_on</span> <span class="pre">"baz"))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">parameter_equals</span></tt> - Returns true if a command-line parameter equals
+a given value.
+Example: <tt class="docutils literal"><span class="pre">(parameter_equals</span> <span class="pre">"W",</span> <span class="pre">"all")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">element_in_list</span></tt> - Returns true if a command-line parameter
+list contains a given value.
+Example: <tt class="docutils literal"><span class="pre">(element_in_list</span> <span class="pre">"l",</span> <span class="pre">"pthread")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">input_languages_contain</span></tt> - Returns true if a given language
+belongs to the current input language set.
+Example: <tt class="docutils literal"><span class="pre">(input_languages_contain</span> <span class="pre">"c++")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">in_language</span></tt> - Evaluates to true if the input file language is equal to
+the argument. At the moment works only with <tt class="docutils literal"><span class="pre">cmd_line</span></tt> and <tt class="docutils literal"><span class="pre">actions</span></tt> (on
+non-join nodes).
+Example: <tt class="docutils literal"><span class="pre">(in_language</span> <span class="pre">"c++")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">not_empty</span></tt> - Returns true if a given option (which should be either a
+parameter or a parameter list) is set by the user. Like <tt class="docutils literal"><span class="pre">switch_on</span></tt>, can
+be also given a list as argument.
+Example: <tt class="docutils literal"><span class="pre">(not_empty</span> <span class="pre">"o")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">any_not_empty</span></tt> - Returns true if <tt class="docutils literal"><span class="pre">not_empty</span></tt> returns true for any of
+the options in the list.
+Example: <tt class="docutils literal"><span class="pre">(any_not_empty</span> <span class="pre">["foo",</span> <span class="pre">"bar",</span> <span class="pre">"baz"])</span></tt> is equivalent to <tt class="docutils literal"><span class="pre">(or</span>
+<span class="pre">(not_empty</span> <span class="pre">"foo"),</span> <span class="pre">(not_empty</span> <span class="pre">"bar"),</span> <span class="pre">(not_empty</span> <span class="pre">"baz"))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">empty</span></tt> - The opposite of <tt class="docutils literal"><span class="pre">not_empty</span></tt>. Equivalent to <tt class="docutils literal"><span class="pre">(not</span> <span class="pre">(not_empty</span>
+<span class="pre">X))</span></tt>. Provided for convenience. Can be given a list as argument.</li>
+<li><tt class="docutils literal"><span class="pre">any_not_empty</span></tt> - Returns true if <tt class="docutils literal"><span class="pre">not_empty</span></tt> returns true for any of
+the options in the list.
+Example: <tt class="docutils literal"><span class="pre">(any_empty</span> <span class="pre">["foo",</span> <span class="pre">"bar",</span> <span class="pre">"baz"])</span></tt> is equivalent to <tt class="docutils literal"><span class="pre">(not</span> <span class="pre">(and</span>
+<span class="pre">(not_empty</span> <span class="pre">"foo"),</span> <span class="pre">(not_empty</span> <span class="pre">"bar"),</span> <span class="pre">(not_empty</span> <span class="pre">"baz")))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">single_input_file</span></tt> - Returns true if there was only one input file
+provided on the command-line. Used without arguments:
+<tt class="docutils literal"><span class="pre">(single_input_file)</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">multiple_input_files</span></tt> - Equivalent to <tt class="docutils literal"><span class="pre">(not</span> <span class="pre">(single_input_file))</span></tt> (the
+case of zero input files is considered an error).</li>
+<li><tt class="docutils literal"><span class="pre">default</span></tt> - Always evaluates to true. Should always be the last
+test in the <tt class="docutils literal"><span class="pre">case</span></tt> expression.</li>
+<li><tt class="docutils literal"><span class="pre">and</span></tt> - A standard binary logical combinator that returns true iff all of
+its arguments return true. Used like this: <tt class="docutils literal"><span class="pre">(and</span> <span class="pre">(test1),</span> <span class="pre">(test2),</span>
+<span class="pre">...</span> <span class="pre">(testN))</span></tt>. Nesting of <tt class="docutils literal"><span class="pre">and</span></tt> and <tt class="docutils literal"><span class="pre">or</span></tt> is allowed, but not
+encouraged.</li>
+<li><tt class="docutils literal"><span class="pre">or</span></tt> - A binary logical combinator that returns true iff any of its
+arguments returns true. Example: <tt class="docutils literal"><span class="pre">(or</span> <span class="pre">(test1),</span> <span class="pre">(test2),</span> <span class="pre">...</span> <span class="pre">(testN))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">not</span></tt> - Standard unary logical combinator that negates its
+argument. Example: <tt class="docutils literal"><span class="pre">(not</span> <span class="pre">(or</span> <span class="pre">(test1),</span> <span class="pre">(test2),</span> <span class="pre">...</span> <span class="pre">(testN)))</span></tt>.</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="writing-a-tool-description">
+<h1><a class="toc-backref" href="#id17">Writing a tool description</a></h1>
+<p>As was said earlier, nodes in the compilation graph represent tools,
+which are described separately. A tool definition looks like this
+(taken from the <tt class="docutils literal"><span class="pre">include/llvm/CompilerDriver/Tools.td</span></tt> file):</p>
+<pre class="literal-block">
+def llvm_gcc_cpp : Tool<[
+    (in_language "c++"),
+    (out_language "llvm-assembler"),
+    (output_suffix "bc"),
+    (cmd_line "llvm-g++ -c $INFILE -o $OUTFILE -emit-llvm"),
+    (sink)
+    ]>;
+</pre>
+<p>This defines a new tool called <tt class="docutils literal"><span class="pre">llvm_gcc_cpp</span></tt>, which is an alias for
+<tt class="docutils literal"><span class="pre">llvm-g++</span></tt>. As you can see, a tool definition is just a list of
+properties; most of them should be self-explanatory. The <tt class="docutils literal"><span class="pre">sink</span></tt>
+property means that this tool should be passed all command-line
+options that aren't mentioned in the option list.</p>
+<p>The complete list of all currently implemented tool properties follows.</p>
+<ul class="simple">
+<li>Possible tool properties:<ul>
+<li><tt class="docutils literal"><span class="pre">in_language</span></tt> - input language name. Can be either a string or a
+list, in case the tool supports multiple input languages.</li>
+<li><tt class="docutils literal"><span class="pre">out_language</span></tt> - output language name. Multiple output languages are not
+allowed.</li>
+<li><tt class="docutils literal"><span class="pre">output_suffix</span></tt> - output file suffix. Can also be changed
+dynamically, see documentation on actions.</li>
+<li><tt class="docutils literal"><span class="pre">cmd_line</span></tt> - the actual command used to run the tool. You can
+use <tt class="docutils literal"><span class="pre">$INFILE</span></tt> and <tt class="docutils literal"><span class="pre">$OUTFILE</span></tt> variables, output redirection
+with <tt class="docutils literal"><span class="pre">></span></tt>, hook invocations (<tt class="docutils literal"><span class="pre">$CALL</span></tt>), environment variables
+(via <tt class="docutils literal"><span class="pre">$ENV</span></tt>) and the <tt class="docutils literal"><span class="pre">case</span></tt> construct.</li>
+<li><tt class="docutils literal"><span class="pre">join</span></tt> - this tool is a "join node" in the graph, i.e. it gets a
+list of input files and joins them together. Used for linkers.</li>
+<li><tt class="docutils literal"><span class="pre">sink</span></tt> - all command-line options that are not handled by other
+tools are passed to this tool.</li>
+<li><tt class="docutils literal"><span class="pre">actions</span></tt> - A single big <tt class="docutils literal"><span class="pre">case</span></tt> expression that specifies how
+this tool reacts on command-line options (described in more detail
+<a class="reference internal" href="#actions">below</a>).</li>
+</ul>
+</li>
+</ul>
+<div class="section" id="id5">
+<span id="actions"></span><h2><a class="toc-backref" href="#id18">Actions</a></h2>
+<p>A tool often needs to react to command-line options, and this is
+precisely what the <tt class="docutils literal"><span class="pre">actions</span></tt> property is for. The next example
+illustrates this feature:</p>
+<pre class="literal-block">
+def llvm_gcc_linker : Tool<[
+    (in_language "object-code"),
+    (out_language "executable"),
+    (output_suffix "out"),
+    (cmd_line "llvm-gcc $INFILE -o $OUTFILE"),
+    (join),
+    (actions (case (not_empty "L"), (forward "L"),
+                   (not_empty "l"), (forward "l"),
+                   (not_empty "dummy"),
+                             [(append_cmd "-dummy1"), (append_cmd "-dummy2")])
+    ]>;
+</pre>
+<p>The <tt class="docutils literal"><span class="pre">actions</span></tt> tool property is implemented on top of the omnipresent
+<tt class="docutils literal"><span class="pre">case</span></tt> expression. It associates one or more different <em>actions</em>
+with given conditions - in the example, the actions are <tt class="docutils literal"><span class="pre">forward</span></tt>,
+which forwards a given option unchanged, and <tt class="docutils literal"><span class="pre">append_cmd</span></tt>, which
+appends a given string to the tool execution command. Multiple actions
+can be associated with a single condition by using a list of actions
+(used in the example to append some dummy options). The same <tt class="docutils literal"><span class="pre">case</span></tt>
+construct can also be used in the <tt class="docutils literal"><span class="pre">cmd_line</span></tt> property to modify the
+tool command line.</p>
+<p>The "join" property used in the example means that this tool behaves
+like a linker.</p>
+<p>The list of all possible actions follows.</p>
+<ul>
+<li><p class="first">Possible actions:</p>
+<blockquote>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">append_cmd</span></tt> - Append a string to the tool invocation command.
+Example: <tt class="docutils literal"><span class="pre">(case</span> <span class="pre">(switch_on</span> <span class="pre">"pthread"),</span> <span class="pre">(append_cmd</span> <span class="pre">"-lpthread"))</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">error</span></tt> - Exit with error.
+Example: <tt class="docutils literal"><span class="pre">(error</span> <span class="pre">"Mixing</span> <span class="pre">-c</span> <span class="pre">and</span> <span class="pre">-S</span> <span class="pre">is</span> <span class="pre">not</span> <span class="pre">allowed!")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">warning</span></tt> - Print a warning.
+Example: <tt class="docutils literal"><span class="pre">(warning</span> <span class="pre">"Specifying</span> <span class="pre">both</span> <span class="pre">-O1</span> <span class="pre">and</span> <span class="pre">-O2</span> <span class="pre">is</span> <span class="pre">meaningless!")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">forward</span></tt> - Forward the option unchanged.
+Example: <tt class="docutils literal"><span class="pre">(forward</span> <span class="pre">"Wall")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">forward_as</span></tt> - Change the option's name, but forward the argument
+unchanged.
+Example: <tt class="docutils literal"><span class="pre">(forward_as</span> <span class="pre">"O0",</span> <span class="pre">"--disable-optimization")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">forward_value</span></tt> - Forward only option's value. Cannot be used with switch
+options (since they don't have values), but works fine with lists.
+Example: <tt class="docutils literal"><span class="pre">(forward_value</span> <span class="pre">"Wa,")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">forward_transformed_value</span></tt> - As above, but applies a hook to the
+option's value before forwarding (see <a class="reference internal" href="#hooks">below</a>). When
+<tt class="docutils literal"><span class="pre">forward_transformed_value</span></tt> is applied to a list
+option, the hook must have signature
+<tt class="docutils literal"><span class="pre">std::string</span> <span class="pre">hooks::HookName</span> <span class="pre">(const</span> <span class="pre">std::vector<std::string>&)</span></tt>.
+Example: <tt class="docutils literal"><span class="pre">(forward_transformed_value</span> <span class="pre">"m",</span> <span class="pre">"ConvertToMAttr")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">output_suffix</span></tt> - Modify the output suffix of this tool.
+Example: <tt class="docutils literal"><span class="pre">(output_suffix</span> <span class="pre">"i")</span></tt>.</li>
+<li><tt class="docutils literal"><span class="pre">stop_compilation</span></tt> - Stop compilation after this tool processes its
+input. Used without arguments.
+Example: <tt class="docutils literal"><span class="pre">(stop_compilation)</span></tt>.</li>
+</ul>
+</blockquote>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="language-map">
+<h1><a class="toc-backref" href="#id19">Language map</a></h1>
+<p>If you are adding support for a new language to LLVMC, you'll need to
+modify the language map, which defines mappings from file extensions
+to language names. It is used to choose the proper toolchain(s) for a
+given input file set. Language map definition looks like this:</p>
+<pre class="literal-block">
+def LanguageMap : LanguageMap<
+    [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>,
+     LangToSuffixes<"c", ["c"]>,
+     ...
+    ]>;
+</pre>
+<p>For example, without those definitions the following command wouldn't work:</p>
+<pre class="literal-block">
+$ llvmc hello.cpp
+llvmc: Unknown suffix: cpp
+</pre>
+<p>The language map entries are needed only for the tools that are linked from the
+root node. Since a tool can't have multiple output languages, for inner nodes of
+the graph the input and output languages should match. This is enforced at
+compile-time.</p>
+</div>
+<div class="section" id="option-preprocessor">
+<h1><a class="toc-backref" href="#id20">Option preprocessor</a></h1>
+<p>It is sometimes useful to run error-checking code before processing the
+compilation graph. For example, if optimization options "-O1" and "-O2" are
+implemented as switches, we might want to output a warning if the user invokes
+the driver with both of these options enabled.</p>
+<p>The <tt class="docutils literal"><span class="pre">OptionPreprocessor</span></tt> feature is reserved specially for these
+occasions. Example (adapted from the built-in Base plugin):</p>
+<pre class="literal-block">
+def Preprocess : OptionPreprocessor<
+(case (not (any_switch_on ["O0", "O1", "O2", "O3"])),
+           (set_option "O2"),
+      (and (switch_on "O3"), (any_switch_on ["O0", "O1", "O2"])),
+           (unset_option ["O0", "O1", "O2"]),
+      (and (switch_on "O2"), (any_switch_on ["O0", "O1"])),
+           (unset_option ["O0", "O1"]),
+      (and (switch_on "O1"), (switch_on "O0")),
+           (unset_option "O0"))
+>;
+</pre>
+<p>Here, <tt class="docutils literal"><span class="pre">OptionPreprocessor</span></tt> is used to unset all spurious <tt class="docutils literal"><span class="pre">-O</span></tt> options so
+that they are not forwarded to the compiler. If no optimization options are
+specified, <tt class="docutils literal"><span class="pre">-O2</span></tt> is enabled.</p>
+<p><tt class="docutils literal"><span class="pre">OptionPreprocessor</span></tt> is basically a single big <tt class="docutils literal"><span class="pre">case</span></tt> expression, which is
+evaluated only once right after the plugin is loaded. The only allowed actions
+in <tt class="docutils literal"><span class="pre">OptionPreprocessor</span></tt> are <tt class="docutils literal"><span class="pre">error</span></tt>, <tt class="docutils literal"><span class="pre">warning</span></tt>, and two special actions:
+<tt class="docutils literal"><span class="pre">unset_option</span></tt> and <tt class="docutils literal"><span class="pre">set_option</span></tt>. As their names suggest, they can be used to
+set or unset a given option. To set an option with <tt class="docutils literal"><span class="pre">set_option</span></tt>, use the
+two-argument form: <tt class="docutils literal"><span class="pre">(set_option</span> <span class="pre">"parameter",</span> <span class="pre">VALUE)</span></tt>. Here, <tt class="docutils literal"><span class="pre">VALUE</span></tt> can be
+either a string, a string list, or a boolean constant.</p>
+<p>For convenience, <tt class="docutils literal"><span class="pre">set_option</span></tt> and <tt class="docutils literal"><span class="pre">unset_option</span></tt> also work on lists. That
+is, instead of <tt class="docutils literal"><span class="pre">[(unset_option</span> <span class="pre">"A"),</span> <span class="pre">(unset_option</span> <span class="pre">"B")]</span></tt> you can use
+<tt class="docutils literal"><span class="pre">(unset_option</span> <span class="pre">["A",</span> <span class="pre">"B"])</span></tt>. Obviously, <tt class="docutils literal"><span class="pre">(set_option</span> <span class="pre">["A",</span> <span class="pre">"B"])</span></tt> is valid
+only if both <tt class="docutils literal"><span class="pre">A</span></tt> and <tt class="docutils literal"><span class="pre">B</span></tt> are switches.</p>
+</div>
+<div class="section" id="more-advanced-topics">
+<h1><a class="toc-backref" href="#id21">More advanced topics</a></h1>
+<div class="section" id="hooks-and-environment-variables">
+<span id="hooks"></span><h2><a class="toc-backref" href="#id22">Hooks and environment variables</a></h2>
+<p>Normally, LLVMC executes programs from the system <tt class="docutils literal"><span class="pre">PATH</span></tt>. Sometimes,
+this is not sufficient: for example, we may want to specify tool paths
+or names in the configuration file. This can be easily achieved via
+the hooks mechanism. To write your own hooks, just add their
+definitions to the <tt class="docutils literal"><span class="pre">PluginMain.cpp</span></tt> or drop a <tt class="docutils literal"><span class="pre">.cpp</span></tt> file into the
+your plugin directory. Hooks should live in the <tt class="docutils literal"><span class="pre">hooks</span></tt> namespace
+and have the signature <tt class="docutils literal"><span class="pre">std::string</span> <span class="pre">hooks::MyHookName</span> <span class="pre">([const</span> <span class="pre">char*</span>
+<span class="pre">Arg0</span> <span class="pre">[</span> <span class="pre">const</span> <span class="pre">char*</span> <span class="pre">Arg2</span> <span class="pre">[,</span> <span class="pre">...]]])</span></tt>. They can be used from the
+<tt class="docutils literal"><span class="pre">cmd_line</span></tt> tool property:</p>
+<pre class="literal-block">
+(cmd_line "$CALL(MyHook)/path/to/file -o $CALL(AnotherHook)")
+</pre>
+<p>To pass arguments to hooks, use the following syntax:</p>
+<pre class="literal-block">
+(cmd_line "$CALL(MyHook, 'Arg1', 'Arg2', 'Arg # 3')/path/to/file -o1 -o2")
+</pre>
+<p>It is also possible to use environment variables in the same manner:</p>
+<pre class="literal-block">
+(cmd_line "$ENV(VAR1)/path/to/file -o $ENV(VAR2)")
+</pre>
+<p>To change the command line string based on user-provided options use
+the <tt class="docutils literal"><span class="pre">case</span></tt> expression (documented <a class="reference internal" href="#case">above</a>):</p>
+<pre class="literal-block">
+(cmd_line
+  (case
+    (switch_on "E"),
+       "llvm-g++ -E -x c $INFILE -o $OUTFILE",
+    (default),
+       "llvm-g++ -c -x c $INFILE -o $OUTFILE -emit-llvm"))
+</pre>
+</div>
+<div class="section" id="how-plugins-are-loaded">
+<span id="priorities"></span><h2><a class="toc-backref" href="#id23">How plugins are loaded</a></h2>
+<p>It is possible for LLVMC plugins to depend on each other. For example,
+one can create edges between nodes defined in some other plugin. To
+make this work, however, that plugin should be loaded first. To
+achieve this, the concept of plugin priority was introduced. By
+default, every plugin has priority zero; to specify the priority
+explicitly, put the following line in your plugin's TableGen file:</p>
+<pre class="literal-block">
+def Priority : PluginPriority<$PRIORITY_VALUE>;
+# Where PRIORITY_VALUE is some integer > 0
+</pre>
+<p>Plugins are loaded in order of their (increasing) priority, starting
+with 0. Therefore, the plugin with the highest priority value will be
+loaded last.</p>
+</div>
+<div class="section" id="debugging">
+<h2><a class="toc-backref" href="#id24">Debugging</a></h2>
+<p>When writing LLVMC plugins, it can be useful to get a visual view of
+the resulting compilation graph. This can be achieved via the command
+line option <tt class="docutils literal"><span class="pre">--view-graph</span></tt>. This command assumes that <a class="reference external" href="http://www.graphviz.org/">Graphviz</a> and
+<a class="reference external" href="http://pages.cs.wisc.edu/~ghost/">Ghostview</a> are installed. There is also a <tt class="docutils literal"><span class="pre">--write-graph</span></tt> option that
+creates a Graphviz source file (<tt class="docutils literal"><span class="pre">compilation-graph.dot</span></tt>) in the
+current directory.</p>
+<p>Another useful <tt class="docutils literal"><span class="pre">llvmc</span></tt> option is <tt class="docutils literal"><span class="pre">--check-graph</span></tt>. It checks the
+compilation graph for common errors like mismatched output/input
+language names, multiple default edges and cycles. These checks can't
+be performed at compile-time because the plugins can load code
+dynamically. When invoked with <tt class="docutils literal"><span class="pre">--check-graph</span></tt>, <tt class="docutils literal"><span class="pre">llvmc</span></tt> doesn't
+perform any compilation tasks and returns the number of encountered
+errors as its status code.</p>
+</div>
+<div class="section" id="conditioning-on-the-executable-name">
+<h2><a class="toc-backref" href="#id25">Conditioning on the executable name</a></h2>
+<p>For now, the executable name (the value passed to the driver in <tt class="docutils literal"><span class="pre">argv[0]</span></tt>) is
+accessible only in the C++ code (i.e. hooks). Use the following code:</p>
+<pre class="literal-block">
+namespace llvmc {
+extern const char* ProgramName;
+}
+
+namespace hooks {
+
+std::string MyHook() {
+//...
+if (strcmp(ProgramName, "mydriver") == 0) {
+   //...
+
+}
+
+} // end namespace hooks
+</pre>
+<p>In general, you're encouraged not to make the behaviour dependent on the
+executable file name, and use command-line switches instead. See for example how
+the <tt class="docutils literal"><span class="pre">Base</span></tt> plugin behaves when it needs to choose the correct linker options
+(think <tt class="docutils literal"><span class="pre">g++</span></tt> vs. <tt class="docutils literal"><span class="pre">gcc</span></tt>).</p>
+<hr />
+<address>
+<a href="http://jigsaw.w3.org/css-validator/check/referer">
+<img src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
+   alt="Valid CSS" /></a>
+<a href="http://validator.w3.org/check?uri=referer">
+<img src="http://www.w3.org/Icons/valid-xhtml10-blue"
+   alt="Valid XHTML 1.0 Transitional"/></a>
+
+<a href="mailto:foldr at codedgers.com">Mikhail Glushenkov</a><br />
+<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br />
+
+Last modified: $Date: 2010-05-06 17:28:04 -0700 (Thu, 06 May 2010) $
+</address></div>
+</div>
+</div>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/CompilerDriverTutorial.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CompilerDriverTutorial.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CompilerDriverTutorial.html (added)
+++ www-releases/trunk/2.9/docs/CompilerDriverTutorial.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!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" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
+<title>Tutorial - Using LLVMC</title>
+<link rel="stylesheet" href="llvm.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="tutorial-using-llvmc">
+<h1 class="title">Tutorial - Using LLVMC</h1>
+
+<!-- This file was automatically generated by rst2html.
+Please do not edit directly!
+The ReST source lives in the directory 'tools/llvmc/doc'. -->
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#compiling-with-llvmc" id="id2">Compiling with LLVMC</a></li>
+<li><a class="reference internal" href="#using-llvmc-to-generate-toolchain-drivers" id="id3">Using LLVMC to generate toolchain drivers</a></li>
+</ul>
+</div>
+<div class="doc_author">
+<p>Written by <a href="mailto:foldr at codedgers.com">Mikhail Glushenkov</a></p>
+</div><div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
+<p>LLVMC is a generic compiler driver, which plays the same role for LLVM
+as the <tt class="docutils literal"><span class="pre">gcc</span></tt> program does for GCC - the difference being that LLVMC
+is designed to be more adaptable and easier to customize. Most of
+LLVMC functionality is implemented via plugins, which can be loaded
+dynamically or compiled in. This tutorial describes the basic usage
+and configuration of LLVMC.</p>
+</div>
+<div class="section" id="compiling-with-llvmc">
+<h1><a class="toc-backref" href="#id2">Compiling with LLVMC</a></h1>
+<p>In general, LLVMC tries to be command-line compatible with <tt class="docutils literal"><span class="pre">gcc</span></tt> as
+much as possible, so most of the familiar options work:</p>
+<pre class="literal-block">
+$ llvmc -O3 -Wall hello.cpp
+$ ./a.out
+hello
+</pre>
+<p>This will invoke <tt class="docutils literal"><span class="pre">llvm-g++</span></tt> under the hood (you can see which
+commands are executed by using the <tt class="docutils literal"><span class="pre">-v</span></tt> option). For further help on
+command-line LLVMC usage, refer to the <tt class="docutils literal"><span class="pre">llvmc</span> <span class="pre">--help</span></tt> output.</p>
+</div>
+<div class="section" id="using-llvmc-to-generate-toolchain-drivers">
+<h1><a class="toc-backref" href="#id3">Using LLVMC to generate toolchain drivers</a></h1>
+<p>LLVMC plugins are written mostly using <a class="reference external" href="http://llvm.org/docs/TableGenFundamentals.html">TableGen</a>, so you need to
+be familiar with it to get anything done.</p>
+<p>Start by compiling <tt class="docutils literal"><span class="pre">example/Simple</span></tt>, which is a primitive wrapper for
+<tt class="docutils literal"><span class="pre">gcc</span></tt>:</p>
+<pre class="literal-block">
+$ cd $LLVM_DIR/tools/llvmc
+$ cp -r example/Simple plugins/Simple
+
+  # NB: A less verbose way to compile standalone LLVMC-based drivers is
+  # described in the reference manual.
+
+$ make LLVMC_BASED_DRIVER_NAME=mygcc LLVMC_BUILTIN_PLUGINS=Simple
+$ cat > hello.c
+[...]
+$ mygcc hello.c
+$ ./hello.out
+Hello
+</pre>
+<p>Here we link our plugin with the LLVMC core statically to form an executable
+file called <tt class="docutils literal"><span class="pre">mygcc</span></tt>. It is also possible to build our plugin as a dynamic
+library to be loaded by the <tt class="docutils literal"><span class="pre">llvmc</span></tt> executable (or any other LLVMC-based
+standalone driver); this is described in the reference manual.</p>
+<p>Contents of the file <tt class="docutils literal"><span class="pre">Simple.td</span></tt> look like this:</p>
+<pre class="literal-block">
+// Include common definitions
+include "llvm/CompilerDriver/Common.td"
+
+// Tool descriptions
+def gcc : Tool<
+[(in_language "c"),
+ (out_language "executable"),
+ (output_suffix "out"),
+ (cmd_line "gcc $INFILE -o $OUTFILE"),
+ (sink)
+]>;
+
+// Language map
+def LanguageMap : LanguageMap<[LangToSuffixes<"c", ["c"]>]>;
+
+// Compilation graph
+def CompilationGraph : CompilationGraph<[Edge<"root", "gcc">]>;
+</pre>
+<p>As you can see, this file consists of three parts: tool descriptions,
+language map, and the compilation graph definition.</p>
+<p>At the heart of LLVMC is the idea of a compilation graph: vertices in
+this graph are tools, and edges represent a transformation path
+between two tools (for example, assembly source produced by the
+compiler can be transformed into executable code by an assembler). The
+compilation graph is basically a list of edges; a special node named
+<tt class="docutils literal"><span class="pre">root</span></tt> is used to mark graph entry points.</p>
+<p>Tool descriptions are represented as property lists: most properties
+in the example above should be self-explanatory; the <tt class="docutils literal"><span class="pre">sink</span></tt> property
+means that all options lacking an explicit description should be
+forwarded to this tool.</p>
+<p>The <tt class="docutils literal"><span class="pre">LanguageMap</span></tt> associates a language name with a list of suffixes
+and is used for deciding which toolchain corresponds to a given input
+file.</p>
+<p>To learn more about LLVMC customization, refer to the reference
+manual and plugin source code in the <tt class="docutils literal"><span class="pre">plugins</span></tt> directory.</p>
+<hr />
+<address>
+<a href="http://jigsaw.w3.org/css-validator/check/referer">
+<img src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
+   alt="Valid CSS" /></a>
+<a href="http://validator.w3.org/check?uri=referer">
+<img src="http://www.w3.org/Icons/valid-xhtml10-blue"
+   alt="Valid XHTML 1.0 Transitional"/></a>
+
+<a href="mailto:foldr at codedgers.com">Mikhail Glushenkov</a><br />
+<a href="http://llvm.org">LLVM Compiler Infrastructure</a><br />
+
+Last modified: $Date: 2008-12-11 11:34:48 -0600 (Thu, 11 Dec 2008) $
+</address></div>
+</div>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/CompilerWriterInfo.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/CompilerWriterInfo.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/CompilerWriterInfo.html (added)
+++ www-releases/trunk/2.9/docs/CompilerWriterInfo.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,263 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Architecture/platform information for compiler writers</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+
+<body>
+
+<div class="doc_title">
+  Architecture/platform information for compiler writers
+</div>
+
+<div class="doc_warning">
+  <p>Note: This document is a work-in-progress.  Additions and clarifications
+  are welcome.</p>
+</div>
+
+<ol>
+  <li><a href="#hw">Hardware</a>
+  <ol>
+    <li><a href="#alpha">Alpha</a></li>
+    <li><a href="#arm">ARM</a></li>
+    <li><a href="#ia64">Itanium</a></li>
+    <li><a href="#mips">MIPS</a></li>
+    <li><a href="#ppc">PowerPC</a></li>
+    <li><a href="#sparc">SPARC</a></li>
+    <li><a href="#x86">X86</a></li>
+    <li><a href="#other">Other lists</a></li>
+  </ol></li>
+  <li><a href="#abi">Application Binary Interface (ABI)</a>
+  <ol>
+    <li><a href="#linux">Linux</a></li>
+    <li><a href="#osx">OS X</a></li>
+  </ol></li>
+  <li><a href="#misc">Miscellaneous resources</a></li>
+</ol>
+
+<div class="doc_author">
+  <p>Compiled by <a href="http://misha.brukman.net">Misha Brukman</a></p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="hw">Hardware</a></div>
+<!-- *********************************************************************** -->
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="alpha">Alpha</a></div>
+
+<div class="doc_text">
+<ul>
+<li><a
+href="http://ftp.digital.com/pub/Digital/info/semiconductor/literature/dsc-library.html">Alpha manuals</a> 
+</li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="arm">ARM</a></div>
+
+<div class="doc_text">
+<ul>
+<li><a href="http://www.arm.com/documentation/">ARM documentation</a> 
+(<a href="http://www.arm.com/documentation/ARMProcessor_Cores/">Processor
+Cores</a>)</li>
+<li><a href="http://www.arm.com/products/DevTools/ABI.html">ABI</a></li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="ia64">Itanium (ia64)</a></div>
+
+<div class="doc_text">
+<ul>
+<li><a
+href="http://developer.intel.com/design/itanium2/documentation.htm">Itanium documentation</a> 
+</li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="mips">MIPS</a></div>
+
+<div class="doc_text">
+<ul>
+<li><a
+href="http://mips.com/content/Documentation/MIPSDocumentation/ProcessorArchitecture/doclibrary">MIPS
+Processor Architecture</a></li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="ppc">PowerPC</a></div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">IBM - Official manuals and docs</div>
+
+<div class="doc_text">
+
+<ul>
+<li><a
+href="http://www-106.ibm.com/developerworks/eserver/articles/archguide.html">PowerPC
+Architecture Book</a>
+<ul>
+  <li>Book I: <a
+  href="http://www-106.ibm.com/developerworks/eserver/pdfs/archpub1.pdf">PowerPC
+  User Instruction Set Architecture</a></li>
+  <li>Book II: <a
+  href="http://www-106.ibm.com/developerworks/eserver/pdfs/archpub2.pdf">PowerPC
+  Virtual Environment Architecture</a></li>
+  <li>Book III: <a
+  href="http://www-106.ibm.com/developerworks/eserver/pdfs/archpub3.pdf">PowerPC
+  Operating Environment Architecture</a></li>
+</ul></li>
+<li><a
+href="http://www-3.ibm.com/chips/techlib/techlib.nsf/techdocs/852569B20050FF7785256996007558C6">PowerPC
+Compiler Writer's Guide</a></li>
+<li><A
+href="http://www-3.ibm.com/chips/techlib/techlib.nsf/products/PowerPC">PowerPC
+Processor Manuals</a></li>
+<li><a
+href="http://www-106.ibm.com/developerworks/linux/library/l-powarch/">Intro to
+PowerPC architecture</a></li>
+<li><a href="http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixassem/alangref/alangreftfrm.htm">IBM AIX/5L for POWER Assembly reference</a></li>
+</ul>
+
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">Other documents, collections, notes</div>
+
+<div class="doc_text">
+
+<ul>
+<li><a href="http://penguinppc.org/dev/#library">PowerPC ABI documents</a></li>
+<li><a href="http://gcc.gnu.org/ml/gcc-patches/2003-09/msg00997.html">PowerPC64
+alignment of long doubles (from GCC)</a></li>
+<li><a href="http://sources.redhat.com/ml/binutils/2002-04/msg00573.html">Long
+branch stubs for powerpc64-linux (from binutils)</a></li>
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="sparc">SPARC</a></div>
+
+<div class="doc_text">
+
+<ul>
+<li><a href="http://www.sparc.org/resource.htm">SPARC resources</a></li>
+<li><a href="http://www.sparc.org/standards.html">SPARC standards</a></li>
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="x86">X86</a></div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">AMD - Official manuals and docs</div>
+
+<div class="doc_text">
+<ul>
+<li><a
+href="http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739,00.html">AMD processor manuals</a></li>
+<li><a href="http://www.x86-64.org/documentation">X86-64 ABI</a></li>
+</ul>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">Intel - Official manuals and docs</div>
+
+<div class="doc_text">
+<ul>
+<li><a
+href="http://developer.intel.com/design/pentium4/manuals/index_new.htm">IA-32
+manuals</a></li>
+<li><a
+href="http://www.intel.com/design/itanium/documentation.htm?iid=ipp_srvr_proc_itanium2+techdocs">Intel
+Itanium documentation</a></li>
+</ul>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection">Other x86-specific information</div>
+
+<div class="doc_text">
+<ul>
+<li><a href="http://www.agner.org/assem/calling_conventions.pdf">Calling
+conventions for different C++ compilers and operating systems</a></li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="other">Other relevant lists</a></div>
+
+<div class="doc_text">
+
+<ul>
+<li><a href="http://gcc.gnu.org/readings.html">GCC reading list</a></li>
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="abi">ABI</a></div>
+<!-- *********************************************************************** -->
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="linux">Linux</a></div>
+
+<div class="doc_text">
+<ol>
+<li><a href="http://www.linuxbase.org/spec/ELF/ppc64/">PowerPC 64-bit ELF ABI
+Supplement</a></li>
+</ol>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="osx">OS X</a></div>
+
+<div class="doc_text">
+<ol>
+<li><a
+href="http://developer.apple.com/documentation/Darwin/RuntimeArchitecture-date.html">Mach-O
+Runtime Architecture</a></li>
+<li><a href="http://www.unsanity.org/archives/000044.php">Notes on Mach-O
+ABI</a></li>
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="misc">Miscellaneous resources</a></div>
+<!-- *********************************************************************** -->
+
+<ul>
+<li><a
+href="http://www.nondot.org/sabre/os/articles/ExecutableFileFormats/">Executable
+File Format library</a></li>
+<li><a href="http://gcc.gnu.org/projects/prefetch.html">GCC prefetch project</a>
+page has a good survey of the prefetching capabilities of a variety of modern
+processors.</li>
+</ul>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="http://misha.brukman.net">Misha Brukman</a><br>
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-05-06 17:28:04 -0700 (Thu, 06 May 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/DebuggingJITedCode.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/DebuggingJITedCode.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/DebuggingJITedCode.html (added)
+++ www-releases/trunk/2.9/docs/DebuggingJITedCode.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Debugging JITed Code With GDB</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">Debugging JITed Code With GDB</div>
+<ol>
+  <li><a href="#example">Example usage</a></li>
+  <li><a href="#background">Background</a></li>
+</ol>
+<div class="doc_author">Written by Reid Kleckner</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="example">Example usage</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+
+<p>In order to debug code JITed by LLVM, you need GDB 7.0 or newer, which is
+available on most modern distributions of Linux.  The version of GDB that Apple
+ships with XCode has been frozen at 6.3 for a while.  LLDB may be a better
+option for debugging JITed code on Mac OS X.
+</p>
+
+<p>Consider debugging the following code compiled with clang and run through
+lli:
+</p>
+
+<pre class="doc_code">
+#include <stdio.h>
+
+void foo() {
+    printf("%d\n", *(int*)NULL);  // Crash here
+}
+
+void bar() {
+    foo();
+}
+
+void baz() {
+    bar();
+}
+
+int main(int argc, char **argv) {
+    baz();
+}
+</pre>
+
+<p>Here are the commands to run that application under GDB and print the stack
+trace at the crash:
+</p>
+
+<pre class="doc_code">
+# Compile foo.c to bitcode.  You can use either clang or llvm-gcc with this
+# command line.  Both require -fexceptions, or the calls are all marked
+# 'nounwind' which disables DWARF exception handling info.  Custom frontends
+# should avoid adding this attribute to JITed code, since it interferes with
+# DWARF CFA generation at the moment.
+$ clang foo.c -fexceptions -emit-llvm -c -o foo.bc
+
+# Run foo.bc under lli with -jit-emit-debug.  If you built lli in debug mode,
+# -jit-emit-debug defaults to true.
+$ $GDB_INSTALL/gdb --args lli -jit-emit-debug foo.bc
+...
+
+# Run the code.
+(gdb) run
+Starting program: /tmp/gdb/lli -jit-emit-debug foo.bc
+[Thread debugging using libthread_db enabled]
+
+Program received signal SIGSEGV, Segmentation fault.
+0x00007ffff7f55164 in foo ()
+
+# Print the backtrace, this time with symbols instead of ??.
+(gdb) bt
+#0  0x00007ffff7f55164 in foo ()
+#1  0x00007ffff7f550f9 in bar ()
+#2  0x00007ffff7f55099 in baz ()
+#3  0x00007ffff7f5502a in main ()
+#4  0x00000000007c0225 in llvm::JIT::runFunction(llvm::Function*,
+    std::vector<llvm::GenericValue,
+    std::allocator<llvm::GenericValue> > const&) ()
+#5  0x00000000007d6d98 in
+    llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*,
+    std::vector<std::string,
+    std::allocator<std::string> > const&, char const* const*) ()
+#6  0x00000000004dab76 in main ()
+</pre>
+
+<p>As you can see, GDB can correctly unwind the stack and has the appropriate
+function names.
+</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="background">Background</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+
+<p>Without special runtime support, debugging dynamically generated code with
+GDB (as well as most debuggers) can be quite painful.  Debuggers generally read
+debug information from the object file of the code, but for JITed code, there is
+no such file to look for.
+</p>
+
+<p>Depending on the architecture, this can impact the debugging experience in
+different ways.  For example, on most 32-bit x86 architectures, you can simply
+compile with -fno-omit-frame-pointer for GCC and -disable-fp-elim for LLVM.
+When GDB creates a backtrace, it can properly unwind the stack, but the stack
+frames owned by JITed code have ??'s instead of the appropriate symbol name.
+However, on Linux x86_64 in particular, GDB relies on the DWARF call frame
+address (CFA) debug information to unwind the stack, so even if you compile
+your program to leave the frame pointer untouched, GDB will usually be unable
+to unwind the stack past any JITed code stack frames.
+</p>
+
+<p>In order to communicate the necessary debug info to GDB, an interface for
+registering JITed code with debuggers has been designed and implemented for
+GDB and LLVM.  At a high level, whenever LLVM generates new machine code, it
+also generates an object file in memory containing the debug information.  LLVM
+then adds the object file to the global list of object files and calls a special
+function (__jit_debug_register_code) marked noinline that GDB knows about.  When
+GDB attaches to a process, it puts a breakpoint in this function and loads all
+of the object files in the global list.  When LLVM calls the registration
+function, GDB catches the breakpoint signal, loads the new object file from
+LLVM's memory, and resumes the execution.  In this way, GDB can get the
+necessary debug information.
+</p>
+
+<p>At the time of this writing, LLVM only supports architectures that use ELF
+object files and it only generates symbols and DWARF CFA information.  However,
+it would be easy to add more information to the object file, so we don't need to
+coordinate with GDB to get better debug information.
+</p>
+</div>
+
+<!-- *********************************************************************** -->
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+  <a href="mailto:reid.kleckner at gmail.com">Reid Kleckner</a><br>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-07-07 13:16:45 -0700 (Wed, 07 Jul 2010) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/DeveloperPolicy.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/DeveloperPolicy.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/DeveloperPolicy.html (added)
+++ www-releases/trunk/2.9/docs/DeveloperPolicy.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,618 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>LLVM Developer Policy</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+      
+<div class="doc_title">LLVM Developer Policy</div>
+<ol>
+  <li><a href="#introduction">Introduction</a></li>
+  <li><a href="#policies">Developer Policies</a>
+  <ol>
+    <li><a href="#informed">Stay Informed</a></li>
+    <li><a href="#patches">Making a Patch</a></li>
+    <li><a href="#reviews">Code Reviews</a></li>
+    <li><a href="#owners">Code Owners</a></li>
+    <li><a href="#testcases">Test Cases</a></li>
+    <li><a href="#quality">Quality</a></li>
+    <li><a href="#commitaccess">Obtaining Commit Access</a></li>
+    <li><a href="#newwork">Making a Major Change</a></li>
+    <li><a href="#incremental">Incremental Development</a></li>
+    <li><a href="#attribution">Attribution of Changes</a></li>
+  </ol></li>
+  <li><a href="#clp">Copyright, License, and Patents</a>
+  <ol>
+    <li><a href="#copyright">Copyright</a></li>
+    <li><a href="#license">License</a></li>
+    <li><a href="#patents">Patents</a></li>
+  </ol></li>
+</ol>
+<div class="doc_author">Written by the LLVM Oversight Team</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="introduction">Introduction</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+<p>This document contains the LLVM Developer Policy which defines the project's
+   policy towards developers and their contributions. The intent of this policy
+   is to eliminate miscommunication, rework, and confusion that might arise from
+   the distributed nature of LLVM's development.  By stating the policy in clear
+   terms, we hope each developer can know ahead of time what to expect when
+   making LLVM contributions.  This policy covers all llvm.org subprojects,
+   including Clang, LLDB, etc.</p>
+<p>This policy is also designed to accomplish the following objectives:</p>
+
+<ol>
+  <li>Attract both users and developers to the LLVM project.</li>
+
+  <li>Make life as simple and easy for contributors as possible.</li>
+
+  <li>Keep the top of Subversion trees as stable as possible.</li>
+</ol>
+  
+<p>This policy is aimed at frequent contributors to LLVM. People interested in
+   contributing one-off patches can do so in an informal way by sending them to
+   the
+   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits
+   mailing list</a> and engaging another developer to see it through the
+   process.</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="policies">Developer Policies</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+<p>This section contains policies that pertain to frequent LLVM developers.  We
+   always welcome <a href="#patches">one-off patches</a> from people who do not
+   routinely contribute to LLVM, but we expect more from frequent contributors
+   to keep the system as efficient as possible for everyone.  Frequent LLVM
+   contributors are expected to meet the following requirements in order for
+   LLVM to maintain a high standard of quality.<p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="informed">Stay Informed</a> </div>
+<div class="doc_text">
+<p>Developers should stay informed by reading at least the "dev" mailing list
+   for the projects you are interested in, such as 
+   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> for
+   LLVM, <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
+   for Clang, or <a
+   href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">lldb-dev</a>
+   for LLDB.  If you are doing anything more than just casual work on LLVM, it
+   is suggested that you also subscribe to the "commits" mailing list for the
+   subproject you're interested in, such as
+  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>,
+  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>,
+  or <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits">lldb-commits</a>.
+   Reading the "commits" list and paying attention to changes being made by
+   others is a good way to see what other people are interested in and watching
+   the flow of the project as a whole.</p>
+
+<p>We recommend that active developers register an email account with 
+   <a href="http://llvm.org/bugs/">LLVM Bugzilla</a> and preferably subscribe to
+   the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs">llvm-bugs</a>
+   email list to keep track of bugs and enhancements occurring in LLVM.  We
+   really appreciate people who are proactive at catching incoming bugs in their
+   components and dealing with them promptly.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="patches">Making a Patch</a></div>
+
+<div class="doc_text">
+<p>When making a patch for review, the goal is to make it as easy for the
+   reviewer to read it as possible.  As such, we recommend that you:</p>
+
+<ol>
+  <li>Make your patch against the Subversion trunk, not a branch, and not an old
+      version of LLVM.  This makes it easy to apply the patch.  For information
+      on how to check out SVN trunk, please see the <a
+      href="GettingStarted.html#checkout">Getting Started Guide</a>.</li>
+        
+  <li>Similarly, patches should be submitted soon after they are generated.  Old
+      patches may not apply correctly if the underlying code changes between the
+      time the patch was created and the time it is applied.</li>
+
+  <li>Patches should be made with <tt>svn diff</tt>, or similar. If you use
+      a different tool, make sure it uses the <tt>diff -u</tt> format and
+      that it doesn't contain clutter which makes it hard to read.</li>
+
+  <li>If you are modifying generated files, such as the top-level
+      <tt>configure</tt> script, please separate out those changes into
+      a separate patch from the rest of your changes.</li>
+</ol>
+  
+<p>When sending a patch to a mailing list, it is a good idea to send it as an
+   <em>attachment</em> to the message, not embedded into the text of the
+   message.  This ensures that your mailer will not mangle the patch when it
+   sends it (e.g. by making whitespace changes or by wrapping lines).</p>
+
+<p><em>For Thunderbird users:</em> Before submitting a patch, please open 
+   <em>Preferences → Advanced → General → Config Editor</em>,
+   find the key <tt>mail.content_disposition_type</tt>, and set its value to
+   <tt>1</tt>. Without this setting, Thunderbird sends your attachment using
+   <tt>Content-Disposition: inline</tt> rather than <tt>Content-Disposition:
+   attachment</tt>. Apple Mail gamely displays such a file inline, making it
+   difficult to work with for reviewers using that program.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="reviews">Code Reviews</a></div>
+<div class="doc_text">
+<p>LLVM has a code review policy. Code review is one way to increase the quality
+   of software. We generally follow these policies:</p>
+
+<ol>
+  <li>All developers are required to have significant changes reviewed before
+      they are committed to the repository.</li>
+
+  <li>Code reviews are conducted by email, usually on the llvm-commits
+      list.</li>
+
+  <li>Code can be reviewed either before it is committed or after.  We expect
+      major changes to be reviewed before being committed, but smaller changes
+      (or changes where the developer owns the component) can be reviewed after
+      commit.</li>
+
+  <li>The developer responsible for a code change is also responsible for making
+      all necessary review-related changes.</li>
+
+  <li>Code review can be an iterative process, which continues until the patch
+      is ready to be committed.</li>
+</ol>
+  
+<p>Developers should participate in code reviews as both reviewers and
+   reviewees. If someone is kind enough to review your code, you should return
+   the favor for someone else.  Note that anyone is welcome to review and give
+   feedback on a patch, but only people with Subversion write access can approve
+   it.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="owners">Code Owners</a></div>
+<div class="doc_text">
+
+<p>The LLVM Project relies on two features of its process to maintain rapid
+   development in addition to the high quality of its source base: the
+   combination of code review plus post-commit review for trusted maintainers.
+   Having both is a great way for the project to take advantage of the fact that
+   most people do the right thing most of the time, and only commit patches
+   without pre-commit review when they are confident they are right.</p>
+     
+<p>The trick to this is that the project has to guarantee that all patches that
+   are committed are reviewed after they go in: you don't want everyone to
+   assume someone else will review it, allowing the patch to go unreviewed.  To
+   solve this problem, we have a notion of an 'owner' for a piece of the code.
+   The sole responsibility of a code owner is to ensure that a commit to their
+   area of the code is appropriately reviewed, either by themself or by someone
+   else.  The current code owners are:</p>
+  
+<ol>
+  <li><b>Evan Cheng</b>: Code generator and all targets.</li>
+
+  <li><b>Greg Clayton</b>: LLDB.</li>
+
+  <li><b>Doug Gregor</b>: Clang Frontend Libraries.</li>
+
+  <li><b>Howard Hinnant</b>: libc++.</li>
+
+  <li><b>Anton Korobeynikov</b>: Exception handling, debug information, and
+      Windows codegen.</li>
+
+  <li><b>Ted Kremenek</b>: Clang Static Analyzer.</li>
+
+  <li><b>Chris Lattner</b>: Everything not covered by someone else.</li>
+  
+  <li><b>Duncan Sands</b>: llvm-gcc 4.2.</li>
+</ol>
+  
+<p>Note that code ownership is completely different than reviewers: anyone can
+   review a piece of code, and we welcome code review from anyone who is
+   interested.  Code owners are the "last line of defense" to guarantee that all
+   patches that are committed are actually reviewed.</p>
+
+<p>Being a code owner is a somewhat unglamorous position, but it is incredibly
+   important for the ongoing success of the project.  Because people get busy,
+   interests change, and unexpected things happen, code ownership is purely
+   opt-in, and anyone can choose to resign their "title" at any time. For now,
+   we do not have an official policy on how one gets elected to be a code
+   owner.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="testcases">Test Cases</a></div>
+<div class="doc_text">
+<p>Developers are required to create test cases for any bugs fixed and any new
+   features added.  Some tips for getting your testcase approved:</p>
+
+<ol>
+  <li>All feature and regression test cases are added to the 
+      <tt>llvm/test</tt> directory. The appropriate sub-directory should be
+      selected (see the <a href="TestingGuide.html">Testing Guide</a> for
+      details).</li>
+
+  <li>Test cases should be written in <a href="LangRef.html">LLVM assembly
+      language</a> unless the feature or regression being tested requires
+      another language (e.g. the bug being fixed or feature being implemented is
+      in the llvm-gcc C++ front-end, in which case it must be written in
+      C++).</li>
+
+  <li>Test cases, especially for regressions, should be reduced as much as
+      possible, by <a href="Bugpoint.html">bugpoint</a> or manually. It is
+      unacceptable to place an entire failing program into <tt>llvm/test</tt> as
+      this creates a <i>time-to-test</i> burden on all developers. Please keep
+      them short.</li>
+</ol>
+  
+<p>Note that llvm/test and clang/test are designed for regression and small
+   feature tests only. More extensive test cases (e.g., entire applications,
+   benchmarks, etc)
+   should be added to the <tt>llvm-test</tt> test suite.  The llvm-test suite is
+   for coverage (correctness, performance, etc) testing, not feature or
+   regression testing.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="quality">Quality</a></div>
+<div class="doc_text">
+<p>The minimum quality standards that any change must satisfy before being
+   committed to the main development branch are:</p>
+
+<ol>
+  <li>Code must adhere to the <a href="CodingStandards.html">LLVM Coding
+      Standards</a>.</li>
+
+  <li>Code must compile cleanly (no errors, no warnings) on at least one
+      platform.</li>
+
+  <li>Bug fixes and new features should <a href="#testcases">include a
+      testcase</a> so we know if the fix/feature ever regresses in the
+      future.</li>
+
+  <li>Code must pass the <tt>llvm/test</tt> test suite.</li>
+
+  <li>The code must not cause regressions on a reasonable subset of llvm-test,
+      where "reasonable" depends on the contributor's judgement and the scope of
+      the change (more invasive changes require more testing). A reasonable
+      subset might be something like
+      "<tt>llvm-test/MultiSource/Benchmarks</tt>".</li>
+</ol>
+
+<p>Additionally, the committer is responsible for addressing any problems found
+   in the future that the change is responsible for.  For example:</p>
+
+<ul>
+  <li>The code should compile cleanly on all supported platforms.</li>
+
+  <li>The changes should not cause any correctness regressions in the
+      <tt>llvm-test</tt> suite and must not cause any major performance
+      regressions.</li>
+
+  <li>The change set should not cause performance or correctness regressions for
+      the LLVM tools.</li>
+
+  <li>The changes should not cause performance or correctness regressions in
+      code compiled by LLVM on all applicable targets.</li>
+
+  <li>You are expected to address any <a href="http://llvm.org/bugs/">bugzilla
+      bugs</a> that result from your change.</li>
+</ul>
+  
+<p>We prefer for this to be handled before submission but understand that it
+   isn't possible to test all of this for every submission.  Our build bots and
+   nightly testing infrastructure normally finds these problems.  A good rule of
+   thumb is to check the nightly testers for regressions the day after your
+   change.  Build bots will directly email you if a group of commits that
+   included yours caused a failure.  You are expected to check the build bot
+   messages to see if they are your fault and, if so, fix the breakage.</p>
+
+<p>Commits that violate these quality standards (e.g. are very broken) may be
+   reverted. This is necessary when the change blocks other developers from
+   making progress. The developer is welcome to re-commit the change after the
+   problem has been fixed.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection">
+  <a name="commitaccess">Obtaining Commit Access</a></div>
+<div class="doc_text">
+
+<p>We grant commit access to contributors with a track record of submitting high
+   quality patches.  If you would like commit access, please send an email to
+   <a href="mailto:sabre at nondot.org">Chris</a> with the following
+   information:</p>
+
+<ol>
+  <li>The user name you want to commit with, e.g. "hacker".</li>
+
+  <li>The full name and email address you want message to llvm-commits to come
+      from, e.g. "J. Random Hacker <hacker at yoyodyne.com>".</li>
+
+  <li>A "password hash" of the password you want to use, e.g. "2ACR96qjUqsyM".  
+      Note that you don't ever tell us what your password is, you just give it
+      to us in an encrypted form.  To get this, run "htpasswd" (a utility that
+      comes with apache) in crypt mode (often enabled with "-d"), or find a web
+      page that will do it for you.</li>
+</ol>
+
+<p>Once you've been granted commit access, you should be able to check out an
+   LLVM tree with an SVN URL of "https://username@llvm.org/..." instead of the
+   normal anonymous URL of "http://llvm.org/...".  The first time you commit
+   you'll have to type in your password.  Note that you may get a warning from
+   SVN about an untrusted key, you can ignore this.  To verify that your commit
+   access works, please do a test commit (e.g. change a comment or add a blank
+   line).  Your first commit to a repository may require the autogenerated email
+   to be approved by a mailing list.  This is normal, and will be done when
+   the mailing list owner has time.</p>
+
+<p>If you have recently been granted commit access, these policies apply:</p>
+
+<ol>
+  <li>You are granted <i>commit-after-approval</i> to all parts of LLVM.  To get
+      approval, submit a <a href="#patches">patch</a> to
+      <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>.
+      When approved you may commit it yourself.</li>
+
+  <li>You are allowed to commit patches without approval which you think are
+      obvious. This is clearly a subjective decision — we simply expect
+      you to use good judgement.  Examples include: fixing build breakage,
+      reverting obviously broken patches, documentation/comment changes, any
+      other minor changes.</li>
+
+  <li>You are allowed to commit patches without approval to those portions of
+      LLVM that you have contributed or maintain (i.e., have been assigned
+      responsibility for), with the proviso that such commits must not break the
+      build.  This is a "trust but verify" policy and commits of this nature are
+      reviewed after they are committed.</li>
+
+  <li>Multiple violations of these policies or a single egregious violation may
+      cause commit access to be revoked.</li>
+</ol>
+
+<p>In any case, your changes are still subject to <a href="#reviews">code
+   review</a> (either before or after they are committed, depending on the
+   nature of the change).  You are encouraged to review other peoples' patches
+   as well, but you aren't required to.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="newwork">Making a Major Change</a></div>
+<div class="doc_text">
+<p>When a developer begins a major new project with the aim of contributing it
+   back to LLVM, s/he should inform the community with an email to
+   the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a>
+   email list, to the extent possible. The reason for this is to:
+
+<ol>
+  <li>keep the community informed about future changes to LLVM, </li>
+
+  <li>avoid duplication of effort by preventing multiple parties working on the
+      same thing and not knowing about it, and</li>
+
+  <li>ensure that any technical issues around the proposed work are discussed
+      and resolved before any significant work is done.</li>
+</ol>
+  
+<p>The design of LLVM is carefully controlled to ensure that all the pieces fit
+   together well and are as consistent as possible. If you plan to make a major
+   change to the way LLVM works or want to add a major new extension, it is a
+   good idea to get consensus with the development community before you start
+   working on it.</p>
+  
+<p>Once the design of the new feature is finalized, the work itself should be
+   done as a series of <a href="#incremental">incremental changes</a>, not as a
+   long-term development branch.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"> <a name="incremental">Incremental Development</a>
+</div>
+<div class="doc_text">
+<p>In the LLVM project, we do all significant changes as a series of incremental
+   patches.  We have a strong dislike for huge changes or long-term development
+   branches.  Long-term development branches have a number of drawbacks:</p>
+
+<ol>
+  <li>Branches must have mainline merged into them periodically.  If the branch
+      development and mainline development occur in the same pieces of code,
+      resolving merge conflicts can take a lot of time.</li>
+
+  <li>Other people in the community tend to ignore work on branches.</li>
+
+  <li>Huge changes (produced when a branch is merged back onto mainline) are
+      extremely difficult to <a href="#reviews">code review</a>.</li>
+
+  <li>Branches are not routinely tested by our nightly tester
+      infrastructure.</li>
+
+  <li>Changes developed as monolithic large changes often don't work until the
+      entire set of changes is done.  Breaking it down into a set of smaller
+      changes increases the odds that any of the work will be committed to the
+      main repository.</li>
+</ol>    
+  
+<p>To address these problems, LLVM uses an incremental development style and we
+   require contributors to follow this practice when making a large/invasive
+   change.  Some tips:</p>
+
+<ul>
+  <li>Large/invasive changes usually have a number of secondary changes that are
+      required before the big change can be made (e.g. API cleanup, etc).  These
+      sorts of changes can often be done before the major change is done,
+      independently of that work.</li>
+
+  <li>The remaining inter-related work should be decomposed into unrelated sets
+      of changes if possible.  Once this is done, define the first increment and
+      get consensus on what the end goal of the change is.</li>
+
+  <li>Each change in the set can be stand alone (e.g. to fix a bug), or part of
+      a planned series of changes that works towards the development goal.</li>
+    
+  <li>Each change should be kept as small as possible. This simplifies your work
+      (into a logical progression), simplifies code review and reduces the
+      chance that you will get negative feedback on the change. Small increments
+      also facilitate the maintenance of a high quality code base.</li>
+
+  <li>Often, an independent precursor to a big change is to add a new API and
+      slowly migrate clients to use the new API.  Each change to use the new API
+      is often "obvious" and can be committed without review.  Once the new API
+      is in place and used, it is much easier to replace the underlying
+      implementation of the API.  This implementation change is logically
+      separate from the API change.</li>
+</ul>
+  
+<p>If you are interested in making a large change, and this scares you, please
+   make sure to first <a href="#newwork">discuss the change/gather consensus</a>
+   then ask about the best way to go about making the change.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"><a name="attribution">Attribution of 
+Changes</a></div>
+<div class="doc_text">
+<p>We believe in correct attribution of contributions to their contributors.
+   However, we do not want the source code to be littered with random
+   attributions "this code written by J. Random Hacker" (this is noisy and
+   distracting).  In practice, the revision control system keeps a perfect
+   history of who changed what, and the CREDITS.txt file describes higher-level
+   contributions.  If you commit a patch for someone else, please say "patch
+   contributed by J. Random Hacker!" in the commit message.</p>
+
+<p>Overall, please do not add contributor names to the source code.</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_section">
+  <a name="clp">Copyright, License, and Patents</a>
+</div>
+<!--=========================================================================-->
+
+<div class="doc_text">
+<p>This section addresses the issues of copyright, license and patents for the
+   LLVM project.  Currently, the University of Illinois is the LLVM copyright
+   holder and the terms of its license to LLVM users and developers is the
+   <a href="http://www.opensource.org/licenses/UoI-NCSA.php">University of 
+   Illinois/NCSA Open Source License</a>.</p>
+
+<div class="doc_notes">
+<p style="text-align:center;font-weight:bold">NOTE: This section deals with
+   legal matters but does not provide legal advice.  We are not lawyers, please
+   seek legal counsel from an attorney.</p>
+</div>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"><a name="copyright">Copyright</a></div>
+<div class="doc_text">
+
+<p>The LLVM project does not require copyright assignments, which means that the
+   copyright for the code in the project is held by its respective contributors
+   who have each agreed to release their contributed code under the terms of the
+   <a href="#license">LLVM License</a>.</p>
+   
+<p>An implication of this is that the LLVM license is unlikely to ever change:
+   changing it would require tracking down all the contributors to LLVM and
+   getting them to agree that a license change is acceptable for their
+   contribution.  Since there are no plans to change the license, this is not a
+   cause for concern.</p>
+   
+<p>As a contributor to the project, this means that you (or your company) retain
+   ownership of the code you contribute, that it cannot be used in a way that
+   contradicts the license (which is a liberal BSD-style license), and that the
+   license for your contributions won't change without your approval in the
+   future.</p>
+   
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"><a name="license">License</a></div>
+<div class="doc_text">
+<p>We intend to keep LLVM perpetually open source and to use a liberal open
+   source license. All of the code in LLVM is available under the
+   <a href="http://www.opensource.org/licenses/UoI-NCSA.php">University of
+   Illinois/NCSA Open Source License</a>, which boils down to this:</p>
+
+<ul>
+  <li>You can freely distribute LLVM.</li>
+  <li>You must retain the copyright notice if you redistribute LLVM.</li>
+  <li>Binaries derived from LLVM must reproduce the copyright notice (e.g. in an
+      included readme file).</li>
+  <li>You can't use our names to promote your LLVM derived products.</li>
+  <li>There's no warranty on LLVM at all.</li>
+</ul>
+  
+<p>We believe this fosters the widest adoption of LLVM because it <b>allows
+   commercial products to be derived from LLVM</b> with few restrictions and
+   without a requirement for making any derived works also open source (i.e.
+   LLVM's license is not a "copyleft" license like the GPL). We suggest that you
+   read the <a href="http://www.opensource.org/licenses/UoI-NCSA.php">License</a>
+   if further clarification is needed.</p>
+   
+<p>In addition to the UIUC license, the runtime library components of LLVM
+   (<b>compiler_rt and libc++</b>) are also licensed under the <a
+   href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>,
+   which does not contain the binary redistribution clause.  As a user of these
+   runtime libraries, it means that you can choose to use the code under either
+   license (and thus don't need the binary redistribution clause), and as a
+   contributor to the code that you agree that any contributions to these
+   libraries be licensed under both licenses.  We feel that this is important
+   for runtime libraries, because they are implicitly linked into applications
+   and therefore should not subject those applications to the binary
+   redistribution clause. This also means that it is ok to move code from (e.g.)
+   libc++ to the LLVM core without concern, but that code cannot be moved from
+   the LLVM core to libc++ without the copyright owner's permission.
+</p>
+
+<p>Note that the LLVM Project does distribute llvm-gcc, <b>which is GPL.</b>
+   This means that anything "linked" into llvm-gcc must itself be compatible
+   with the GPL, and must be releasable under the terms of the GPL.  This
+   implies that <b>any code linked into llvm-gcc and distributed to others may
+   be subject to the viral aspects of the GPL</b> (for example, a proprietary
+   code generator linked into llvm-gcc must be made available under the GPL).
+   This is not a problem for code already distributed under a more liberal
+   license (like the UIUC license), and does not affect code generated by
+   llvm-gcc.  It may be a problem if you intend to base commercial development
+   on llvm-gcc without redistributing your source code.</p>
+  
+<p>We have no plans to change the license of LLVM.  If you have questions or
+   comments about the license, please contact the
+   <a href="mailto:llvmdev at cs.uiuc.edu">LLVM Developer's Mailing List</a>.</p>
+</div>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsection"><a name="patents">Patents</a></div>
+<div class="doc_text">
+<p>To the best of our knowledge, LLVM does not infringe on any patents (we have
+   actually removed code from LLVM in the past that was found to infringe).
+   Having code in LLVM that infringes on patents would violate an important goal
+   of the project by making it hard or impossible to reuse the code for
+   arbitrary purposes (including commercial use).</p>
+   
+<p>When contributing code, we expect contributors to notify us of any potential
+   for patent-related trouble with their changes.  If you or your employer own
+   the rights to a patent and would like to contribute code to LLVM that relies
+   on it, we require that the copyright owner sign an agreement that allows any
+   other user of LLVM to freely use your patent.  Please contact
+   the <a href="mailto:llvm-oversight at cs.uiuc.edu">oversight group</a> for more
+   details.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+  Written by the 
+  <a href="mailto:llvm-oversight at cs.uiuc.edu">LLVM Oversight Group</a><br>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-11-16 13:32:53 -0800 (Tue, 16 Nov 2010) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/ExceptionHandling.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/ExceptionHandling.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/ExceptionHandling.html (added)
+++ www-releases/trunk/2.9/docs/ExceptionHandling.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,644 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Exception Handling in LLVM</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta name="description"
+        content="Exception Handling in LLVM.">
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+
+<body>
+
+<div class="doc_title">Exception Handling in LLVM</div>
+
+<table class="layout" style="width:100%">
+  <tr class="layout">
+    <td class="left">
+<ul>
+  <li><a href="#introduction">Introduction</a>
+  <ol>
+    <li><a href="#itanium">Itanium ABI Zero-cost Exception Handling</a></li>
+    <li><a href="#sjlj">Setjmp/Longjmp Exception Handling</a></li>
+    <li><a href="#overview">Overview</a></li>
+  </ol></li>
+  <li><a href="#codegen">LLVM Code Generation</a>
+  <ol>
+    <li><a href="#throw">Throw</a></li>
+    <li><a href="#try_catch">Try/Catch</a></li>
+    <li><a href="#cleanups">Cleanups</a></li>
+    <li><a href="#throw_filters">Throw Filters</a></li>
+    <li><a href="#restrictions">Restrictions</a></li>
+  </ol></li>
+  <li><a href="#format_common_intrinsics">Exception Handling Intrinsics</a>
+  <ol>
+  	<li><a href="#llvm_eh_exception"><tt>llvm.eh.exception</tt></a></li>
+  	<li><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a></li>
+  	<li><a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_setjmp"><tt>llvm.eh.sjlj.setjmp</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_lsda"><tt>llvm.eh.sjlj.lsda</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_callsite"><tt>llvm.eh.sjlj.callsite</tt></a></li>
+  	<li><a href="#llvm_eh_sjlj_dispatchsetup"><tt>llvm.eh.sjlj.dispatchsetup</tt></a></li>
+  </ol></li>
+  <li><a href="#asm">Asm Table Formats</a>
+  <ol>
+    <li><a href="#unwind_tables">Exception Handling Frame</a></li>
+    <li><a href="#exception_tables">Exception Tables</a></li>
+  </ol></li>
+  <li><a href="#todo">ToDo</a></li>
+</ul>
+</td>
+</tr></table>
+
+<div class="doc_author">
+  <p>Written by <a href="mailto:jlaskey at mac.com">Jim Laskey</a></p>
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="introduction">Introduction</a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This document is the central repository for all information pertaining to
+   exception handling in LLVM.  It describes the format that LLVM exception
+   handling information takes, which is useful for those interested in creating
+   front-ends or dealing directly with the information.  Further, this document
+   provides specific examples of what exception handling information is used for
+   in C/C++.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="itanium">Itanium ABI Zero-cost Exception Handling</a>
+</div>
+
+<div class="doc_text">
+
+<p>Exception handling for most programming languages is designed to recover from
+   conditions that rarely occur during general use of an application.  To that
+   end, exception handling should not interfere with the main flow of an
+   application's algorithm by performing checkpointing tasks, such as saving the
+   current pc or register state.</p>
+
+<p>The Itanium ABI Exception Handling Specification defines a methodology for
+   providing outlying data in the form of exception tables without inlining
+   speculative exception handling code in the flow of an application's main
+   algorithm.  Thus, the specification is said to add "zero-cost" to the normal
+   execution of an application.</p>
+
+<p>A more complete description of the Itanium ABI exception handling runtime
+   support of can be found at
+   <a href="http://www.codesourcery.com/cxx-abi/abi-eh.html">Itanium C++ ABI:
+   Exception Handling</a>. A description of the exception frame format can be
+   found at
+   <a href="http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html">Exception
+   Frames</a>, with details of the DWARF 3 specification at
+   <a href="http://www.eagercon.com/dwarf/dwarf3std.htm">DWARF 3 Standard</a>.
+   A description for the C++ exception table formats can be found at
+   <a href="http://www.codesourcery.com/cxx-abi/exceptions.pdf">Exception Handling
+   Tables</a>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="sjlj">Setjmp/Longjmp Exception Handling</a>
+</div>
+
+<div class="doc_text">
+
+<p>Setjmp/Longjmp (SJLJ) based exception handling uses LLVM intrinsics
+   <a href="#llvm_eh_sjlj_setjmp"><tt>llvm.eh.sjlj.setjmp</tt></a> and
+   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a> to
+   handle control flow for exception handling.</p>
+
+<p>For each function which does exception processing, be it try/catch blocks
+   or cleanups, that function registers itself on a global frame list. When
+   exceptions are being unwound, the runtime uses this list to identify which
+   functions need processing.<p>
+
+<p>Landing pad selection is encoded in the call site entry of the function
+   context. The runtime returns to the function via
+   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a>, where
+   a switch table transfers control to the appropriate landing pad based on
+   the index stored in the function context.</p>
+
+<p>In contrast to DWARF exception handling, which encodes exception regions
+   and frame information in out-of-line tables, SJLJ exception handling
+   builds and removes the unwind frame context at runtime. This results in
+   faster exception handling at the expense of slower execution when no
+   exceptions are thrown. As exceptions are, by their nature, intended for
+   uncommon code paths, DWARF exception handling is generally preferred to
+   SJLJ.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="overview">Overview</a>
+</div>
+
+<div class="doc_text">
+
+<p>When an exception is thrown in LLVM code, the runtime does its best to find a
+   handler suited to processing the circumstance.</p>
+
+<p>The runtime first attempts to find an <i>exception frame</i> corresponding to
+   the function where the exception was thrown.  If the programming language
+   (e.g. C++) supports exception handling, the exception frame contains a
+   reference to an exception table describing how to process the exception.  If
+   the language (e.g. C) does not support exception handling, or if the
+   exception needs to be forwarded to a prior activation, the exception frame
+   contains information about how to unwind the current activation and restore
+   the state of the prior activation.  This process is repeated until the
+   exception is handled.  If the exception is not handled and no activations
+   remain, then the application is terminated with an appropriate error
+   message.</p>
+
+<p>Because different programming languages have different behaviors when
+   handling exceptions, the exception handling ABI provides a mechanism for
+   supplying <i>personalities.</i> An exception handling personality is defined
+   by way of a <i>personality function</i> (e.g. <tt>__gxx_personality_v0</tt>
+   in C++), which receives the context of the exception, an <i>exception
+   structure</i> containing the exception object type and value, and a reference
+   to the exception table for the current function.  The personality function
+   for the current compile unit is specified in a <i>common exception
+   frame</i>.</p>
+
+<p>The organization of an exception table is language dependent.  For C++, an
+   exception table is organized as a series of code ranges defining what to do
+   if an exception occurs in that range.  Typically, the information associated
+   with a range defines which types of exception objects (using C++ <i>type
+   info</i>) that are handled in that range, and an associated action that
+   should take place.  Actions typically pass control to a <i>landing
+   pad</i>.</p>
+
+<p>A landing pad corresponds to the code found in the <i>catch</i> portion of
+   a <i>try</i>/<i>catch</i> sequence.  When execution resumes at a landing
+   pad, it receives the exception structure and a selector corresponding to
+   the <i>type</i> of exception thrown.  The selector is then used to determine
+   which <i>catch</i> should actually process the exception.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_section">
+  <a name="codegen">LLVM Code Generation</a>
+</div>
+
+<div class="doc_text">
+
+<p>At the time of this writing, only C++ exception handling support is available
+   in LLVM.  So the remainder of this document will be somewhat C++-centric.</p>
+
+<p>From the C++ developers perspective, exceptions are defined in terms of the
+   <tt>throw</tt> and <tt>try</tt>/<tt>catch</tt> statements.  In this section
+   we will describe the implementation of LLVM exception handling in terms of
+   C++ examples.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="throw">Throw</a>
+</div>
+
+<div class="doc_text">
+
+<p>Languages that support exception handling typically provide a <tt>throw</tt>
+   operation to initiate the exception process.  Internally, a throw operation
+   breaks down into two steps.  First, a request is made to allocate exception
+   space for an exception structure.  This structure needs to survive beyond the
+   current activation.  This structure will contain the type and value of the
+   object being thrown.  Second, a call is made to the runtime to raise the
+   exception, passing the exception structure as an argument.</p>
+
+<p>In C++, the allocation of the exception structure is done by
+   the <tt>__cxa_allocate_exception</tt> runtime function.  The exception
+   raising is handled by <tt>__cxa_throw</tt>.  The type of the exception is
+   represented using a C++ RTTI structure.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="try_catch">Try/Catch</a>
+</div>
+
+<div class="doc_text">
+
+<p>A call within the scope of a <i>try</i> statement can potentially raise an
+   exception.  In those circumstances, the LLVM C++ front-end replaces the call
+   with an <tt>invoke</tt> instruction.  Unlike a call, the <tt>invoke</tt> has
+   two potential continuation points: where to continue when the call succeeds
+   as per normal; and where to continue if the call raises an exception, either
+   by a throw or the unwinding of a throw.</p>
+
+<p>The term used to define a the place where an <tt>invoke</tt> continues after
+   an exception is called a <i>landing pad</i>.  LLVM landing pads are
+   conceptually alternative function entry points where an exception structure
+   reference and a type info index are passed in as arguments.  The landing pad
+   saves the exception structure reference and then proceeds to select the catch
+   block that corresponds to the type info of the exception object.</p>
+
+<p>Two LLVM intrinsic functions are used to convey information about the landing
+   pad to the back end.</p>
+
+<ol>
+  <li><a href="#llvm_eh_exception"><tt>llvm.eh.exception</tt></a> takes no
+      arguments and returns a pointer to the exception structure.  This only
+      returns a sensible value if called after an <tt>invoke</tt> has branched
+      to a landing pad.  Due to code generation limitations, it must currently
+      be called in the landing pad itself.</li>
+
+  <li><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> takes a minimum
+      of three arguments.  The first argument is the reference to the exception
+      structure. The second argument is a reference to the personality function
+      to be used for this <tt>try</tt>/<tt>catch</tt> sequence. Each of the
+      remaining arguments is either a reference to the type info for
+      a <tt>catch</tt> statement, a <a href="#throw_filters">filter</a>
+      expression, or the number zero (<tt>0</tt>) representing
+      a <a href="#cleanups">cleanup</a>.  The exception is tested against the
+      arguments sequentially from first to last.  The result of
+      the <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> is a
+      positive number if the exception matched a type info, a negative number if
+      it matched a filter, and zero if it matched a cleanup.  If nothing is
+      matched, the behaviour of the program
+      is <a href="#restrictions">undefined</a>.  This only returns a sensible
+      value if called after an <tt>invoke</tt> has branched to a landing pad.
+      Due to codegen limitations, it must currently be called in the landing pad
+      itself.  If a type info matched, then the selector value is the index of
+      the type info in the exception table, which can be obtained using the
+      <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a>
+      intrinsic.</li>
+</ol>
+
+<p>Once the landing pad has the type info selector, the code branches to the
+   code for the first catch.  The catch then checks the value of the type info
+   selector against the index of type info for that catch.  Since the type info
+   index is not known until all the type info have been gathered in the backend,
+   the catch code will call the
+   <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a> intrinsic
+   to determine the index for a given type info.  If the catch fails to match
+   the selector then control is passed on to the next catch. Note: Since the
+   landing pad will not be used if there is no match in the list of type info on
+   the call to <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>, then
+   neither the last catch nor <i>catch all</i> need to perform the check
+   against the selector.</p>
+
+<p>Finally, the entry and exit of catch code is bracketed with calls
+   to <tt>__cxa_begin_catch</tt> and <tt>__cxa_end_catch</tt>.</p>
+
+<ul>
+  <li><tt>__cxa_begin_catch</tt> takes a exception structure reference as an
+      argument and returns the value of the exception object.</li>
+
+  <li><tt>__cxa_end_catch</tt> takes no arguments. This function:<br><br>
+    <ol>
+      <li>Locates the most recently caught exception and decrements its handler
+          count,</li>
+      <li>Removes the exception from the "caught" stack if the handler count
+          goes to zero, and</li>
+      <li>Destroys the exception if the handler count goes to zero, and the
+          exception was not re-thrown by throw.</li>
+    </ol>
+    <p>Note: a rethrow from within the catch may replace this call with
+       a <tt>__cxa_rethrow</tt>.</p></li>
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="cleanups">Cleanups</a>
+</div>
+
+<div class="doc_text">
+
+<p>To handle destructors and cleanups in <tt>try</tt> code, control may not run
+   directly from a landing pad to the first catch.  Control may actually flow
+   from the landing pad to clean up code and then to the first catch.  Since the
+   required clean up for each <tt>invoke</tt> in a <tt>try</tt> may be different
+   (e.g. intervening constructor), there may be several landing pads for a given
+   try.  If cleanups need to be run, an <tt>i32 0</tt> should be passed as the
+   last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> argument.
+   However, when using DWARF exception handling with C++, a <tt>i8* null</tt>
+   <a href="#restrictions">must</a> be passed instead.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="throw_filters">Throw Filters</a>
+</div>
+
+<div class="doc_text">
+
+<p>C++ allows the specification of which exception types can be thrown from a
+   function.  To represent this a top level landing pad may exist to filter out
+   invalid types.  To express this in LLVM code the landing pad will
+   call <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>.  The
+   arguments are a reference to the exception structure, a reference to the
+   personality function, the length of the filter expression (the number of type
+   infos plus one), followed by the type infos themselves.
+   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> will return a
+   negative value if the exception does not match any of the type infos.  If no
+   match is found then a call to <tt>__cxa_call_unexpected</tt> should be made,
+   otherwise <tt>_Unwind_Resume</tt>.  Each of these functions requires a
+   reference to the exception structure.  Note that the most general form of an
+   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> call can contain
+   any number of type infos, filter expressions and cleanups (though having more
+   than one cleanup is pointless).  The LLVM C++ front-end can generate such
+   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> calls due to
+   inlining creating nested exception handling scopes.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="restrictions">Restrictions</a>
+</div>
+
+<div class="doc_text">
+
+<p>The semantics of the invoke instruction require that any exception that
+   unwinds through an invoke call should result in a branch to the invoke's
+   unwind label.  However such a branch will only happen if the
+   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> matches. Thus in
+   order to ensure correct operation, the front-end must only generate
+   <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> calls that are
+   guaranteed to always match whatever exception unwinds through the invoke.
+   For most languages it is enough to pass zero, indicating the presence of
+   a <a href="#cleanups">cleanup</a>, as the
+   last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> argument.
+   However for C++ this is not sufficient, because the C++ personality function
+   will terminate the program if it detects that unwinding the exception only
+   results in matches with cleanups.  For C++ a <tt>null i8*</tt> should be
+   passed as the last <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>
+   argument instead.  This is interpreted as a catch-all by the C++ personality
+   function, and will always match.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_section">
+  <a name="format_common_intrinsics">Exception Handling Intrinsics</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM uses several intrinsic functions (name prefixed with "llvm.eh") to
+   provide exception handling information at various points in generated
+   code.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_exception">llvm.eh.exception</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  i8* %<a href="#llvm_eh_exception">llvm.eh.exception</a>()
+</pre>
+
+<p>This intrinsic returns a pointer to the exception structure.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_selector">llvm.eh.selector</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  i32 %<a href="#llvm_eh_selector">llvm.eh.selector</a>(i8*, i8*, ...)
+</pre>
+
+<p>This intrinsic is used to compare the exception with the given type infos,
+   filters and cleanups.</p>
+
+<p><a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> takes a minimum of
+   three arguments.  The first argument is the reference to the exception
+   structure. The second argument is a reference to the personality function to
+   be used for this try catch sequence. Each of the remaining arguments is
+   either a reference to the type info for a catch statement,
+   a <a href="#throw_filters">filter</a> expression, or the number zero
+   representing a <a href="#cleanups">cleanup</a>.  The exception is tested
+   against the arguments sequentially from first to last.  The result of
+   the <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a> is a positive
+   number if the exception matched a type info, a negative number if it matched
+   a filter, and zero if it matched a cleanup.  If nothing is matched, the
+   behaviour of the program is <a href="#restrictions">undefined</a>.  If a type
+   info matched then the selector value is the index of the type info in the
+   exception table, which can be obtained using the
+   <a href="#llvm_eh_typeid_for"><tt>llvm.eh.typeid.for</tt></a> intrinsic.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_typeid_for">llvm.eh.typeid.for</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  i32 %<a href="#llvm_eh_typeid_for">llvm.eh.typeid.for</a>(i8*)
+</pre>
+
+<p>This intrinsic returns the type info index in the exception table of the
+   current function.  This value can be used to compare against the result
+   of <a href="#llvm_eh_selector"><tt>llvm.eh.selector</tt></a>.  The single
+   argument is a reference to a type info.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_setjmp">llvm.eh.sjlj.setjmp</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  i32 %<a href="#llvm_eh_sjlj_setjmp">llvm.eh.sjlj.setjmp</a>(i8*)
+</pre>
+
+<p>The SJLJ exception handling uses this intrinsic to force register saving for
+   the current function and to store the address of the following instruction
+   for use as a destination address by <a href="#llvm_eh_sjlj_longjmp">
+   <tt>llvm.eh.sjlj.longjmp</tt></a>. The buffer format and the overall
+   functioning of this intrinsic is compatible with the GCC
+   <tt>__builtin_setjmp</tt> implementation, allowing code built with the
+   two compilers to interoperate.</p>
+
+<p>The single parameter is a pointer to a five word buffer in which the calling
+   context is saved. The front end places the frame pointer in the first word,
+   and the target implementation of this intrinsic should place the destination
+   address for a
+   <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a> in the
+   second word. The following three words are available for use in a
+   target-specific manner.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_longjmp">llvm.eh.sjlj.longjmp</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  void %<a href="#llvm_eh_sjlj_longjmp">llvm.eh.sjlj.setjmp</a>(i8*)
+</pre>
+
+<p>The <a href="#llvm_eh_sjlj_longjmp"><tt>llvm.eh.sjlj.longjmp</tt></a>
+   intrinsic is used to implement <tt>__builtin_longjmp()</tt> for SJLJ
+   style exception handling. The single parameter is a pointer to a
+   buffer populated by <a href="#llvm_eh_sjlj_setjmp">
+     <tt>llvm.eh.sjlj.setjmp</tt></a>. The frame pointer and stack pointer
+   are restored from the buffer, then control is transfered to the
+   destination address.</p>
+
+</div>
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_lsda">llvm.eh.sjlj.lsda</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  i8* %<a href="#llvm_eh_sjlj_lsda">llvm.eh.sjlj.lsda</a>()
+</pre>
+
+<p>Used for SJLJ based exception handling, the <a href="#llvm_eh_sjlj_lsda">
+   <tt>llvm.eh.sjlj.lsda</tt></a> intrinsic returns the address of the Language
+   Specific Data Area (LSDA) for the current function. The SJLJ front-end code
+   stores this address in the exception handling function context for use by the
+   runtime.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_callsite">llvm.eh.sjlj.callsite</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  void %<a href="#llvm_eh_sjlj_callsite">llvm.eh.sjlj.callsite</a>(i32)
+</pre>
+
+<p>For SJLJ based exception handling, the <a href="#llvm_eh_sjlj_callsite">
+  <tt>llvm.eh.sjlj.callsite</tt></a> intrinsic identifies the callsite value
+  associated with the following invoke instruction. This is used to ensure
+  that landing pad entries in the LSDA are generated in the matching order.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="llvm_eh_sjlj_dispatchsetup">llvm.eh.sjlj.dispatchsetup</a>
+</div>
+
+<div class="doc_text">
+
+<pre>
+  void %<a href="#llvm_eh_sjlj_dispatchsetup">llvm.eh.sjlj.dispatchsetup</a>(i32)
+</pre>
+
+<p>For SJLJ based exception handling, the <a href="#llvm_eh_sjlj_dispatchsetup">
+  <tt>llvm.eh.sjlj.dispatchsetup</tt></a> intrinsic is used by targets to do
+  any unwind-edge setup they need. By default, no action is taken.  </p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_section">
+  <a name="asm">Asm Table Formats</a>
+</div>
+
+<div class="doc_text">
+
+<p>There are two tables that are used by the exception handling runtime to
+   determine which actions should take place when an exception is thrown.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="unwind_tables">Exception Handling Frame</a>
+</div>
+
+<div class="doc_text">
+
+<p>An exception handling frame <tt>eh_frame</tt> is very similar to the unwind
+   frame used by dwarf debug info.  The frame contains all the information
+   necessary to tear down the current frame and restore the state of the prior
+   frame.  There is an exception handling frame for each function in a compile
+   unit, plus a common exception handling frame that defines information common
+   to all functions in the unit.</p>
+
+<p>Todo - Table details here.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="exception_tables">Exception Tables</a>
+</div>
+
+<div class="doc_text">
+
+<p>An exception table contains information about what actions to take when an
+   exception is thrown in a particular part of a function's code.  There is one
+   exception table per function except leaf routines and functions that have
+   only calls to non-throwing functions will not need an exception table.</p>
+
+<p>Todo - Table details here.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_section">
+  <a name="todo">ToDo</a>
+</div>
+
+<div class="doc_text">
+
+<ol>
+
+  <li>Testing/Testing/Testing.</li>
+
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-12-09 15:05:48 -0800 (Thu, 09 Dec 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/ExtendedIntegerResults.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/ExtendedIntegerResults.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/ExtendedIntegerResults.txt (added)
+++ www-releases/trunk/2.9/docs/ExtendedIntegerResults.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,133 @@
+//===----------------------------------------------------------------------===//
+// Representing sign/zero extension of function results
+//===----------------------------------------------------------------------===//
+
+Mar 25, 2009  - Initial Revision
+
+Most ABIs specify that functions which return small integers do so in a
+specific integer GPR.  This is an efficient way to go, but raises the question:
+if the returned value is smaller than the register, what do the high bits hold?
+
+There are three (interesting) possible answers: undefined, zero extended, or
+sign extended.  The number of bits in question depends on the data-type that
+the front-end is referencing (typically i1/i8/i16/i32).
+
+Knowing the answer to this is important for two reasons: 1) we want to be able
+to implement the ABI correctly.  If we need to sign extend the result according
+to the ABI, we really really do need to do this to preserve correctness.  2)
+this information is often useful for optimization purposes, and we want the
+mid-level optimizers to be able to process this (e.g. eliminate redundant
+extensions).
+
+For example, lets pretend that X86 requires the caller to properly extend the
+result of a return (I'm not sure this is the case, but the argument doesn't
+depend on this).  Given this, we should compile this:
+
+int a();
+short b() { return a(); }
+
+into:
+
+_b:
+	subl	$12, %esp
+	call	L_a$stub
+	addl	$12, %esp
+	cwtl
+	ret
+
+An optimization example is that we should be able to eliminate the explicit
+sign extension in this example:
+
+short y();
+int z() {
+  return ((int)y() << 16) >> 16;
+}
+
+_z:
+	subl	$12, %esp
+	call	_y
+	;;  movswl %ax, %eax   -> not needed because eax is already sext'd
+	addl	$12, %esp
+	ret
+
+//===----------------------------------------------------------------------===//
+// What we have right now.
+//===----------------------------------------------------------------------===//
+
+Currently, these sorts of things are modelled by compiling a function to return
+the small type and a signext/zeroext marker is used.  For example, we compile
+Z into:
+
+define i32 @z() nounwind {
+entry:
+	%0 = tail call signext i16 (...)* @y() nounwind
+	%1 = sext i16 %0 to i32
+	ret i32 %1
+}
+
+and b into:
+
+define signext i16 @b() nounwind {
+entry:
+	%0 = tail call i32 (...)* @a() nounwind		; <i32> [#uses=1]
+	%retval12 = trunc i32 %0 to i16		; <i16> [#uses=1]
+	ret i16 %retval12
+}
+
+This has some problems: 1) the actual precise semantics are really poorly
+defined (see PR3779).  2) some targets might want the caller to extend, some
+might want the callee to extend 3) the mid-level optimizer doesn't know the
+size of the GPR, so it doesn't know that %0 is sign extended up to 32-bits 
+here, and even if it did, it could not eliminate the sext. 4) the code
+generator has historically assumed that the result is extended to i32, which is
+a problem on PIC16 (and is also probably wrong on alpha and other 64-bit
+targets).
+
+//===----------------------------------------------------------------------===//
+// The proposal
+//===----------------------------------------------------------------------===//
+
+I suggest that we have the front-end fully lower out the ABI issues here to
+LLVM IR.  This makes it 100% explicit what is going on and means that there is
+no cause for confusion.  For example, the cases above should compile into:
+
+define i32 @z() nounwind {
+entry:
+        %0 = tail call i32 (...)* @y() nounwind
+	%1 = trunc i32 %0 to i16
+        %2 = sext i16 %1 to i32
+        ret i32 %2
+}
+define i32 @b() nounwind {
+entry:
+	%0 = tail call i32 (...)* @a() nounwind
+	%retval12 = trunc i32 %0 to i16
+	%tmp = sext i16 %retval12 to i32
+	ret i32 %tmp
+}
+
+In this model, no functions will return an i1/i8/i16 (and on a x86-64 target
+that extends results to i64, no i32).  This solves the ambiguity issue, allows us 
+to fully describe all possible ABIs, and now allows the optimizers to reason
+about and eliminate these extensions.
+
+The one thing that is missing is the ability for the front-end and optimizer to
+specify/infer the guarantees provided by the ABI to allow other optimizations.
+For example, in the y/z case, since y is known to return a sign extended value,
+the trunc/sext in z should be eliminable.
+
+This can be done by introducing new sext/zext attributes which mean "I know
+that the result of the function is sign extended at least N bits.  Given this,
+and given that it is stuck on the y function, the mid-level optimizer could
+easily eliminate the extensions etc with existing functionality.
+
+The major disadvantage of doing this sort of thing is that it makes the ABI
+lowering stuff even more explicit in the front-end, and that we would like to
+eventually move to having the code generator do more of this work.  However,
+the sad truth of the matter is that this is a) unlikely to happen anytime in
+the near future, and b) this is no worse than we have now with the existing
+attributes.
+
+C compilers fundamentally have to reason about the target in many ways.  
+This is ugly and horrible, but a fact of life.
+

Added: www-releases/trunk/2.9/docs/ExtendingLLVM.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/ExtendingLLVM.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/ExtendingLLVM.html (added)
+++ www-releases/trunk/2.9/docs/ExtendingLLVM.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,391 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Extending LLVM: Adding instructions, intrinsics, types, etc.</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+
+<body>
+
+<div class="doc_title">
+  Extending LLVM: Adding instructions, intrinsics, types, etc.
+</div>
+
+<ol>
+  <li><a href="#introduction">Introduction and Warning</a></li>
+  <li><a href="#intrinsic">Adding a new intrinsic function</a></li>
+  <li><a href="#instruction">Adding a new instruction</a></li>
+  <li><a href="#sdnode">Adding a new SelectionDAG node</a></li>
+  <li><a href="#type">Adding a new type</a>
+  <ol>
+    <li><a href="#fund_type">Adding a new fundamental type</a></li>
+    <li><a href="#derived_type">Adding a new derived type</a></li>
+  </ol></li>
+</ol>
+
+<div class="doc_author">    
+  <p>Written by <a href="http://misha.brukman.net">Misha Brukman</a>,
+  Brad Jones, Nate Begeman,
+  and <a href="http://nondot.org/sabre">Chris Lattner</a></p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="introduction">Introduction and Warning</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>During the course of using LLVM, you may wish to customize it for your
+research project or for experimentation. At this point, you may realize that
+you need to add something to LLVM, whether it be a new fundamental type, a new
+intrinsic function, or a whole new instruction.</p>
+
+<p>When you come to this realization, stop and think. Do you really need to
+extend LLVM? Is it a new fundamental capability that LLVM does not support at
+its current incarnation or can it be synthesized from already pre-existing LLVM
+elements? If you are not sure, ask on the <a
+href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM-dev</a> list. The
+reason is that extending LLVM will get involved as you need to update all the
+different passes that you intend to use with your extension, and there are
+<em>many</em> LLVM analyses and transformations, so it may be quite a bit of
+work.</p>
+
+<p>Adding an <a href="#intrinsic">intrinsic function</a> is far easier than
+adding an instruction, and is transparent to optimization passes.  If your added
+functionality can be expressed as a
+function call, an intrinsic function is the method of choice for LLVM
+extension.</p>
+
+<p>Before you invest a significant amount of effort into a non-trivial
+extension, <span class="doc_warning">ask on the list</span> if what you are
+looking to do can be done with already-existing infrastructure, or if maybe
+someone else is already working on it. You will save yourself a lot of time and
+effort by doing so.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="intrinsic">Adding a new intrinsic function</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Adding a new intrinsic function to LLVM is much easier than adding a new
+instruction.  Almost all extensions to LLVM should start as an intrinsic
+function and then be turned into an instruction if warranted.</p>
+
+<ol>
+<li><tt>llvm/docs/LangRef.html</tt>:
+    Document the intrinsic.  Decide whether it is code generator specific and
+    what the restrictions are.  Talk to other people about it so that you are
+    sure it's a good idea.</li>
+
+<li><tt>llvm/include/llvm/Intrinsics*.td</tt>:
+    Add an entry for your intrinsic.  Describe its memory access characteristics
+    for optimization (this controls whether it will be DCE'd, CSE'd, etc). Note
+    that any intrinsic using the <tt>llvm_int_ty</tt> type for an argument will
+    be deemed by <tt>tblgen</tt> as overloaded and the corresponding suffix 
+    will be required on the intrinsic's name.</li>
+
+<li><tt>llvm/lib/Analysis/ConstantFolding.cpp</tt>: If it is possible to 
+    constant fold your intrinsic, add support to it in the 
+    <tt>canConstantFoldCallTo</tt> and <tt>ConstantFoldCall</tt> functions.</li>
+
+<li><tt>llvm/test/Regression/*</tt>: Add test cases for your test cases to the 
+    test suite</li>
+</ol>
+
+<p>Once the intrinsic has been added to the system, you must add code generator
+support for it.  Generally you must do the following steps:</p>
+
+<dl>
+<dt>Add support to the C backend in <tt>lib/Target/CBackend/</tt></dt>
+
+<dd>Depending on the intrinsic, there are a few ways to implement this.  For
+    most intrinsics, it makes sense to add code to lower your intrinsic in
+    <tt>LowerIntrinsicCall</tt> in <tt>lib/CodeGen/IntrinsicLowering.cpp</tt>.
+    Second, if it makes sense to lower the intrinsic to an expanded sequence of
+    C code in all cases, just emit the expansion in <tt>visitCallInst</tt> in
+    <tt>Writer.cpp</tt>.  If the intrinsic has some way to express it with GCC
+    (or any other compiler) extensions, it can be conditionally supported based
+    on the compiler compiling the CBE output (see <tt>llvm.prefetch</tt> for an
+    example).  Third, if the intrinsic really has no way to be lowered, just
+    have the code generator emit code that prints an error message and calls
+    abort if executed.</dd>
+
+<dt>Add support to the .td file for the target(s) of your choice in 
+   <tt>lib/Target/*/*.td</tt>.</dt>
+
+<dd>This is usually a matter of adding a pattern to the .td file that matches
+    the intrinsic, though it may obviously require adding the instructions you
+    want to generate as well.  There are lots of examples in the PowerPC and X86
+    backend to follow.</dd>
+</dl>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="sdnode">Adding a new SelectionDAG node</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>As with intrinsics, adding a new SelectionDAG node to LLVM is much easier
+than adding a new instruction.  New nodes are often added to help represent
+instructions common to many targets.  These nodes often map to an LLVM
+instruction (add, sub) or intrinsic (byteswap, population count).  In other
+cases, new nodes have been added to allow many targets to perform a common task
+(converting between floating point and integer representation) or capture more
+complicated behavior in a single node (rotate).</p>
+
+<ol>
+<li><tt>include/llvm/CodeGen/SelectionDAGNodes.h</tt>:
+    Add an enum value for the new SelectionDAG node.</li>
+<li><tt>lib/CodeGen/SelectionDAG/SelectionDAG.cpp</tt>:
+    Add code to print the node to <tt>getOperationName</tt>.  If your new node
+    can be evaluated at compile time when given constant arguments (such as an
+    add of a constant with another constant), find the <tt>getNode</tt> method
+    that takes the appropriate number of arguments, and add a case for your node
+    to the switch statement that performs constant folding for nodes that take
+    the same number of arguments as your new node.</li>
+<li><tt>lib/CodeGen/SelectionDAG/LegalizeDAG.cpp</tt>:
+    Add code to <a href="CodeGenerator.html#selectiondag_legalize">legalize, 
+    promote, and expand</a> the node as necessary.  At a minimum, you will need
+    to add a case statement for your node in <tt>LegalizeOp</tt> which calls
+    LegalizeOp on the node's operands, and returns a new node if any of the
+    operands changed as a result of being legalized.  It is likely that not all
+    targets supported by the SelectionDAG framework will natively support the
+    new node.  In this case, you must also add code in your node's case
+    statement in <tt>LegalizeOp</tt> to Expand your node into simpler, legal
+    operations.  The case for <tt>ISD::UREM</tt> for expanding a remainder into
+    a divide, multiply, and a subtract is a good example.</li>
+<li><tt>lib/CodeGen/SelectionDAG/LegalizeDAG.cpp</tt>:
+    If targets may support the new node being added only at certain sizes, you 
+    will also need to add code to your node's case statement in 
+    <tt>LegalizeOp</tt> to Promote your node's operands to a larger size, and 
+    perform the correct operation.  You will also need to add code to 
+    <tt>PromoteOp</tt> to do this as well.  For a good example, see 
+    <tt>ISD::BSWAP</tt>,
+    which promotes its operand to a wider size, performs the byteswap, and then
+    shifts the correct bytes right to emulate the narrower byteswap in the
+    wider type.</li>
+<li><tt>lib/CodeGen/SelectionDAG/LegalizeDAG.cpp</tt>:
+    Add a case for your node in <tt>ExpandOp</tt> to teach the legalizer how to
+    perform the action represented by the new node on a value that has been
+    split into high and low halves.  This case will be used to support your 
+    node with a 64 bit operand on a 32 bit target.</li>
+<li><tt>lib/CodeGen/SelectionDAG/DAGCombiner.cpp</tt>:
+    If your node can be combined with itself, or other existing nodes in a 
+    peephole-like fashion, add a visit function for it, and call that function
+    from <tt></tt>.  There are several good examples for simple combines you
+    can do; <tt>visitFABS</tt> and <tt>visitSRL</tt> are good starting places.
+    </li>
+<li><tt>lib/Target/PowerPC/PPCISelLowering.cpp</tt>:
+    Each target has an implementation of the <tt>TargetLowering</tt> class,
+    usually in its own file (although some targets include it in the same
+    file as the DAGToDAGISel).  The default behavior for a target is to
+    assume that your new node is legal for all types that are legal for
+    that target.  If this target does not natively support your node, then
+    tell the target to either Promote it (if it is supported at a larger
+    type) or Expand it.  This will cause the code you wrote in 
+    <tt>LegalizeOp</tt> above to decompose your new node into other legal
+    nodes for this target.</li>
+<li><tt>lib/Target/TargetSelectionDAG.td</tt>:
+    Most current targets supported by LLVM generate code using the DAGToDAG
+    method, where SelectionDAG nodes are pattern matched to target-specific
+    nodes, which represent individual instructions.  In order for the targets
+    to match an instruction to your new node, you must add a def for that node
+    to the list in this file, with the appropriate type constraints. Look at
+    <tt>add</tt>, <tt>bswap</tt>, and <tt>fadd</tt> for examples.</li>
+<li><tt>lib/Target/PowerPC/PPCInstrInfo.td</tt>:
+    Each target has a tablegen file that describes the target's instruction
+    set.  For targets that use the DAGToDAG instruction selection framework,
+    add a pattern for your new node that uses one or more target nodes.
+    Documentation for this is a bit sparse right now, but there are several
+    decent examples.  See the patterns for <tt>rotl</tt> in 
+    <tt>PPCInstrInfo.td</tt>.</li>
+<li>TODO: document complex patterns.</li>
+<li><tt>llvm/test/Regression/CodeGen/*</tt>: Add test cases for your new node
+    to the test suite.  <tt>llvm/test/Regression/CodeGen/X86/bswap.ll</tt> is
+    a good example.</li>
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="instruction">Adding a new instruction</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p><span class="doc_warning">WARNING: adding instructions changes the bitcode
+format, and it will take some effort to maintain compatibility with
+the previous version.</span> Only add an instruction if it is absolutely
+necessary.</p>
+
+<ol>
+
+<li><tt>llvm/include/llvm/Instruction.def</tt>:
+    add a number for your instruction and an enum name</li>
+
+<li><tt>llvm/include/llvm/Instructions.h</tt>:
+    add a definition for the class that will represent your instruction</li>
+
+<li><tt>llvm/include/llvm/Support/InstVisitor.h</tt>:
+    add a prototype for a visitor to your new instruction type</li>
+
+<li><tt>llvm/lib/AsmParser/Lexer.l</tt>:
+    add a new token to parse your instruction from assembly text file</li>
+
+<li><tt>llvm/lib/AsmParser/llvmAsmParser.y</tt>:
+    add the grammar on how your instruction can be read and what it will
+    construct as a result</li>
+
+<li><tt>llvm/lib/Bitcode/Reader/Reader.cpp</tt>:
+    add a case for your instruction and how it will be parsed from bitcode</li>
+
+<li><tt>llvm/lib/VMCore/Instruction.cpp</tt>:
+    add a case for how your instruction will be printed out to assembly</li>
+
+<li><tt>llvm/lib/VMCore/Instructions.cpp</tt>:
+    implement the class you defined in
+    <tt>llvm/include/llvm/Instructions.h</tt></li>
+
+<li>Test your instruction</li>
+
+<li><tt>llvm/lib/Target/*</tt>: 
+    Add support for your instruction to code generators, or add a lowering
+    pass.</li>
+
+<li><tt>llvm/test/Regression/*</tt>: add your test cases to the test suite.</li>
+
+</ol>
+
+<p>Also, you need to implement (or modify) any analyses or passes that you want
+to understand this new instruction.</p>
+
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="type">Adding a new type</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p><span class="doc_warning">WARNING: adding new types changes the bitcode
+format, and will break compatibility with currently-existing LLVM
+installations.</span> Only add new types if it is absolutely necessary.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="fund_type">Adding a fundamental type</a>
+</div>
+
+<div class="doc_text">
+
+<ol>
+
+<li><tt>llvm/include/llvm/Type.h</tt>:
+    add enum for the new type; add static <tt>Type*</tt> for this type</li>
+
+<li><tt>llvm/lib/VMCore/Type.cpp</tt>:
+    add mapping from <tt>TypeID</tt> => <tt>Type*</tt>;
+    initialize the static <tt>Type*</tt></li>
+
+<li><tt>llvm/lib/AsmReader/Lexer.l</tt>:
+    add ability to parse in the type from text assembly</li>
+
+<li><tt>llvm/lib/AsmReader/llvmAsmParser.y</tt>:
+    add a token for that type</li>
+
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="derived_type">Adding a derived type</a>
+</div>
+
+<div class="doc_text">
+
+<ol>
+<li><tt>llvm/include/llvm/Type.h</tt>:
+    add enum for the new type; add a forward declaration of the type
+    also</li>
+
+<li><tt>llvm/include/llvm/DerivedTypes.h</tt>:
+    add new class to represent new class in the hierarchy; add forward 
+    declaration to the TypeMap value type</li>
+
+<li><tt>llvm/lib/VMCore/Type.cpp</tt>:
+    add support for derived type to: 
+<div class="doc_code">
+<pre>
+std::string getTypeDescription(const Type &Ty,
+  std::vector<const Type*> &TypeStack)
+bool TypesEqual(const Type *Ty, const Type *Ty2,
+  std::map<const Type*, const Type*> & EqTypes)
+</pre>
+</div>
+    add necessary member functions for type, and factory methods</li>
+
+<li><tt>llvm/lib/AsmReader/Lexer.l</tt>:
+    add ability to parse in the type from text assembly</li>
+
+<li><tt>llvm/lib/BitCode/Writer/Writer.cpp</tt>:
+    modify <tt>void BitcodeWriter::outputType(const Type *T)</tt> to serialize
+    your type</li>
+
+<li><tt>llvm/lib/BitCode/Reader/Reader.cpp</tt>:
+    modify <tt>const Type *BitcodeReader::ParseType()</tt> to read your data
+    type</li> 
+
+<li><tt>llvm/lib/VMCore/AsmWriter.cpp</tt>:
+    modify
+<div class="doc_code">
+<pre>
+void calcTypeName(const Type *Ty,
+                  std::vector<const Type*> &TypeStack,
+                  std::map<const Type*,std::string> &TypeNames,
+                  std::string & Result)
+</pre>
+</div>
+    to output the new derived type
+</li>  
+ 
+
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a>
+  <br>
+  Last modified: $Date: 2010-05-06 17:28:04 -0700 (Thu, 06 May 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/FAQ.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/FAQ.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/FAQ.html (added)
+++ www-releases/trunk/2.9/docs/FAQ.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,938 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>LLVM: Frequently Asked Questions</title>
+  <style type="text/css">
+    @import url("llvm.css");
+    .question { font-weight: bold }
+    .answer   { margin-left: 2em  }
+  </style>
+</head>
+<body>
+
+<div class="doc_title">
+  LLVM: Frequently Asked Questions
+</div>
+
+<ol>
+  <li><a href="#license">License</a>
+  <ol>
+    <li>Why are the LLVM source code and the front-end distributed under
+        different licenses?</li>
+
+    <li>Does the University of Illinois Open Source License really qualify as an
+       "open source" license?</li>
+
+    <li>Can I modify LLVM source code and redistribute the modified source?</li>
+
+    <li>Can I modify LLVM source code and redistribute binaries or other tools
+        based on it, without redistributing the source?</li>
+  </ol></li>
+
+  <li><a href="#source">Source code</a>
+  <ol>
+    <li>In what language is LLVM written?</li>
+
+    <li>How portable is the LLVM source code?</li>
+  </ol></li>
+
+  <li><a href="#build">Build Problems</a>
+  <ol>
+    <li>When I run configure, it finds the wrong C compiler.</li>
+
+    <li>The <tt>configure</tt> script finds the right C compiler, but it uses
+        the LLVM linker from a previous build.  What do I do?</li>
+
+    <li>When creating a dynamic library, I get a strange GLIBC error.</li>
+
+    <li>I've updated my source tree from Subversion, and now my build is trying
+        to use a file/directory that doesn't exist.</li>
+
+    <li>I've modified a Makefile in my source tree, but my build tree keeps
+        using the old version.  What do I do?</li>
+
+    <li>I've upgraded to a new version of LLVM, and I get strange build
+        errors.</li>
+
+    <li>I've built LLVM and am testing it, but the tests freeze.</li>
+
+    <li>Why do test results differ when I perform different types of
+        builds?</li>
+
+    <li>Compiling LLVM with GCC 3.3.2 fails, what should I do?</li>
+
+    <li>Compiling LLVM with GCC succeeds, but the resulting tools do not work,
+        what can be wrong?</li>
+
+    <li>When I use the test suite, all of the C Backend tests fail.  What is
+        wrong?</li>
+
+    <li>After Subversion update, rebuilding gives the error "No rule to make
+        target".</li>
+
+    <li><a href="#llvmc">The <tt>llvmc</tt> program gives me errors/doesn't
+        work.</a></li>
+
+    <li><a href="#srcdir-objdir">When I compile LLVM-GCC with srcdir == objdir,
+        it fails. Why?</a></li>
+  </ol></li>
+
+  <li><a href="#felangs">Source Languages</a>
+  <ol>
+    <li><a href="#langs">What source languages are supported?</a></li>
+
+    <li><a href="#langirgen">I'd like to write a self-hosting LLVM compiler. How
+        should I interface with the LLVM middle-end optimizers and back-end code
+        generators?</a></li>
+
+    <li><a href="#langhlsupp">What support is there for higher level source
+        language constructs for building a compiler?</a></li>
+
+    <li><a href="GetElementPtr.html">I don't understand the GetElementPtr
+      instruction. Help!</a></li>
+  </ol>
+
+  <li><a href="#cfe">Using the GCC Front End</a>
+  <ol>
+    <li>When I compile software that uses a configure script, the configure
+        script thinks my system has all of the header files and libraries it is
+        testing for.  How do I get configure to work correctly?</li>
+
+    <li>When I compile code using the LLVM GCC front end, it complains that it
+        cannot find libcrtend.a?</li>
+
+    <li>How can I disable all optimizations when compiling code using the LLVM
+        GCC front end?</li>
+
+    <li><a href="#translatecxx">Can I use LLVM to convert C++ code to C
+        code?</a></li>
+
+    <li><a href="#platformindependent">Can I compile C or C++ code to
+        platform-independent LLVM bitcode?</a></li>
+  </ol>
+  </li>
+
+  <li><a href="#cfe_code">Questions about code generated by the GCC front-end</a>
+  <ol>
+     <li><a href="#iosinit">What is this <tt>llvm.global_ctors</tt> and
+          <tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I
+          #include <iostream>?</a></li>
+
+     <li><a href="#codedce">Where did all of my code go??</a></li>
+
+     <li><a href="#undef">What is this "<tt>undef</tt>" thing that shows up in
+         my code?</a></li>
+         
+      <li><a href="#callconvwrong">Why does instcombine + simplifycfg turn
+   a call to a function with a mismatched calling convention into "unreachable"?
+   Why not make the verifier reject it?</a></li>
+  </ol>
+  </li>
+</ol>
+
+<div class="doc_author">
+  <p>Written by <a href="http://llvm.org">The LLVM Team</a></p>
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="license">License</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="question">
+<p>Why are the LLVM source code and the front-end distributed under different
+   licenses?</p>
+</div>
+	
+<div class="answer">
+<p>The C/C++ front-ends are based on GCC and must be distributed under the GPL.
+   Our aim is to distribute LLVM source code under a <em>much less
+   restrictive</em> license, in particular one that does not compel users who
+   distribute tools based on modifying the source to redistribute the modified
+   source code as well.</p>
+</div>
+
+<div class="question">
+<p>Does the University of Illinois Open Source License really qualify as an
+   "open source" license?</p>
+</div>
+
+<div class="answer">
+<p>Yes, the license
+   is <a href="http://www.opensource.org/licenses/UoI-NCSA.php">certified</a> by
+   the Open Source Initiative (OSI).</p>
+</div>
+
+<div class="question">
+<p>Can I modify LLVM source code and redistribute the modified source?</p>
+</div>
+
+<div class="answer">
+<p>Yes.  The modified source distribution must retain the copyright notice and
+   follow the three bulletted conditions listed in
+   the <a href="http://llvm.org/svn/llvm-project/llvm/trunk/LICENSE.TXT">LLVM
+   license</a>.</p>
+</div>
+
+<div class="question">
+<p>Can I modify LLVM source code and redistribute binaries or other tools based
+   on it, without redistributing the source?</p>
+</div>
+
+<div class="answer">
+<p>Yes. This is why we distribute LLVM under a less restrictive license than
+   GPL, as explained in the first question above.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="source">Source Code</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="question">
+<p>In what language is LLVM written?</p>
+</div>
+
+<div class="answer">
+<p>All of the LLVM tools and libraries are written in C++ with extensive use of
+   the STL.</p>
+</div>
+
+<div class="question">
+<p>How portable is the LLVM source code?</p>
+</div>
+
+<div class="answer">
+<p>The LLVM source code should be portable to most modern UNIX-like operating
+systems.  Most of the code is written in standard C++ with operating system
+services abstracted to a support library.  The tools required to build and test
+LLVM have been ported to a plethora of platforms.</p>
+
+<p>Some porting problems may exist in the following areas:</p>
+
+<ul>
+  <li>The GCC front end code is not as portable as the LLVM suite, so it may not
+      compile as well on unsupported platforms.</li>
+
+  <li>The LLVM build system relies heavily on UNIX shell tools, like the Bourne
+      Shell and sed.  Porting to systems without these tools (MacOS 9, Plan 9)
+      will require more effort.</li>
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="build">Build Problems</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="question">
+<p>When I run configure, it finds the wrong C compiler.</p>
+</div>
+
+<div class="answer">
+<p>The <tt>configure</tt> script attempts to locate first <tt>gcc</tt> and then
+   <tt>cc</tt>, unless it finds compiler paths set in <tt>CC</tt>
+   and <tt>CXX</tt> for the C and C++ compiler, respectively.</p>
+
+<p>If <tt>configure</tt> finds the wrong compiler, either adjust your
+   <tt>PATH</tt> environment variable or set <tt>CC</tt> and <tt>CXX</tt>
+   explicitly.</p>
+
+</div>
+
+<div class="question">
+<p>The <tt>configure</tt> script finds the right C compiler, but it uses the
+   LLVM linker from a previous build.  What do I do?</p>
+</div>
+
+<div class="answer">
+<p>The <tt>configure</tt> script uses the <tt>PATH</tt> to find executables, so
+   if it's grabbing the wrong linker/assembler/etc, there are two ways to fix
+   it:</p>
+
+<ol>
+  <li><p>Adjust your <tt>PATH</tt> environment variable so that the correct
+      program appears first in the <tt>PATH</tt>.  This may work, but may not be
+      convenient when you want them <i>first</i> in your path for other
+      work.</p></li>
+
+  <li><p>Run <tt>configure</tt> with an alternative <tt>PATH</tt> that is
+      correct. In a Borne compatible shell, the syntax would be:</p>
+
+<pre class="doc_code">
+% PATH=[the path without the bad program] ./configure ...
+</pre>
+
+      <p>This is still somewhat inconvenient, but it allows <tt>configure</tt>
+         to do its work without having to adjust your <tt>PATH</tt>
+         permanently.</p></li>
+</ol>
+</div>
+
+<div class="question">
+<p>When creating a dynamic library, I get a strange GLIBC error.</p>
+</div>
+
+<div class="answer">
+<p>Under some operating systems (i.e. Linux), libtool does not work correctly if
+   GCC was compiled with the --disable-shared option.  To work around this,
+   install your own version of GCC that has shared libraries enabled by
+   default.</p>
+</div>
+
+<div class="question">
+<p>I've updated my source tree from Subversion, and now my build is trying to
+   use a file/directory that doesn't exist.</p>
+</div>
+
+<div class="answer">
+<p>You need to re-run configure in your object directory.  When new Makefiles
+   are added to the source tree, they have to be copied over to the object tree
+   in order to be used by the build.</p>
+</div>
+
+<div class="question">
+<p>I've modified a Makefile in my source tree, but my build tree keeps using the
+   old version.  What do I do?</p>
+</div>
+
+<div class="answer">
+<p>If the Makefile already exists in your object tree, you can just run the
+   following command in the top level directory of your object tree:</p>
+
+<pre class="doc_code">
+% ./config.status <relative path to Makefile>
+</pre>
+
+<p>If the Makefile is new, you will have to modify the configure script to copy
+   it over.</p>
+</div>
+
+<div class="question">
+<p>I've upgraded to a new version of LLVM, and I get strange build errors.</p>
+</div>
+
+<div class="answer">
+
+<p>Sometimes, changes to the LLVM source code alters how the build system works.
+   Changes in libtool, autoconf, or header file dependencies are especially
+   prone to this sort of problem.</p>
+
+<p>The best thing to try is to remove the old files and re-build.  In most
+   cases, this takes care of the problem.  To do this, just type <tt>make
+   clean</tt> and then <tt>make</tt> in the directory that fails to build.</p>
+</div>
+
+<div class="question">
+<p>I've built LLVM and am testing it, but the tests freeze.</p>
+</div>
+
+<div class="answer">
+<p>This is most likely occurring because you built a profile or release
+   (optimized) build of LLVM and have not specified the same information on the
+   <tt>gmake</tt> command line.</p>
+
+<p>For example, if you built LLVM with the command:</p>
+
+<pre class="doc_code">
+% gmake ENABLE_PROFILING=1
+</pre>
+
+<p>...then you must run the tests with the following commands:</p>
+
+<pre class="doc_code">
+% cd llvm/test
+% gmake ENABLE_PROFILING=1
+</pre>
+</div>
+
+<div class="question">
+<p>Why do test results differ when I perform different types of builds?</p>
+</div>
+
+<div class="answer">
+<p>The LLVM test suite is dependent upon several features of the LLVM tools and
+   libraries.</p>
+
+<p>First, the debugging assertions in code are not enabled in optimized or
+   profiling builds.  Hence, tests that used to fail may pass.</p>
+	
+<p>Second, some tests may rely upon debugging options or behavior that is only
+   available in the debug build.  These tests will fail in an optimized or
+   profile build.</p>
+</div>
+
+<div class="question">
+<p>Compiling LLVM with GCC 3.3.2 fails, what should I do?</p>
+</div>
+
+<div class="answer">
+<p>This is <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13392">a bug in
+   GCC</a>, and affects projects other than LLVM.  Try upgrading or downgrading
+   your GCC.</p>
+</div>
+
+<div class="question">
+<p>Compiling LLVM with GCC succeeds, but the resulting tools do not work, what
+   can be wrong?</p>
+</div>
+
+<div class="answer">
+<p>Several versions of GCC have shown a weakness in miscompiling the LLVM
+   codebase. Please consult your compiler version (<tt>gcc --version</tt>) to
+   find out whether it is <a href="GettingStarted.html#brokengcc">broken</a>.
+   If so, your only option is to upgrade GCC to a known good version.</p>
+</div>
+
+<div class="question">
+<p>After Subversion update, rebuilding gives the error "No rule to make
+   target".</p>
+</div>
+
+<div class="answer">
+<p>If the error is of the form:</p>
+
+<pre class="doc_code">
+gmake[2]: *** No rule to make target `/path/to/somefile', needed by
+`/path/to/another/file.d'.<br>
+Stop.
+</pre>
+
+<p>This may occur anytime files are moved within the Subversion repository or
+   removed entirely.  In this case, the best solution is to erase all
+   <tt>.d</tt> files, which list dependencies for source files, and rebuild:</p>
+
+<pre class="doc_code">
+% cd $LLVM_OBJ_DIR
+% rm -f `find . -name \*\.d` 
+% gmake 
+</pre>
+
+<p>In other cases, it may be necessary to run <tt>make clean</tt> before
+   rebuilding.</p>
+</div>
+
+<div class="question">
+<p><a name="llvmc">The <tt>llvmc</tt> program gives me errors/doesn't
+   work.</a></p>
+</div>
+
+<div class="answer">
+<p><tt>llvmc</tt> is experimental and isn't really supported. We suggest
+   using <tt>llvm-gcc</tt> instead.</p>
+</div>
+
+<div class="question">
+<p><a name="srcdir-objdir">When I compile LLVM-GCC with srcdir == objdir, it
+   fails. Why?</a></p>
+</div>
+
+<div class="answer">
+<p>The <tt>GNUmakefile</tt> in the top-level directory of LLVM-GCC is a special
+   <tt>Makefile</tt> used by Apple to invoke the <tt>build_gcc</tt> script after
+   setting up a special environment. This has the unfortunate side-effect that
+   trying to build LLVM-GCC with srcdir == objdir in a "non-Apple way" invokes
+   the <tt>GNUmakefile</tt> instead of <tt>Makefile</tt>. Because the
+   environment isn't set up correctly to do this, the build fails.</p>
+
+<p>People not building LLVM-GCC the "Apple way" need to build LLVM-GCC with
+   srcdir != objdir, or simply remove the GNUmakefile entirely.</p>
+
+<p>We regret the inconvenience.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="felangs">Source Languages</a></div>
+
+<div class="question">
+<p><a name="langs">What source languages are supported?</a></p>
+</div>
+
+<div class="answer">
+<p>LLVM currently has full support for C and C++ source languages. These are
+   available through a special version of GCC that LLVM calls the
+   <a href="#cfe">C Front End</a></p>
+
+<p>There is an incomplete version of a Java front end available in the
+   <tt>java</tt> module. There is no documentation on this yet so you'll need to
+   download the code, compile it, and try it.</p>
+
+<p>The PyPy developers are working on integrating LLVM into the PyPy backend so
+   that PyPy language can translate to LLVM.</p>
+</div>
+
+<div class="question">
+<p><a name="langirgen">I'd like to write a self-hosting LLVM compiler. How
+   should I interface with the LLVM middle-end optimizers and back-end code
+   generators?</a></p>
+</div>
+
+<div class="answer">
+<p>Your compiler front-end will communicate with LLVM by creating a module in
+   the LLVM intermediate representation (IR) format. Assuming you want to write
+   your language's compiler in the language itself (rather than C++), there are
+   3 major ways to tackle generating LLVM IR from a front-end:</p>
+
+<ul>
+  <li><strong>Call into the LLVM libraries code using your language's FFI
+      (foreign function interface).</strong>
+
+    <ul>
+      <li><em>for:</em> best tracks changes to the LLVM IR, .ll syntax, and .bc
+          format</li>
+
+      <li><em>for:</em> enables running LLVM optimization passes without a
+          emit/parse overhead</li>
+
+      <li><em>for:</em> adapts well to a JIT context</li>
+
+      <li><em>against:</em> lots of ugly glue code to write</li>
+    </ul></li>
+
+  <li>  <strong>Emit LLVM assembly from your compiler's native language.</strong>
+    <ul>
+      <li><em>for:</em> very straightforward to get started</li>
+
+      <li><em>against:</em> the .ll parser is slower than the bitcode reader
+          when interfacing to the middle end</li>
+
+      <li><em>against:</em> you'll have to re-engineer the LLVM IR object model
+          and asm writer in your language</li>
+
+      <li><em>against:</em> it may be harder to track changes to the IR</li>
+    </ul></li>
+
+  <li><strong>Emit LLVM bitcode from your compiler's native language.</strong>
+
+    <ul>
+      <li><em>for:</em> can use the more-efficient bitcode reader when
+          interfacing to the middle end</li>
+
+      <li><em>against:</em> you'll have to re-engineer the LLVM IR object 
+          model and bitcode writer in your language</li>
+
+      <li><em>against:</em> it may be harder to track changes to the IR</li>
+    </ul></li>
+</ul>
+
+<p>If you go with the first option, the C bindings in include/llvm-c should help
+   a lot, since most languages have strong support for interfacing with C. The
+   most common hurdle with calling C from managed code is interfacing with the
+   garbage collector. The C interface was designed to require very little memory
+   management, and so is straightforward in this regard.</p>
+</div>
+
+<div class="question">
+<p><a name="langhlsupp">What support is there for a higher level source language
+   constructs for building a compiler?</a></p>
+</div>
+
+<div class="answer">
+<p>Currently, there isn't much. LLVM supports an intermediate representation
+   which is useful for code representation but will not support the high level
+   (abstract syntax tree) representation needed by most compilers. There are no
+   facilities for lexical nor semantic analysis. There is, however, a <i>mostly
+   implemented</i> configuration-driven
+   <a href="CompilerDriver.html">compiler driver</a> which simplifies the task
+   of running optimizations, linking, and executable generation.</p>
+</div>
+
+<div class="question">
+<p><a name="getelementptr">I don't understand the GetElementPtr
+   instruction. Help!</a></p>
+</div>
+
+<div class="answer">
+<p>See <a href="GetElementPtr.html">The Often Misunderstood GEP
+   Instruction</a>.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="cfe">Using the GCC Front End</a>
+</div>
+
+<div class="question">
+<p>When I compile software that uses a configure script, the configure script
+   thinks my system has all of the header files and libraries it is testing for.
+   How do I get configure to work correctly?</p>
+</div>
+
+<div class="answer">
+<p>The configure script is getting things wrong because the LLVM linker allows
+   symbols to be undefined at link time (so that they can be resolved during JIT
+   or translation to the C back end).  That is why configure thinks your system
+   "has everything."</p>
+
+<p>To work around this, perform the following steps:</p>
+
+<ol>
+  <li>Make sure the CC and CXX environment variables contains the full path to
+      the LLVM GCC front end.</li>
+
+  <li>Make sure that the regular C compiler is first in your PATH. </li>
+
+  <li>Add the string "-Wl,-native" to your CFLAGS environment variable.</li>
+</ol>
+
+<p>This will allow the <tt>llvm-ld</tt> linker to create a native code
+   executable instead of shell script that runs the JIT.  Creating native code
+   requires standard linkage, which in turn will allow the configure script to
+   find out if code is not linking on your system because the feature isn't
+   available on your system.</p>
+</div>
+
+<div class="question">
+<p>When I compile code using the LLVM GCC front end, it complains that it cannot
+   find libcrtend.a.
+</p>
+</div>
+
+<div class="answer">
+<p>The only way this can happen is if you haven't installed the runtime
+   library. To correct this, do:</p>
+
+<pre class="doc_code">
+% cd llvm/runtime
+% make clean ; make install-bytecode
+</pre>
+</div>
+
+<div class="question">
+<p>How can I disable all optimizations when compiling code using the LLVM GCC
+   front end?</p>
+</div>
+
+<div class="answer">
+<p>Passing "-Wa,-disable-opt -Wl,-disable-opt" will disable *all* cleanup and
+   optimizations done at the llvm level, leaving you with the truly horrible
+   code that you desire.</p>
+</div>
+
+
+<div class="question">
+<p><a name="translatecxx">Can I use LLVM to convert C++ code to C code?</a></p>
+</div>
+
+<div class="answer">
+<p>Yes, you can use LLVM to convert code from any language LLVM supports to C.
+   Note that the generated C code will be very low level (all loops are lowered
+   to gotos, etc) and not very pretty (comments are stripped, original source
+   formatting is totally lost, variables are renamed, expressions are
+   regrouped), so this may not be what you're looking for. Also, there are
+   several limitations noted below.<p>
+
+<p>Use commands like this:</p>
+
+<ol>
+  <li><p>Compile your program with llvm-g++:</p>
+
+<pre class="doc_code">
+% llvm-g++ -emit-llvm x.cpp -o program.bc -c
+</pre>
+
+      <p>or:</p>
+
+<pre class="doc_code">
+% llvm-g++ a.cpp -c -emit-llvm
+% llvm-g++ b.cpp -c -emit-llvm
+% llvm-ld a.o b.o -o program
+</pre>
+
+   <p>This will generate program and program.bc.  The .bc
+      file is the LLVM version of the program all linked together.</p></li>
+
+  <li><p>Convert the LLVM code to C code, using the LLC tool with the C
+      backend:</p>
+
+<pre class="doc_code">
+% llc -march=c program.bc -o program.c
+</pre></li>
+
+  <li><p>Finally, compile the C file:</p>
+
+<pre class="doc_code">
+% cc x.c -lstdc++
+</pre></li>
+
+</ol>
+
+<p>Using LLVM does not eliminate the need for C++ library support.  If you use
+   the llvm-g++ front-end, the generated code will depend on g++'s C++ support
+   libraries in the same way that code generated from g++ would.  If you use
+   another C++ front-end, the generated code will depend on whatever library
+   that front-end would normally require.</p>
+
+<p>If you are working on a platform that does not provide any C++ libraries, you
+   may be able to manually compile libstdc++ to LLVM bitcode, statically link it
+   into your program, then use the commands above to convert the whole result
+   into C code.  Alternatively, you might compile the libraries and your
+   application into two different chunks of C code and link them.</p>
+
+<p>Note that, by default, the C back end does not support exception handling.
+   If you want/need it for a certain program, you can enable it by passing
+   "-enable-correct-eh-support" to the llc program.  The resultant code will use
+   setjmp/longjmp to implement exception support that is relatively slow, and
+   not C++-ABI-conforming on most platforms, but otherwise correct.</p>
+
+<p>Also, there are a number of other limitations of the C backend that cause it
+   to produce code that does not fully conform to the C++ ABI on most
+   platforms. Some of the C++ programs in LLVM's test suite are known to fail
+   when compiled with the C back end because of ABI incompatibilities with
+   standard C++ libraries.</p>
+</div>
+
+<div class="question">
+<p><a name="platformindependent">Can I compile C or C++ code to
+   platform-independent LLVM bitcode?</a></p>
+</div>
+
+<div class="answer">
+<p>No. C and C++ are inherently platform-dependent languages. The most obvious
+   example of this is the preprocessor. A very common way that C code is made
+   portable is by using the preprocessor to include platform-specific code. In
+   practice, information about other platforms is lost after preprocessing, so
+   the result is inherently dependent on the platform that the preprocessing was
+   targeting.</p>
+
+<p>Another example is <tt>sizeof</tt>. It's common for <tt>sizeof(long)</tt> to
+   vary between platforms. In most C front-ends, <tt>sizeof</tt> is expanded to
+   a constant immediately, thus hard-wiring a platform-specific detail.</p>
+
+<p>Also, since many platforms define their ABIs in terms of C, and since LLVM is
+   lower-level than C, front-ends currently must emit platform-specific IR in
+   order to have the result conform to the platform ABI.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="cfe_code">Questions about code generated by the GCC front-end</a>
+</div>
+
+<div class="question">
+<p><a name="iosinit">What is this <tt>llvm.global_ctors</tt> and
+   <tt>_GLOBAL__I__tmp_webcompile...</tt> stuff that happens when I <tt>#include
+   <iostream></tt>?</a></p>
+</div>
+
+<div class="answer">
+<p>If you <tt>#include</tt> the <tt><iostream></tt> header into a C++
+   translation unit, the file will probably use
+   the <tt>std::cin</tt>/<tt>std::cout</tt>/... global objects.  However, C++
+   does not guarantee an order of initialization between static objects in
+   different translation units, so if a static ctor/dtor in your .cpp file
+   used <tt>std::cout</tt>, for example, the object would not necessarily be
+   automatically initialized before your use.</p>
+
+<p>To make <tt>std::cout</tt> and friends work correctly in these scenarios, the
+   STL that we use declares a static object that gets created in every
+   translation unit that includes <tt><iostream></tt>.  This object has a
+   static constructor and destructor that initializes and destroys the global
+   iostream objects before they could possibly be used in the file.  The code
+   that you see in the .ll file corresponds to the constructor and destructor
+   registration code.
+</p>
+
+<p>If you would like to make it easier to <b>understand</b> the LLVM code
+   generated by the compiler in the demo page, consider using <tt>printf()</tt>
+   instead of <tt>iostream</tt>s to print values.</p>
+</div>
+
+<!--=========================================================================-->
+
+<div class="question">
+<p><a name="codedce">Where did all of my code go??</a></p>
+</div>
+
+<div class="answer">
+<p>If you are using the LLVM demo page, you may often wonder what happened to
+   all of the code that you typed in.  Remember that the demo script is running
+   the code through the LLVM optimizers, so if your code doesn't actually do
+   anything useful, it might all be deleted.</p>
+
+<p>To prevent this, make sure that the code is actually needed.  For example, if
+   you are computing some expression, return the value from the function instead
+   of leaving it in a local variable.  If you really want to constrain the
+   optimizer, you can read from and assign to <tt>volatile</tt> global
+   variables.</p>
+</div>
+
+<!--=========================================================================-->
+
+<div class="question">
+<p><a name="undef">What is this "<tt>undef</tt>" thing that shows up in my
+   code?</a></p>
+</div>
+
+<div class="answer">
+<p><a href="LangRef.html#undef"><tt>undef</tt></a> is the LLVM way of
+   representing a value that is not defined.  You can get these if you do not
+   initialize a variable before you use it.  For example, the C function:</p>
+
+<pre class="doc_code">
+int X() { int i; return i; }
+</pre>
+
+<p>Is compiled to "<tt>ret i32 undef</tt>" because "<tt>i</tt>" never has a
+   value specified for it.</p>
+</div>
+
+<!--=========================================================================-->
+
+<div class="question">
+<p><a name="callconvwrong">Why does instcombine + simplifycfg turn
+   a call to a function with a mismatched calling convention into "unreachable"?
+   Why not make the verifier reject it?</a></p>
+</div>
+
+<div class="answer">
+<p>This is a common problem run into by authors of front-ends that are using
+custom calling conventions: you need to make sure to set the right calling
+convention on both the function and on each call to the function.  For example,
+this code:</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+        ret void
+}
+define void @bar() {
+        call void @foo()
+        ret void
+}
+</pre>
+
+<p>Is optimized to:</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+	ret void
+}
+define void @bar() {
+	unreachable
+}
+</pre>
+
+<p>... with "opt -instcombine -simplifycfg".  This often bites people because
+"all their code disappears".  Setting the calling convention on the caller and
+callee is required for indirect calls to work, so people often ask why not make
+the verifier reject this sort of thing.</p>
+
+<p>The answer is that this code has undefined behavior, but it is not illegal.
+If we made it illegal, then every transformation that could potentially create
+this would have to ensure that it doesn't, and there is valid code that can
+create this sort of construct (in dead code).  The sorts of things that can
+cause this to happen are fairly contrived, but we still need to accept them.
+Here's an example:</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+        ret void
+}
+define internal void @bar(void()* %FP, i1 %cond) {
+        br i1 %cond, label %T, label %F
+T:  
+        call void %FP()
+        ret void
+F:
+        call fastcc void %FP()
+        ret void
+}
+define void @test() {
+        %X = or i1 false, false
+        call void @bar(void()* @foo, i1 %X)
+        ret void
+} 
+</pre>
+
+<p>In this example, "test" always passes @foo/false into bar, which ensures that
+   it is dynamically called with the right calling conv (thus, the code is
+   perfectly well defined).  If you run this through the inliner, you get this
+   (the explicit "or" is there so that the inliner doesn't dead code eliminate
+   a bunch of stuff):
+</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+	ret void
+}
+define void @test() {
+	%X = or i1 false, false
+	br i1 %X, label %T.i, label %F.i
+T.i:
+	call void @foo()
+	br label %bar.exit
+F.i:
+	call fastcc void @foo()
+	br label %bar.exit
+bar.exit:
+	ret void
+}
+</pre>
+
+<p>Here you can see that the inlining pass made an undefined call to @foo with
+  the wrong calling convention.  We really don't want to make the inliner have
+  to know about this sort of thing, so it needs to be valid code.  In this case,
+  dead code elimination can trivially remove the undefined code.  However, if %X
+  was an input argument to @test, the inliner would produce this:
+</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+	ret void
+}
+
+define void @test(i1 %X) {
+	br i1 %X, label %T.i, label %F.i
+T.i:
+	call void @foo()
+	br label %bar.exit
+F.i:
+	call fastcc void @foo()
+	br label %bar.exit
+bar.exit:
+	ret void
+}
+</pre>
+
+<p>The interesting thing about this is that %X <em>must</em> be false for the
+code to be well-defined, but no amount of dead code elimination will be able to
+delete the broken call as unreachable.  However, since instcombine/simplifycfg
+turns the undefined call into unreachable, we end up with a branch on a
+condition that goes to unreachable: a branch to unreachable can never happen, so
+"-inline -instcombine -simplifycfg" is able to produce:</p>
+
+<pre class="doc_code">
+define fastcc void @foo() {
+	ret void
+}
+define void @test(i1 %X) {
+F.i:
+	call fastcc void @foo()
+	ret void
+}
+</pre>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-05-28 10:07:41 -0700 (Fri, 28 May 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GCCFEBuildInstrs.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GCCFEBuildInstrs.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GCCFEBuildInstrs.html (added)
+++ www-releases/trunk/2.9/docs/GCCFEBuildInstrs.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" href="llvm.css" type="text/css" media="screen">
+  <title>Building the LLVM GCC Front-End</title>
+</head>
+<body>
+
+<div class="doc_title">
+  Building the LLVM GCC Front-End
+</div>
+
+<ol>
+  <li><a href="#instructions">Building llvm-gcc from Source</a></li>
+  <li><a href="#ada">Building the Ada front-end</a></li>
+  <li><a href="#fortran">Building the Fortran front-end</a></li>
+  <li><a href="#license">License Information</a></li>
+</ol>
+
+<div class="doc_author">    
+  <p>Written by the LLVM Team</p>
+</div>
+
+<!-- *********************************************************************** -->
+<h1><a name="instructions">Building llvm-gcc from Source</a></h1>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This section describes how to acquire and build llvm-gcc 4.2, which is based
+on the GCC 4.2.1 front-end.  Supported languages are Ada, C, C++, Fortran,
+Objective-C and Objective-C++.  Note that the instructions for building these
+front-ends are completely different (and much easier!) than those for building
+llvm-gcc3 in the past.</p>
+
+<ol>
+  <li><p>Retrieve the appropriate llvm-gcc-4.2-<i>version</i>.source.tar.gz
+         archive from the <a href="http://llvm.org/releases/">LLVM web
+         site</a>.</p>
+
+      <p>It is also possible to download the sources of the llvm-gcc front end
+         from a read-only mirror using subversion.  To check out the 4.2 code
+         for first time use:</p>
+
+<div class="doc_code">
+<pre>
+svn co http://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk <i>dst-directory</i>
+</pre>
+</div>
+
+      <p>After that, the code can be be updated in the destination directory
+         using:</p>
+
+<div class="doc_code">
+<pre>svn update</pre>
+</div>
+
+      <p>The mirror is brought up to date every evening.</p></li>
+
+  <li>Follow the directions in the top-level <tt>README.LLVM</tt> file for
+      up-to-date instructions on how to build llvm-gcc.  See below for building
+      with support for Ada or Fortran.
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<h1><a name="ada">Building the Ada front-end</a></h1>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+<p>Building with support for Ada amounts to following the directions in the
+top-level <tt>README.LLVM</tt> file, adding ",ada" to EXTRALANGS, for example:
+<tt>EXTRALANGS=,ada</tt></p>
+
+<p>There are some complications however:</p>
+
+<ol>
+  <li><p>The only platform for which the Ada front-end is known to build is
+      32 bit intel x86 running linux.  It is unlikely to build for other
+      systems without some work.</p></li>
+  <li><p>The build requires having a compiler that supports Ada, C and C++.
+      The Ada front-end is written in Ada so an Ada compiler is needed to
+      build it.  Compilers known to work with the
+      <a href="http://llvm.org/releases/download.html">LLVM 2.7 release</a>
+      are <a href="http://gcc.gnu.org/releases.html">gcc-4.2</a> and the
+      2005, 2006 and 2007 versions of the
+      <a href="http://libre.adacore.com/">GNAT GPL Edition</a>.
+      <b>GNAT GPL 2008, gcc-4.3 and later will not work</b>.
+      The LLVM parts of llvm-gcc are written in C++ so a C++ compiler is
+      needed to build them.  The rest of gcc is written in C.
+      Some linux distributions provide a version of gcc that supports all
+      three languages (the Ada part often comes as an add-on package to
+      the rest of gcc).  Otherwise it is possible to combine two versions
+      of gcc, one that supports Ada and C (such as the
+      <a href="http://libre.adacore.com/">2007 GNAT GPL Edition</a>)
+      and another which supports C++, see below.</p></li>
+  <li><p>Because the Ada front-end is experimental, it is wise to build the
+      compiler with checking enabled.  This causes it to run much slower, but
+      helps catch mistakes in the compiler (please report any problems using
+      <a href="http://llvm.org/bugs">LLVM bugzilla</a>).</p></li>
+  <li><p>The Ada front-end <a href="http://llvm.org/PR2007">fails to
+      bootstrap</a>, due to lack of LLVM support for
+      <tt>setjmp</tt>/<tt>longjmp</tt> style exception handling (used
+      internally by the compiler), so you must specify
+      <tt>--disable-bootstrap</tt>.</p></li>
+</ol>
+
+<p>Supposing appropriate compilers are available, llvm-gcc with Ada support can
+   be built on an x86-32 linux box using the following recipe:</p>
+
+<ol>
+  <li><p>Download the <a href="http://llvm.org/releases/download.html">LLVM source</a>
+      and unpack it:</p>
+
+<pre class="doc_code">
+wget http://llvm.org/releases/2.7/llvm-2.7.tgz
+tar xzf llvm-2.7.tgz
+mv llvm-2.7 llvm
+</pre>
+
+      <p>or <a href="GettingStarted.html#checkout">check out the
+      latest version from subversion</a>:</p>
+
+<pre class="doc_code">svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</pre>
+
+      </li>
+
+  <li><p>Download the
+      <a href="http://llvm.org/releases/download.html">llvm-gcc-4.2 source</a>
+      and unpack it:</p>
+
+<pre class="doc_code">
+wget http://llvm.org/releases/2.7/llvm-gcc-4.2-2.7.source.tgz
+tar xzf llvm-gcc-4.2-2.7.source.tgz
+mv llvm-gcc-4.2-2.7.source llvm-gcc-4.2
+</pre>
+
+      <p>or <a href="GettingStarted.html#checkout">check out the
+      latest version from subversion</a>:</p>
+
+<pre class="doc_code">
+svn co http://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk llvm-gcc-4.2
+</pre>
+      </li>
+
+  <li><p>Make a build directory <tt>llvm-objects</tt> for llvm and make it the
+      current directory:</p>
+
+<pre class="doc_code">
+mkdir llvm-objects
+cd llvm-objects
+</pre>
+      </li>
+
+  <li><p>Configure LLVM (here it is configured to install into <tt>/usr/local</tt>):</p>
+
+<pre class="doc_code">
+../llvm/configure --prefix=<b>/usr/local</b> --enable-optimized --enable-assertions
+</pre>
+
+      <p>If you have a multi-compiler setup and the C++ compiler is not the
+      default, then you can configure like this:</p>
+
+<pre class="doc_code">
+CXX=<b>PATH_TO_C++_COMPILER</b> ../llvm/configure --prefix=<b>/usr/local</b> --enable-optimized --enable-assertions
+</pre>
+
+      <p>To compile without checking (not recommended), replace
+      <tt>--enable-assertions</tt> with <tt>--disable-assertions</tt>.</p>
+
+      </li>
+
+  <li><p>Build LLVM:</p>
+
+<pre class="doc_code">
+make
+</pre>
+      </li>
+
+  <li><p>Install LLVM (optional):</p>
+
+<pre class="doc_code">
+make install
+</pre>
+      </li>
+
+  <li><p>Make a build directory <tt>llvm-gcc-4.2-objects</tt> for llvm-gcc and make it the
+      current directory:</p>
+
+<pre class="doc_code">
+cd ..
+mkdir llvm-gcc-4.2-objects
+cd llvm-gcc-4.2-objects
+</pre>
+      </li>
+
+  <li><p>Configure llvm-gcc (here it is configured to install into <tt>/usr/local</tt>).
+      The <tt>--enable-checking</tt> flag turns on sanity checks inside the compiler.
+      To turn off these checks (not recommended), replace <tt>--enable-checking</tt>
+      with <tt>--disable-checking</tt>.
+      Additional languages can be appended to the <tt>--enable-languages</tt> switch,
+      for example <tt>--enable-languages=ada,c,c++</tt>.</p>
+
+<pre class="doc_code">
+../llvm-gcc-4.2/configure --prefix=<b>/usr/local</b> --enable-languages=ada,c \
+                          --enable-checking --enable-llvm=$PWD/../llvm-objects \
+			  --disable-bootstrap --disable-multilib
+</pre>
+
+      <p>If you have a multi-compiler setup, then you can configure like this:</p>
+
+<pre class="doc_code">
+export CC=<b>PATH_TO_C_AND_ADA_COMPILER</b>
+export CXX=<b>PATH_TO_C++_COMPILER</b>
+../llvm-gcc-4.2/configure --prefix=<b>/usr/local</b> --enable-languages=ada,c \
+                          --enable-checking --enable-llvm=$PWD/../llvm-objects \
+			  --disable-bootstrap --disable-multilib
+</pre>
+      </li>
+
+  <li><p>Build and install the compiler:</p>
+
+<pre class="doc_code">
+make
+make install
+</pre>
+      </li>
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<h1><a name="fortran">Building the Fortran front-end</a></h1>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+<p>To build with support for Fortran, follow the directions in the top-level
+<tt>README.LLVM</tt> file, adding ",fortran" to EXTRALANGS, for example:</p>
+
+<pre class="doc_code">
+EXTRALANGS=,fortran
+</pre>
+
+</div>
+
+<!-- *********************************************************************** -->
+<h1><a name="license">License Information</a></h1>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+<p>
+The LLVM GCC frontend is licensed to you under the GNU General Public License
+and the GNU Lesser General Public License.  Please see the files COPYING and
+COPYING.LIB for more details.
+</p>
+
+<p>
+More information is <a href="FAQ.html#license">available in the FAQ</a>.
+</p>
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-08-31 12:40:21 -0700 (Tue, 31 Aug 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GarbageCollection.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GarbageCollection.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GarbageCollection.html (added)
+++ www-releases/trunk/2.9/docs/GarbageCollection.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,1387 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" Content="text/html; charset=UTF-8" >
+  <title>Accurate Garbage Collection with LLVM</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+  <style type="text/css">
+    .rowhead { text-align: left; background: inherit; }
+    .indent { padding-left: 1em; }
+    .optl { color: #BFBFBF; }
+  </style>
+</head>
+<body>
+
+<div class="doc_title">
+  Accurate Garbage Collection with LLVM
+</div>
+
+<ol>
+  <li><a href="#introduction">Introduction</a>
+    <ul>
+    <li><a href="#feature">Goals and non-goals</a></li>
+    </ul>
+  </li>
+
+  <li><a href="#quickstart">Getting started</a>
+    <ul>
+    <li><a href="#quickstart-compiler">In your compiler</a></li>
+    <li><a href="#quickstart-runtime">In your runtime library</a></li>
+    <li><a href="#shadow-stack">About the shadow stack</a></li>
+    </ul>
+  </li>
+
+  <li><a href="#core">Core support</a>
+    <ul>
+    <li><a href="#gcattr">Specifying GC code generation:
+      <tt>gc "..."</tt></a></li>
+    <li><a href="#gcroot">Identifying GC roots on the stack:
+      <tt>llvm.gcroot</tt></a></li>
+    <li><a href="#barriers">Reading and writing references in the heap</a>
+      <ul>
+      <li><a href="#gcwrite">Write barrier: <tt>llvm.gcwrite</tt></a></li>
+      <li><a href="#gcread">Read barrier: <tt>llvm.gcread</tt></a></li>
+      </ul>
+    </li>
+    </ul>
+  </li>
+  
+  <li><a href="#plugin">Compiler plugin interface</a>
+    <ul>
+    <li><a href="#collector-algos">Overview of available features</a></li>
+    <li><a href="#stack-map">Computing stack maps</a></li>
+    <li><a href="#init-roots">Initializing roots to null:
+      <tt>InitRoots</tt></a></li>
+    <li><a href="#custom">Custom lowering of intrinsics: <tt>CustomRoots</tt>, 
+      <tt>CustomReadBarriers</tt>, and <tt>CustomWriteBarriers</tt></a></li>
+    <li><a href="#safe-points">Generating safe points:
+      <tt>NeededSafePoints</tt></a></li>
+    <li><a href="#assembly">Emitting assembly code:
+      <tt>GCMetadataPrinter</tt></a></li>
+    </ul>
+  </li>
+
+  <li><a href="#runtime-impl">Implementing a collector runtime</a>
+    <ul>
+      <li><a href="#gcdescriptors">Tracing GC pointers from heap
+      objects</a></li>
+    </ul>
+  </li>
+  
+  <li><a href="#references">References</a></li>
+  
+</ol>
+
+<div class="doc_author">
+  <p>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a> and
+     Gordon Henriksen</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="introduction">Introduction</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Garbage collection is a widely used technique that frees the programmer from
+having to know the lifetimes of heap objects, making software easier to produce
+and maintain. Many programming languages rely on garbage collection for
+automatic memory management. There are two primary forms of garbage collection:
+conservative and accurate.</p>
+
+<p>Conservative garbage collection often does not require any special support
+from either the language or the compiler: it can handle non-type-safe
+programming languages (such as C/C++) and does not require any special
+information from the compiler. The
+<a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">Boehm collector</a> is
+an example of a state-of-the-art conservative collector.</p>
+
+<p>Accurate garbage collection requires the ability to identify all pointers in
+the program at run-time (which requires that the source-language be type-safe in
+most cases). Identifying pointers at run-time requires compiler support to
+locate all places that hold live pointer variables at run-time, including the
+<a href="#gcroot">processor stack and registers</a>.</p>
+
+<p>Conservative garbage collection is attractive because it does not require any
+special compiler support, but it does have problems. In particular, because the
+conservative garbage collector cannot <i>know</i> that a particular word in the
+machine is a pointer, it cannot move live objects in the heap (preventing the
+use of compacting and generational GC algorithms) and it can occasionally suffer
+from memory leaks due to integer values that happen to point to objects in the
+program. In addition, some aggressive compiler transformations can break
+conservative garbage collectors (though these seem rare in practice).</p>
+
+<p>Accurate garbage collectors do not suffer from any of these problems, but
+they can suffer from degraded scalar optimization of the program. In particular,
+because the runtime must be able to identify and update all pointers active in
+the program, some optimizations are less effective. In practice, however, the
+locality and performance benefits of using aggressive garbage collection
+techniques dominates any low-level losses.</p>
+
+<p>This document describes the mechanisms and interfaces provided by LLVM to
+support accurate garbage collection.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="feature">Goals and non-goals</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM's intermediate representation provides <a href="#intrinsics">garbage
+collection intrinsics</a> that offer support for a broad class of
+collector models. For instance, the intrinsics permit:</p>
+
+<ul>
+  <li>semi-space collectors</li>
+  <li>mark-sweep collectors</li>
+  <li>generational collectors</li>
+  <li>reference counting</li>
+  <li>incremental collectors</li>
+  <li>concurrent collectors</li>
+  <li>cooperative collectors</li>
+</ul>
+
+<p>We hope that the primitive support built into the LLVM IR is sufficient to
+support a broad class of garbage collected languages including Scheme, ML, Java,
+C#, Perl, Python, Lua, Ruby, other scripting languages, and more.</p>
+
+<p>However, LLVM does not itself provide a garbage collector—this should
+be part of your language's runtime library. LLVM provides a framework for
+compile time <a href="#plugin">code generation plugins</a>. The role of these
+plugins is to generate code and data structures which conforms to the <em>binary
+interface</em> specified by the <em>runtime library</em>. This is similar to the
+relationship between LLVM and DWARF debugging info, for example. The
+difference primarily lies in the lack of an established standard in the domain
+of garbage collection—thus the plugins.</p>
+
+<p>The aspects of the binary interface with which LLVM's GC support is
+concerned are:</p>
+
+<ul>
+  <li>Creation of GC-safe points within code where collection is allowed to
+      execute safely.</li>
+  <li>Computation of the stack map. For each safe point in the code, object
+      references within the stack frame must be identified so that the
+      collector may traverse and perhaps update them.</li>
+  <li>Write barriers when storing object references to the heap. These are
+      commonly used to optimize incremental scans in generational
+      collectors.</li>
+  <li>Emission of read barriers when loading object references. These are
+      useful for interoperating with concurrent collectors.</li>
+</ul>
+
+<p>There are additional areas that LLVM does not directly address:</p>
+
+<ul>
+  <li>Registration of global roots with the runtime.</li>
+  <li>Registration of stack map entries with the runtime.</li>
+  <li>The functions used by the program to allocate memory, trigger a
+      collection, etc.</li>
+  <li>Computation or compilation of type maps, or registration of them with
+      the runtime. These are used to crawl the heap for object
+      references.</li>
+</ul>
+
+<p>In general, LLVM's support for GC does not include features which can be
+adequately addressed with other features of the IR and does not specify a
+particular binary interface. On the plus side, this means that you should be
+able to integrate LLVM with an existing runtime. On the other hand, it leaves
+a lot of work for the developer of a novel language. However, it's easy to get
+started quickly and scale up to a more sophisticated implementation as your
+compiler matures.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="quickstart">Getting started</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Using a GC with LLVM implies many things, for example:</p>
+
+<ul>
+  <li>Write a runtime library or find an existing one which implements a GC
+      heap.<ol>
+    <li>Implement a memory allocator.</li>
+    <li>Design a binary interface for the stack map, used to identify
+        references within a stack frame on the machine stack.*</li>
+    <li>Implement a stack crawler to discover functions on the call stack.*</li>
+    <li>Implement a registry for global roots.</li>
+    <li>Design a binary interface for type maps, used to identify references
+        within heap objects.</li>
+    <li>Implement a collection routine bringing together all of the above.</li>
+  </ol></li>
+  <li>Emit compatible code from your compiler.<ul>
+    <li>Initialization in the main function.</li>
+    <li>Use the <tt>gc "..."</tt> attribute to enable GC code generation
+        (or <tt>F.setGC("...")</tt>).</li>
+    <li>Use <tt>@llvm.gcroot</tt> to mark stack roots.</li>
+    <li>Use <tt>@llvm.gcread</tt> and/or <tt>@llvm.gcwrite</tt> to
+        manipulate GC references, if necessary.</li>
+    <li>Allocate memory using the GC allocation routine provided by the
+        runtime library.</li>
+    <li>Generate type maps according to your runtime's binary interface.</li>
+  </ul></li>
+  <li>Write a compiler plugin to interface LLVM with the runtime library.*<ul>
+    <li>Lower <tt>@llvm.gcread</tt> and <tt>@llvm.gcwrite</tt> to appropriate
+        code sequences.*</li>
+    <li>Compile LLVM's stack map to the binary form expected by the
+        runtime.</li>
+  </ul></li>
+  <li>Load the plugin into the compiler. Use <tt>llc -load</tt> or link the
+      plugin statically with your language's compiler.*</li>
+  <li>Link program executables with the runtime.</li>
+</ul>
+
+<p>To help with several of these tasks (those indicated with a *), LLVM
+includes a highly portable, built-in ShadowStack code generator. It is compiled
+into <tt>llc</tt> and works even with the interpreter and C backends.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="quickstart-compiler">In your compiler</a>
+</div>
+
+<div class="doc_text">
+
+<p>To turn the shadow stack on for your functions, first call:</p>
+
+<div class="doc_code"><pre
+>F.setGC("shadow-stack");</pre></div>
+
+<p>for each function your compiler emits. Since the shadow stack is built into
+LLVM, you do not need to load a plugin.</p>
+
+<p>Your compiler must also use <tt>@llvm.gcroot</tt> as documented.
+Don't forget to create a root for each intermediate value that is generated
+when evaluating an expression. In <tt>h(f(), g())</tt>, the result of
+<tt>f()</tt> could easily be collected if evaluating <tt>g()</tt> triggers a
+collection.</p>
+
+<p>There's no need to use <tt>@llvm.gcread</tt> and <tt>@llvm.gcwrite</tt> over
+plain <tt>load</tt> and <tt>store</tt> for now. You will need them when
+switching to a more advanced GC.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="quickstart-runtime">In your runtime</a>
+</div>
+
+<div class="doc_text">
+
+<p>The shadow stack doesn't imply a memory allocation algorithm. A semispace
+collector or building atop <tt>malloc</tt> are great places to start, and can
+be implemented with very little code.</p>
+
+<p>When it comes time to collect, however, your runtime needs to traverse the
+stack roots, and for this it needs to integrate with the shadow stack. Luckily,
+doing so is very simple. (This code is heavily commented to help you
+understand the data structure, but there are only 20 lines of meaningful
+code.)</p>
+
+</div>
+
+<div class="doc_code"><pre
+>/// @brief The map for a single function's stack frame. One of these is
+///        compiled as constant data into the executable for each function.
+/// 
+/// Storage of metadata values is elided if the %metadata parameter to
+/// @llvm.gcroot is null.
+struct FrameMap {
+  int32_t NumRoots;    //< Number of roots in stack frame.
+  int32_t NumMeta;     //< Number of metadata entries. May be < NumRoots.
+  const void *Meta[0]; //< Metadata for each root.
+};
+
+/// @brief A link in the dynamic shadow stack. One of these is embedded in the
+///        stack frame of each function on the call stack.
+struct StackEntry {
+  StackEntry *Next;    //< Link to next stack entry (the caller's).
+  const FrameMap *Map; //< Pointer to constant FrameMap.
+  void *Roots[0];      //< Stack roots (in-place array).
+};
+
+/// @brief The head of the singly-linked list of StackEntries. Functions push
+///        and pop onto this in their prologue and epilogue.
+/// 
+/// Since there is only a global list, this technique is not threadsafe.
+StackEntry *llvm_gc_root_chain;
+
+/// @brief Calls Visitor(root, meta) for each GC root on the stack.
+///        root and meta are exactly the values passed to
+///        <tt>@llvm.gcroot</tt>.
+/// 
+/// Visitor could be a function to recursively mark live objects. Or it
+/// might copy them to another heap or generation.
+/// 
+/// @param Visitor A function to invoke for every GC root on the stack.
+void visitGCRoots(void (*Visitor)(void **Root, const void *Meta)) {
+  for (StackEntry *R = llvm_gc_root_chain; R; R = R->Next) {
+    unsigned i = 0;
+    
+    // For roots [0, NumMeta), the metadata pointer is in the FrameMap.
+    for (unsigned e = R->Map->NumMeta; i != e; ++i)
+      Visitor(&R->Roots[i], R->Map->Meta[i]);
+    
+    // For roots [NumMeta, NumRoots), the metadata pointer is null.
+    for (unsigned e = R->Map->NumRoots; i != e; ++i)
+      Visitor(&R->Roots[i], NULL);
+  }
+}</pre></div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="shadow-stack">About the shadow stack</a>
+</div>
+
+<div class="doc_text">
+
+<p>Unlike many GC algorithms which rely on a cooperative code generator to
+compile stack maps, this algorithm carefully maintains a linked list of stack
+roots [<a href="#henderson02">Henderson2002</a>]. This so-called "shadow stack"
+mirrors the machine stack. Maintaining this data structure is slower than using
+a stack map compiled into the executable as constant data, but has a significant
+portability advantage because it requires no special support from the target
+code generator, and does not require tricky platform-specific code to crawl
+the machine stack.</p>
+
+<p>The tradeoff for this simplicity and portability is:</p>
+
+<ul>
+  <li>High overhead per function call.</li>
+  <li>Not thread-safe.</li>
+</ul>
+
+<p>Still, it's an easy way to get started. After your compiler and runtime are
+up and running, writing a <a href="#plugin">plugin</a> will allow you to take
+advantage of <a href="#collector-algos">more advanced GC features</a> of LLVM
+in order to improve performance.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="core">IR features</a><a name="intrinsics"></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This section describes the garbage collection facilities provided by the
+<a href="LangRef.html">LLVM intermediate representation</a>. The exact behavior
+of these IR features is specified by the binary interface implemented by a
+<a href="#plugin">code generation plugin</a>, not by this document.</p>
+
+<p>These facilities are limited to those strictly necessary; they are not
+intended to be a complete interface to any garbage collector. A program will
+need to interface with the GC library using the facilities provided by that
+program.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="gcattr">Specifying GC code generation: <tt>gc "..."</tt></a>
+</div>
+
+<div class="doc_code"><tt>
+  define <i>ty</i> @<i>name</i>(...) <span style="text-decoration: underline">gc "<i>name</i>"</span> { ...
+</tt></div>
+
+<div class="doc_text">
+
+<p>The <tt>gc</tt> function attribute is used to specify the desired GC style
+to the compiler. Its programmatic equivalent is the <tt>setGC</tt> method of
+<tt>Function</tt>.</p>
+
+<p>Setting <tt>gc "<i>name</i>"</tt> on a function triggers a search for a
+matching code generation plugin "<i>name</i>"; it is that plugin which defines
+the exact nature of the code generated to support GC. If none is found, the
+compiler will raise an error.</p>
+
+<p>Specifying the GC style on a per-function basis allows LLVM to link together
+programs that use different garbage collection algorithms (or none at all).</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="gcroot">Identifying GC roots on the stack: <tt>llvm.gcroot</tt></a>
+</div>
+
+<div class="doc_code"><tt>
+  void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
+</tt></div>
+
+<div class="doc_text">
+
+<p>The <tt>llvm.gcroot</tt> intrinsic is used to inform LLVM that a stack
+variable references an object on the heap and is to be tracked for garbage
+collection. The exact impact on generated code is specified by a <a
+href="#plugin">compiler plugin</a>.</p>
+
+<p>A compiler which uses mem2reg to raise imperative code using <tt>alloca</tt>
+into SSA form need only add a call to <tt>@llvm.gcroot</tt> for those variables
+which a pointers into the GC heap.</p>
+
+<p>It is also important to mark intermediate values with <tt>llvm.gcroot</tt>.
+For example, consider <tt>h(f(), g())</tt>. Beware leaking the result of
+<tt>f()</tt> in the case that <tt>g()</tt> triggers a collection.</p>
+
+<p>The first argument <b>must</b> be a value referring to an alloca instruction
+or a bitcast of an alloca. The second contains a pointer to metadata that
+should be associated with the pointer, and <b>must</b> be a constant or global
+value address. If your target collector uses tags, use a null pointer for
+metadata.</p>
+
+<p>The <tt>%metadata</tt> argument can be used to avoid requiring heap objects
+to have 'isa' pointers or tag bits. [<a href="#appel89">Appel89</a>, <a
+href="#goldberg91">Goldberg91</a>, <a href="#tolmach94">Tolmach94</a>] If
+specified, its value will be tracked along with the location of the pointer in
+the stack frame.</p>
+
+<p>Consider the following fragment of Java code:</p>
+
+<pre>
+       {
+         Object X;   // A null-initialized reference to an object
+         ...
+       }
+</pre>
+
+<p>This block (which may be located in the middle of a function or in a loop
+nest), could be compiled to this LLVM code:</p>
+
+<pre>
+Entry:
+   ;; In the entry block for the function, allocate the
+   ;; stack space for X, which is an LLVM pointer.
+   %X = alloca %Object*
+   
+   ;; Tell LLVM that the stack space is a stack root.
+   ;; Java has type-tags on objects, so we pass null as metadata.
+   %tmp = bitcast %Object** %X to i8**
+   call void @llvm.gcroot(i8** %X, i8* null)
+   ...
+
+   ;; "CodeBlock" is the block corresponding to the start
+   ;;  of the scope above.
+CodeBlock:
+   ;; Java null-initializes pointers.
+   store %Object* null, %Object** %X
+
+   ...
+
+   ;; As the pointer goes out of scope, store a null value into
+   ;; it, to indicate that the value is no longer live.
+   store %Object* null, %Object** %X
+   ...
+</pre>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="barriers">Reading and writing references in the heap</a>
+</div>
+
+<div class="doc_text">
+
+<p>Some collectors need to be informed when the mutator (the program that needs
+garbage collection) either reads a pointer from or writes a pointer to a field
+of a heap object. The code fragments inserted at these points are called
+<em>read barriers</em> and <em>write barriers</em>, respectively. The amount of
+code that needs to be executed is usually quite small and not on the critical
+path of any computation, so the overall performance impact of the barrier is
+tolerable.</p>
+
+<p>Barriers often require access to the <em>object pointer</em> rather than the
+<em>derived pointer</em> (which is a pointer to the field within the
+object). Accordingly, these intrinsics take both pointers as separate arguments
+for completeness. In this snippet, <tt>%object</tt> is the object pointer, and 
+<tt>%derived</tt> is the derived pointer:</p>
+
+<blockquote><pre>
+    ;; An array type.
+    %class.Array = type { %class.Object, i32, [0 x %class.Object*] }
+    ...
+
+    ;; Load the object pointer from a gcroot.
+    %object = load %class.Array** %object_addr
+
+    ;; Compute the derived pointer.
+    %derived = getelementptr %object, i32 0, i32 2, i32 %n</pre></blockquote>
+
+<p>LLVM does not enforce this relationship between the object and derived
+pointer (although a <a href="#plugin">plugin</a> might). However, it would be
+an unusual collector that violated it.</p>
+
+<p>The use of these intrinsics is naturally optional if the target GC does
+require the corresponding barrier. Such a GC plugin will replace the intrinsic
+calls with the corresponding <tt>load</tt> or <tt>store</tt> instruction if they
+are used.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="gcwrite">Write barrier: <tt>llvm.gcwrite</tt></a>
+</div>
+
+<div class="doc_code"><tt>
+void @llvm.gcwrite(i8* %value, i8* %object, i8** %derived)
+</tt></div>
+
+<div class="doc_text">
+
+<p>For write barriers, LLVM provides the <tt>llvm.gcwrite</tt> intrinsic
+function. It has exactly the same semantics as a non-volatile <tt>store</tt> to
+the derived pointer (the third argument). The exact code generated is specified
+by a <a href="#plugin">compiler plugin</a>.</p>
+
+<p>Many important algorithms require write barriers, including generational
+and concurrent collectors. Additionally, write barriers could be used to
+implement reference counting.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection">
+  <a name="gcread">Read barrier: <tt>llvm.gcread</tt></a>
+</div>
+
+<div class="doc_code"><tt>
+i8* @llvm.gcread(i8* %object, i8** %derived)<br>
+</tt></div>
+
+<div class="doc_text">
+
+<p>For read barriers, LLVM provides the <tt>llvm.gcread</tt> intrinsic function.
+It has exactly the same semantics as a non-volatile <tt>load</tt> from the
+derived pointer (the second argument). The exact code generated is specified by
+a <a href="#plugin">compiler plugin</a>.</p>
+
+<p>Read barriers are needed by fewer algorithms than write barriers, and may
+have a greater performance impact since pointer reads are more frequent than
+writes.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="plugin">Implementing a collector plugin</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>User code specifies which GC code generation to use with the <tt>gc</tt>
+function attribute or, equivalently, with the <tt>setGC</tt> method of
+<tt>Function</tt>.</p>
+
+<p>To implement a GC plugin, it is necessary to subclass
+<tt>llvm::GCStrategy</tt>, which can be accomplished in a few lines of
+boilerplate code. LLVM's infrastructure provides access to several important
+algorithms. For an uncontroversial collector, all that remains may be to
+compile LLVM's computed stack map to assembly code (using the binary
+representation expected by the runtime library). This can be accomplished in
+about 100 lines of code.</p>
+
+<p>This is not the appropriate place to implement a garbage collected heap or a
+garbage collector itself. That code should exist in the language's runtime
+library. The compiler plugin is responsible for generating code which
+conforms to the binary interface defined by library, most essentially the
+<a href="#stack-map">stack map</a>.</p>
+
+<p>To subclass <tt>llvm::GCStrategy</tt> and register it with the compiler:</p>
+
+<blockquote><pre>// lib/MyGC/MyGC.cpp - Example LLVM GC plugin
+
+#include "llvm/CodeGen/GCStrategy.h"
+#include "llvm/CodeGen/GCMetadata.h"
+#include "llvm/Support/Compiler.h"
+
+using namespace llvm;
+
+namespace {
+  class LLVM_LIBRARY_VISIBILITY MyGC : public GCStrategy {
+  public:
+    MyGC() {}
+  };
+  
+  GCRegistry::Add<MyGC>
+  X("mygc", "My bespoke garbage collector.");
+}</pre></blockquote>
+
+<p>This boilerplate collector does nothing. More specifically:</p>
+
+<ul>
+  <li><tt>llvm.gcread</tt> calls are replaced with the corresponding
+      <tt>load</tt> instruction.</li>
+  <li><tt>llvm.gcwrite</tt> calls are replaced with the corresponding
+      <tt>store</tt> instruction.</li>
+  <li>No safe points are added to the code.</li>
+  <li>The stack map is not compiled into the executable.</li>
+</ul>
+
+<p>Using the LLVM makefiles (like the <a
+href="http://llvm.org/viewvc/llvm-project/llvm/trunk/projects/sample/">sample
+project</a>), this code can be compiled as a plugin using a simple
+makefile:</p>
+
+<blockquote><pre
+># lib/MyGC/Makefile
+
+LEVEL := ../..
+LIBRARYNAME = <var>MyGC</var>
+LOADABLE_MODULE = 1
+
+include $(LEVEL)/Makefile.common</pre></blockquote>
+
+<p>Once the plugin is compiled, code using it may be compiled using <tt>llc
+-load=<var>MyGC.so</var></tt> (though <var>MyGC.so</var> may have some other
+platform-specific extension):</p>
+
+<blockquote><pre
+>$ cat sample.ll
+define void @f() gc "mygc" {
+entry:
+        ret void
+}
+$ llvm-as < sample.ll | llc -load=MyGC.so</pre></blockquote>
+
+<p>It is also possible to statically link the collector plugin into tools, such
+as a language-specific compiler front-end.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="collector-algos">Overview of available features</a>
+</div>
+
+<div class="doc_text">
+
+<p><tt>GCStrategy</tt> provides a range of features through which a plugin
+may do useful work. Some of these are callbacks, some are algorithms that can
+be enabled, disabled, or customized. This matrix summarizes the supported (and
+planned) features and correlates them with the collection techniques which
+typically require them.</p>
+
+<table>
+  <tr>
+    <th>Algorithm</th>
+    <th>Done</th>
+    <th>shadow stack</th>
+    <th>refcount</th>
+    <th>mark-sweep</th>
+    <th>copying</th>
+    <th>incremental</th>
+    <th>threaded</th>
+    <th>concurrent</th>
+  </tr>
+  <tr>
+    <th class="rowhead"><a href="#stack-map">stack map</a></th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead"><a href="#init-roots">initialize roots</a></th>
+    <td>✔</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead">derived pointers</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘*</td>
+    <td>✘*</td>
+  </tr>
+  <tr>
+    <th class="rowhead"><em><a href="#custom">custom lowering</a></em></th>
+    <td>✔</td>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+  </tr>
+  <tr>
+    <th class="rowhead indent">gcroot</th>
+    <td>✔</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+  </tr>
+  <tr>
+    <th class="rowhead indent">gcwrite</th>
+    <td>✔</td>
+    <td></td>
+    <td>✘</td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td></td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead indent">gcread</th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead"><em><a href="#safe-points">safe points</a></em></th>
+    <td></td>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+  </tr>
+  <tr>
+    <th class="rowhead indent">in calls</th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead indent">before calls</th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead indent">for loops</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead indent">before escape</th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead">emit code at safe points</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr>
+    <th class="rowhead"><em>output</em></th>
+    <td></td>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+    <th></th>
+  </tr>
+  <tr>
+    <th class="rowhead indent"><a href="#assembly">assembly</a></th>
+    <td>✔</td>
+    <td></td>
+    <td></td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+    <td>✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead indent">JIT</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead indent">obj</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead">live analysis</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+  </tr>
+  <tr class="doc_warning">
+    <th class="rowhead">register map</th>
+    <td>NO</td>
+    <td></td>
+    <td></td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+    <td class="optl">✘</td>
+  </tr>
+  <tr>
+    <td colspan="10">
+      <div><span class="doc_warning">*</span> Derived pointers only pose a
+           hazard to copying collectors.</div>
+      <div><span class="optl">✘</span> in gray denotes a feature which
+           could be utilized if available.</div>
+    </td>
+  </tr>
+</table>
+
+<p>To be clear, the collection techniques above are defined as:</p>
+
+<dl>
+  <dt>Shadow Stack</dt>
+  <dd>The mutator carefully maintains a linked list of stack roots.</dd>
+  <dt>Reference Counting</dt>
+  <dd>The mutator maintains a reference count for each object and frees an
+      object when its count falls to zero.</dd>
+  <dt>Mark-Sweep</dt>
+  <dd>When the heap is exhausted, the collector marks reachable objects starting
+      from the roots, then deallocates unreachable objects in a sweep
+      phase.</dd>
+  <dt>Copying</dt>
+  <dd>As reachability analysis proceeds, the collector copies objects from one
+      heap area to another, compacting them in the process. Copying collectors
+      enable highly efficient "bump pointer" allocation and can improve locality
+      of reference.</dd>
+  <dt>Incremental</dt>
+  <dd>(Including generational collectors.) Incremental collectors generally have
+      all the properties of a copying collector (regardless of whether the
+      mature heap is compacting), but bring the added complexity of requiring
+      write barriers.</dd>
+  <dt>Threaded</dt>
+  <dd>Denotes a multithreaded mutator; the collector must still stop the mutator
+      ("stop the world") before beginning reachability analysis. Stopping a
+      multithreaded mutator is a complicated problem. It generally requires
+      highly platform specific code in the runtime, and the production of
+      carefully designed machine code at safe points.</dd>
+  <dt>Concurrent</dt>
+  <dd>In this technique, the mutator and the collector run concurrently, with
+      the goal of eliminating pause times. In a <em>cooperative</em> collector,
+      the mutator further aids with collection should a pause occur, allowing
+      collection to take advantage of multiprocessor hosts. The "stop the world"
+      problem of threaded collectors is generally still present to a limited
+      extent. Sophisticated marking algorithms are necessary. Read barriers may
+      be necessary.</dd>
+</dl>
+
+<p>As the matrix indicates, LLVM's garbage collection infrastructure is already
+suitable for a wide variety of collectors, but does not currently extend to
+multithreaded programs. This will be added in the future as there is
+interest.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="stack-map">Computing stack maps</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM automatically computes a stack map. One of the most important features
+of a <tt>GCStrategy</tt> is to compile this information into the executable in
+the binary representation expected by the runtime library.</p>
+
+<p>The stack map consists of the location and identity of each GC root in the
+each function in the module. For each root:</p>
+
+<ul>
+  <li><tt>RootNum</tt>: The index of the root.</li>
+  <li><tt>StackOffset</tt>: The offset of the object relative to the frame
+      pointer.</li>
+  <li><tt>RootMetadata</tt>: The value passed as the <tt>%metadata</tt>
+      parameter to the <a href="#gcroot"><tt>@llvm.gcroot</tt></a> intrinsic.</li>
+</ul>
+
+<p>Also, for the function as a whole:</p>
+
+<ul>
+  <li><tt>getFrameSize()</tt>: The overall size of the function's initial
+      stack frame, not accounting for any dynamic allocation.</li>
+  <li><tt>roots_size()</tt>: The count of roots in the function.</li>
+</ul>
+
+<p>To access the stack map, use <tt>GCFunctionMetadata::roots_begin()</tt> and
+-<tt>end()</tt> from the <tt><a
+href="#assembly">GCMetadataPrinter</a></tt>:</p>
+
+<blockquote><pre
+>for (iterator I = begin(), E = end(); I != E; ++I) {
+  GCFunctionInfo *FI = *I;
+  unsigned FrameSize = FI->getFrameSize();
+  size_t RootCount = FI->roots_size();
+
+  for (GCFunctionInfo::roots_iterator RI = FI->roots_begin(),
+                                      RE = FI->roots_end();
+                                      RI != RE; ++RI) {
+    int RootNum = RI->Num;
+    int RootStackOffset = RI->StackOffset;
+    Constant *RootMetadata = RI->Metadata;
+  }
+}</pre></blockquote>
+
+<p>If the <tt>llvm.gcroot</tt> intrinsic is eliminated before code generation by
+a custom lowering pass, LLVM will compute an empty stack map. This may be useful
+for collector plugins which implement reference counting or a shadow stack.</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="init-roots">Initializing roots to null: <tt>InitRoots</tt></a>
+</div>
+
+<div class="doc_text">
+
+<blockquote><pre
+>MyGC::MyGC() {
+  InitRoots = true;
+}</pre></blockquote>
+
+<p>When set, LLVM will automatically initialize each root to <tt>null</tt> upon
+entry to the function. This prevents the GC's sweep phase from visiting
+uninitialized pointers, which will almost certainly cause it to crash. This
+initialization occurs before custom lowering, so the two may be used
+together.</p>
+
+<p>Since LLVM does not yet compute liveness information, there is no means of
+distinguishing an uninitialized stack root from an initialized one. Therefore,
+this feature should be used by all GC plugins. It is enabled by default.</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="custom">Custom lowering of intrinsics: <tt>CustomRoots</tt>, 
+    <tt>CustomReadBarriers</tt>, and <tt>CustomWriteBarriers</tt></a>
+</div>
+
+<div class="doc_text">
+
+<p>For GCs which use barriers or unusual treatment of stack roots, these
+flags allow the collector to perform arbitrary transformations of the LLVM
+IR:</p>
+
+<blockquote><pre
+>class MyGC : public GCStrategy {
+public:
+  MyGC() {
+    CustomRoots = true;
+    CustomReadBarriers = true;
+    CustomWriteBarriers = true;
+  }
+  
+  virtual bool initializeCustomLowering(Module &M);
+  virtual bool performCustomLowering(Function &F);
+};</pre></blockquote>
+
+<p>If any of these flags are set, then LLVM suppresses its default lowering for
+the corresponding intrinsics and instead calls
+<tt>performCustomLowering</tt>.</p>
+
+<p>LLVM's default action for each intrinsic is as follows:</p>
+
+<ul>
+  <li><tt>llvm.gcroot</tt>: Leave it alone. The code generator must see it
+                            or the stack map will not be computed.</li>
+  <li><tt>llvm.gcread</tt>: Substitute a <tt>load</tt> instruction.</li>
+  <li><tt>llvm.gcwrite</tt>: Substitute a <tt>store</tt> instruction.</li>
+</ul>
+
+<p>If <tt>CustomReadBarriers</tt> or <tt>CustomWriteBarriers</tt> are specified,
+then <tt>performCustomLowering</tt> <strong>must</strong> eliminate the
+corresponding barriers.</p>
+
+<p><tt>performCustomLowering</tt> must comply with the same restrictions as <a
+href="WritingAnLLVMPass.html#runOnFunction"><tt
+>FunctionPass::runOnFunction</tt></a>.
+Likewise, <tt>initializeCustomLowering</tt> has the same semantics as <a
+href="WritingAnLLVMPass.html#doInitialization_mod"><tt
+>Pass::doInitialization(Module&)</tt></a>.</p>
+
+<p>The following can be used as a template:</p>
+
+<blockquote><pre
+>#include "llvm/Module.h"
+#include "llvm/IntrinsicInst.h"
+
+bool MyGC::initializeCustomLowering(Module &M) {
+  return false;
+}
+
+bool MyGC::performCustomLowering(Function &F) {
+  bool MadeChange = false;
+  
+  for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; )
+      if (IntrinsicInst *CI = dyn_cast<IntrinsicInst>(II++))
+        if (Function *F = CI->getCalledFunction())
+          switch (F->getIntrinsicID()) {
+          case Intrinsic::gcwrite:
+            // Handle llvm.gcwrite.
+            CI->eraseFromParent();
+            MadeChange = true;
+            break;
+          case Intrinsic::gcread:
+            // Handle llvm.gcread.
+            CI->eraseFromParent();
+            MadeChange = true;
+            break;
+          case Intrinsic::gcroot:
+            // Handle llvm.gcroot.
+            CI->eraseFromParent();
+            MadeChange = true;
+            break;
+          }
+  
+  return MadeChange;
+}</pre></blockquote>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="safe-points">Generating safe points: <tt>NeededSafePoints</tt></a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM can compute four kinds of safe points:</p>
+
+<blockquote><pre
+>namespace GC {
+  /// PointKind - The type of a collector-safe point.
+  /// 
+  enum PointKind {
+    Loop,    //< Instr is a loop (backwards branch).
+    Return,  //< Instr is a return instruction.
+    PreCall, //< Instr is a call instruction.
+    PostCall //< Instr is the return address of a call.
+  };
+}</pre></blockquote>
+
+<p>A collector can request any combination of the four by setting the 
+<tt>NeededSafePoints</tt> mask:</p>
+
+<blockquote><pre
+>MyGC::MyGC() {
+  NeededSafePoints = 1 << GC::Loop
+                   | 1 << GC::Return
+                   | 1 << GC::PreCall
+                   | 1 << GC::PostCall;
+}</pre></blockquote>
+
+<p>It can then use the following routines to access safe points.</p>
+
+<blockquote><pre
+>for (iterator I = begin(), E = end(); I != E; ++I) {
+  GCFunctionInfo *MD = *I;
+  size_t PointCount = MD->size();
+
+  for (GCFunctionInfo::iterator PI = MD->begin(),
+                                PE = MD->end(); PI != PE; ++PI) {
+    GC::PointKind PointKind = PI->Kind;
+    unsigned PointNum = PI->Num;
+  }
+}
+</pre></blockquote>
+
+<p>Almost every collector requires <tt>PostCall</tt> safe points, since these
+correspond to the moments when the function is suspended during a call to a
+subroutine.</p>
+
+<p>Threaded programs generally require <tt>Loop</tt> safe points to guarantee
+that the application will reach a safe point within a bounded amount of time,
+even if it is executing a long-running loop which contains no function
+calls.</p>
+
+<p>Threaded collectors may also require <tt>Return</tt> and <tt>PreCall</tt>
+safe points to implement "stop the world" techniques using self-modifying code,
+where it is important that the program not exit the function without reaching a
+safe point (because only the topmost function has been patched).</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="assembly">Emitting assembly code: <tt>GCMetadataPrinter</tt></a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM allows a plugin to print arbitrary assembly code before and after the
+rest of a module's assembly code. At the end of the module, the GC can compile
+the LLVM stack map into assembly code. (At the beginning, this information is not
+yet computed.)</p>
+
+<p>Since AsmWriter and CodeGen are separate components of LLVM, a separate
+abstract base class and registry is provided for printing assembly code, the
+<tt>GCMetadaPrinter</tt> and <tt>GCMetadataPrinterRegistry</tt>. The AsmWriter
+will look for such a subclass if the <tt>GCStrategy</tt> sets
+<tt>UsesMetadata</tt>:</p>
+
+<blockquote><pre
+>MyGC::MyGC() {
+  UsesMetadata = true;
+}</pre></blockquote>
+
+<p>This separation allows JIT-only clients to be smaller.</p>
+
+<p>Note that LLVM does not currently have analogous APIs to support code
+generation in the JIT, nor using the object writers.</p>
+
+<blockquote><pre
+>// lib/MyGC/MyGCPrinter.cpp - Example LLVM GC printer
+
+#include "llvm/CodeGen/GCMetadataPrinter.h"
+#include "llvm/Support/Compiler.h"
+
+using namespace llvm;
+
+namespace {
+  class LLVM_LIBRARY_VISIBILITY MyGCPrinter : public GCMetadataPrinter {
+  public:
+    virtual void beginAssembly(std::ostream &OS, AsmPrinter &AP,
+                               const TargetAsmInfo &TAI);
+  
+    virtual void finishAssembly(std::ostream &OS, AsmPrinter &AP,
+                                const TargetAsmInfo &TAI);
+  };
+  
+  GCMetadataPrinterRegistry::Add<MyGCPrinter>
+  X("mygc", "My bespoke garbage collector.");
+}</pre></blockquote>
+
+<p>The collector should use <tt>AsmPrinter</tt> and <tt>TargetAsmInfo</tt> to
+print portable assembly code to the <tt>std::ostream</tt>. The collector itself
+contains the stack map for the entire module, and may access the
+<tt>GCFunctionInfo</tt> using its own <tt>begin()</tt> and <tt>end()</tt>
+methods. Here's a realistic example:</p>
+
+<blockquote><pre
+>#include "llvm/CodeGen/AsmPrinter.h"
+#include "llvm/Function.h"
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetAsmInfo.h"
+
+void MyGCPrinter::beginAssembly(std::ostream &OS, AsmPrinter &AP,
+                                const TargetAsmInfo &TAI) {
+  // Nothing to do.
+}
+
+void MyGCPrinter::finishAssembly(std::ostream &OS, AsmPrinter &AP,
+                                 const TargetAsmInfo &TAI) {
+  // Set up for emitting addresses.
+  const char *AddressDirective;
+  int AddressAlignLog;
+  if (AP.TM.getTargetData()->getPointerSize() == sizeof(int32_t)) {
+    AddressDirective = TAI.getData32bitsDirective();
+    AddressAlignLog = 2;
+  } else {
+    AddressDirective = TAI.getData64bitsDirective();
+    AddressAlignLog = 3;
+  }
+  
+  // Put this in the data section.
+  AP.SwitchToDataSection(TAI.getDataSection());
+  
+  // For each function...
+  for (iterator FI = begin(), FE = end(); FI != FE; ++FI) {
+    GCFunctionInfo &MD = **FI;
+    
+    // Emit this data structure:
+    // 
+    // struct {
+    //   int32_t PointCount;
+    //   struct {
+    //     void *SafePointAddress;
+    //     int32_t LiveCount;
+    //     int32_t LiveOffsets[LiveCount];
+    //   } Points[PointCount];
+    // } __gcmap_<FUNCTIONNAME>;
+    
+    // Align to address width.
+    AP.EmitAlignment(AddressAlignLog);
+    
+    // Emit the symbol by which the stack map entry can be found.
+    std::string Symbol;
+    Symbol += TAI.getGlobalPrefix();
+    Symbol += "__gcmap_";
+    Symbol += MD.getFunction().getName();
+    if (const char *GlobalDirective = TAI.getGlobalDirective())
+      OS << GlobalDirective << Symbol << "\n";
+    OS << TAI.getGlobalPrefix() << Symbol << ":\n";
+    
+    // Emit PointCount.
+    AP.EmitInt32(MD.size());
+    AP.EOL("safe point count");
+    
+    // And each safe point...
+    for (GCFunctionInfo::iterator PI = MD.begin(),
+                                     PE = MD.end(); PI != PE; ++PI) {
+      // Align to address width.
+      AP.EmitAlignment(AddressAlignLog);
+      
+      // Emit the address of the safe point.
+      OS << AddressDirective
+         << TAI.getPrivateGlobalPrefix() << "label" << PI->Num;
+      AP.EOL("safe point address");
+      
+      // Emit the stack frame size.
+      AP.EmitInt32(MD.getFrameSize());
+      AP.EOL("stack frame size");
+      
+      // Emit the number of live roots in the function.
+      AP.EmitInt32(MD.live_size(PI));
+      AP.EOL("live root count");
+      
+      // And for each live root...
+      for (GCFunctionInfo::live_iterator LI = MD.live_begin(PI),
+                                            LE = MD.live_end(PI);
+                                            LI != LE; ++LI) {
+        // Print its offset within the stack frame.
+        AP.EmitInt32(LI->StackOffset);
+        AP.EOL("stack offset");
+      }
+    }
+  }
+}
+</pre></blockquote>
+
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="references">References</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p><a name="appel89">[Appel89]</a> Runtime Tags Aren't Necessary. Andrew
+W. Appel. Lisp and Symbolic Computation 19(7):703-705, July 1989.</p>
+
+<p><a name="goldberg91">[Goldberg91]</a> Tag-free garbage collection for
+strongly typed programming languages. Benjamin Goldberg. ACM SIGPLAN
+PLDI'91.</p>
+
+<p><a name="tolmach94">[Tolmach94]</a> Tag-free garbage collection using
+explicit type parameters. Andrew Tolmach. Proceedings of the 1994 ACM
+conference on LISP and functional programming.</p>
+
+<p><a name="henderson02">[Henderson2002]</a> <a
+href="http://citeseer.ist.psu.edu/henderson02accurate.html">
+Accurate Garbage Collection in an Uncooperative Environment</a>.
+Fergus Henderson. International Symposium on Memory Management 2002.</p>
+
+</div>
+
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.org">LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-05-11 13:16:09 -0700 (Tue, 11 May 2010) $
+</address>
+
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GetElementPtr.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GetElementPtr.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GetElementPtr.html (added)
+++ www-releases/trunk/2.9/docs/GetElementPtr.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,739 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>The Often Misunderstood GEP Instruction</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+  <style type="text/css">
+    TABLE   { text-align: left; border: 1px solid black; border-collapse: collapse; margin: 0 0 0 0; }
+  </style>
+</head>
+<body>
+
+<div class="doc_title">
+  The Often Misunderstood GEP Instruction
+</div>
+
+<ol>
+  <li><a href="#intro">Introduction</a></li>
+  <li><a href="#addresses">Address Computation</a>
+  <ol>
+    <li><a href="#extra_index">Why is the extra 0 index required?</a></li>
+    <li><a href="#deref">What is dereferenced by GEP?</a></li>
+    <li><a href="#firstptr">Why can you index through the first pointer but not
+      subsequent ones?</a></li>
+    <li><a href="#lead0">Why don't GEP x,0,0,1 and GEP x,1 alias? </a></li>
+    <li><a href="#trail0">Why do GEP x,1,0,0 and GEP x,1 alias? </a></li>
+    <li><a href="#vectors">Can GEP index into vector elements?</a>
+    <li><a href="#addrspace">What effect do address spaces have on GEPs?</a>
+    <li><a href="#int">How is GEP different from ptrtoint, arithmetic, and inttoptr?</a></li>
+    <li><a href="#be">I'm writing a backend for a target which needs custom lowering for GEP. How do I do this?</a>
+    <li><a href="#vla">How does VLA addressing work with GEPs?</a>
+  </ol></li>
+  <li><a href="#rules">Rules</a>
+  <ol>
+    <li><a href="#bounds">What happens if an array index is out of bounds?</a>
+    <li><a href="#negative">Can array indices be negative?</a>
+    <li><a href="#compare">Can I compare two values computed with GEPs?</a>
+    <li><a href="#types">Can I do GEP with a different pointer type than the type of the underlying object?</a>
+    <li><a href="#null">Can I cast an object's address to integer and add it to null?</a>
+    <li><a href="#ptrdiff">Can I compute the distance between two objects, and add that value to one address to compute the other address?</a>
+    <li><a href="#tbaa">Can I do type-based alias analysis on LLVM IR?</a>
+    <li><a href="#overflow">What happens if a GEP computation overflows?</a>
+    <li><a href="#check">How can I tell if my front-end is following the rules?</a>
+  </ol></li>
+  <li><a href="#rationale">Rationale</a>
+  <ol>
+    <li><a href="#goals">Why is GEP designed this way?</a></li>
+    <li><a href="#i32">Why do struct member indices always use i32?</a></li>
+    <li><a href="#uglygep">What's an uglygep?</a>
+  </ol></li>
+  <li><a href="#summary">Summary</a></li>
+</ol>
+
+<div class="doc_author">
+  <p>Written by: <a href="mailto:rspencer at reidspencer.com">Reid Spencer</a>.</p>
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="intro"><b>Introduction</b></a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text"> 
+  <p>This document seeks to dispel the mystery and confusion surrounding LLVM's
+  <a href="LangRef.html#i_getelementptr">GetElementPtr</a> (GEP) instruction.
+  Questions about the wily GEP instruction are
+  probably the most frequently occurring questions once a developer gets down to
+  coding with LLVM. Here we lay out the sources of confusion and show that the
+  GEP instruction is really quite simple.
+  </p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="addresses"><b>Address Computation</b></a></div>
+<!-- *********************************************************************** -->
+<div class="doc_text">
+  <p>When people are first confronted with the GEP instruction, they tend to
+  relate it to known concepts from other programming paradigms, most notably C
+  array indexing and field selection. GEP closely resembles C array indexing
+  and field selection, however it's is a little different and this leads to
+  the following questions.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="firstptr"><b>What is the first index of the GEP instruction?</b></a>
+</div>
+<div class="doc_text">
+  <p>Quick answer: The index stepping through the first operand.</p> 
+  <p>The confusion with the first index usually arises from thinking about 
+  the GetElementPtr instruction as if it was a C index operator. They aren't the
+  same. For example, when we write, in "C":</p>
+
+<div class="doc_code">
+<pre>
+AType *Foo;
+...
+X = &Foo->F;
+</pre>
+</div>
+
+  <p>it is natural to think that there is only one index, the selection of the
+  field <tt>F</tt>.  However, in this example, <tt>Foo</tt> is a pointer. That 
+  pointer must be indexed explicitly in LLVM. C, on the other hand, indices
+  through it transparently.  To arrive at the same address location as the C 
+  code, you would provide the GEP instruction with two index operands. The 
+  first operand indexes through the pointer; the second operand indexes the 
+  field <tt>F</tt> of the structure, just as if you wrote:</p>
+
+<div class="doc_code">
+<pre>
+X = &Foo[0].F;
+</pre>
+</div>
+
+  <p>Sometimes this question gets rephrased as:</p>
+  <blockquote><p><i>Why is it okay to index through the first pointer, but 
+      subsequent pointers won't be dereferenced?</i></p></blockquote> 
+  <p>The answer is simply because memory does not have to be accessed to 
+  perform the computation. The first operand to the GEP instruction must be a 
+  value of a pointer type. The value of the pointer is provided directly to 
+  the GEP instruction as an operand without any need for accessing memory. It 
+  must, therefore be indexed and requires an index operand. Consider this 
+  example:</p>
+
+<div class="doc_code">
+<pre>
+struct munger_struct {
+  int f1;
+  int f2;
+};
+void munge(struct munger_struct *P) {
+  P[0].f1 = P[1].f1 + P[2].f2;
+}
+...
+munger_struct Array[3];
+...
+munge(Array);
+</pre>
+</div>
+
+  <p>In this "C" example, the front end compiler (llvm-gcc) will generate three
+  GEP instructions for the three indices through "P" in the assignment
+  statement.  The function argument <tt>P</tt> will be the first operand of each
+  of these GEP instructions.  The second operand indexes through that pointer.
+  The third operand will be the field offset into the 
+  <tt>struct munger_struct</tt> type,  for either the <tt>f1</tt> or 
+  <tt>f2</tt> field. So, in LLVM assembly the <tt>munge</tt> function looks 
+  like:</p>
+
+<div class="doc_code">
+<pre>
+void %munge(%struct.munger_struct* %P) {
+entry:
+  %tmp = getelementptr %struct.munger_struct* %P, i32 1, i32 0
+  %tmp = load i32* %tmp
+  %tmp6 = getelementptr %struct.munger_struct* %P, i32 2, i32 1
+  %tmp7 = load i32* %tmp6
+  %tmp8 = add i32 %tmp7, %tmp
+  %tmp9 = getelementptr %struct.munger_struct* %P, i32 0, i32 0
+  store i32 %tmp8, i32* %tmp9
+  ret void
+}
+</pre>
+</div>
+
+  <p>In each case the first operand is the pointer through which the GEP
+  instruction starts. The same is true whether the first operand is an
+  argument, allocated memory, or a global variable. </p>
+  <p>To make this clear, let's consider a more obtuse example:</p>
+
+<div class="doc_code">
+<pre>
+%MyVar = uninitialized global i32
+...
+%idx1 = getelementptr i32* %MyVar, i64 0
+%idx2 = getelementptr i32* %MyVar, i64 1
+%idx3 = getelementptr i32* %MyVar, i64 2
+</pre>
+</div>
+
+  <p>These GEP instructions are simply making address computations from the 
+  base address of <tt>MyVar</tt>.  They compute, as follows (using C syntax):
+  </p>
+
+<div class="doc_code">
+<pre>
+idx1 = (char*) &MyVar + 0
+idx2 = (char*) &MyVar + 4
+idx3 = (char*) &MyVar + 8
+</pre>
+</div>
+
+  <p>Since the type <tt>i32</tt> is known to be four bytes long, the indices 
+  0, 1 and 2 translate into memory offsets of 0, 4, and 8, respectively. No 
+  memory is accessed to make these computations because the address of 
+  <tt>%MyVar</tt> is passed directly to the GEP instructions.</p>
+  <p>The obtuse part of this example is in the cases of <tt>%idx2</tt> and 
+  <tt>%idx3</tt>. They result in the computation of addresses that point to
+  memory past the end of the <tt>%MyVar</tt> global, which is only one
+  <tt>i32</tt> long, not three <tt>i32</tt>s long.  While this is legal in LLVM,
+  it is inadvisable because any load or store with the pointer that results 
+  from these GEP instructions would produce undefined results.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="extra_index"><b>Why is the extra 0 index required?</b></a>
+</div>
+<!-- *********************************************************************** -->
+<div class="doc_text">
+  <p>Quick answer: there are no superfluous indices.</p>
+  <p>This question arises most often when the GEP instruction is applied to a
+  global variable which is always a pointer type. For example, consider
+  this:</p>
+
+<div class="doc_code">
+<pre>
+%MyStruct = uninitialized global { float*, i32 }
+...
+%idx = getelementptr { float*, i32 }* %MyStruct, i64 0, i32 1
+</pre>
+</div>
+
+  <p>The GEP above yields an <tt>i32*</tt> by indexing the <tt>i32</tt> typed 
+  field of the structure <tt>%MyStruct</tt>. When people first look at it, they 
+  wonder why the <tt>i64 0</tt> index is needed. However, a closer inspection 
+  of how globals and GEPs work reveals the need. Becoming aware of the following
+  facts will dispel the confusion:</p>
+  <ol>
+    <li>The type of <tt>%MyStruct</tt> is <i>not</i> <tt>{ float*, i32 }</tt> 
+    but rather <tt>{ float*, i32 }*</tt>. That is, <tt>%MyStruct</tt> is a 
+    pointer to a structure containing a pointer to a <tt>float</tt> and an 
+    <tt>i32</tt>.</li>
+    <li>Point #1 is evidenced by noticing the type of the first operand of 
+    the GEP instruction (<tt>%MyStruct</tt>) which is 
+    <tt>{ float*, i32 }*</tt>.</li>
+    <li>The first index, <tt>i64 0</tt> is required to step over the global
+    variable <tt>%MyStruct</tt>.  Since the first argument to the GEP
+    instruction must always be a value of pointer type, the first index 
+    steps through that pointer. A value of 0 means 0 elements offset from that
+    pointer.</li>
+    <li>The second index, <tt>i32 1</tt> selects the second field of the
+    structure (the <tt>i32</tt>). </li>
+  </ol>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="deref"><b>What is dereferenced by GEP?</b></a>
+</div>
+<div class="doc_text">
+  <p>Quick answer: nothing.</p> 
+  <p>The GetElementPtr instruction dereferences nothing. That is, it doesn't
+  access memory in any way. That's what the Load and Store instructions are for.
+  GEP is only involved in the computation of addresses. For example, consider 
+  this:</p>
+
+<div class="doc_code">
+<pre>
+%MyVar = uninitialized global { [40 x i32 ]* }
+...
+%idx = getelementptr { [40 x i32]* }* %MyVar, i64 0, i32 0, i64 0, i64 17
+</pre>
+</div>
+
+  <p>In this example, we have a global variable, <tt>%MyVar</tt> that is a
+  pointer to a structure containing a pointer to an array of 40 ints. The 
+  GEP instruction seems to be accessing the 18th integer of the structure's
+  array of ints. However, this is actually an illegal GEP instruction. It 
+  won't compile. The reason is that the pointer in the structure <i>must</i>
+  be dereferenced in order to index into the array of 40 ints. Since the 
+  GEP instruction never accesses memory, it is illegal.</p>
+  <p>In order to access the 18th integer in the array, you would need to do the
+  following:</p>
+
+<div class="doc_code">
+<pre>
+%idx = getelementptr { [40 x i32]* }* %, i64 0, i32 0
+%arr = load [40 x i32]** %idx
+%idx = getelementptr [40 x i32]* %arr, i64 0, i64 17
+</pre>
+</div>
+
+  <p>In this case, we have to load the pointer in the structure with a load
+  instruction before we can index into the array. If the example was changed 
+  to:</p>
+
+<div class="doc_code">
+<pre>
+%MyVar = uninitialized global { [40 x i32 ] }
+...
+%idx = getelementptr { [40 x i32] }*, i64 0, i32 0, i64 17
+</pre>
+</div>
+
+  <p>then everything works fine. In this case, the structure does not contain a
+  pointer and the GEP instruction can index through the global variable,
+  into the first field of the structure and access the 18th <tt>i32</tt> in the 
+  array there.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="lead0"><b>Why don't GEP x,0,0,1 and GEP x,1 alias?</b></a>
+</div>
+<div class="doc_text">
+  <p>Quick Answer: They compute different address locations.</p>
+  <p>If you look at the first indices in these GEP
+  instructions you find that they are different (0 and 1), therefore the address
+  computation diverges with that index. Consider this example:</p>
+
+<div class="doc_code">
+<pre>
+%MyVar = global { [10 x i32 ] }
+%idx1 = getelementptr { [10 x i32 ] }* %MyVar, i64 0, i32 0, i64 1
+%idx2 = getelementptr { [10 x i32 ] }* %MyVar, i64 1
+</pre>
+</div>
+
+  <p>In this example, <tt>idx1</tt> computes the address of the second integer
+  in the array that is in the structure in <tt>%MyVar</tt>, that is
+  <tt>MyVar+4</tt>. The type of <tt>idx1</tt> is <tt>i32*</tt>. However,
+  <tt>idx2</tt> computes the address of <i>the next</i> structure after
+  <tt>%MyVar</tt>. The type of <tt>idx2</tt> is <tt>{ [10 x i32] }*</tt> and its
+  value is equivalent to <tt>MyVar + 40</tt> because it indexes past the ten
+  4-byte integers in <tt>MyVar</tt>. Obviously, in such a situation, the
+  pointers don't alias.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="trail0"><b>Why do GEP x,1,0,0 and GEP x,1 alias?</b></a>
+</div>
+<div class="doc_text">
+  <p>Quick Answer: They compute the same address location.</p>
+  <p>These two GEP instructions will compute the same address because indexing
+  through the 0th element does not change the address. However, it does change
+  the type. Consider this example:</p>
+
+<div class="doc_code">
+<pre>
+%MyVar = global { [10 x i32 ] }
+%idx1 = getelementptr { [10 x i32 ] }* %MyVar, i64 1, i32 0, i64 0
+%idx2 = getelementptr { [10 x i32 ] }* %MyVar, i64 1
+</pre>
+</div>
+
+  <p>In this example, the value of <tt>%idx1</tt> is <tt>%MyVar+40</tt> and
+  its type is <tt>i32*</tt>. The value of <tt>%idx2</tt> is also 
+  <tt>MyVar+40</tt> but its type is <tt>{ [10 x i32] }*</tt>.</p>
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="vectors"><b>Can GEP index into vector elements?</b></a>
+</div>
+<div class="doc_text">
+  <p>This hasn't always been forcefully disallowed, though it's not recommended.
+     It leads to awkward special cases in the optimizers, and fundamental
+     inconsistency in the IR. In the future, it will probably be outright
+     disallowed.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="addrspace"><b>What effect do address spaces have on GEPs?</b></a>
+</div>
+<div class="doc_text">
+   <p>None, except that the address space qualifier on the first operand pointer
+      type always matches the address space qualifier on the result type.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="int"><b>How is GEP different from ptrtoint, arithmetic,
+                   and inttoptr?</b></a>
+</div>
+<div class="doc_text">
+  <p>It's very similar; there are only subtle differences.</p>
+
+  <p>With ptrtoint, you have to pick an integer type. One approach is to pick i64;
+     this is safe on everything LLVM supports (LLVM internally assumes pointers
+     are never wider than 64 bits in many places), and the optimizer will actually
+     narrow the i64 arithmetic down to the actual pointer size on targets which
+     don't support 64-bit arithmetic in most cases. However, there are some cases
+     where it doesn't do this. With GEP you can avoid this problem.
+
+  <p>Also, GEP carries additional pointer aliasing rules. It's invalid to take a
+     GEP from one object, address into a different separately allocated
+     object, and dereference it. IR producers (front-ends) must follow this rule,
+     and consumers (optimizers, specifically alias analysis) benefit from being
+     able to rely on it. See the <a href="#rules">Rules</a> section for more
+     information.</p>
+
+  <p>And, GEP is more concise in common cases.</p>
+
+  <p>However, for the underlying integer computation implied, there
+     is no difference.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="be"><b>I'm writing a backend for a target which needs custom
+                  lowering for GEP. How do I do this?</b></a>
+</div>
+<div class="doc_text">
+  <p>You don't. The integer computation implied by a GEP is target-independent.
+     Typically what you'll need to do is make your backend pattern-match
+     expressions trees involving ADD, MUL, etc., which are what GEP is lowered
+     into. This has the advantage of letting your code work correctly in more
+     cases.</p>
+
+  <p>GEP does use target-dependent parameters for the size and layout of data
+     types, which targets can customize.</p>
+
+  <p>If you require support for addressing units which are not 8 bits, you'll
+     need to fix a lot of code in the backend, with GEP lowering being only a
+     small piece of the overall picture.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="vla"><b>How does VLA addressing work with GEPs?</b></a>
+</div>
+<div class="doc_text">
+  <p>GEPs don't natively support VLAs. LLVM's type system is entirely static,
+     and GEP address computations are guided by an LLVM type.</p>
+
+  <p>VLA indices can be implemented as linearized indices. For example, an
+     expression like X[a][b][c], must be effectively lowered into a form
+     like X[a*m+b*n+c], so that it appears to the GEP as a single-dimensional
+     array reference.</p>
+
+  <p>This means if you want to write an analysis which understands array
+     indices and you want to support VLAs, your code will have to be
+     prepared to reverse-engineer the linearization. One way to solve this
+     problem is to use the ScalarEvolution library, which always presents
+     VLA and non-VLA indexing in the same manner.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="rules"><b>Rules</b></a></div>
+<!-- *********************************************************************** -->
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="bounds"><b>What happens if an array index is out of bounds?</b></a>
+</div>
+<div class="doc_text">
+  <p>There are two senses in which an array index can be out of bounds.</p>
+
+  <p>First, there's the array type which comes from the (static) type of
+     the first operand to the GEP. Indices greater than the number of elements
+     in the corresponding static array type are valid. There is no problem with
+     out of bounds indices in this sense. Indexing into an array only depends
+     on the size of the array element, not the number of elements.</p>
+     
+  <p>A common example of how this is used is arrays where the size is not known.
+     It's common to use array types with zero length to represent these. The
+     fact that the static type says there are zero elements is irrelevant; it's
+     perfectly valid to compute arbitrary element indices, as the computation
+     only depends on the size of the array element, not the number of
+     elements. Note that zero-sized arrays are not a special case here.</p>
+
+  <p>This sense is unconnected with <tt>inbounds</tt> keyword. The
+     <tt>inbounds</tt> keyword is designed to describe low-level pointer
+     arithmetic overflow conditions, rather than high-level array
+     indexing rules.
+
+  <p>Analysis passes which wish to understand array indexing should not
+     assume that the static array type bounds are respected.</p>
+
+  <p>The second sense of being out of bounds is computing an address that's
+     beyond the actual underlying allocated object.</p>
+
+  <p>With the <tt>inbounds</tt> keyword, the result value of the GEP is
+     undefined if the address is outside the actual underlying allocated
+     object and not the address one-past-the-end.</p>
+
+  <p>Without the <tt>inbounds</tt> keyword, there are no restrictions
+     on computing out-of-bounds addresses. Obviously, performing a load or
+     a store requires an address of allocated and sufficiently aligned
+     memory. But the GEP itself is only concerned with computing addresses.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="negative"><b>Can array indices be negative?</b></a>
+</div>
+<div class="doc_text">
+  <p>Yes. This is basically a special case of array indices being out
+     of bounds.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="compare"><b>Can I compare two values computed with GEPs?</b></a>
+</div>
+<div class="doc_text">
+  <p>Yes. If both addresses are within the same allocated object, or 
+     one-past-the-end, you'll get the comparison result you expect. If either
+     is outside of it, integer arithmetic wrapping may occur, so the
+     comparison may not be meaningful.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="types"><b>Can I do GEP with a different pointer type than the type of
+                     the underlying object?</b></a>
+</div>
+<div class="doc_text">
+  <p>Yes. There are no restrictions on bitcasting a pointer value to an arbitrary
+     pointer type. The types in a GEP serve only to define the parameters for the
+     underlying integer computation. They need not correspond with the actual
+     type of the underlying object.</p>
+
+  <p>Furthermore, loads and stores don't have to use the same types as the type
+     of the underlying object. Types in this context serve only to specify
+     memory size and alignment. Beyond that there are merely a hint to the
+     optimizer indicating how the value will likely be used.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="null"><b>Can I cast an object's address to integer and add it
+                    to null?</b></a>
+</div>
+<div class="doc_text">
+  <p>You can compute an address that way, but if you use GEP to do the add,
+     you can't use that pointer to actually access the object, unless the
+     object is managed outside of LLVM.</p>
+
+  <p>The underlying integer computation is sufficiently defined; null has a
+     defined value -- zero -- and you can add whatever value you want to it.</p>
+
+  <p>However, it's invalid to access (load from or store to) an LLVM-aware
+     object with such a pointer. This includes GlobalVariables, Allocas, and
+     objects pointed to by noalias pointers.</p>
+
+  <p>If you really need this functionality, you can do the arithmetic with
+     explicit integer instructions, and use inttoptr to convert the result to
+     an address. Most of GEP's special aliasing rules do not apply to pointers
+     computed from ptrtoint, arithmetic, and inttoptr sequences.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="ptrdiff"><b>Can I compute the distance between two objects, and add
+                       that value to one address to compute the other address?</b></a>
+</div>
+<div class="doc_text">
+  <p>As with arithmetic on null, You can use GEP to compute an address that
+     way, but you can't use that pointer to actually access the object if you
+     do, unless the object is managed outside of LLVM.</p>
+
+  <p>Also as above, ptrtoint and inttoptr provide an alternative way to do this
+     which do not have this restriction.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="tbaa"><b>Can I do type-based alias analysis on LLVM IR?</b></a>
+</div>
+<div class="doc_text">
+  <p>You can't do type-based alias analysis using LLVM's built-in type system,
+     because LLVM has no restrictions on mixing types in addressing, loads or
+     stores.</p>
+
+  <p>It would be possible to add special annotations to the IR, probably using
+     metadata, to describe a different type system (such as the C type system),
+     and do type-based aliasing on top of that. This is a much bigger
+     undertaking though.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="overflow"><b>What happens if a GEP computation overflows?</b></a>
+</div>
+<div class="doc_text">
+   <p>If the GEP lacks the <tt>inbounds</tt> keyword, the value is the result
+      from evaluating the implied two's complement integer computation. However,
+      since there's no guarantee of where an object will be allocated in the
+      address space, such values have limited meaning.</p>
+
+  <p>If the GEP has the <tt>inbounds</tt> keyword, the result value is
+     undefined (a "<a href="LangRef.html#trapvalues">trap value</a>") if the GEP
+     overflows (i.e. wraps around the end of the address space).</p>
+  
+  <p>As such, there are some ramifications of this for inbounds GEPs: scales
+     implied by array/vector/pointer indices are always known to be "nsw" since
+     they are signed values that are scaled by the element size.  These values
+     are also allowed to be negative (e.g. "gep i32 *%P, i32 -1") but the
+     pointer itself is logically treated as an unsigned value.  This means that
+     GEPs have an asymmetric relation between the pointer base (which is treated
+     as unsigned) and the offset applied to it (which is treated as signed). The
+     result of the additions within the offset calculation cannot have signed
+     overflow, but when applied to the base pointer, there can be signed
+     overflow.
+  </p>
+  
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="check"><b>How can I tell if my front-end is following the
+                     rules?</b></a>
+</div>
+<div class="doc_text">
+   <p>There is currently no checker for the getelementptr rules. Currently,
+      the only way to do this is to manually check each place in your front-end
+      where GetElementPtr operators are created.</p>
+
+   <p>It's not possible to write a checker which could find all rule
+      violations statically. It would be possible to write a checker which
+      works by instrumenting the code with dynamic checks though. Alternatively,
+      it would be possible to write a static checker which catches a subset of
+      possible problems. However, no such checker exists today.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="rationale"><b>Rationale</b></a></div>
+<!-- *********************************************************************** -->
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="goals"><b>Why is GEP designed this way?</b></a>
+</div>
+<div class="doc_text">
+   <p>The design of GEP has the following goals, in rough unofficial
+      order of priority:</p>
+   <ul>
+     <li>Support C, C-like languages, and languages which can be
+         conceptually lowered into C (this covers a lot).</li>
+     <li>Support optimizations such as those that are common in
+         C compilers. In particular, GEP is a cornerstone of LLVM's
+         <a href="LangRef.html#pointeraliasing">pointer aliasing model</a>.</li>
+     <li>Provide a consistent method for computing addresses so that
+         address computations don't need to be a part of load and
+         store instructions in the IR.</li>
+     <li>Support non-C-like languages, to the extent that it doesn't
+         interfere with other goals.</li>
+     <li>Minimize target-specific information in the IR.</li>
+   </ul>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_subsection">
+  <a name="i32"><b>Why do struct member indices always use i32?</b></a>
+</div>
+<div class="doc_text">
+  <p>The specific type i32 is probably just a historical artifact, however it's
+     wide enough for all practical purposes, so there's been no need to change it.
+     It doesn't necessarily imply i32 address arithmetic; it's just an identifier
+     which identifies a field in a struct. Requiring that all struct indices be
+     the same reduces the range of possibilities for cases where two GEPs are
+     effectively the same but have distinct operand types.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="doc_subsection">
+  <a name="uglygep"><b>What's an uglygep?</b></a>
+</div>
+<div class="doc_text">
+  <p>Some LLVM optimizers operate on GEPs by internally lowering them into
+     more primitive integer expressions, which allows them to be combined
+     with other integer expressions and/or split into multiple separate
+     integer expressions. If they've made non-trivial changes, translating
+     back into LLVM IR can involve reverse-engineering the structure of
+     the addressing in order to fit it into the static type of the original
+     first operand. It isn't always possibly to fully reconstruct this
+     structure; sometimes the underlying addressing doesn't correspond with
+     the static type at all. In such cases the optimizer instead will emit
+     a GEP with the base pointer casted to a simple address-unit pointer,
+     using the name "uglygep". This isn't pretty, but it's just as
+     valid, and it's sufficient to preserve the pointer aliasing guarantees
+     that GEP provides.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="summary"><b>Summary</b></a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+  <p>In summary, here's some things to always remember about the GetElementPtr
+  instruction:</p>
+  <ol>
+    <li>The GEP instruction never accesses memory, it only provides pointer
+    computations.</li>
+    <li>The first operand to the GEP instruction is always a pointer and it must
+    be indexed.</li>
+    <li>There are no superfluous indices for the GEP instruction.</li>
+    <li>Trailing zero indices are superfluous for pointer aliasing, but not for
+    the types of the pointers.</li>
+    <li>Leading zero indices are not superfluous for pointer aliasing nor the
+    types of the pointers.</li>
+  </ol>
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br/>
+  Last modified: $Date: 2011-02-11 13:50:52 -0800 (Fri, 11 Feb 2011) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GettingStarted.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GettingStarted.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GettingStarted.html (added)
+++ www-releases/trunk/2.9/docs/GettingStarted.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,1702 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Getting Started with LLVM System</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">
+  Getting Started with the LLVM System  
+</div>
+
+<ul>
+  <li><a href="#overview">Overview</a>
+  <li><a href="#quickstart">Getting Started Quickly (A Summary)</a>
+  <li><a href="#requirements">Requirements</a>
+    <ol>
+      <li><a href="#hardware">Hardware</a></li>
+      <li><a href="#software">Software</a></li>
+      <li><a href="#brokengcc">Broken versions of GCC and other tools</a></li>
+    </ol></li>
+
+  <li><a href="#starting">Getting Started with LLVM</a>
+    <ol>
+      <li><a href="#terminology">Terminology and Notation</a></li>
+      <li><a href="#environment">Setting Up Your Environment</a></li>
+      <li><a href="#unpack">Unpacking the LLVM Archives</a></li>
+      <li><a href="#checkout">Checkout LLVM from Subversion</a></li>
+      <li><a href="#git_mirror">LLVM GIT mirror</a></li>
+      <li><a href="#installcf">Install the GCC Front End</a></li>
+      <li><a href="#config">Local LLVM Configuration</a></li>
+      <li><a href="#compile">Compiling the LLVM Suite Source Code</a></li>
+      <li><a href="#cross-compile">Cross-Compiling LLVM</a></li>
+      <li><a href="#objfiles">The Location of LLVM Object Files</a></li>
+      <li><a href="#optionalconfig">Optional Configuration Items</a></li>
+    </ol></li>
+
+  <li><a href="#layout">Program layout</a>
+    <ol>
+      <li><a href="#examples"><tt>llvm/examples</tt></a></li>
+      <li><a href="#include"><tt>llvm/include</tt></a></li>
+      <li><a href="#lib"><tt>llvm/lib</tt></a></li>
+      <li><a href="#projects"><tt>llvm/projects</tt></a></li>
+      <li><a href="#runtime"><tt>llvm/runtime</tt></a></li>
+      <li><a href="#test"><tt>llvm/test</tt></a></li>
+      <li><a href="#test-suite"><tt>test-suite</tt></a></li>
+      <li><a href="#tools"><tt>llvm/tools</tt></a></li>
+      <li><a href="#utils"><tt>llvm/utils</tt></a></li>
+    </ol></li>
+
+  <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
+      <ol>
+         <li><a href="#tutorial4">Example with llvm-gcc4</a></li>
+      </ol>
+  <li><a href="#problems">Common Problems</a>
+  <li><a href="#links">Links</a>
+</ul>
+
+<div class="doc_author">
+  <p>Written by: 
+    <a href="mailto:criswell at uiuc.edu">John Criswell</a>, 
+    <a href="mailto:sabre at nondot.org">Chris Lattner</a>,
+    <a href="http://misha.brukman.net">Misha Brukman</a>, 
+    <a href="http://www.cs.uiuc.edu/~vadve">Vikram Adve</a>, and
+    <a href="mailto:gshi1 at uiuc.edu">Guochun Shi</a>.
+  </p>
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="overview"><b>Overview</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Welcome to LLVM! In order to get started, you first need to know some
+basic information.</p>
+
+<p>First, LLVM comes in three pieces. The first piece is the LLVM
+suite. This contains all of the tools, libraries, and header files
+needed to use the low level virtual machine.  It contains an
+assembler, disassembler, bitcode analyzer and bitcode optimizer.  It
+also contains basic regression tests that can be used to test the LLVM
+tools and the GCC front end.</p>
+
+<p>The second piece is the GCC front end.  This component provides a version of
+GCC that compiles C and C++ code into LLVM bitcode.  Currently, the GCC front
+end uses the GCC parser to convert code to LLVM.  Once
+compiled into LLVM bitcode, a program can be manipulated with the LLVM tools
+from the LLVM suite.</p>
+
+<p>
+There is a third, optional piece called Test Suite.  It is a suite of programs
+with a testing harness that can be used to further test LLVM's functionality
+and performance.
+</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Here's the short story for getting up and running quickly with LLVM:</p>
+
+<ol>
+  <li>Read the documentation.</li>
+  <li>Read the documentation.</li>
+  <li>Remember that you were warned twice about reading the documentation.</li>
+  <li>Install the llvm-gcc-4.2 front end if you intend to compile C or C++
+      (see <a href="#installcf">Install the GCC Front End</a> for details):</li>
+    <ol>
+      <li><tt>cd <i>where-you-want-the-C-front-end-to-live</i></tt></li>
+      <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf -</tt></li>
+	  <li><tt><i>install-binutils-binary-from-MinGW</i></tt> (Windows only)</li>
+	  <li>Note: If the binary extension is "<tt>.bz</tt>" use <tt>bunzip2</tt> instead of <tt>gunzip</tt>.</li>
+	  <li>Note: On Windows, use <a href="http://www.7-zip.org">7-Zip</a> or a similar archiving tool.</li>
+	  <li>Add <tt>llvm-gcc</tt>'s "<tt>bin</tt>" directory to your <tt>PATH</tt> environment variable.</li>
+    </ol></li>
+
+  <li>Get the LLVM Source Code
+  <ul>
+    <li>With the distributed files (or use <a href="#checkout">SVN</a>):
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
+      <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
+    </ol></li>
+
+  </ul></li>
+
+  <li><b>[Optional]</b> Get the Test Suite Source Code 
+  <ul>
+    <li>With the distributed files (or use <a href="#checkout">SVN</a>):
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
+      <li><tt>cd llvm/projects</tt>
+      <li><tt>gunzip --stdout llvm-test-<i>version</i>.tar.gz | tar -xvf -</tt>
+      <li><tt>mv llvm-test-<i>version</i> test-suite</tt>
+    </ol></li>
+
+  </ul></li>
+
+
+  <li>Configure the LLVM Build Environment
+  <ol>
+    <li><tt>cd <i>where-you-want-to-build-llvm</i></tt></li>
+    <li><tt><i>/path/to/llvm/</i>configure [options]</tt><br>
+    Some common options:
+
+      <ul>
+        <li><tt>--prefix=<i>directory</i></tt>
+        <p>Specify for <i>directory</i> the full pathname of where you
+        want the LLVM tools and libraries to be installed (default
+        <tt>/usr/local</tt>).</p></li>
+        <li><tt>--with-llvmgccdir=<i>directory</i></tt>
+        <p>Optionally, specify for <i>directory</i> the full pathname of the 
+        C/C++ front end installation to use with this LLVM configuration. If
+        not specified, the PATH will be searched.  This is only needed if you
+        want to run test-suite or do some special kinds of LLVM builds.</p></li>
+        <li><tt>--enable-spec2000=<i>directory</i></tt>
+            <p>Enable the SPEC2000 benchmarks for testing.  The SPEC2000
+            benchmarks should be available in
+            <tt><i>directory</i></tt>.</p></li>
+      </ul>
+  </ol></li>
+
+  <li>Build the LLVM Suite:
+  <ol>
+      <li><tt>gmake -k |& tee gnumake.out
+         # this is csh or tcsh syntax</tt></li>
+      <li>If you get an "internal compiler error (ICE)" or test failures, see 
+          <a href="#brokengcc">below</a>.</li>
+  </ol>
+
+</ol>
+
+<p>Consult the <a href="#starting">Getting Started with LLVM</a> section for
+detailed information on configuring and compiling LLVM.  See <a
+href="#environment">Setting Up Your Environment</a> for tips that simplify
+working with the GCC front end and LLVM tools.  Go to <a href="#layout">Program
+Layout</a> to learn about the layout of the source code tree.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="requirements"><b>Requirements</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Before you begin to use the LLVM system, review the requirements given below.
+This may save you some trouble by knowing ahead of time what hardware and
+software you will need.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="hardware"><b>Hardware</b></a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM is known to work on the following platforms:</p>
+
+<table cellpadding="3" summary="Known LLVM platforms">
+<tr>
+  <th>OS</th>
+  <th>Arch</th>
+  <th>Compilers</th>
+</tr>
+<tr>
+  <td>AuroraUX</td>
+  <td>x86<sup><a href="#pf_1">1</a></sup></td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Linux</td>
+  <td>x86<sup><a href="#pf_1">1</a></sup></td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Linux</td>
+  <td>amd64</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Solaris</td>
+  <td>V9 (Ultrasparc)</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>FreeBSD</td>
+  <td>x86<sup><a href="#pf_1">1</a></sup></td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>FreeBSD</td>
+  <td>amd64</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>MacOS X<sup><a href="#pf_2">2</a></sup></td>
+  <td>PowerPC</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>MacOS X<sup><a href="#pf_2">2</a>,<a href="#pf_9">9</a></sup></td>
+  <td>x86</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Cygwin/Win32</td>
+  <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_8">8</a>,
+     <a href="#pf_11">11</a></sup></td>
+  <td>GCC 3.4.X, binutils 2.20</td>
+</tr>
+<tr>
+  <td>MinGW/Win32</td>
+  <td>x86<sup><a href="#pf_1">1</a>,<a href="#pf_6">6</a>,
+     <a href="#pf_8">8</a>, <a href="#pf_10">10</a></sup></td>
+  <td>GCC 3.4.X, binutils 2.20</td>
+</tr>
+</table>
+
+<p>LLVM has partial support for the following platforms:</p>
+
+<table summary="LLVM partial platform support">
+<tr>
+  <th>OS</th>
+  <th>Arch</th>
+  <th>Compilers</th>
+</tr>
+<tr>
+  <td>Windows</td>
+  <td>x86<sup><a href="#pf_1">1</a></sup></td>
+  <td>Visual Studio 2005 SP1 or higher<sup><a href="#pf_4">4</a>,<a href="#pf_5">5</a></sup></td>
+<tr>
+  <td>AIX<sup><a href="#pf_3">3</a>,<a href="#pf_4">4</a></sup></td>
+  <td>PowerPC</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Linux<sup><a href="#pf_3">3</a>,<a href="#pf_5">5</a></sup></td>
+  <td>PowerPC</td>
+  <td>GCC</td>
+</tr>
+
+<tr>
+  <td>Linux<sup><a href="#pf_7">7</a></sup></td>
+  <td>Alpha</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>Linux<sup><a href="#pf_7">7</a></sup></td>
+  <td>Itanium (IA-64)</td>
+  <td>GCC</td>
+</tr>
+<tr>
+  <td>HP-UX<sup><a href="#pf_7">7</a></sup></td>
+  <td>Itanium (IA-64)</td>
+  <td>HP aCC</td>
+</tr>
+</table>
+
+<p><b>Notes:</b></p>
+
+<div class="doc_notes">
+<ol>
+<li><a name="pf_1">Code generation supported for Pentium processors and
+up</a></li>
+<li><a name="pf_2">Code generation supported for 32-bit ABI only</a></li>
+<li><a name="pf_3">No native code generation</a></li>
+<li><a name="pf_4">Build is not complete: one or more tools do not link or function</a></li>
+<li><a name="pf_5">The GCC-based C/C++ frontend does not build</a></li>
+<li><a name="pf_6">The port is done using the MSYS shell.</a></li>
+<li><a name="pf_7">Native code generation exists but is not complete.</a></li>
+<li><a name="pf_8">Binutils 2.20 or later is required to build the assembler
+    generated by LLVM properly.</a></li>
+<li><a name="pf_9">XCode 2.5 and gcc 4.0.1</a> (Apple Build 5370) will trip
+    internal LLVM assert messages when compiled for Release at optimization
+    levels greater than 0 (i.e., <i>"-O1"</i> and higher).
+    Add <i>OPTIMIZE_OPTION="-O0"</i> to the build command line
+    if compiling for LLVM Release or bootstrapping the LLVM toolchain.</li>
+<li><a name="pf_10">For MSYS/MinGW on Windows, be sure to install the MSYS
+    version of the perl package, and be sure it appears in your path
+    before any Windows-based versions such as Strawberry Perl and
+    ActivePerl, as these have Windows-specifics that will cause the
+    build to fail.</a></li>
+<li><a name="pf_11">In general, LLVM modules requiring dynamic linking can
+    not be built on Windows. However, you can build LLVM tools using
+    <i>"make tools-only"</i>.</li>
+</ol>
+</div>
+
+<p>Note that you will need about 1-3 GB of space for a full LLVM build in Debug
+mode, depending on the system (it is so large because of all the debugging
+information and the fact that the libraries are statically linked into multiple
+tools).  If you do not need many of the tools and you are space-conscious, you
+can pass <tt>ONLY_TOOLS="tools you need"</tt> to make.  The Release build
+requires considerably less space.</p>
+
+<p>The LLVM suite <i>may</i> compile on other platforms, but it is not
+guaranteed to do so.  If compilation is successful, the LLVM utilities should be
+able to assemble, disassemble, analyze, and optimize LLVM bitcode.  Code
+generation should work as well, although the generated native code may not work
+on your platform.</p>
+
+<p>The GCC front end is not very portable at the moment.  If you want to get it
+to work on another platform, you can download a copy of the source and <a
+href="GCCFEBuildInstrs.html">try to compile it</a> on your platform.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="software"><b>Software</b></a></div>
+<div class="doc_text">
+  <p>Compiling LLVM requires that you have several software packages 
+  installed. The table below lists those required packages. The Package column
+  is the usual name for the software package that LLVM depends on. The Version
+  column provides "known to work" versions of the package. The Notes column
+  describes how LLVM uses the package and provides other details.</p>
+  <table summary="Packages required to compile LLVM">
+    <tr><th>Package</th><th>Version</th><th>Notes</th></tr>
+
+    <tr>
+      <td><a href="http://savannah.gnu.org/projects/make">GNU Make</a></td>
+      <td>3.79, 3.79.1</td>
+      <td>Makefile/build processor</td>
+    </tr>
+
+    <tr>
+      <td><a href="http://gcc.gnu.org">GCC</a></td>
+      <td>3.4.2</td>
+      <td>C/C++ compiler<sup><a href="#sf1">1</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://www.gnu.org/software/texinfo">TeXinfo</a></td>
+      <td>4.5</td>
+      <td>For building the CFE</td>
+    </tr>
+
+    <tr>
+      <td><a href="http://subversion.tigris.org/project_packages.html">SVN</a></td>
+      <td>≥1.3</td>
+      <td>Subversion access to LLVM<sup><a href="#sf2">2</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://savannah.gnu.org/projects/dejagnu">DejaGnu</a></td>
+      <td>1.4.2</td>
+      <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://www.tcl.tk/software/tcltk/">tcl</a></td>
+      <td>8.3, 8.4</td>
+      <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://expect.nist.gov/">expect</a></td>
+      <td>5.38.0</td>
+      <td>Automated test suite<sup><a href="#sf3">3</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://www.perl.com/download.csp">perl</a></td>
+      <td>≥5.6.0</td>
+      <td>Nightly tester, utilities</td>
+    </tr>
+
+    <tr>
+      <td><a href="http://savannah.gnu.org/projects/m4">GNU M4</a>
+      <td>1.4</td>
+      <td>Macro processor for configuration<sup><a href="#sf4">4</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://www.gnu.org/software/autoconf">GNU Autoconf</a></td>
+      <td>2.60</td>
+      <td>Configuration script builder<sup><a href="#sf4">4</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://www.gnu.org/software/automake">GNU Automake</a></td>
+      <td>1.9.6</td>
+      <td>aclocal macro generator<sup><a href="#sf4">4</a></sup></td>
+    </tr>
+
+    <tr>
+      <td><a href="http://savannah.gnu.org/projects/libtool">libtool</a></td>
+      <td>1.5.22</td>
+      <td>Shared library manager<sup><a href="#sf4">4</a></sup></td>
+    </tr>
+
+  </table>
+
+  <p><b>Notes:</b></p>
+  <div class="doc_notes">
+  <ol>
+    <li><a name="sf1">Only the C and C++ languages are needed so there's no
+      need to build the other languages for LLVM's purposes.</a> See 
+      <a href="#brokengcc">below</a> for specific version info.</li>
+    <li><a name="sf2">You only need Subversion if you intend to build from the 
+      latest LLVM sources. If you're working from a release distribution, you
+      don't need Subversion.</a></li>
+    <li><a name="sf3">Only needed if you want to run the automated test 
+      suite in the <tt>llvm/test</tt> directory.</a></li>
+    <li><a name="sf4">If you want to make changes to the configure scripts, 
+      you will need GNU autoconf (2.60), and consequently, GNU M4 (version 1.4 
+      or higher). You will also need automake (1.9.6). We only use aclocal 
+      from that package.</a></li>
+  </ol>
+  </div>
+  
+  <p>Additionally, your compilation host is expected to have the usual 
+  plethora of Unix utilities. Specifically:</p>
+  <ul>
+    <li><b>ar</b> - archive library builder</li>
+    <li><b>bzip2*</b> - bzip2 command for distribution generation</li>
+    <li><b>bunzip2*</b> - bunzip2 command for distribution checking</li>
+    <li><b>chmod</b> - change permissions on a file</li>
+    <li><b>cat</b> - output concatenation utility</li>
+    <li><b>cp</b> - copy files</li>
+    <li><b>date</b> - print the current date/time </li>
+    <li><b>echo</b> - print to standard output</li>
+    <li><b>egrep</b> - extended regular expression search utility</li>
+    <li><b>find</b> - find files/dirs in a file system</li>
+    <li><b>grep</b> - regular expression search utility</li>
+    <li><b>gzip*</b> - gzip command for distribution generation</li>
+    <li><b>gunzip*</b> - gunzip command for distribution checking</li>
+    <li><b>install</b> - install directories/files </li>
+    <li><b>mkdir</b> - create a directory</li>
+    <li><b>mv</b> - move (rename) files</li>
+    <li><b>ranlib</b> - symbol table builder for archive libraries</li>
+    <li><b>rm</b> - remove (delete) files and directories</li>
+    <li><b>sed</b> - stream editor for transforming output</li>
+    <li><b>sh</b> - Bourne shell for make build scripts</li>
+    <li><b>tar</b> - tape archive for distribution generation</li>
+    <li><b>test</b> - test things in file system</li>
+    <li><b>unzip*</b> - unzip command for distribution checking</li>
+    <li><b>zip*</b> - zip command for distribution generation</li>
+  </ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="brokengcc">Broken versions of GCC and other tools</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM is very demanding of the host C++ compiler, and as such tends to expose
+bugs in the compiler.  In particular, several versions of GCC crash when trying
+to compile LLVM.  We routinely use GCC 3.3.3, 3.4.0, and Apple 4.0.1 
+successfully with them (however, see important notes below).  Other versions 
+of GCC will probably work as well.  GCC versions listed
+here are known to not work.  If you are using one of these versions, please try
+to upgrade your GCC to something more recent.  If you run into a problem with a
+version of GCC not listed here, please <a href="mailto:llvmdev at cs.uiuc.edu">let
+us know</a>.  Please use the "<tt>gcc -v</tt>" command to find out which version
+of GCC you are using.
+</p>
+
+<p><b>GCC versions prior to 3.0</b>: GCC 2.96.x and before had several
+problems in the STL that effectively prevent it from compiling LLVM.
+</p>
+
+<p><b>GCC 3.2.2 and 3.2.3</b>: These versions of GCC fails to compile LLVM with
+a bogus template error.  This was fixed in later GCCs.</p>
+
+<p><b>GCC 3.3.2</b>: This version of GCC suffered from a <a 
+href="http://gcc.gnu.org/PR13392">serious bug</a> which causes it to crash in
+the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
+
+<p><b>Cygwin GCC 3.3.3</b>: The version of GCC 3.3.3 commonly shipped with 
+   Cygwin does not work.  Please <a href="GCCFEBuildInstrs.html#cygwin">upgrade 
+   to a newer version</a> if possible.</p>
+<p><b>SuSE GCC 3.3.3</b>: The version of GCC 3.3.3 shipped with SuSE 9.1 (and 
+   possibly others) does not compile LLVM correctly (it appears that exception 
+   handling is broken in some cases).  Please download the FSF 3.3.3 or upgrade
+   to a newer version of GCC.</p>
+<p><b>GCC 3.4.0 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the 
+   code generator, causing an infinite loop in the llvm-gcc build when built
+   with optimizations enabled (i.e. a release build).</p>
+<p><b>GCC 3.4.2 on linux/x86 (32-bit)</b>: GCC miscompiles portions of the 
+   code generator at -O3, as with 3.4.0.  However gcc 3.4.2 (unlike 3.4.0)
+   correctly compiles LLVM at -O2.  A work around is to build release LLVM
+   builds with "make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2 ..."</p>
+<p><b>GCC 3.4.x on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
+   miscompiles portions of LLVM</a>.</p>
+<p><b>GCC 3.4.4 (CodeSourcery ARM 2005q3-2)</b>: this compiler miscompiles LLVM
+   when building with optimizations enabled.  It appears to work with 
+   "<tt>make ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O1</tt>" or build a debug
+   build.</p>
+<p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
+   miscompile LLVM.</p>
+<p><b>Apple Xcode 2.3</b>: GCC crashes when compiling LLVM at -O3 (which is the
+   default with ENABLE_OPTIMIZED=1.  To work around this, build with 
+   "ENABLE_OPTIMIZED=1 OPTIMIZE_OPTION=-O2".</p>
+<p><b>GCC 4.1.1</b>: GCC fails to build LLVM with template concept check errors
+      compiling some files.  At the time of this writing, GCC mainline (4.2)
+      did not share the problem.</p>
+<p><b>GCC 4.1.1 on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1063">
+   miscompiles portions of LLVM</a> when compiling llvm itself into 64-bit 
+   code.  LLVM will appear to mostly work but will be buggy, e.g. failing 
+   portions of its testsuite.</p>
+<p><b>GCC 4.1.2 on OpenSUSE</b>: Seg faults during libstdc++ build and on x86_64
+platforms compiling md5.c gets a mangled constant.</p>
+<p><b>GCC 4.1.2 (20061115 (prerelease) (Debian 4.1.1-21)) on Debian</b>: Appears
+to miscompile parts of LLVM 2.4. One symptom is ValueSymbolTable complaining
+about symbols remaining in the table on destruction.</p>
+<p><b>GCC 4.1.2 20071124 (Red Hat 4.1.2-42)</b>: Suffers from the same symptoms
+as the previous one. It appears to work with ENABLE_OPTIMIZED=0 (the default).</p>
+<p><b>Cygwin GCC 4.3.2 20080827 (beta) 2</b>:
+  Users <a href="http://llvm.org/PR4145">reported</a> various problems related
+  with link errors when using this GCC version.</p>
+<p><b>Debian GCC 4.3.2 on X86</b>: Crashes building some files in LLVM 2.6.</p>
+<p><b>GCC 4.3.3 (Debian 4.3.3-10) on ARM</b>: Miscompiles parts of LLVM 2.6
+when optimizations are turned on. The symptom is an infinite loop in
+FoldingSetImpl::RemoveNode while running the code generator.</p>
+<p><b>GCC 4.3.5 and GCC 4.4.5 on ARM</b>: These can miscompile <tt>value >>
+1</tt> even at -O0. A test failure in <tt>test/Assembler/alignstack.ll</tt> is
+one symptom of the problem.
+<p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
+long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
+defined in a discarded section. You can safely ignore these messages as they are
+erroneous and the linkage is correct.  These messages disappear using ld
+2.17.</p>
+
+<p><b>GNU binutils 2.17</b>: Binutils 2.17 contains <a 
+href="http://sourceware.org/bugzilla/show_bug.cgi?id=3111">a bug</a> which
+causes huge link times (minutes instead of seconds) when building LLVM.  We
+recommend upgrading to a newer version (2.17.50.0.4 or later).</p>
+
+<p><b>GNU Binutils 2.19.1 Gold</b>: This version of Gold contained
+<a href="http://sourceware.org/bugzilla/show_bug.cgi?id=9836">a bug</a>
+which causes intermittent failures when building LLVM with position independent
+code.  The symptom is an error about cyclic dependencies.  We recommend
+upgrading to a newer version of Gold.</p>
+
+</div>
+
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="starting"><b>Getting Started with LLVM</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>The remainder of this guide is meant to get you up and running with
+LLVM and to give you some basic information about the LLVM environment.</p>
+
+<p>The later sections of this guide describe the <a
+href="#layout">general layout</a> of the the LLVM source tree, a <a
+href="#tutorial">simple example</a> using the LLVM tool chain, and <a
+href="#links">links</a> to find more information about LLVM or to get
+help via e-mail.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="terminology">Terminology and Notation</a>
+</div>
+
+<div class="doc_text">
+
+<p>Throughout this manual, the following names are used to denote paths
+specific to the local system and working environment.  <i>These are not
+environment variables you need to set but just strings used in the rest
+of this document below</i>.  In any of the examples below, simply replace
+each of these names with the appropriate pathname on your local system.
+All these paths are absolute:</p>
+
+<dl>
+    <dt>SRC_ROOT
+    <dd>
+    This is the top level directory of the LLVM source tree.
+    <br><br>
+
+    <dt>OBJ_ROOT
+    <dd>
+    This is the top level directory of the LLVM object tree (i.e. the
+    tree where object files and compiled programs will be placed.  It
+    can be the same as SRC_ROOT).
+    <br><br>
+
+    <dt>LLVMGCCDIR
+    <dd>
+    This is where the LLVM GCC Front End is installed.
+    <p>
+    For the pre-built GCC front end binaries, the LLVMGCCDIR is
+    <tt>llvm-gcc/<i>platform</i>/llvm-gcc</tt>.
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="environment">Setting Up Your Environment</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+In order to compile and use LLVM, you may need to set some environment
+variables.
+
+<dl>
+  <dt><tt>LLVM_LIB_SEARCH_PATH</tt>=<tt>/path/to/your/bitcode/libs</tt></dt>
+  <dd>[Optional] This environment variable helps LLVM linking tools find the
+  locations of your bitcode libraries. It is provided only as a
+  convenience since you can specify the paths using the -L options of the
+  tools and the C/C++ front-end will automatically use the bitcode files
+  installed in its
+  <tt>lib</tt> directory.</dd>
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="unpack">Unpacking the LLVM Archives</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+If you have the LLVM distribution, you will need to unpack it before you
+can begin to compile it.  LLVM is distributed as a set of two files: the LLVM
+suite and the LLVM GCC front end compiled for your platform.  There is an
+additional test suite that is optional.  Each file is a TAR archive that is
+compressed with the gzip program.
+</p>
+
+<p>The files are as follows, with <em>x.y</em> marking the version number:
+<dl>
+  <dt><tt>llvm-x.y.tar.gz</tt></dt>
+  <dd>Source release for the LLVM libraries and tools.<br></dd>
+
+  <dt><tt>llvm-test-x.y.tar.gz</tt></dt>
+  <dd>Source release for the LLVM test-suite.</dd>
+
+  <dt><tt>llvm-gcc-4.2-x.y.source.tar.gz</tt></dt>
+  <dd>Source release of the llvm-gcc-4.2 front end.  See README.LLVM in the root
+      directory for build instructions.<br></dd>
+
+  <dt><tt>llvm-gcc-4.2-x.y-platform.tar.gz</tt></dt>
+  <dd>Binary release of the llvm-gcc-4.2 front end for a specific platform.<br></dd>
+
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="checkout">Checkout LLVM from Subversion</a>
+</div>
+
+<div class="doc_text">
+
+<p>If you have access to our Subversion repository, you can get a fresh copy of
+the entire source code.  All you need to do is check it out from Subversion as
+follows:</p>
+
+<ul>
+  <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
+  <li>Read-Only: <tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
+  <li>Read-Write:<tt>svn co https://user@llvm.org/svn/llvm-project/llvm/trunk
+    llvm</tt></li>
+</ul>
+
+
+<p>This will create an '<tt>llvm</tt>' directory in the current
+directory and fully populate it with the LLVM source code, Makefiles,
+test directories, and local copies of documentation files.</p>
+
+<p>If you want to get a specific release (as opposed to the most recent
+revision), you can checkout it from the '<tt>tags</tt>' directory (instead of
+'<tt>trunk</tt>'). The following releases are located in the following
+subdirectories of the '<tt>tags</tt>' directory:</p>
+
+<ul>
+<li>Release 2.9: <b>RELEASE_29</b></li>
+<li>Release 2.8: <b>RELEASE_28</b></li>
+<li>Release 2.7: <b>RELEASE_27</b></li>
+<li>Release 2.6: <b>RELEASE_26</b></li>
+<li>Release 2.5: <b>RELEASE_25</b></li>
+<li>Release 2.4: <b>RELEASE_24</b></li>
+<li>Release 2.3: <b>RELEASE_23</b></li>
+<li>Release 2.2: <b>RELEASE_22</b></li>
+<li>Release 2.1: <b>RELEASE_21</b></li>
+<li>Release 2.0: <b>RELEASE_20</b></li>
+<li>Release 1.9: <b>RELEASE_19</b></li>
+<li>Release 1.8: <b>RELEASE_18</b></li>
+<li>Release 1.7: <b>RELEASE_17</b></li>
+<li>Release 1.6: <b>RELEASE_16</b></li>
+<li>Release 1.5: <b>RELEASE_15</b></li>
+<li>Release 1.4: <b>RELEASE_14</b></li>
+<li>Release 1.3: <b>RELEASE_13</b></li>
+<li>Release 1.2: <b>RELEASE_12</b></li>
+<li>Release 1.1: <b>RELEASE_11</b></li>
+<li>Release 1.0: <b>RELEASE_1</b></li>
+</ul>
+
+<p>If you would like to get the LLVM test suite (a separate package as of 1.4),
+you get it from the Subversion repository:</p>
+
+<div class="doc_code">
+<pre>
+% cd llvm/projects
+% svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite
+</pre>
+</div>
+
+<p>By placing it in the <tt>llvm/projects</tt>, it will be automatically
+configured by the LLVM configure script as well as automatically updated when
+you run <tt>svn update</tt>.</p>
+
+<p>If you would like to get the GCC front end source code, you can also get it 
+and build it yourself.  Please follow <a href="GCCFEBuildInstrs.html">these 
+instructions</a> to successfully get and build the LLVM GCC front-end.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="git_mirror">GIT mirror</a>
+</div>
+
+<div class="doc_text">
+
+<p>GIT mirrors are available for a number of LLVM subprojects. These mirrors
+  sync automatically with each Subversion commit and contain all necessary
+  git-svn marks (so, you can recreate git-svn metadata locally). Note that right
+  now mirrors reflect only <tt>trunk</tt> for each project. You can do the
+  read-only GIT clone of LLVM via: 
+<pre>
+% git clone http://llvm.org/git/llvm.git
+</pre>
+</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="installcf">Install the GCC Front End</a>
+</div>
+
+<div class="doc_text">
+
+<p>Before configuring and compiling the LLVM suite (or if you want to use just the LLVM
+GCC front end) you can optionally extract the front end from the binary distribution.
+It is used for running the LLVM test-suite and for compiling C/C++ programs.  Note that
+you can optionally <a href="GCCFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
+main LLVM repository.</p>
+
+<p>To install the GCC front end, do the following (on Windows, use an archival tool
+like <a href="http://www.7-zip.org">7-zip</a> that understands gzipped tars):</p>
+
+<ol>
+  <li><tt>cd <i>where-you-want-the-front-end-to-live</i></tt></li>
+  <li><tt>gunzip --stdout llvm-gcc-4.2-<i>version</i>-<i>platform</i>.tar.gz | tar -xvf
+      -</tt></li>
+</ol>
+
+<p>Once the binary is uncompressed, if you're using a *nix-based system, add a symlink for
+<tt>llvm-gcc</tt> and <tt>llvm-g++</tt> to some directory in your path.  If you're using a
+Windows-based system, add the <tt>bin</tt> subdirectory of your front end installation directory
+to your <tt>PATH</tt> environment variable.  For example, if you uncompressed the binary to
+<tt>c:\llvm-gcc</tt>, add <tt>c:\llvm-gcc\bin</tt> to your <tt>PATH</tt>.</p>
+
+<p>If you now want to build LLVM from source, when you configure LLVM, it will 
+automatically detect <tt>llvm-gcc</tt>'s presence (if it is in your path) enabling its
+use in test-suite.  Note that you can always build or install <tt>llvm-gcc</tt> at any
+point after building the main LLVM repository: just reconfigure llvm and 
+test-suite will pick it up.
+</p>
+
+<p>As a convenience for Windows users, the front end binaries for MinGW/x86 include
+versions of the required w32api and mingw-runtime binaries.  The last remaining step for
+Windows users is to simply uncompress the binary binutils package from
+<a href="http://mingw.org/">MinGW</a> into your front end installation directory.  While the
+front end installation steps are not quite the same as a typical manual MinGW installation,
+they should be similar enough to those who have previously installed MinGW on Windows systems.</p>
+
+<p>To install binutils on Windows:</p>
+
+<ol>
+  <li><tt><i>download GNU Binutils from <a href="http://sourceforge.net/projects/mingw/files/">MinGW Downloads</a></i></tt></li>
+  <li><tt>cd <i>where-you-uncompressed-the-front-end</i></tt></li>
+  <li><tt><i>uncompress archived binutils directories (not the tar file) into the current directory</i></tt></li>
+</ol>
+
+<p>The binary versions of the LLVM GCC front end may not suit all of your needs.  For
+example, the binary distribution may include an old version of a system header
+file, not "fix" a header file that needs to be fixed for GCC, or it may be linked with
+libraries not available on your system.  In cases like these, you may want to try
+<a href="GCCFEBuildInstrs.html">building the GCC front end from source</a>.  Thankfully,
+this is much easier now than it was in the past.</p>
+
+<p>We also do not currently support updating of the GCC front end by manually overlaying
+newer versions of the w32api and mingw-runtime binary packages that may become available
+from MinGW.  At this time, it's best to think of the MinGW LLVM GCC front end binary as
+a self-contained convenience package that requires Windows users to simply download and
+uncompress the GNU Binutils binary package from the MinGW project.</p>
+
+<p>Regardless of your platform, if you discover that installing the LLVM GCC front end
+binaries is not as easy as previously described, or you would like to suggest improvements,
+please let us know how you would like to see things improved by dropping us a note on our
+<a href="http://llvm.org/docs/#maillist">mailing list</a>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="config">Local LLVM Configuration</a>
+</div>
+
+<div class="doc_text">
+
+  <p>Once checked out from the Subversion repository, the LLVM suite source 
+  code must be
+configured via the <tt>configure</tt> script.  This script sets variables in the
+various <tt>*.in</tt> files, most notably <tt>llvm/Makefile.config</tt> and 
+<tt>llvm/include/Config/config.h</tt>.  It also populates <i>OBJ_ROOT</i> with 
+the Makefiles needed to begin building LLVM.</p>
+
+<p>The following environment variables are used by the <tt>configure</tt>
+script to configure the build system:</p>
+
+<table summary="LLVM configure script environment variables">
+  <tr><th>Variable</th><th>Purpose</th></tr>
+  <tr>
+    <td>CC</td>
+    <td>Tells <tt>configure</tt> which C compiler to use.  By default,
+        <tt>configure</tt> will look for the first GCC C compiler in
+        <tt>PATH</tt>.  Use this variable to override
+        <tt>configure</tt>'s default behavior.</td>
+  </tr>
+  <tr>
+    <td>CXX</td>
+    <td>Tells <tt>configure</tt> which C++ compiler to use.  By default,
+       <tt>configure</tt> will look for the first GCC C++ compiler in
+       <tt>PATH</tt>.  Use this variable to override
+       <tt>configure</tt>'s default behavior.</td>
+  </tr>
+</table>
+
+<p>The following options can be used to set or enable LLVM specific options:</p>
+
+<dl>
+  <dt><i>--with-llvmgccdir</i></dt>
+  <dd>Path to the LLVM C/C++ FrontEnd to be used with this LLVM configuration. 
+  The value of this option should specify the full pathname of the C/C++ Front
+  End to be used. If this option is not provided, the PATH will be searched for
+  a program named <i>llvm-gcc</i> and the C/C++ FrontEnd install directory will
+  be inferred from the path found. If the option is not given, and no llvm-gcc
+  can be found in the path then a warning will be produced by 
+  <tt>configure</tt> indicating this situation. LLVM may still be built with 
+  the <tt>tools-only</tt> target but attempting to build the runtime libraries
+  will fail as these libraries require llvm-gcc and llvm-g++. See 
+  <a href="#installcf">Install the GCC Front End</a> for details on installing
+  the C/C++ Front End. See
+  <a href="GCCFEBuildInstrs.html">Bootstrapping the LLVM C/C++ Front-End</a>
+  for details on building the C/C++ Front End.</dd>
+  <dt><i>--with-tclinclude</i></dt>
+  <dd>Path to the tcl include directory under which <tt>tclsh</tt> can be
+  found. Use this if you have multiple tcl installations on your machine and you
+  want to use a specific one (8.x) for LLVM. LLVM only uses tcl for running the
+  dejagnu based test suite in <tt>llvm/test</tt>. If you don't specify this
+  option, the LLVM configure script will search for the tcl 8.4 and 8.3
+  releases.
+  <br><br>
+  </dd>
+  <dt><i>--enable-optimized</i></dt>
+  <dd>
+    Enables optimized compilation (debugging symbols are removed
+    and GCC optimization flags are enabled). Note that this is the default 
+    setting     if you are using the LLVM distribution. The default behavior 
+    of an Subversion checkout is to use an unoptimized build (also known as a 
+    debug build).
+    <br><br>
+  </dd>
+  <dt><i>--enable-debug-runtime</i></dt>
+  <dd>
+    Enables debug symbols in the runtime libraries. The default is to strip
+    debug symbols from the runtime libraries. 
+  </dd>
+  <dt><i>--enable-jit</i></dt>
+  <dd>
+    Compile the Just In Time (JIT) compiler functionality.  This is not
+    available
+    on all platforms.  The default is dependent on platform, so it is best
+    to explicitly enable it if you want it.
+    <br><br>
+  </dd>
+  <dt><i>--enable-targets=</i><tt>target-option</tt></dt>
+  <dd>Controls which targets will be built and linked into llc. The default 
+  value for <tt>target_options</tt> is "all" which builds and links all 
+  available targets.  The value "host-only" can be specified to build only a 
+  native compiler (no cross-compiler targets available). The "native" target is 
+  selected as the target of the build host. You can also specify a comma 
+  separated list of target names that you want available in llc. The target 
+  names use all lower case. The current set of targets is: <br>
+  <tt>alpha, ia64, powerpc, skeleton, sparc, x86</tt>.
+  <br><br></dd>
+  <dt><i>--enable-doxygen</i></dt>
+  <dd>Look for the doxygen program and enable construction of doxygen based
+  documentation from the source code. This is disabled by default because 
+  generating the documentation can take a long time and producess 100s of 
+  megabytes of output.</dd>
+  <dt><i>--with-udis86</i></dt>
+  <dd>LLVM can use external disassembler library for various purposes (now it's
+  used only for examining code produced by JIT). This option will enable usage
+  of <a href="http://udis86.sourceforge.net/">udis86</a> x86 (both 32 and 64
+  bits) disassembler library.</dd>
+</dl>
+
+<p>To configure LLVM, follow these steps:</p>
+
+<ol>
+    <li><p>Change directory into the object root directory:</p>
+
+    <div class="doc_code"><pre>% cd <i>OBJ_ROOT</i></pre></div></li>
+
+    <li><p>Run the <tt>configure</tt> script located in the LLVM source
+    tree:</p>
+
+    <div class="doc_code">
+    <pre>% <i>SRC_ROOT</i>/configure --prefix=/install/path [other options]</pre>
+    </div></li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="compile">Compiling the LLVM Suite Source Code</a>
+</div>
+
+<div class="doc_text">
+
+<p>Once you have configured LLVM, you can build it.  There are three types of
+builds:</p>
+
+<dl>
+    <dt>Debug Builds
+    <dd>
+    These builds are the default when one is using an Subversion checkout and 
+    types <tt>gmake</tt> (unless the <tt>--enable-optimized</tt> option was 
+    used during configuration).  The build system will compile the tools and 
+    libraries with debugging information.  To get a Debug Build using the
+    LLVM distribution the <tt>--disable-optimized</tt> option must be passed
+    to <tt>configure</tt>.
+    <br><br>
+
+    <dt>Release (Optimized) Builds
+    <dd>
+    These builds are enabled with the <tt>--enable-optimized</tt> option to
+    <tt>configure</tt> or by specifying <tt>ENABLE_OPTIMIZED=1</tt> on the
+    <tt>gmake</tt> command line.  For these builds, the build system will
+    compile the tools and libraries with GCC optimizations enabled and strip
+    debugging information from the libraries and executables it generates. 
+    Note that Release Builds are default when using an LLVM distribution.
+    <br><br>
+
+    <dt>Profile Builds
+    <dd>
+    These builds are for use with profiling.  They compile profiling
+    information into the code for use with programs like <tt>gprof</tt>.
+    Profile builds must be started by specifying <tt>ENABLE_PROFILING=1</tt>
+    on the <tt>gmake</tt> command line.
+</dl>
+
+<p>Once you have LLVM configured, you can build it by entering the
+<i>OBJ_ROOT</i> directory and issuing the following command:</p>
+
+<div class="doc_code"><pre>% gmake</pre></div>
+
+<p>If the build fails, please <a href="#brokengcc">check here</a> to see if you
+are using a version of GCC that is known not to compile LLVM.</p>
+
+<p>
+If you have multiple processors in your machine, you may wish to use some of
+the parallel build options provided by GNU Make.  For example, you could use the
+command:</p>
+
+<div class="doc_code"><pre>% gmake -j2</pre></div>
+
+<p>There are several special targets which are useful when working with the LLVM
+source code:</p>
+
+<dl>
+  <dt><tt>gmake clean</tt>
+  <dd>
+  Removes all files generated by the build.  This includes object files,
+  generated C/C++ files, libraries, and executables.
+  <br><br>
+
+  <dt><tt>gmake dist-clean</tt>
+  <dd>
+  Removes everything that <tt>gmake clean</tt> does, but also removes files
+  generated by <tt>configure</tt>.  It attempts to return the source tree to the
+  original state in which it was shipped.
+  <br><br>
+
+  <dt><tt>gmake install</tt>
+  <dd>
+  Installs LLVM header files, libraries, tools, and documentation in a
+  hierarchy 
+  under $PREFIX, specified with <tt>./configure --prefix=[dir]</tt>, which 
+  defaults to <tt>/usr/local</tt>.
+  <br><br>
+
+  <dt><tt>gmake -C runtime install-bytecode</tt>
+  <dd>
+  Assuming you built LLVM into $OBJDIR, when this command is run, it will 
+  install bitcode libraries into the GCC front end's bitcode library 
+  directory.  If you need to update your bitcode libraries,
+  this is the target to use once you've built them.
+  <br><br>
+</dl>
+
+<p>Please see the <a href="MakefileGuide.html">Makefile Guide</a> for further
+details on these <tt>make</tt> targets and descriptions of other targets
+available.</p>
+
+<p>It is also possible to override default values from <tt>configure</tt> by
+declaring variables on the command line.  The following are some examples:</p>
+
+<dl>
+  <dt><tt>gmake ENABLE_OPTIMIZED=1</tt>
+  <dd>
+  Perform a Release (Optimized) build.
+  <br><br>
+
+  <dt><tt>gmake ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1</tt>
+  <dd>
+  Perform a Release (Optimized) build without assertions enabled.
+  <br><br>
+ 
+  <dt><tt>gmake ENABLE_OPTIMIZED=0</tt>
+  <dd>
+  Perform a Debug build.
+  <br><br>
+
+  <dt><tt>gmake ENABLE_PROFILING=1</tt>
+  <dd>
+  Perform a Profiling build.
+  <br><br>
+
+  <dt><tt>gmake VERBOSE=1</tt>
+  <dd>
+  Print what <tt>gmake</tt> is doing on standard output.
+  <br><br>
+
+  <dt><tt>gmake TOOL_VERBOSE=1</tt></dt>
+  <dd>Ask each tool invoked by the makefiles to print out what it is doing on 
+  the standard output. This also implies <tt>VERBOSE=1</tt>.
+  <br><br></dd>
+</dl>
+
+<p>Every directory in the LLVM object tree includes a <tt>Makefile</tt> to build
+it and any subdirectories that it contains.  Entering any directory inside the
+LLVM object tree and typing <tt>gmake</tt> should rebuild anything in or below
+that directory that is out of date.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="cross-compile">Cross-Compiling LLVM</a>
+</div>
+
+<div class="doc_text">
+  <p>It is possible to cross-compile LLVM itself. That is, you can create LLVM
+  executables and libraries to be hosted on a platform different from the
+  platform where they are build (a Canadian Cross build). To configure a
+  cross-compile, supply the configure script with <tt>--build</tt> and
+  <tt>--host</tt> options that are different. The values of these options must
+  be legal target triples that your GCC compiler supports.</p>
+
+  <p>The result of such a build is executables that are not runnable on
+  on the build host (--build option) but can be executed on the compile host
+  (--host option).</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="objfiles">The Location of LLVM Object Files</a>
+</div>
+
+<div class="doc_text">
+
+<p>The LLVM build system is capable of sharing a single LLVM source tree among
+several LLVM builds.  Hence, it is possible to build LLVM for several different
+platforms or configurations using the same source tree.</p>
+
+<p>This is accomplished in the typical autoconf manner:</p>
+
+<ul>
+  <li><p>Change directory to where the LLVM object files should live:</p>
+
+      <div class="doc_code"><pre>% cd <i>OBJ_ROOT</i></pre></div></li>
+
+  <li><p>Run the <tt>configure</tt> script found in the LLVM source
+      directory:</p>
+
+      <div class="doc_code"><pre>% <i>SRC_ROOT</i>/configure</pre></div></li>
+</ul>
+
+<p>The LLVM build will place files underneath <i>OBJ_ROOT</i> in directories
+named after the build type:</p>
+
+<dl>
+  <dt>Debug Builds with assertions enabled (the default)
+  <dd>
+  <dl>
+    <dt>Tools
+    <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/bin</tt>
+    <dt>Libraries
+    <dd><tt><i>OBJ_ROOT</i>/Debug+Asserts/lib</tt>
+  </dl>
+  <br><br>
+
+  <dt>Release Builds
+  <dd>
+  <dl>
+    <dt>Tools
+    <dd><tt><i>OBJ_ROOT</i>/Release/bin</tt>
+    <dt>Libraries
+    <dd><tt><i>OBJ_ROOT</i>/Release/lib</tt>
+  </dl>
+  <br><br>
+
+  <dt>Profile Builds
+  <dd>
+  <dl>
+    <dt>Tools
+    <dd><tt><i>OBJ_ROOT</i>/Profile/bin</tt>
+    <dt>Libraries
+    <dd><tt><i>OBJ_ROOT</i>/Profile/lib</tt>
+  </dl>
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="optionalconfig">Optional Configuration Items</a>
+</div>
+
+<div class="doc_text">
+
+<p>
+If you're running on a Linux system that supports the "<a
+href="http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html">binfmt_misc</a>"
+module, and you have root access on the system, you can set your system up to
+execute LLVM bitcode files directly. To do this, use commands like this (the
+first command may not be required if you are already using the module):</p>
+
+<div class="doc_code">
+<pre>
+$ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
+$ echo ':llvm:M::BC::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
+$ chmod u+x hello.bc   (if needed)
+$ ./hello.bc
+</pre>
+</div>
+
+<p>
+This allows you to execute LLVM bitcode files directly.  On Debian, you 
+can also use this command instead of the 'echo' command above:</p>
+</p>
+
+<div class="doc_code">
+<pre>
+$ sudo update-binfmts --install llvm /path/to/lli --magic 'BC'
+</pre>
+</div>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="layout"><b>Program Layout</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>One useful source of information about the LLVM source base is the LLVM <a
+href="http://www.doxygen.org">doxygen</a> documentation available at <tt><a
+href="http://llvm.org/doxygen/">http://llvm.org/doxygen/</a></tt>.
+The following is a brief introduction to code layout:</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="examples"><tt>llvm/examples</tt></a></div>
+<div class="doc_text">
+  <p>This directory contains some simple examples of how to use the LLVM IR and
+  JIT.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="include"><tt>llvm/include</tt></a></div>
+<div class="doc_text">
+
+<p>This directory contains public header files exported from the LLVM
+library. The three main subdirectories of this directory are:</p>
+
+<dl>
+  <dt><tt><b>llvm/include/llvm</b></tt></dt>
+  <dd>This directory contains all of the LLVM specific header files.  This 
+  directory also has subdirectories for different portions of LLVM: 
+  <tt>Analysis</tt>, <tt>CodeGen</tt>, <tt>Target</tt>, <tt>Transforms</tt>, 
+  etc...</dd>
+
+  <dt><tt><b>llvm/include/llvm/Support</b></tt></dt>
+  <dd>This directory contains generic support libraries that are provided with 
+  LLVM but not necessarily specific to LLVM. For example, some C++ STL utilities 
+  and a Command Line option processing library store their header files here.
+  </dd>
+
+  <dt><tt><b>llvm/include/llvm/Config</b></tt></dt>
+  <dd>This directory contains header files configured by the <tt>configure</tt> 
+  script.  They wrap "standard" UNIX and C header files.  Source code can 
+  include these header files which automatically take care of the conditional 
+  #includes that the <tt>configure</tt> script generates.</dd>
+</dl>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="lib"><tt>llvm/lib</tt></a></div>
+<div class="doc_text">
+
+<p>This directory contains most of the source files of the LLVM system. In LLVM,
+almost all code exists in libraries, making it very easy to share code among the
+different <a href="#tools">tools</a>.</p>
+
+<dl>
+  <dt><tt><b>llvm/lib/VMCore/</b></tt></dt>
+  <dd> This directory holds the core LLVM source files that implement core 
+  classes like Instruction and BasicBlock.</dd>
+
+  <dt><tt><b>llvm/lib/AsmParser/</b></tt></dt>
+  <dd>This directory holds the source code for the LLVM assembly language parser 
+  library.</dd>
+
+  <dt><tt><b>llvm/lib/BitCode/</b></tt></dt>
+  <dd>This directory holds code for reading and write LLVM bitcode.</dd>
+
+  <dt><tt><b>llvm/lib/Analysis/</b></tt><dd>This directory contains a variety of
+  different program analyses, such as Dominator Information, Call Graphs,
+  Induction Variables, Interval Identification, Natural Loop Identification,
+  etc.</dd>
+
+  <dt><tt><b>llvm/lib/Transforms/</b></tt></dt>
+  <dd> This directory contains the source code for the LLVM to LLVM program 
+  transformations, such as Aggressive Dead Code Elimination, Sparse Conditional 
+  Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global 
+  Elimination, and many others.</dd>
+
+  <dt><tt><b>llvm/lib/Target/</b></tt></dt>
+  <dd> This directory contains files that describe various target architectures
+  for code generation.  For example, the <tt>llvm/lib/Target/X86</tt> 
+  directory holds the X86 machine description while
+  <tt>llvm/lib/Target/CBackend</tt> implements the LLVM-to-C converter.</dd>
+    
+  <dt><tt><b>llvm/lib/CodeGen/</b></tt></dt>
+  <dd> This directory contains the major parts of the code generator: Instruction 
+  Selector, Instruction Scheduling, and Register Allocation.</dd>
+
+  <dt><tt><b>llvm/lib/Debugger/</b></tt></dt>
+  <dd> This directory contains the source level debugger library that makes 
+  it possible to instrument LLVM programs so that a debugger could identify 
+  source code locations at which the program is executing.</dd>
+
+  <dt><tt><b>llvm/lib/ExecutionEngine/</b></tt></dt>
+  <dd> This directory contains libraries for executing LLVM bitcode directly 
+  at runtime in both interpreted and JIT compiled fashions.</dd>
+
+  <dt><tt><b>llvm/lib/Support/</b></tt></dt>
+  <dd> This directory contains the source code that corresponds to the header 
+  files located in <tt>llvm/include/Support/</tt>.</dd>
+
+  <dt><tt><b>llvm/lib/System/</b></tt></dt>
+  <dd>This directory contains the operating system abstraction layer that
+  shields LLVM from platform-specific coding.</dd>
+</dl>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="projects"><tt>llvm/projects</tt></a></div>
+<div class="doc_text">
+  <p>This directory contains projects that are not strictly part of LLVM but are
+  shipped with LLVM. This is also the directory where you should create your own
+  LLVM-based projects. See <tt>llvm/projects/sample</tt> for an example of how
+  to set up your own project.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="runtime"><tt>llvm/runtime</tt></a></div>
+<div class="doc_text">
+
+<p>This directory contains libraries which are compiled into LLVM bitcode and
+used when linking programs with the GCC front end.  Most of these libraries are
+skeleton versions of real libraries; for example, libc is a stripped down
+version of glibc.</p>
+
+<p>Unlike the rest of the LLVM suite, this directory needs the LLVM GCC front
+end to compile.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="test"><tt>llvm/test</tt></a></div>
+<div class="doc_text">
+  <p>This directory contains feature and regression tests and other basic sanity
+  checks on the LLVM infrastructure. These are intended to run quickly and cover
+  a lot of territory without being exhaustive.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="test-suite"><tt>test-suite</tt></a></div>
+<div class="doc_text">
+  <p>This is not a directory in the normal llvm module; it is a separate
+  Subversion
+  module that must be checked out (usually to <tt>projects/test-suite</tt>). 
+  This
+  module contains a comprehensive correctness, performance, and benchmarking
+  test
+  suite for LLVM. It is a separate Subversion module because not every LLVM 
+  user is
+  interested in downloading or building such a comprehensive test suite. For
+  further details on this test suite, please see the 
+  <a href="TestingGuide.html">Testing Guide</a> document.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="tools"><tt>llvm/tools</tt></a></div>
+<div class="doc_text">
+
+<p>The <b>tools</b> directory contains the executables built out of the
+libraries above, which form the main part of the user interface.  You can
+always get help for a tool by typing <tt>tool_name -help</tt>.  The
+following is a brief introduction to the most important tools.  More detailed
+information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
+
+<dl>
+
+  <dt><tt><b>bugpoint</b></tt></dt>
+  <dd><tt>bugpoint</tt> is used to debug
+  optimization passes or code generation backends by narrowing down the
+  given test case to the minimum number of passes and/or instructions that
+  still cause a problem, whether it is a crash or miscompilation. See <a
+  href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
+  on using <tt>bugpoint</tt>.</dd>
+
+  <dt><tt><b>llvmc</b></tt></dt>
+  <dd>The LLVM Compiler Driver. This program can
+  be configured to utilize both LLVM and non-LLVM compilation tools to enable
+  pre-processing, translation, optimization, assembly, and linking of programs
+  all from one command line. <tt>llvmc</tt> also takes care of processing the
+  dependent libraries found in bitcode. This reduces the need to get the
+  traditional <tt>-l<name></tt> options right on the command line. Please
+  note that this tool, while functional, is still experimental and not feature
+  complete.</dd>
+
+  <dt><tt><b>llvm-ar</b></tt></dt>
+  <dd>The archiver produces an archive containing
+  the given LLVM bitcode files, optionally with an index for faster
+  lookup.</dd>
+  
+  <dt><tt><b>llvm-as</b></tt></dt>
+  <dd>The assembler transforms the human readable LLVM assembly to LLVM 
+  bitcode.</dd>
+
+  <dt><tt><b>llvm-dis</b></tt></dt>
+  <dd>The disassembler transforms the LLVM bitcode to human readable 
+  LLVM assembly.</dd>
+
+  <dt><tt><b>llvm-ld</b></tt></dt>
+  <dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM. 
+  This is the linker invoked by <tt>llvmc</tt>. It performs standard link time
+  optimizations and allows optimization modules to be loaded and run so that 
+  language specific optimizations can be applied at link time.</dd>
+
+  <dt><tt><b>llvm-link</b></tt></dt>
+  <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
+  a single program.</dd>
+  
+  <dt><tt><b>lli</b></tt></dt>
+  <dd><tt>lli</tt> is the LLVM interpreter, which
+  can directly execute LLVM bitcode (although very slowly...). For architectures
+  that support it (currently x86, Sparc, and PowerPC), by default, <tt>lli</tt>
+  will function as a Just-In-Time compiler (if the functionality was compiled
+  in), and will execute the code <i>much</i> faster than the interpreter.</dd>
+
+  <dt><tt><b>llc</b></tt></dt>
+  <dd> <tt>llc</tt> is the LLVM backend compiler, which
+  translates LLVM bitcode to a native code assembly file or to C code (with
+  the -march=c option).</dd>
+
+  <dt><tt><b>llvm-gcc</b></tt></dt>
+  <dd><tt>llvm-gcc</tt> is a GCC-based C frontend that has been retargeted to 
+  use LLVM as its backend instead of GCC's RTL backend. It can also emit LLVM 
+  bitcode or assembly (with the <tt>-emit-llvm</tt> option) instead of the
+  usual machine code output.  It works just like any other GCC compiler, 
+  taking the typical <tt>-c, -S, -E, -o</tt> options that are typically used.  
+  Additionally, the the source code for <tt>llvm-gcc</tt> is available as a 
+  separate Subversion module.</dd>
+
+  <dt><tt><b>opt</b></tt></dt>
+  <dd><tt>opt</tt> reads LLVM bitcode, applies a series of LLVM to LLVM 
+  transformations (which are specified on the command line), and then outputs 
+  the resultant bitcode.  The '<tt>opt -help</tt>' command is a good way to 
+  get a list of the program transformations available in LLVM.<br>
+  <dd><tt>opt</tt> can also be used to run a specific analysis on an input 
+  LLVM bitcode file and print out the results.  It is primarily useful for 
+  debugging analyses, or familiarizing yourself with what an analysis does.</dd>
+</dl>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="utils"><tt>llvm/utils</tt></a></div>
+<div class="doc_text">
+
+<p>This directory contains utilities for working with LLVM source code, and some
+of the utilities are actually required as part of the build process because they
+are code generators for parts of LLVM infrastructure.</p>
+
+<dl>
+  <dt><tt><b>codegen-diff</b></tt> <dd><tt>codegen-diff</tt> is a script
+  that finds differences between code that LLC generates and code that LLI
+  generates. This is a useful tool if you are debugging one of them,
+  assuming that the other generates correct output. For the full user
+  manual, run <tt>`perldoc codegen-diff'</tt>.<br><br>
+
+  <dt><tt><b>emacs/</b></tt> <dd>The <tt>emacs</tt> directory contains
+  syntax-highlighting files which will work with Emacs and XEmacs editors,
+  providing syntax highlighting support for LLVM assembly files and TableGen
+  description files. For information on how to use the syntax files, consult
+  the <tt>README</tt> file in that directory.<br><br>
+
+  <dt><tt><b>getsrcs.sh</b></tt> <dd>The <tt>getsrcs.sh</tt> script finds
+  and outputs all non-generated source files, which is useful if one wishes
+  to do a lot of development across directories and does not want to
+  individually find each file. One way to use it is to run, for example:
+  <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
+  tree.<br><br>
+
+  <dt><tt><b>llvmgrep</b></tt></dt>
+  <dd>This little tool performs an "egrep -H -n" on each source file in LLVM and
+  passes to it a regular expression provided on <tt>llvmgrep</tt>'s command
+  line. This is a very efficient way of searching the source base for a
+  particular regular expression.</dd>
+
+  <dt><tt><b>makellvm</b></tt> <dd>The <tt>makellvm</tt> script compiles all
+  files in the current directory and then compiles and links the tool that
+  is the first argument. For example, assuming you are in the directory
+  <tt>llvm/lib/Target/Sparc</tt>, if <tt>makellvm</tt> is in your path,
+  simply running <tt>makellvm llc</tt> will make a build of the current
+  directory, switch to directory <tt>llvm/tools/llc</tt> and build it,
+  causing a re-linking of LLC.<br><br>
+
+  <dt><tt><b>NewNightlyTest.pl</b></tt> and
+  <tt><b>NightlyTestTemplate.html</b></tt> <dd>These files are used in a
+  cron script to generate nightly status reports of the functionality of
+  tools, and the results can be seen by following the appropriate link on
+  the <a href="http://llvm.org/">LLVM homepage</a>.<br><br>
+
+  <dt><tt><b>TableGen/</b></tt> <dd>The <tt>TableGen</tt> directory contains
+  the tool used to generate register descriptions, instruction set
+  descriptions, and even assemblers from common TableGen description
+  files.<br><br>
+
+  <dt><tt><b>vim/</b></tt> <dd>The <tt>vim</tt> directory contains
+  syntax-highlighting files which will work with the VIM editor, providing
+  syntax highlighting support for LLVM assembly files and TableGen
+  description files. For information on how to use the syntax files, consult
+  the <tt>README</tt> file in that directory.<br><br>
+
+</dl>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="tutorial">An Example Using the LLVM Tool Chain</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+<p>This section gives an example of using LLVM.  llvm-gcc3 is now obsolete,
+so we only include instructions for llvm-gcc4.
+</p>
+
+<p><b>Note:</b> The <i>gcc4</i> frontend's invocation is <b><i>considerably different</i></b>
+from the previous <i>gcc3</i> frontend. In particular, the <i>gcc4</i> frontend <b><i>does not</i></b>
+create bitcode by default: <i>gcc4</i> produces native code. As the example below illustrates,
+the '--emit-llvm' flag is needed to produce LLVM bitcode output. For <i>makefiles</i> and
+<i>configure</i> scripts, the CFLAGS variable needs '--emit-llvm' to produce bitcode
+output.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="tutorial4">Example with llvm-gcc4</a></div>
+
+<div class="doc_text">
+
+<ol>
+  <li><p>First, create a simple C file, name it 'hello.c':</p>
+
+<div class="doc_code">
+<pre>
+#include <stdio.h>
+
+int main() {
+  printf("hello world\n");
+  return 0;
+}
+</pre></div></li>
+
+  <li><p>Next, compile the C file into a native executable:</p>
+
+      <div class="doc_code"><pre>% llvm-gcc hello.c -o hello</pre></div>
+
+      <p>Note that llvm-gcc works just like GCC by default.  The standard -S and
+        -c arguments work as usual (producing a native .s or .o file,
+        respectively).</p></li>
+
+  <li><p>Next, compile the C file into a LLVM bitcode file:</p>
+
+      <div class="doc_code">
+      <pre>% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc</pre></div>
+
+      <p>The -emit-llvm option can be used with the -S or -c options to emit an
+         LLVM ".ll" or ".bc" file (respectively) for the code.  This allows you
+         to use the <a href="CommandGuide/index.html">standard LLVM tools</a> on
+         the bitcode file.</p>
+
+      <p>Unlike llvm-gcc3, llvm-gcc4 correctly responds to -O[0123] arguments.
+         </p></li>
+
+  <li><p>Run the program in both forms. To run the program, use:</p>
+      
+      <div class="doc_code"><pre>% ./hello</pre></div>
+ 
+      <p>and</p>
+
+      <div class="doc_code"><pre>% lli hello.bc</pre></div>
+
+      <p>The second examples shows how to invoke the LLVM JIT, <a
+       href="CommandGuide/html/lli.html">lli</a>.</p></li>
+
+  <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
+      code:</p>
+
+<div class="doc_code">
+<pre>llvm-dis < hello.bc | less</pre>
+</div></li>
+
+  <li><p>Compile the program to native assembly using the LLC code
+      generator:</p>
+
+      <div class="doc_code"><pre>% llc hello.bc -o hello.s</pre></div></li>
+
+  <li><p>Assemble the native assembly language file into a program:</p>
+
+<div class="doc_code">
+<pre>
+<b>Solaris:</b> % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native
+
+<b>Others:</b>  % gcc hello.s -o hello.native
+</pre>
+</div></li>
+
+  <li><p>Execute the native code program:</p>
+
+      <div class="doc_code"><pre>% ./hello.native</pre></div>
+
+      <p>Note that using llvm-gcc to compile directly to native code (i.e. when
+         the -emit-llvm option is not present) does steps 6/7/8 for you.</p>
+        </li>
+
+</ol>
+
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="problems">Common Problems</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>If you are having problems building or using LLVM, or if you have any other
+general questions about LLVM, please consult the <a href="FAQ.html">Frequently
+Asked Questions</a> page.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="links">Links</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This document is just an <b>introduction</b> on how to use LLVM to do
+some simple things... there are many more interesting and complicated things
+that you can do that aren't documented here (but we'll gladly accept a patch
+if you want to write something up!).  For more information about LLVM, check
+out:</p>
+
+<ul>
+  <li><a href="http://llvm.org/">LLVM homepage</a></li>
+  <li><a href="http://llvm.org/doxygen/">LLVM doxygen tree</a></li>
+  <li><a href="http://llvm.org/docs/Projects.html">Starting a Project
+  that Uses LLVM</a></li>
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2011-03-31 13:38:22 -0700 (Thu, 31 Mar 2011) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GettingStartedVS.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GettingStartedVS.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GettingStartedVS.html (added)
+++ www-releases/trunk/2.9/docs/GettingStartedVS.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Getting Started with LLVM System for Microsoft Visual Studio</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">
+  Getting Started with the LLVM System using Microsoft Visual Studio
+</div>
+
+<ul>
+  <li><a href="#overview">Overview</a>
+  <li><a href="#requirements">Requirements</a>
+    <ol>
+      <li><a href="#hardware">Hardware</a>
+      <li><a href="#software">Software</a>
+    </ol></li>
+  <li><a href="#quickstart">Getting Started</a>
+  <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
+  <li><a href="#problems">Common Problems</a>
+  <li><a href="#links">Links</a>
+</ul>
+
+<div class="doc_author">
+  <p>Written by: <a href="http://llvm.org">The LLVM Team</a></p>
+</div>
+
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="overview"><b>Overview</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+  <p>Welcome to LLVM on Windows! This document only covers LLVM on Windows using
+  Visual Studio, not mingw or cygwin. In order to get started, you first need to
+  know some basic information.</p>
+
+  <p>There are many different projects that compose LLVM. The first is the LLVM
+  suite. This contains all of the tools, libraries, and header files needed to
+  use the low level virtual machine. It contains an assembler, disassembler,
+  bitcode analyzer and bitcode optimizer. It also contains a test suite that can
+  be used to test the LLVM tools.</p>
+
+  <p>Another useful project on Windows is
+  <a href="http://clang.llvm.org/">clang</a>. Clang is a C family
+  ([Objective]C/C++) compiler. Clang mostly works on Windows, but does not
+  currently understand all of the Microsoft extensions to C and C++. Because of
+  this, clang cannot parse the C++ standard library included with Visual Studio,
+  nor parts of the Windows Platform SDK. However, most standard C programs do
+  compile. Clang can be used to emit bitcode, directly emit object files or
+  even linked executables using Visual Studio's <tt>link.exe</tt></p>
+
+  <p>The large LLVM test suite cannot be run on the Visual Studio port at this
+  time.</p>
+
+  <p>Most of the tools build and work.  <tt>bugpoint</tt> does build, but does
+  not work.</p>
+
+  <p>Additional information about the LLVM directory structure and tool chain
+  can be found on the main <a href="GettingStarted.html">Getting Started</a>
+  page.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="requirements"><b>Requirements</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+  <p>Before you begin to use the LLVM system, review the requirements given
+  below.  This may save you some trouble by knowing ahead of time what hardware
+  and software you will need.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="hardware"><b>Hardware</b></a>
+</div>
+
+<div class="doc_text">
+
+  <p>Any system that can adequately run Visual Studio .NET 2005 SP1 is fine.
+  The LLVM source tree and object files, libraries and executables will consume
+  approximately 3GB.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="software"><b>Software</b></a></div>
+<div class="doc_text">
+
+  <p>You will need Visual Studio .NET 2005 SP1 or higher.  The VS2005 SP1
+  beta and the normal VS2005 still have bugs that are not completely
+  compatible.  Earlier versions of Visual Studio do not support the C++ standard
+  well enough and will not work.</p>
+
+  <p>You will also need the <a href="http://www.cmake.org/">CMake</a> build
+  system since it generates the project files you will use to build with.</p>
+
+  <p>If you would like to run the LLVM tests you will need
+  <a href="http://www.python.org/">Python</a>. Versions 2.4-2.7 are known to
+  work. You will need <a href="http://gnuwin32.sourceforge.net/">"GnuWin32"</a>
+  tools, too.</p>
+
+  <p>Do not install the LLVM directory tree into a path containing spaces (e.g.
+  C:\Documents and Settings\...) as the configure step will fail.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="quickstart"><b>Getting Started</b></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Here's the short story for getting up and running quickly with LLVM:</p>
+
+<ol>
+  <li>Read the documentation.</li>
+  <li>Seriously, read the documentation.</li>
+  <li>Remember that you were warned twice about reading the documentation.</li>
+
+  <li>Get the Source Code
+  <ul>
+    <li>With the distributed files:
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt>
+      <li><tt>gunzip --stdout llvm-<i>version</i>.tar.gz | tar -xvf -</tt>
+      <i>      or use WinZip</i>
+      <li><tt>cd llvm</tt></li>
+    </ol></li>
+
+    <li>With anonymous Subversion access:
+    <ol>
+      <li><tt>cd <i>where-you-want-llvm-to-live</i></tt></li>
+      <li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
+      <li><tt>cd llvm</tt></li>
+    </ol></li>
+  </ul></li>
+
+  <li> Use <a href="http://www.cmake.org/">CMake</a> to generate up-to-date
+    project files:
+    <ul>
+      <li>Once CMake is installed then the simplest way is to just start the
+        CMake GUI, select the directory where you have LLVM extracted to, and the
+        default options should all be fine.  One option you may really want to
+        change, regardless of anything else, might be the CMAKE_INSTALL_PREFIX
+        setting to select a directory to INSTALL to once compiling is complete,
+        although installation is not mandatory for using LLVM.  Another important
+        option is LLVM_TARGETS_TO_BUILD, which controls the LLVM target
+        architectures that are included on the build.
+      <li>See the <a href="CMake.html">LLVM CMake guide</a> for
+        detailed information about how to configure the LLVM
+        build.</li>
+    </ul>
+  </li>
+
+  <li>Start Visual Studio
+  <ul>
+    <li>In the directory you created the project files will have
+    an <tt>llvm.sln</tt> file, just double-click on that to open
+    Visual Studio.</li>
+  </ul></li>
+
+  <li>Build the LLVM Suite:
+  <ul>
+    <li>The projects may still be built individually, but
+    to build them all do not just select all of them in batch build (as some
+    are meant as configuration projects), but rather select and build just
+    the ALL_BUILD project to build everything, or the INSTALL project, which
+    first builds the ALL_BUILD project, then installs the LLVM headers, libs,
+    and other useful things to the directory set by the CMAKE_INSTALL_PREFIX
+    setting when you first configured CMake.</li>
+    <li>The Fibonacci project is a sample program that uses the JIT.
+    Modify the project's debugging properties to provide a numeric
+    command line argument or run it from the command line.  The
+    program will print the corresponding fibonacci value.</li>
+  </ul></li>
+
+  <li>Test LLVM on Visual Studio:
+  <ul>
+    <li>If %PATH% does not contain GnuWin32, you may specify LLVM_LIT_TOOLS_DIR
+    on CMake for the path to GnuWin32.</li>
+    <li>You can run LLVM tests to build the project "check".</li>
+  </ul>
+  </li>
+
+  <!-- FIXME: Is it up-to-date? -->
+  <li>Test LLVM:
+  <ul>
+    <li>The LLVM tests can be run by <tt>cd</tt>ing to the llvm source directory
+        and running:
+
+<div class="doc_code">
+<pre>
+% llvm-lit test
+</pre>
+</div>
+
+    <p>Note that quite a few of these test will fail.</p>
+    </li>
+
+    <li>A specific test or test directory can be run with:</li>
+
+<div class="doc_code">
+<pre>
+% llvm-lit test/path/to/test
+</pre>
+</div>
+
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="tutorial">An Example Using the LLVM Tool Chain</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<ol>
+  <li><p>First, create a simple C file, name it 'hello.c':</p>
+
+<div class="doc_code">
+<pre>
+#include <stdio.h>
+int main() {
+  printf("hello world\n");
+  return 0;
+}
+</pre></div></li>
+
+  <li><p>Next, compile the C file into a LLVM bitcode file:</p>
+
+<div class="doc_code">
+<pre>
+% clang -c hello.c -emit-llvm -o hello.bc
+</pre>
+</div>
+
+      <p>This will create the result file <tt>hello.bc</tt> which is the LLVM
+         bitcode that corresponds the the compiled program and the library
+         facilities that it required.  You can execute this file directly using
+         <tt>lli</tt> tool, compile it to native assembly with the <tt>llc</tt>,
+         optimize or analyze it further with the <tt>opt</tt> tool, etc.</p>
+
+      <p>Alternatively you can directly output an executable with clang with:
+      </p>
+
+<div class="doc_code">
+<pre>
+% clang hello.c -o hello.exe
+</pre>
+</div>
+
+  <p>The <tt>-o hello.exe</tt> is required because clang currently outputs
+  <tt>a.out</tt> when neither <tt>-o</tt> nor <tt>-c</tt> are given.</p>
+
+  <li><p>Run the program using the just-in-time compiler:</p>
+
+<div class="doc_code">
+<pre>
+% lli hello.bc
+</pre>
+</div>
+
+  <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
+      code:</p>
+
+<div class="doc_code">
+<pre>
+% llvm-dis < hello.bc | more
+</pre>
+</div></li>
+
+  <li><p>Compile the program to object code using the LLC code generator:</p>
+
+<div class="doc_code">
+<pre>
+% llc -filetype=obj hello.bc
+</pre>
+</div></li>
+
+  <li><p>Link to binary using Microsoft link:</p>
+
+<div class="doc_code">
+<pre>
+% link hello.obj -defaultlib:libcmt
+</pre>
+</div>
+
+  <li><p>Execute the native code program:</p>
+
+<div class="doc_code">
+<pre>
+% hello.exe
+</pre>
+</div></li>
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="problems">Common Problems</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>If you are having problems building or using LLVM, or if you have any other
+general questions about LLVM, please consult the <a href="FAQ.html">Frequently
+Asked Questions</a> page.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="links">Links</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This document is just an <b>introduction</b> to how to use LLVM to do
+some simple things... there are many more interesting and complicated things
+that you can do that aren't documented here (but we'll gladly accept a patch
+if you want to write something up!).  For more information about LLVM, check
+out:</p>
+
+<ul>
+  <li><a href="http://llvm.org/">LLVM homepage</a></li>
+  <li><a href="http://llvm.org/doxygen/">LLVM doxygen tree</a></li>
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2011-03-06 15:00:33 -0800 (Sun, 06 Mar 2011) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/GoldPlugin.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/GoldPlugin.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/GoldPlugin.html (added)
+++ www-releases/trunk/2.9/docs/GoldPlugin.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>LLVM gold plugin</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+      
+<div class="doc_title">LLVM gold plugin</div>
+<ol>
+  <li><a href="#introduction">Introduction</a></li>
+  <li><a href="#build">How to build it</a></li>
+  <li><a href="#usage">Usage</a>
+  <ul>
+    <li><a href="#example1">Example of link time optimization</a></li>
+    <li><a href="#lto_autotools">Quickstart for using LTO with autotooled projects</a></li>
+  </ul></li>
+  <li><a href="#licensing">Licensing</a></li>
+</ol>
+<div class="doc_author">Written by Nick Lewycky</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="introduction">Introduction</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+  <p>Building with link time optimization requires cooperation from the
+system linker. LTO support on Linux systems requires that you use
+the <a href="http://sourceware.org/binutils">gold linker</a> which supports
+LTO via plugins. This is the same mechanism used by the
+<a href="http://gcc.gnu.org/wiki/LinkTimeOptimization">GCC LTO</a>
+project.</p>
+  <p>The LLVM gold plugin implements the
+<a href="http://gcc.gnu.org/wiki/whopr/driver">gold plugin interface</a>
+on top of
+<a href="http://llvm.org/docs/LinkTimeOptimization.html#lto">libLTO</a>.
+The same plugin can also be used by other tools such as <tt>ar</tt> and
+<tt>nm</tt>.
+</div>
+<!--=========================================================================-->
+<div class="doc_section"><a name="build">How to build it</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+  <p>You need to have gold with plugin support and build the LLVMgold
+plugin. Check whether you have gold running <tt>/usr/bin/ld -v</tt>. It will
+report “GNU gold” or else &#8220GNU ld” if not. If you have
+gold, check for plugin support by running <tt>/usr/bin/ld -plugin</tt>. If it
+complains &#8220missing argument&#8221 then you have plugin support. If not,
+such as an “unknown option” error then you will either need to
+build gold or install a version with plugin support.</p>
+<ul>
+  <li>To build gold with plugin support:
+    <pre class="doc_code">
+mkdir binutils
+cd binutils
+cvs -z 9 -d :pserver:anoncvs at sourceware.org:/cvs/src login
+<em>{enter "anoncvs" as the password}</em>
+cvs -z 9 -d :pserver:anoncvs at sourceware.org:/cvs/src co binutils
+mkdir build
+cd build
+../src/configure --enable-gold --enable-plugins
+make all-gold
+</pre>
+    That should leave you with <tt>binutils/build/gold/ld-new</tt> which supports the <tt>-plugin</tt> option. It also built would have
+<tt>binutils/build/binutils/ar</tt> and <tt>nm-new</tt> which support plugins
+but don't have a visible -plugin option, instead relying on the gold plugin
+being present in <tt>../lib/bfd-plugins</tt> relative to where the binaries are
+placed.
+    <li>Build the LLVMgold plugin: Configure LLVM with
+    <tt>--with-binutils-include=/path/to/binutils/src/include</tt> and run
+    <tt>make</tt>.
+</ul>
+</div>
+<!--=========================================================================-->
+<div class="doc_section"><a name="usage">Usage</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+  <p>The linker takes a <tt>-plugin</tt> option that points to the path of
+  the plugin <tt>.so</tt> file. To find out what link command <tt>gcc</tt>
+  would run in a given situation, run <tt>gcc -v <em>[...]</em></tt> and look
+  for the line where it runs <tt>collect2</tt>. Replace that with
+  <tt>ld-new -plugin /path/to/LLVMgold.so</tt> to test it out. Once you're
+  ready to switch to using gold, backup your existing <tt>/usr/bin/ld</tt>
+  then replace it with <tt>ld-new</tt>.</p>
+  <p>You can produce bitcode files from <tt>llvm-gcc</tt> using
+  <tt>-emit-llvm</tt> or <tt>-flto</tt>, or the <tt>-O4</tt> flag which is
+  synonymous with <tt>-O3 -flto</tt>.</p>
+  <p><tt>llvm-gcc</tt> has a <tt>-use-gold-plugin</tt> option which looks
+  for the gold plugin in the same directories as it looks for <tt>cc1</tt> and
+  passes the <tt>-plugin</tt> option to ld. It will not look for an alternate
+  linker, which is why you need gold to be the installed system linker in your
+  path.</p>
+  <p>If you want <tt>ar</tt> and <tt>nm</tt> to work seamlessly as well, install
+  <tt>LLVMgold.so</tt> to <tt>/usr/lib/bfd-plugins</tt>. If you built your
+  own gold, be sure to install the <tt>ar</tt> and <tt>nm-new</tt> you built to
+  <tt>/usr/bin</tt>.
+  <p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="example1">Example of link time optimization</a>
+</div>
+
+<div class="doc_text">
+  <p>The following example shows a worked example of the gold plugin mixing
+  LLVM bitcode and native code.
+<pre class="doc_code">
+--- a.c ---
+#include <stdio.h>
+
+extern void foo1(void);
+extern void foo4(void);
+
+void foo2(void) {
+  printf("Foo2\n");
+}
+
+void foo3(void) {
+  foo4();
+}
+
+int main(void) {
+  foo1();
+}
+
+--- b.c ---
+#include <stdio.h>
+
+extern void foo2(void);
+
+void foo1(void) {
+  foo2();
+}
+
+void foo4(void) {
+  printf("Foo4");
+}
+
+--- command lines ---
+$ llvm-gcc -flto a.c -c -o a.o              # <-- a.o is LLVM bitcode file
+$ ar q a.a a.o                              # <-- a.a is an archive with LLVM bitcode
+$ llvm-gcc b.c -c -o b.o                    # <-- b.o is native object file
+$ llvm-gcc -use-gold-plugin a.a b.o -o main # <-- link with LLVMgold plugin
+</pre>
+  <p>Gold informs the plugin that foo3 is never referenced outside the IR,
+  leading LLVM to delete that function. However, unlike in the
+  <a href="http://llvm.org/docs/LinkTimeOptimization.html#example1">libLTO
+  example</a> gold does not currently eliminate foo4.</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="lto_autotools">Quickstart for using LTO with autotooled projects</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+  <p>Once your system <tt>ld</tt>, <tt>ar</tt> and <tt>nm</tt> all support LLVM
+  bitcode, everything is in place for an easy to use LTO build of autotooled
+  projects:</p>
+  <ul>
+    <li>Follow the instructions <a href="#build">on how to build LLVMgold.so</a>.</li>
+    <li>Install the newly built binutils to <tt>$PREFIX</tt></li>
+    <li>Copy <tt>Release/lib/LLVMgold.so</tt> to
+    <tt>$PREFIX/libexec/gcc/x86_64-unknown-linux-gnu/4.2.1/</tt> and
+    <tt>$PREFIX/lib/bfd-plugins/</tt></li>
+    <li>Set environment variables (<tt>$PREFIX</tt> is where you installed llvm-gcc and
+    binutils):
+    <pre class="doc_code">
+export CC="$PREFIX/bin/llvm-gcc -use-gold-plugin"
+export CXX="$PREFIX/bin/llvm-g++ -use-gold-plugin"
+export AR="$PREFIX/bin/ar"
+export NM="$PREFIX/bin/nm"
+export RANLIB=/bin/true #ranlib is not needed, and doesn't support .bc files in .a
+export CFLAGS="-O4"
+</pre>
+     </li>
+     <li>Or you can just set your path:
+    <pre class="doc_code">
+export PATH="$PREFIX/bin:$PATH"
+export CC="llvm-gcc -use-gold-plugin"
+export CXX="llvm-g++ -use-gold-plugin"
+export RANLIB=/bin/true
+export CFLAGS="-O4"
+</pre>
+     </li>
+     <li>Configure & build the project as usual: <tt>./configure && make && make check</tt> </li>
+   </ul>
+   <p> The environment variable settings may work for non-autotooled projects
+   too, but you may need to set the <tt>LD</tt> environment variable as well.</p>
+</div>
+
+<!--=========================================================================-->
+<div class="doc_section"><a name="licensing">Licensing</a></div>
+<!--=========================================================================-->
+<div class="doc_text">
+  <p>Gold is licensed under the GPLv3. LLVMgold uses the interface file
+<tt>plugin-api.h</tt> from gold which means that the resulting LLVMgold.so
+binary is also GPLv3. This can still be used to link non-GPLv3 programs just
+as much as gold could without the plugin.</p>
+</div>
+
+<!-- *********************************************************************** -->
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+  <a href="mailto:nicholas at metrix.on.ca">Nick Lewycky</a><br>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br>
+  Last modified: $Date: 2010-04-16 23:58:21 -0800 (Fri, 16 Apr 2010) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeas.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeas.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeas.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeas.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,74 @@
+Date: Sat, 18 Nov 2000 09:19:35 -0600 (CST)
+From: Vikram Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <lattner at cs.uiuc.edu>
+Subject: a few thoughts
+
+I've been mulling over the virtual machine problem and I had some
+thoughts about some things for us to think about discuss:
+
+1. We need to be clear on our goals for the VM.  Do we want to emphasize
+   portability and safety like the Java VM?  Or shall we focus on the
+   architecture interface first (i.e., consider the code generation and
+   processor issues), since the architecture interface question is also
+   important for portable Java-type VMs?
+
+   This is important because the audiences for these two goals are very
+   different.  Architects and many compiler people care much more about
+   the second question.  The Java compiler and OS community care much more
+   about the first one.
+
+   Also, while the architecture interface question is important for
+   Java-type VMs, the design constraints are very different.
+
+
+2. Design issues to consider (an initial list that we should continue
+   to modify).  Note that I'm not trying to suggest actual solutions here,
+   but just various directions we can pursue:
+
+   a. A single-assignment VM, which we've both already been thinking about.
+
+   b. A strongly-typed VM.  One question is do we need the types to be
+      explicitly declared or should they be inferred by the dynamic compiler?
+
+   c. How do we get more high-level information into the VM while keeping
+      to a low-level VM design?
+
+        o  Explicit array references as operands?  An alternative is
+           to have just an array type, and let the index computations be
+           separate 3-operand instructions.
+
+        o  Explicit instructions to handle aliasing, e.g.s:
+           -- an instruction to say "I speculate that these two values are not
+              aliased, but check at runtime", like speculative execution in
+              EPIC?
+           -- or an instruction to check whether two values are aliased and
+              execute different code depending on the answer, somewhat like
+              predicated code in EPIC
+
+        o  (This one is a difficult but powerful idea.)
+           A "thread-id" field on every instruction that allows the static
+           compiler to generate a set of parallel threads, and then have
+           the runtime compiler and hardware do what they please with it.
+           This has very powerful uses, but thread-id on every instruction
+           is expensive in terms of instruction size and code size.
+           We would need to compactly encode it somehow.
+
+           Also, this will require some reading on at least two other
+           projects:
+                -- Multiscalar architecture from Wisconsin
+                -- Simultaneous multithreading architecture from Washington
+
+        o  Or forget all this and stick to a traditional instruction set?
+
+
+BTW, on an unrelated note, after the meeting yesterday, I did remember
+that you had suggested doing instruction scheduling on SSA form instead
+of a dependence DAG earlier in the semester.  When we talked about
+it yesterday, I didn't remember where the idea had come from but I
+remembered later.  Just giving credit where its due...
+
+Perhaps you can save the above as a file under RCS so you and I can
+continue to expand on this.
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeasResp.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeasResp.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeasResp.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2000-11-18-EarlyDesignIdeasResp.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,199 @@
+Date: Sun, 19 Nov 2000 16:23:57 -0600 (CST)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram Adve <vadve at cs.uiuc.edu>
+Subject: Re: a few thoughts
+
+Okay... here are a few of my thoughts on this (it's good to know that we
+think so alike!):
+
+> 1. We need to be clear on our goals for the VM.  Do we want to emphasize
+>    portability and safety like the Java VM?  Or shall we focus on the
+>    architecture interface first (i.e., consider the code generation and
+>    processor issues), since the architecture interface question is also
+>    important for portable Java-type VMs?
+
+I forsee the architecture looking kinda like this: (which is completely
+subject to change)
+
+1. The VM code is NOT guaranteed safe in a java sense.  Doing so makes it
+   basically impossible to support C like languages.  Besides that,
+   certifying a register based language as safe at run time would be a
+   pretty expensive operation to have to do.  Additionally, we would like
+   to be able to statically eliminate many bounds checks in Java
+   programs... for example.
+
+ 2. Instead, we can do the following (eventually): 
+   * Java bytecode is used as our "safe" representation (to avoid
+     reinventing something that we don't add much value to).  When the
+     user chooses to execute Java bytecodes directly (ie, not
+     precompiled) the runtime compiler can do some very simple
+     transformations (JIT style) to convert it into valid input for our
+     VM.  Performance is not wonderful, but it works right.
+   * The file is scheduled to be compiled (rigorously) at a later
+     time.  This could be done by some background process or by a second
+     processor in the system during idle time or something...
+   * To keep things "safe" ie to enforce a sandbox on Java/foreign code,
+     we could sign the generated VM code with a host specific private
+     key.  Then before the code is executed/loaded, we can check to see if
+     the trusted compiler generated the code.  This would be much quicker
+     than having to validate consistency (especially if bounds checks have
+     been removed, for example)
+
+>    This is important because the audiences for these two goals are very
+>    different.  Architects and many compiler people care much more about
+>    the second question.  The Java compiler and OS community care much more
+>    about the first one.
+
+3. By focusing on a more low level virtual machine, we have much more room
+   for value add.  The nice safe "sandbox" VM can be provided as a layer
+   on top of it.  It also lets us focus on the more interesting compilers
+   related projects.
+
+> 2. Design issues to consider (an initial list that we should continue
+>    to modify).  Note that I'm not trying to suggest actual solutions here,
+>    but just various directions we can pursue:
+
+Understood.  :)
+
+>    a. A single-assignment VM, which we've both already been thinking
+>       about.
+
+Yup, I think that this makes a lot of sense.  I am still intrigued,
+however, by the prospect of a minimally allocated VM representation... I
+think that it could have definate advantages for certain applications
+(think very small machines, like PDAs).  I don't, however, think that our
+initial implementations should focus on this.  :)
+
+Here are some other auxilliary goals that I think we should consider:
+
+1. Primary goal: Support a high performance dynamic compilation
+   system.  This means that we have an "ideal" division of labor between
+   the runtime and static compilers.  Of course, the other goals of the
+   system somewhat reduce the importance of this point (f.e. portability
+   reduces performance, but hopefully not much)
+2. Portability to different processors.  Since we are most familiar with
+   x86 and solaris, I think that these two are excellent candidates when
+   we get that far...
+3. Support for all languages & styles of programming (general purpose
+   VM).  This is the point that disallows java style bytecodes, where all
+   array refs are checked for bounds, etc...
+4. Support linking between different language families.  For example, call
+   C functions directly from Java without using the nasty/slow/gross JNI
+   layer.  This involves several subpoints:
+  A. Support for languages that require garbage collectors and integration
+     with languages that don't.  As a base point, we could insist on
+     always using a conservative GC, but implement free as a noop, f.e.
+
+>    b. A strongly-typed VM.  One question is do we need the types to be
+>       explicitly declared or should they be inferred by the dynamic
+>       compiler?
+
+  B. This is kind of similar to another idea that I have: make OOP
+     constructs (virtual function tables, class heirarchies, etc) explicit
+     in the VM representation.  I believe that the number of additional
+     constructs would be fairly low, but would give us lots of important
+     information... something else that would/could be important is to
+     have exceptions as first class types so that they would be handled in
+     a uniform way for the entire VM... so that C functions can call Java
+     functions for example...
+
+>    c. How do we get more high-level information into the VM while keeping
+>       to a low-level VM design?
+>       o  Explicit array references as operands?  An alternative is
+>          to have just an array type, and let the index computations be
+>          separate 3-operand instructions.
+
+   C. In the model I was thinking of (subject to change of course), we
+      would just have an array type (distinct from the pointer
+      types).  This would allow us to have arbitrarily complex index
+      expressions, while still distinguishing "load" from "Array load",
+      for example.  Perhaps also, switch jump tables would be first class
+      types as well?  This would allow better reasoning about the program.
+
+5. Support dynamic loading of code from various sources.  Already
+   mentioned above was the example of loading java bytecodes, but we want
+   to support dynamic loading of VM code as well.  This makes the job of
+   the runtime compiler much more interesting:  it can do interprocedural
+   optimizations that the static compiler can't do, because it doesn't
+   have all of the required information (for example, inlining from
+   shared libraries, etc...)
+
+6. Define a set of generally useful annotations to add to the VM
+   representation.  For example, a function can be analysed to see if it
+   has any sideeffects when run... also, the MOD/REF sets could be
+   calculated, etc... we would have to determine what is reasonable.  This
+   would generally be used to make IP optimizations cheaper for the
+   runtime compiler...
+
+>       o  Explicit instructions to handle aliasing, e.g.s:
+>            -- an instruction to say "I speculate that these two values are not
+>               aliased, but check at runtime", like speculative execution in
+>             EPIC?
+>          -- or an instruction to check whether two values are aliased and
+>             execute different code depending on the answer, somewhat like
+>             predicated code in EPIC
+
+These are also very good points... if this can be determined at compile
+time.  I think that an epic style of representation (not the instruction
+packing, just the information presented) could be a very interesting model
+to use... more later...
+
+>         o  (This one is a difficult but powerful idea.)
+>          A "thread-id" field on every instruction that allows the static
+>          compiler to generate a set of parallel threads, and then have
+>          the runtime compiler and hardware do what they please with it.
+>          This has very powerful uses, but thread-id on every instruction
+>          is expensive in terms of instruction size and code size.
+>          We would need to compactly encode it somehow.
+
+Yes yes yes!  :)  I think it would be *VERY* useful to include this kind
+of information (which EPIC architectures *implicitly* encode.  The trend
+that we are seeing supports this greatly:
+
+1. Commodity processors are getting massive SIMD support:
+   * Intel/Amd MMX/MMX2
+   * AMD's 3Dnow!
+   * Intel's SSE/SSE2
+   * Sun's VIS
+2. SMP is becoming much more common, especially in the server space.
+3. Multiple processors on a die are right around the corner.
+
+If nothing else, not designing this in would severely limit our future
+expansion of the project...
+
+>          Also, this will require some reading on at least two other
+>          projects:
+>               -- Multiscalar architecture from Wisconsin
+>               -- Simultaneous multithreading architecture from Washington
+>
+>       o  Or forget all this and stick to a traditional instruction set?
+
+Heh... :)  Well, from a pure research point of view, it is almost more
+attactive to go with the most extreme/different ISA possible.  On one axis
+you get safety and conservatism, and on the other you get degree of
+influence that the results have.  Of course the problem with pure research
+is that often times there is no concrete product of the research... :)
+
+> BTW, on an unrelated note, after the meeting yesterday, I did remember
+> that you had suggested doing instruction scheduling on SSA form instead
+> of a dependence DAG earlier in the semester.  When we talked about
+> it yesterday, I didn't remember where the idea had come from but I
+> remembered later.  Just giving credit where its due...
+
+:) Thanks.  
+
+> Perhaps you can save the above as a file under RCS so you and I can
+> continue to expand on this.
+
+I think it makes sense to do so when we get our ideas more formalized and
+bounce it back and forth a couple of times... then I'll do a more formal
+writeup of our goals and ideas.  Obviously our first implementation will
+not want to do all of the stuff that I pointed out above... be we will
+want to design the project so that we do not artificially limit ourselves
+at sometime in the future...
+
+Anyways, let me know what you think about these ideas... and if they sound
+reasonable...
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-EncodingIdea.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-EncodingIdea.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-EncodingIdea.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-EncodingIdea.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,30 @@
+From: Chris Lattner [mailto:sabre at nondot.org]
+Sent: Wednesday, December 06, 2000 6:41 PM
+To: Vikram S. Adve
+Subject: Additional idea with respect to encoding
+
+Here's another idea with respect to keeping the common case instruction
+size down (less than 32 bits ideally):
+
+Instead of encoding an instruction to operate on two register numbers,
+have it operate on two negative offsets based on the current register
+number.  Therefore, instead of using:
+
+r57 = add r55, r56  (r57 is the implicit dest register, of course)
+
+We could use:
+
+r57 = add -2, -1
+
+My guess is that most SSA references are to recent values (especially if
+they correspond to expressions like (x+y*z+p*q/ ...), so the negative
+numbers would tend to stay small, even at the end of the procedure (where
+the implicit register destination number could be quite large).  Of course
+the negative sign is reduntant, so you would be storing small integers
+almost all of the time, and 5-6 bits worth of register number would be
+plenty for most cases...
+
+What do you think?
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-MeetingSummary.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-MeetingSummary.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-MeetingSummary.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2000-12-06-MeetingSummary.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,83 @@
+SUMMARY
+-------
+
+We met to discuss the LLVM instruction format and bytecode representation:
+
+ISSUES RESOLVED
+---------------
+
+1. We decided that we shall use a flat namespace to represent our 
+   variables in SSA form, as opposed to having a two dimensional namespace
+   of the original variable and the SSA instance subscript.
+
+ARGUMENT AGAINST:
+   * A two dimensional namespace would be valuable when doing alias 
+     analysis because the extra information can help limit the scope of
+     analysis.
+
+ARGUMENT FOR:
+   * Including this information would require that all users of the LLVM
+     bytecode would have to parse and handle it.  This would slow down the
+     common case and inflate the instruction representation with another
+     infinite variable space.
+
+REASONING:
+   * It was decided that because original variable sources could be
+     reconstructed from SSA form in linear time, that it would be an
+     unjustified expense for the common case to include the extra
+     information for one optimization.  Alias analysis itself is typically
+     greater than linear in asymptotic complexity, so this extra analaysis
+     would not affect the runtime of the optimization in a significant
+     way.  Additionally, this would be an unlikely optimization to do at
+     runtime.
+
+
+IDEAS TO CONSIDER
+-----------------
+
+1. Including dominator information in the LLVM bytecode
+   representation.  This is one example of an analysis result that may be
+   packaged with the bytecodes themselves.  As a conceptual implementation 
+   idea, we could include an immediate dominator number for each basic block
+   in the LLVM bytecode program.  Basic blocks could be numbered according
+   to the order of occurance in the bytecode representation.
+
+2. Including loop header and body information.  This would facilitate
+   detection of intervals and natural loops.
+
+UNRESOLVED ISSUES 
+----------------- 
+
+1. Will oSUIF provide enough of an infrastructure to support the research
+   that we will be doing?  We know that it has less than stellar
+   performance, but hope that this will be of little importance for our
+   static compiler.  This could affect us if we decided to do some IP
+   research.  Also we do not yet understand the level of exception support
+   currently implemented.
+
+2. Should we consider the requirements of a direct hardware implementation
+   of the LLVM when we design it?  If so, several design issues should
+   have their priorities shifted.  The other option is to focus on a
+   software layer interpreting the LLVM in all cases.
+
+3. Should we use some form of packetized format to improve forward
+   compatibility?  For example, we could design the system to encode a
+   packet type and length field before analysis information, to allow a
+   runtime to skip information that it didn't understand in a bytecode
+   stream.  The obvious benefit would be for compatibility, the drawback
+   is that it would tend to splinter that 'standard' LLVM definition.
+
+4. Should we use fixed length instructions or variable length
+   instructions?  Fetching variable length instructions is expensive (for
+   either hardware or software based LLVM runtimes), but we have several
+   'infinite' spaces that instructions operate in (SSA register numbers,
+   type spaces, or packet length [if packets were implemented]).  Several
+   options were mentioned including: 
+     A. Using 16 or 32 bit numbers, which would be 'big enough'
+     B. A scheme similar to how UTF-8 works, to encode infinite numbers
+        while keeping small number small.
+     C. Use something similar to Huffman encoding, so that the most common
+        numbers are the smallest.
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-01-31-UniversalIRIdea.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-01-31-UniversalIRIdea.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-01-31-UniversalIRIdea.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-01-31-UniversalIRIdea.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,39 @@
+Date: Wed, 31 Jan 2001 12:04:33 -0600
+From: Vikram S. Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <lattner at cs.uiuc.edu>
+Subject: another thought
+
+I have a budding idea about making LLVM a little more ambitious: a
+customizable runtime system that can be used to implement language-specific
+virtual machines for many different languages.  E.g., a C vm, a C++ vm, a
+Java vm, a Lisp vm, ..
+
+The idea would be that LLVM would provide a standard set of runtime features
+(some low-level like standard assembly instructions with code generation and
+static and runtime optimization; some higher-level like type-safety and
+perhaps a garbage collection library).  Each language vm would select the
+runtime features needed for that language, extending or customizing them as
+needed.  Most of the machine-dependent code-generation and optimization
+features as well as low-level machine-independent optimizations (like PRE)
+could be provided by LLVM and should be sufficient for any language,
+simplifying the language compiler.  (This would also help interoperability
+between languages.)  Also, some or most of the higher-level
+machine-independent features like type-safety and access safety should be
+reusable by different languages, with minor extensions.  The language
+compiler could then focus on language-specific analyses and optimizations.
+
+The risk is that this sounds like a universal IR -- something that the
+compiler community has tried and failed to develop for decades, and is
+universally skeptical about.  No matter what we say, we won't be able to
+convince anyone that we have a universal IR that will work.  We need to
+think about whether LLVM is different or if has something novel that might
+convince people.  E.g., the idea of providing a package of separable
+features that different languages select from.  Also, using SSA with or
+without type-safety as the intermediate representation.
+
+One interesting starting point would be to discuss how a JVM would be
+implemented on top of LLVM a bit more.  That might give us clues on how to
+structure LLVM to support one or more language VMs.
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebate.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebate.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebate.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebate.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,67 @@
+Date: Tue, 6 Feb 2001 20:27:37 -0600 (CST)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: Type notation debate...
+
+This is the way that I am currently planning on implementing types:
+
+Primitive Types:        
+type ::= void|bool|sbyte|ubyte|short|ushort|int|uint|long|ulong
+
+Method:
+typelist ::= typelisth | /*empty*/
+typelisth ::= type | typelisth ',' type
+type ::= type (typelist)
+
+Arrays (without and with size):
+type ::= '[' type ']' | '[' INT ',' type ']'
+
+Pointer:
+type ::= type '*'
+
+Structure:
+type ::= '{' typelist '}'
+
+Packed:
+type ::= '<' INT ',' type '>'
+
+Simple examples:
+
+[[ %4, int ]]   - array of (array of 4 (int))
+[ { int, int } ] - Array of structure
+[ < %4, int > ] - Array of 128 bit SIMD packets
+int (int, [[int, %4]])  - Method taking a 2d array and int, returning int
+
+
+Okay before you comment, please look at:
+
+http://www.research.att.com/~bs/devXinterview.html
+
+Search for "In another interview, you defined the C declarator syntax as
+an experiment that failed. However, this syntactic construct has been
+around for 27 years and perhaps more; why do you consider it problematic
+(except for its cumbersome syntax)?" and read that response for me.  :)
+
+Now with this syntax, his example would be represented as:
+
+[ %10, bool (int, int) * ] *
+
+vs 
+
+bool (*(*)[10])(int, int)
+
+in C.
+
+Basically, my argument for this type construction system is that it is
+VERY simple to use and understand (although it IS different than C, it is
+very simple and straightforward, which C is NOT).  In fact, I would assert
+that most programmers TODAY do not understand pointers to member
+functions, and have to look up an example when they have to write them.
+
+In my opinion, it is critically important to have clear and concise type
+specifications, because types are going to be all over the programs.
+
+Let me know your thoughts on this.  :)
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp1.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp1.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp1.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp1.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,75 @@
+Date: Thu, 8 Feb 2001 08:42:04 -0600
+From: Vikram S. Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <sabre at nondot.org>
+Subject: RE: Type notation debate...
+
+Chris,
+
+> Okay before you comment, please look at:
+>
+> http://www.research.att.com/~bs/devXinterview.html
+
+I read this argument.  Even before that, I was already in agreement with you
+and him that the C declarator syntax is difficult and confusing.
+
+But in fact, if you read the entire answer carefully, he came to the same
+conclusion I do: that you have to go with familiar syntax over logical
+syntax because familiarity is such a strong force:
+
+        "However, familiarity is a strong force. To compare, in English, we
+live
+more or less happily with the absurd rules for "to be" (am, are, is, been,
+was, were, ...) and all attempts to simplify are treated with contempt or
+(preferably) humor. It be a curious world and it always beed."
+
+> Basically, my argument for this type construction system is that it is
+> VERY simple to use and understand (although it IS different than C, it is
+> very simple and straightforward, which C is NOT).  In fact, I would assert
+> that most programmers TODAY do not understand pointers to member
+> functions, and have to look up an example when they have to write them.
+
+Again, I don't disagree with this at all.  But to some extent this
+particular problem is inherently difficult.  Your syntax for the above
+example may be easier for you to read because this is the way you have been
+thinking about it.  Honestly, I don't find it much easier than the C syntax.
+In either case, I would have to look up an example to write pointers to
+member functions.
+
+But pointers to member functions are nowhere near as common as arrays.  And
+the old array syntax:
+        type [ int, int, ...]
+is just much more familiar and clear to people than anything new you
+introduce, no matter how logical it is.  Introducing a new syntax that may
+make function pointers easier but makes arrays much more difficult seems
+very risky to me.
+
+> In my opinion, it is critically important to have clear and concise type
+> specifications, because types are going to be all over the programs.
+
+I absolutely agree.  But the question is, what is more clear and concise?
+The syntax programmers are used to out of years of experience or a new
+syntax that they have never seen that has a more logical structure.  I think
+the answer is the former.  Sometimes, you have to give up a better idea
+because you can't overcome sociological barriers to it.  Qwerty keyboards
+and Windows are two classic examples of bad technology that are difficult to
+root out.
+
+P.S.  Also, while I agree that most your syntax is more logical, there is
+one part that isn't:
+
+Arrays (without and with size):
+type ::= '[' type ']' | '[' INT ',' type ']'.
+
+The arrays with size lists the dimensions and the type in a single list.
+That is just too confusing:
+        [10, 40, int]
+This seems to be a 3-D array where the third dimension is something strange.
+It is too confusing to have a list of 3 things, some of which are dimensions
+and one is a type.  Either of the following would be better:
+
+        array [10, 40] of int
+or
+        int [10, 40]
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp2.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp2.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp2.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp2.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,53 @@
+Date: Thu, 8 Feb 2001 14:31:05 -0600 (CST)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: RE: Type notation debate...
+
+> Arrays (without and with size):
+> type ::= '[' type ']' | '[' INT ',' type ']'.
+> 
+> The arrays with size lists the dimensions and the type in a single list.
+> That is just too confusing:
+
+>       [10, 40, int]
+> This seems to be a 3-D array where the third dimension is something strange.
+> It is too confusing to have a list of 3 things, some of which are dimensions
+> and one is a type. 
+
+The above grammar indicates that there is only one integer parameter, ie
+the upper bound.  The lower bound is always implied to be zero, for
+several reasons:
+
+* As a low level VM, we want to expose addressing computations
+  explicitly.  Since the lower bound must always be known in a high level
+  language statically, the language front end can do the translation
+  automatically.
+* This fits more closely with what Java needs, ie what we need in the
+  short term.  Java arrays are always zero based.
+
+If a two element list is too confusing, I would recommend an alternate
+syntax of:
+
+type ::= '[' type ']' | '[' INT 'x' type ']'.
+
+For example:
+  [12 x int]
+  [12x int]
+  [ 12 x [ 4x int ]]
+
+Which is syntactically nicer, and more explicit.
+
+> Either of the following would be better:
+>       array [10, 40] of int
+
+I considered this approach for arrays in general (ie array of int/ array
+of 12 int), but found that it made declarations WAY too long.  Remember
+that because of the nature of llvm, you get a lot of types strewn all over
+the program, and using the 'typedef' like facility is not a wonderful
+option, because then types aren't explicit anymore.
+
+I find this email interesting, because you contradict the previous email
+you sent, where you recommend that we stick to C syntax....
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp4.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp4.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp4.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-06-TypeNotationDebateResp4.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,89 @@
+> But in fact, if you read the entire answer carefully, he came to the same
+> conclusion I do: that you have to go with familiar syntax over logical
+> syntax because familiarity is such a strong force:
+>       "However, familiarity is a strong force. To compare, in English, we
+live
+> more or less happily with the absurd rules for "to be" (am, are, is, been,
+> was, were, ...) and all attempts to simplify are treated with contempt or
+> (preferably) humor. It be a curious world and it always beed."
+
+Although you have to remember that his situation was considerably
+different than ours.  He was in a position where he was designing a high
+level language that had to be COMPATIBLE with C.  Our language is such
+that a new person would have to learn the new, different, syntax
+anyways.  Making them learn about the type system does not seem like much
+of a stretch from learning the opcodes and how SSA form works, and how
+everything ties together...
+
+> > Basically, my argument for this type construction system is that it is
+> > VERY simple to use and understand (although it IS different than C, it is
+> > very simple and straightforward, which C is NOT).  In fact, I would assert
+> > that most programmers TODAY do not understand pointers to member
+> > functions, and have to look up an example when they have to write them.
+
+> Again, I don't disagree with this at all.  But to some extent this
+> particular problem is inherently difficult.  Your syntax for the above
+> example may be easier for you to read because this is the way you have been
+> thinking about it.  Honestly, I don't find it much easier than the C syntax.
+> In either case, I would have to look up an example to write pointers to
+> member functions.
+
+I would argue that because the lexical structure of the language is self
+consistent, any person who spent a significant amount of time programming
+in LLVM directly would understand how to do it without looking it up in a
+manual.  The reason this does not work for C is because you rarely have to
+declare these pointers, and the syntax is inconsistent with the method
+declaration and calling syntax.
+
+> But pointers to member functions are nowhere near as common as arrays.
+
+Very true.  If you're implementing an object oriented language, however,
+remember that you have to do all the pointer to member function stuff
+yourself.... so everytime you invoke a virtual method one is involved
+(instead of having C++ hide it for you behind "syntactic sugar").
+
+> And the old array syntax:
+>       type [ int, int, ...]
+> is just much more familiar and clear to people than anything new you
+> introduce, no matter how logical it is.  
+
+Erm... excuse me but how is this the "old array syntax"?  If you are
+arguing for consistency with C, you should be asking for 'type int []',
+which is significantly different than the above (beside the above
+introduces a new operator and duplicates information
+needlessly).  Basically what I am suggesting is exactly the above without
+the fluff.  So instead of:
+
+       type [ int, int, ...]
+
+you use:
+
+       type [ int ]
+
+> Introducing a new syntax that may
+> make function pointers easier but makes arrays much more difficult seems
+> very risky to me.
+
+This is not about function pointers.  This is about consistency in the
+type system, and consistency with the rest of the language.  The point
+above does not make arrays any more difficult to use, and makes the
+structure of types much more obvious than the "c way".
+
+> > In my opinion, it is critically important to have clear and concise type
+> > specifications, because types are going to be all over the programs.
+> 
+> I absolutely agree.  But the question is, what is more clear and concise?
+> The syntax programmers are used to out of years of experience or a new
+> syntax that they have never seen that has a more logical structure.  I think
+> the answer is the former.  Sometimes, you have to give up a better idea
+> because you can't overcome sociological barriers to it.  Qwerty keyboards
+> and Windows are two classic examples of bad technology that are difficult to
+> root out.
+
+Very true, but you seem to be advocating a completely different Type
+system than C has, in addition to it not offering the advantages of clear
+structure that the system I recommended does... so you seem to not have a
+problem with changing this, just with what I change it to.  :)
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveComments.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveComments.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveComments.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveComments.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,120 @@
+Ok, here are my comments and suggestions about the LLVM instruction set.
+We should discuss some now, but can discuss many of them later, when we
+revisit synchronization, type inference, and other issues.
+(We have discussed some of the comments already.)
+
+
+o  We should consider eliminating the type annotation in cases where it is
+   essentially obvious from the instruction type, e.g., in br, it is obvious
+   that the first arg. should be a bool and the other args should be labels:
+
+	br bool <cond>, label <iftrue>, label <iffalse>
+
+   I think your point was that making all types explicit improves clarity
+   and readability.  I agree to some extent, but it also comes at the cost
+   of verbosity.  And when the types are obvious from people's experience
+   (e.g., in the br instruction), it doesn't seem to help as much.
+
+
+o  On reflection, I really like your idea of having the two different switch
+   types (even though they encode implementation techniques rather than
+   semantics).  It should simplify building the CFG and my guess is it could
+   enable some significant optimizations, though we should think about which.
+
+
+o  In the lookup-indirect form of the switch, is there a reason not to make
+   the val-type uint?  Most HLL switch statements (including Java and C++)
+   require that anyway.  And it would also make the val-type uniform 
+   in the two forms of the switch.
+
+   I did see the switch-on-bool examples and, while cute, we can just use
+   the branch instructions in that particular case.
+
+
+o  I agree with your comment that we don't need 'neg'.
+
+
+o  There's a trade-off with the cast instruction:
+   +  it avoids having to define all the upcasts and downcasts that are
+      valid for the operands of each instruction  (you probably have thought
+      of other benefits also)
+   -  it could make the bytecode significantly larger because there could
+      be a lot of cast operations
+
+
+o  Making the second arg. to 'shl' a ubyte seems good enough to me.
+   255 positions seems adequate for several generations of machines
+   and is more compact than uint.
+
+
+o  I still have some major concerns about including malloc and free in the
+   language (either as builtin functions or instructions).  LLVM must be
+   able to represent code from many different languages.  Languages such as
+   C, C++ Java and Fortran 90 would not be able to use our malloc anyway
+   because each of them will want to provide a library implementation of it.
+
+   This gets even worse when code from different languages is linked
+   into a single executable (which is fairly common in large apps).
+   Having a single malloc would just not suffice, and instead would simply
+   complicate the picture further because it adds an extra variant in
+   addition to the one each language provides.
+
+   Instead, providing a default library version of malloc and free
+   (and perhaps a malloc_gc with garbage collection instead of free)
+   would make a good implementation available to anyone who wants it.
+
+   I don't recall all your arguments in favor so let's discuss this again,
+   and soon.
+
+
+o  'alloca' on the other hand sounds like a good idea, and the
+   implementation seems fairly language-independent so it doesn't have the
+   problems with malloc listed above.
+
+
+o  About indirect call:
+   Your option #2 sounded good to me.  I'm not sure I understand your
+   concern about an explicit 'icall' instruction?
+
+
+o  A pair of important synchronization instr'ns to think about:
+     load-linked
+     store-conditional
+
+
+o  Other classes of instructions that are valuable for pipeline performance:
+     conditional-move		 
+     predicated instructions
+
+
+o  I believe tail calls are relatively easy to identify; do you know why
+   .NET has a tailcall instruction?
+
+
+o  I agree that we need a static data space.  Otherwise, emulating global
+   data gets unnecessarily complex.
+
+
+o  About explicit parallelism:
+
+   We once talked about adding a symbolic thread-id field to each
+   instruction.  (It could be optional so single-threaded codes are
+   not penalized.)  This could map well to multi-threaded architectures
+   while providing easy ILP for single-threaded onces.  But it is probably
+   too radical an idea to include in a base version of LLVM.  Instead, it
+   could a great topic for a separate study.
+
+   What is the semantics of the IA64 stop bit?
+
+
+
+
+o  And finally, another thought about the syntax for arrays :-)
+
+   Although this syntax:
+	  array <dimension-list> of <type>
+   is verbose, it will be used only in the human-readable assembly code so
+   size should not matter.  I think we should consider it because I find it
+   to be the clearest syntax.  It could even make arrays of function
+   pointers somewhat readable.
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveCommentsResponse.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveCommentsResponse.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveCommentsResponse.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-09-AdveCommentsResponse.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,245 @@
+From: Chris Lattner <sabre at nondot.org>
+To: "Vikram S. Adve" <vadve at cs.uiuc.edu>
+Subject: Re: LLVM Feedback
+
+I've included your feedback in the /home/vadve/lattner/llvm/docs directory
+so that it will live in CVS eventually with the rest of LLVM.  I've
+significantly updated the documentation to reflect the changes you
+suggested, as specified below:
+
+> We should consider eliminating the type annotation in cases where it is
+> essentially obvious from the instruction type:
+>        br bool <cond>, label <iftrue>, label <iffalse>
+> I think your point was that making all types explicit improves clarity
+> and readability.  I agree to some extent, but it also comes at the
+> cost of verbosity.  And when the types are obvious from people's
+> experience (e.g., in the br instruction), it doesn't seem to help as
+> much.
+
+Very true.  We should discuss this more, but my reasoning is more of a
+consistency argument.  There are VERY few instructions that can have all
+of the types eliminated, and doing so when available unnecesarily makes
+the language more difficult to handle.  Especially when you see 'int
+%this' and 'bool %that' all over the place, I think it would be
+disorienting to see:
+
+  br %predicate, %iftrue, %iffalse
+
+for branches.  Even just typing that once gives me the creeps. ;)  Like I
+said, we should probably discuss this further in person...
+
+> On reflection, I really like your idea of having the two different
+> switch types (even though they encode implementation techniques rather
+> than semantics).  It should simplify building the CFG and my guess is it
+> could enable some significant optimizations, though we should think
+> about which.
+
+Great.  I added a note to the switch section commenting on how the VM
+should just use the instruction type as a hint, and that the
+implementation may choose altermate representations (such as predicated
+branches).
+
+> In the lookup-indirect form of the switch, is there a reason not to
+> make the val-type uint?
+
+No.  This was something I was debating for a while, and didn't really feel
+strongly about either way.  It is common to switch on other types in HLL's
+(for example signed int's are particually common), but in this case, all
+that will be added is an additional 'cast' instruction.  I removed that
+from the spec.
+
+> I agree with your comment that we don't need 'neg'
+
+Removed.
+
+> There's a trade-off with the cast instruction:
+>  +  it avoids having to define all the upcasts and downcasts that are
+>     valid for the operands of each instruction  (you probably have
+>     thought of other benefits also)
+>  -  it could make the bytecode significantly larger because there could
+>     be a lot of cast operations
+
+ + You NEED casts to represent things like:
+    void foo(float);
+    ...
+    int x;
+    ...
+    foo(x);
+   in a language like C.  Even in a Java like language, you need upcasts
+   and some way to implement dynamic downcasts.
+ + Not all forms of instructions take every type (for example you can't
+   shift by a floating point number of bits), thus SOME programs will need
+   implicit casts.
+
+To be efficient and to avoid your '-' point above, we just have to be
+careful to specify that the instructions shall operate on all common
+types, therefore casting should be relatively uncommon.  For example all
+of the arithmetic operations work on almost all data types.
+
+> Making the second arg. to 'shl' a ubyte seems good enough to me.
+> 255 positions seems adequate for several generations of machines
+
+Okay, that comment is removed.
+
+> and is more compact than uint.
+
+No, it isn't.  Remember that the bytecode encoding saves value slots into
+the bytecode instructions themselves, not constant values.  This is
+another case where we may introduce more cast instructions (but we will
+also reduce the number of opcode variants that must be supported by a
+virtual machine).  Because most shifts are by constant values, I don't
+think that we'll have to cast many shifts.  :)
+
+> I still have some major concerns about including malloc and free in the
+> language (either as builtin functions or instructions).
+
+Agreed.  How about this proposal:
+
+malloc/free are either built in functions or actual opcodes.  They provide
+all of the type safety that the document would indicate, blah blah
+blah. :)
+
+Now, because of all of the excellent points that you raised, an
+implementation may want to override the default malloc/free behavior of
+the program.  To do this, they simply implement a "malloc" and
+"free" function.  The virtual machine will then be defined to use the user
+defined malloc/free function (which return/take void*'s, not type'd
+pointers like the builtin function would) if one is available, otherwise
+fall back on a system malloc/free.
+
+Does this sound like a good compromise?  It would give us all of the
+typesafety/elegance in the language while still allowing the user to do
+all the cool stuff they want to...
+
+>  'alloca' on the other hand sounds like a good idea, and the
+>  implementation seems fairly language-independent so it doesn't have the
+>  problems with malloc listed above.
+
+Okay, once we get the above stuff figured out, I'll put it all in the
+spec.
+
+>  About indirect call:
+>  Your option #2 sounded good to me.  I'm not sure I understand your
+>  concern about an explicit 'icall' instruction?
+
+I worry too much.  :)  The other alternative has been removed. 'icall' is
+now up in the instruction list next to 'call'.
+
+> I believe tail calls are relatively easy to identify; do you know why
+> .NET has a tailcall instruction?
+
+Although I am just guessing, I believe it probably has to do with the fact
+that they want languages like Haskell and lisp to be efficiently runnable
+on their VM.  Of course this means that the VM MUST implement tail calls
+'correctly', or else life will suck.  :)  I would put this into a future
+feature bin, because it could be pretty handy...
+
+>  A pair of important synchronization instr'ns to think about:
+>    load-linked
+>    store-conditional
+
+What is 'load-linked'?  I think that (at least for now) I should add these
+to the 'possible extensions' section, because they are not immediately
+needed...
+
+> Other classes of instructions that are valuable for pipeline
+> performance:
+>    conditional-move            
+>    predicated instructions
+
+Conditional move is effectly a special case of a predicated
+instruction... and I think that all predicated instructions can possibly
+be implemented later in LLVM.  It would significantly change things, and
+it doesn't seem to be very necessary right now.  It would seem to
+complicate flow control analysis a LOT in the virtual machine.  I would
+tend to prefer that a predicated architecture like IA64 convert from a
+"basic block" representation to a predicated rep as part of it's dynamic
+complication phase.  Also, if a basic block contains ONLY a move, then
+that can be trivally translated into a conditional move...
+
+> I agree that we need a static data space.  Otherwise, emulating global
+> data gets unnecessarily complex.
+
+Definately.  Also a later item though.  :)
+
+> We once talked about adding a symbolic thread-id field to each
+> ..
+> Instead, it could a great topic for a separate study.
+
+Agreed.  :)
+
+> What is the semantics of the IA64 stop bit?
+
+Basically, the IA64 writes instructions like this:
+mov ...
+add ...
+sub ...
+op xxx
+op xxx
+;;
+mov ...
+add ...
+sub ...
+op xxx
+op xxx
+;;
+
+Where the ;; delimits a group of instruction with no dependencies between
+them, which can all be executed concurrently (to the limits of the
+available functional units).  The ;; gets translated into a bit set in one
+of the opcodes.
+
+The advantages of this representation is that you don't have to do some
+kind of 'thread id scheduling' pass by having to specify ahead of time how
+many threads to use, and the representation doesn't have a per instruction
+overhead...
+
+> And finally, another thought about the syntax for arrays :-)
+>  Although this syntax:
+>         array <dimension-list> of <type>
+>  is verbose, it will be used only in the human-readable assembly code so
+>  size should not matter.  I think we should consider it because I find it
+>  to be the clearest syntax.  It could even make arrays of function
+>  pointers somewhat readable.
+
+My only comment will be to give you an example of why this is a bad
+idea.  :)
+
+Here is an example of using the switch statement (with my recommended
+syntax):
+
+switch uint %val, label %otherwise, 
+       [%3 x {uint, label}] [ { uint %57, label %l1 }, 
+                              { uint %20, label %l2 }, 
+                              { uint %14, label %l3 } ]
+
+Here it is with the syntax you are proposing:
+
+switch uint %val, label %otherwise, 
+       array %3 of {uint, label} 
+              array of {uint, label}
+                              { uint %57, label %l1 },
+                              { uint %20, label %l2 },
+                              { uint %14, label %l3 }
+
+Which is ambiguous and very verbose. It would be possible to specify
+constants with [] brackets as in my syntax, which would look like this:
+
+switch uint %val, label %otherwise,
+       array %3 of {uint, label}  [ { uint %57, label %l1 },
+                                    { uint %20, label %l2 },
+                                    { uint %14, label %l3 } ]
+
+But then the syntax is inconsistent between type definition and constant
+definition (why do []'s enclose the constants but not the types??).  
+
+Anyways, I'm sure that there is much debate still to be had over
+this... :)
+
+-Chris
+
+http://www.nondot.org/~sabre/os/
+http://www.nondot.org/MagicStats/
+http://korbit.sourceforge.net/
+
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-Memory.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-Memory.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-Memory.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-Memory.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,39 @@
+Date: Tue, 13 Feb 2001 13:29:52 -0600 (CST)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: LLVM Concerns...
+
+
+I've updated the documentation to include load store and allocation
+instructions (please take a look and let me know if I'm on the right
+track):
+
+file:/home/vadve/lattner/llvm/docs/LangRef.html#memoryops
+
+I have a couple of concerns I would like to bring up:
+
+1. Reference types
+   Right now, I've spec'd out the language to have a pointer type, which
+   works fine for lots of stuff... except that Java really has
+   references: constrained pointers that cannot be manipulated: added and
+   subtracted, moved, etc... Do we want to have a type like this?  It
+   could be very nice for analysis (pointer always points to the start of
+   an object, etc...) and more closely matches Java semantics.  The
+   pointer type would be kept for C++ like semantics.  Through analysis,
+   C++ pointers could be promoted to references in the LLVM
+   representation.
+
+2. Our "implicit" memory references in assembly language:
+   After thinking about it, this model has two problems:
+      A. If you do pointer analysis and realize that two stores are
+         independent and can share the same memory source object, there is
+         no way to represent this in either the bytecode or assembly.
+      B. When parsing assembly/bytecode, we effectively have to do a full
+         SSA generation/PHI node insertion pass to build the dependencies
+         when we don't want the "pinned" representation.  This is not
+         cool.
+   I'm tempted to make memory references explicit in both the assembly and
+   bytecode to get around this... what do you think?
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-MemoryResponse.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-MemoryResponse.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-MemoryResponse.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-02-13-Reference-MemoryResponse.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,47 @@
+Date: Tue, 13 Feb 2001 18:25:42 -0600
+From: Vikram S. Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <sabre at nondot.org>
+Subject: RE: LLVM Concerns...
+
+> 1. Reference types
+>    Right now, I've spec'd out the language to have a pointer type, which
+>    works fine for lots of stuff... except that Java really has
+>    references: constrained pointers that cannot be manipulated: added and
+>    subtracted, moved, etc... Do we want to have a type like this?  It
+>    could be very nice for analysis (pointer always points to the start of
+>    an object, etc...) and more closely matches Java semantics.  The
+>    pointer type would be kept for C++ like semantics.  Through analysis,
+>    C++ pointers could be promoted to references in the LLVM
+>    representation.
+
+
+You're right, having references would be useful.  Even for C++ the *static*
+compiler could generate references instead of pointers with fairly
+straightforward analysis.  Let's include a reference type for now.  But I'm
+also really concerned that LLVM is becoming big and complex and (perhaps)
+too high-level.  After we get some initial performance results, we may have
+a clearer idea of what our goals should be and we should revisit this
+question then.
+
+> 2. Our "implicit" memory references in assembly language:
+>    After thinking about it, this model has two problems:
+>       A. If you do pointer analysis and realize that two stores are
+>          independent and can share the same memory source object,
+
+not sure what you meant by "share the same memory source object"
+
+> there is
+>          no way to represent this in either the bytecode or assembly.
+>       B. When parsing assembly/bytecode, we effectively have to do a full
+>          SSA generation/PHI node insertion pass to build the dependencies
+>          when we don't want the "pinned" representation.  This is not
+>          cool.
+
+I understand the concern.  But again, let's focus on the performance first
+and then look at the language design issues.  E.g., it would be good to know
+how big the bytecode files are before expanding them further.  I am pretty
+keen to explore the implications of LLVM for mobile devices.  Both bytecode
+size and power consumption are important to consider there.
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-04-16-DynamicCompilation.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-04-16-DynamicCompilation.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-04-16-DynamicCompilation.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-04-16-DynamicCompilation.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,49 @@
+By Chris:
+
+LLVM has been designed with two primary goals in mind.  First we strive to 
+enable the best possible division of labor between static and dynamic 
+compilers, and second, we need a flexible and powerful interface 
+between these two complementary stages of compilation.  We feel that 
+providing a solution to these two goals will yield an excellent solution 
+to the performance problem faced by modern architectures and programming 
+languages.
+
+A key insight into current compiler and runtime systems is that a 
+compiler may fall in anywhere in a "continuum of compilation" to do its 
+job.  On one side, scripting languages statically compile nothing and 
+dynamically compile (or equivalently, interpret) everything.  On the far 
+other side, traditional static compilers process everything statically and 
+nothing dynamically.  These approaches have typically been seen as a 
+tradeoff between performance and portability.  On a deeper level, however, 
+there are two reasons that optimal system performance may be obtained by a
+system somewhere in between these two extremes: Dynamic application 
+behavior and social constraints.
+
+From a technical perspective, pure static compilation cannot ever give 
+optimal performance in all cases, because applications have varying dynamic
+behavior that the static compiler cannot take into consideration.  Even 
+compilers that support profile guided optimization generate poor code in 
+the real world, because using such optimization tunes that application 
+to one particular usage pattern, whereas real programs (as opposed to 
+benchmarks) often have several different usage patterns.
+
+On a social level, static compilation is a very shortsighted solution to 
+the performance problem.  Instruction set architectures (ISAs) continuously 
+evolve, and each implementation of an ISA (a processor) must choose a set 
+of tradeoffs that make sense in the market context that it is designed for.  
+With every new processor introduced, the vendor faces two fundamental 
+problems: First, there is a lag time between when a processor is introduced 
+to when compilers generate quality code for the architecture.  Secondly, 
+even when compilers catch up to the new architecture there is often a large 
+body of legacy code that was compiled for previous generations and will 
+not or can not be upgraded.  Thus a large percentage of code running on a 
+processor may be compiled quite sub-optimally for the current 
+characteristics of the dynamic execution environment.
+
+For these reasons, LLVM has been designed from the beginning as a long-term 
+solution to these problems.  Its design allows the large body of platform 
+independent, static, program optimizations currently in compilers to be 
+reused unchanged in their current form.  It also provides important static 
+type information to enable powerful dynamic and link time optimizations 
+to be performed quickly and efficiently.  This combination enables an 
+increase in effective system performance for real world environments.

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-18-ExceptionHandling.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-18-ExceptionHandling.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-18-ExceptionHandling.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-18-ExceptionHandling.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,202 @@
+Meeting notes: Implementation idea: Exception Handling in C++/Java
+
+The 5/18/01 meeting discussed ideas for implementing exceptions in LLVM.
+We decided that the best solution requires a set of library calls provided by
+the VM, as well as an extension to the LLVM function invocation syntax.
+
+The LLVM function invocation instruction previously looks like this (ignoring
+types):
+
+  call func(arg1, arg2, arg3)
+
+The extension discussed today adds an optional "with" clause that 
+associates a label with the call site.  The new syntax looks like this:
+
+  call func(arg1, arg2, arg3) with funcCleanup
+
+This funcHandler always stays tightly associated with the call site (being
+encoded directly into the call opcode itself), and should be used whenever
+there is cleanup work that needs to be done for the current function if 
+an exception is thrown by func (or if we are in a try block).
+
+To support this, the VM/Runtime provide the following simple library 
+functions (all syntax in this document is very abstract):
+
+typedef struct { something } %frame;
+  The VM must export a "frame type", that is an opaque structure used to 
+  implement different types of stack walking that may be used by various
+  language runtime libraries. We imagine that it would be typical to 
+  represent a frame with a PC and frame pointer pair, although that is not 
+  required.
+
+%frame getStackCurrentFrame();
+  Get a frame object for the current function.  Note that if the current
+  function was inlined into its caller, the "current" frame will belong to
+  the "caller".
+
+bool isFirstFrame(%frame f);
+  Returns true if the specified frame is the top level (first activated) frame
+  for this thread.  For the main thread, this corresponds to the main() 
+  function, for a spawned thread, it corresponds to the thread function.
+
+%frame getNextFrame(%frame f);
+  Return the previous frame on the stack.  This function is undefined if f
+  satisfies the predicate isFirstFrame(f).
+
+Label *getFrameLabel(%frame f);
+  If a label was associated with f (as discussed below), this function returns
+  it.  Otherwise, it returns a null pointer.
+
+doNonLocalBranch(Label *L);
+  At this point, it is not clear whether this should be a function or 
+  intrinsic.  It should probably be an intrinsic in LLVM, but we'll deal with
+  this issue later.
+
+
+Here is a motivating example that illustrates how these facilities could be
+used to implement the C++ exception model:
+
+void TestFunction(...) {
+  A a; B b;
+  foo();        // Any function call may throw
+  bar();
+  C c;
+
+  try {
+    D d;
+    baz();
+  } catch (int) {
+    ...int Stuff...
+    // execution continues after the try block: the exception is consumed
+  } catch (double) {
+    ...double stuff...
+   throw;            // Exception is propogated
+  }
+}
+
+This function would compile to approximately the following code (heavy 
+pseudo code follows):
+
+Func:
+  %a = alloca A
+  A::A(%a)        // These ctors & dtors could throw, but we ignore this 
+  %b = alloca B   // minor detail for this example
+  B::B(%b)
+
+  call foo() with fooCleanup // An exception in foo is propogated to fooCleanup
+  call bar() with barCleanup // An exception in bar is propogated to barCleanup
+
+  %c = alloca C
+  C::C(c)
+  %d = alloca D
+  D::D(d)
+  call baz() with bazCleanup // An exception in baz is propogated to bazCleanup
+  d->~D();
+EndTry:                   // This label corresponds to the end of the try block
+  c->~C()       // These could also throw, these are also ignored
+  b->~B()
+  a->~A()
+  return
+
+Note that this is a very straight forward and literal translation: exactly
+what we want for zero cost (when unused) exception handling.  Especially on
+platforms with many registers (ie, the IA64) setjmp/longjmp style exception
+handling is *very* impractical.  Also, the "with" clauses describe the 
+control flow paths explicitly so that analysis is not adversly effected.
+
+The foo/barCleanup labels are implemented as:
+
+TryCleanup:          // Executed if an exception escapes the try block  
+  c->~C()
+barCleanup:          // Executed if an exception escapes from bar()
+  // fall through
+fooCleanup:          // Executed if an exception escapes from foo()
+  b->~B()
+  a->~A()
+  Exception *E = getThreadLocalException()
+  call throw(E)      // Implemented by the C++ runtime, described below
+
+Which does the work one would expect.  getThreadLocalException is a function
+implemented by the C++ support library.  It returns the current exception 
+object for the current thread.  Note that we do not attempt to recycle the 
+shutdown code from before, because performance of the mainline code is 
+critically important.  Also, obviously fooCleanup and barCleanup may be 
+merged and one of them eliminated.  This just shows how the code generator 
+would most likely emit code.
+
+The bazCleanup label is more interesting.  Because the exception may be caught
+by the try block, we must dispatch to its handler... but it does not exist
+on the call stack (it does not have a VM Call->Label mapping installed), so 
+we must dispatch statically with a goto.  The bazHandler thus appears as:
+
+bazHandler:
+  d->~D();    // destruct D as it goes out of scope when entering catch clauses
+  goto TryHandler
+
+In general, TryHandler is not the same as bazHandler, because multiple 
+function calls could be made from the try block.  In this case, trivial 
+optimization could merge the two basic blocks.  TryHandler is the code 
+that actually determines the type of exception, based on the Exception object
+itself.  For this discussion, assume that the exception object contains *at
+least*:
+
+1. A pointer to the RTTI info for the contained object
+2. A pointer to the dtor for the contained object
+3. The contained object itself
+
+Note that it is necessary to maintain #1 & #2 in the exception object itself
+because objects without virtual function tables may be thrown (as in this 
+example).  Assuming this, TryHandler would look something like this:
+
+TryHandler: 
+  Exception *E = getThreadLocalException();
+  switch (E->RTTIType) {
+  case IntRTTIInfo:
+    ...int Stuff...       // The action to perform from the catch block
+    break;
+  case DoubleRTTIInfo:
+    ...double Stuff...    // The action to perform from the catch block
+    goto TryCleanup       // This catch block rethrows the exception
+    break;                // Redundant, eliminated by the optimizer
+  default:
+    goto TryCleanup       // Exception not caught, rethrow
+  }
+
+  // Exception was consumed
+  if (E->dtor)
+    E->dtor(E->object)    // Invoke the dtor on the object if it exists
+  goto EndTry             // Continue mainline code...
+
+And that is all there is to it.
+
+The throw(E) function would then be implemented like this (which may be 
+inlined into the caller through standard optimization):
+
+function throw(Exception *E) {
+  // Get the start of the stack trace...
+  %frame %f = call getStackCurrentFrame()
+
+  // Get the label information that corresponds to it
+  label * %L = call getFrameLabel(%f)
+  while (%L == 0 && !isFirstFrame(%f)) {
+    // Loop until a cleanup handler is found
+    %f = call getNextFrame(%f)
+    %L = call getFrameLabel(%f)
+  }
+
+  if (%L != 0) {
+    call setThreadLocalException(E)   // Allow handlers access to this...
+    call doNonLocalBranch(%L)
+  }
+  // No handler found!
+  call BlowUp()         // Ends up calling the terminate() method in use
+}
+
+That's a brief rundown of how C++ exception handling could be implemented in
+llvm.  Java would be very similar, except it only uses destructors to unlock
+synchronized blocks, not to destroy data.  Also, it uses two stack walks: a
+nondestructive walk that builds a stack trace, then a destructive walk that
+unwinds the stack as shown here. 
+
+It would be trivial to get exception interoperability between C++ and Java.
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-19-ExceptionResponse.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-19-ExceptionResponse.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-19-ExceptionResponse.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-05-19-ExceptionResponse.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,45 @@
+Date: Sat, 19 May 2001 19:09:13 -0500 (CDT)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: RE: Meeting writeup
+
+> I read it through and it looks great!
+
+Thanks!
+
+> The finally clause in Java may need more thought.  The code for this clause
+> is like a subroutine because it needs to be entered from many points (end of
+> try block and beginning of each catch block), and then needs to *return to
+> the place from where the code was entered*.  That's why JVM has the
+> jsr/jsr_w instruction.
+
+Hrm... I guess that is an implementation decision.  It can either be
+modelled as a subroutine (as java bytecodes do), which is really
+gross... or it can be modelled as code duplication (emitted once inline,
+then once in the exception path).  Because this could, at worst,
+slightly less than double the amount of code in a function (it is
+bounded) I don't think this is a big deal.  One of the really nice things
+about the LLVM representation is that it still allows for runtime code
+generation for exception paths (exceptions paths are not compiled until
+needed).  Obviously a static compiler couldn't do this though.  :)
+
+In this case, only one copy of the code would be compiled... until the
+other one is needed on demand.  Also this strategy fits with the "zero
+cost" exception model... the standard case is not burdened with extra
+branches or "call"s.
+
+> I suppose you could save the return address in a particular register
+> (specific to this finally block), jump to the finally block, and then at the
+> end of the finally block, jump back indirectly through this register.  It
+> will complicate building the CFG but I suppose that can be handled.  It is
+> also unsafe in terms of checking where control returns (which is I suppose
+> why the JVM doesn't use this).
+
+I think that a code duplication method would be cleaner, and would avoid
+the caveats that you mention.  Also, it does not slow down the normal case
+with an indirect branch...
+
+Like everything, we can probably defer a final decision until later.  :)
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,63 @@
+Date: Fri, 1 Jun 2001 16:38:17 -0500 (CDT)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: Interesting: GCC passes
+
+
+Take a look at this document (which describes the order of optimizations
+that GCC performs):
+
+http://gcc.gnu.org/onlinedocs/gcc_17.html
+
+The rundown is that after RTL generation, the following happens:
+
+1 . [t] jump optimization (jumps to jumps, etc)
+2 . [t] Delete unreachable code
+3 .     Compute live ranges for CSE
+4 . [t] Jump threading (jumps to jumps with identical or inverse conditions)
+5 . [t] CSE
+6 . *** Conversion to SSA 
+7 . [t] SSA Based DCE
+8 . *** Conversion to LLVM
+9 .     UnSSA
+10.     GCSE
+11.     LICM
+12.     Strength Reduction
+13.     Loop unrolling
+14. [t] CSE
+15. [t] DCE
+16.     Instruction combination, register movement, scheduling... etc.
+
+I've marked optimizations with a [t] to indicate things that I believe to
+be relatively trivial to implement in LLVM itself.  The time consuming
+things to reimplement would be SSA based PRE, Strength reduction & loop
+unrolling... these would be the major things we would miss out on if we
+did LLVM creation from tree code [inlining and other high level
+optimizations are done on the tree representation].
+
+Given the lack of "strong" optimizations that would take a long time to
+reimplement, I am leaning a bit more towards creating LLVM from the tree
+code.  Especially given that SGI has GPL'd their compiler, including many
+SSA based optimizations that could be adapted (besides the fact that their
+code looks MUCH nicer than GCC :)
+
+Even if we choose to do LLVM code emission from RTL, we will almost
+certainly want to move LLVM emission from step 8 down until at least CSE
+has been rerun... which causes me to wonder if the SSA generation code
+will still work (due to global variable dependencies and stuff).  I assume
+that it can be made to work, but might be a little more involved than we
+would like.
+
+I'm continuing to look at the Tree -> RTL code.  It is pretty gross
+because they do some of the translation a statement at a time, and some
+of it a function at a time...  I'm not quite clear why and how the
+distinction is drawn, but it does not appear that there is a wonderful
+place to attach extra info.
+
+Anyways, I'm proceeding with the RTL -> LLVM conversion phase for now.  We
+can talk about this more on Monday.
+
+Wouldn't it be nice if there were a obvious decision to be made?  :)
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations2.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations2.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations2.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-01-GCCOptimizations2.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,71 @@
+Date: Fri, 1 Jun 2001 17:08:44 -0500 (CDT)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: RE: Interesting: GCC passes
+
+> That is very interesting.  I agree that some of these could be done on LLVM
+> at link-time, but it is the extra time required that concerns me.  Link-time
+> optimization is severely time-constrained.
+
+If we were to reimplement any of these optimizations, I assume that we
+could do them a translation unit at a time, just as GCC does now.  This
+would lead to a pipeline like this:
+
+Static optimizations, xlation unit at a time:
+.c --GCC--> .llvm --llvmopt--> .llvm 
+
+Link time optimizations:
+.llvm --llvm-ld--> .llvm --llvm-link-opt--> .llvm 
+
+Of course, many optimizations could be shared between llvmopt and
+llvm-link-opt, but the wouldn't need to be shared...  Thus compile time
+could be faster, because we are using a "smarter" IR (SSA based).
+
+> BTW, about SGI, "borrowing" SSA-based optimizations from one compiler and
+> putting it into another is not necessarily easier than re-doing it.
+> Optimization code is usually heavily tied in to the specific IR they use.
+
+Understood.  The only reason that I brought this up is because SGI's IR is
+more similar to LLVM than it is different in many respects (SSA based,
+relatively low level, etc), and could be easily adapted.  Also their
+optimizations are written in C++ and are actually somewhat
+structured... of course it would be no walk in the park, but it would be
+much less time consuming to adapt, say, SSA-PRE than to rewrite it.
+
+> But your larger point is valid that adding SSA based optimizations is
+> feasible and should be fun.  (Again, link time cost is the issue.)
+
+Assuming linktime cost wasn't an issue, the question is: 
+Does using GCC's backend buy us anything?
+
+> It also occurs to me that GCC is probably doing quite a bit of back-end
+> optimization (step 16 in your list).  Do you have a breakdown of that?
+
+Not really.  The irritating part of GCC is that it mixes it all up and
+doesn't have a clean seperation of concerns.  A lot of the "back end
+optimization" happens right along with other data optimizations (ie, CSE
+of machine specific things).
+
+As far as REAL back end optimizations go, it looks something like this:
+
+1. Instruction combination: try to make CISCy instructions, if available
+2. Register movement: try to get registers in the right places for the
+architecture to avoid register to register moves.  For example, try to get
+the first argument of a function to naturally land in %o0 for sparc.
+3. Instruction scheduling: 'nuff said :)
+4. Register class preferencing: ??
+5. Local register allocation
+6. global register allocation
+7. Spilling
+8. Local regalloc
+9. Jump optimization
+10. Delay slot scheduling
+11. Branch shorting for CISC machines
+12. Instruction selection & peephole optimization
+13. Debug info output
+
+But none of this would be usable for LLVM anyways, unless we were using
+GCC as a static compiler.
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-20-.NET-Differences.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-20-.NET-Differences.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-20-.NET-Differences.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-06-20-.NET-Differences.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,30 @@
+Date: Wed, 20 Jun 2001 12:32:22 -0500
+From: Vikram Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <lattner at cs.uiuc.edu>
+Subject: .NET vs. our VM
+
+One significant difference between .NET CLR and our VM is that the CLR
+includes full information about classes and inheritance.  In fact, I just
+sat through the paper on adding templates to .NET CLR, and the speaker
+indicated that the goal seems to be to do simple static compilation (very
+little lowering or optimization).  Also, the templates implementation in CLR
+"relies on dynamic class loading and JIT compilation".
+
+This is an important difference because I think there are some significant
+advantages to have a much lower level VM layer, and do significant static
+analysis and optimization.
+
+I also talked to the lead guy for KAI's C++ compiler (Arch Robison) and he
+said that SGI and other commercial compilers have included options to export
+their *IR* next to the object code (i.e., .il files) and use them for
+link-time code generation.  In fact, he said that the .o file was nearly
+empty and was entirely generated from the .il at link-time.  But he agreed
+that this limited the link-time interprocedural optimization to modules
+compiled by the same compiler, whereas our approach allows us to link and
+optimize modules from multiple different compilers.  (Also, of course, they
+don't do anything for runtime optimization).
+
+All issues to bring up in Related Work.
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-07-06-LoweringIRForCodeGen.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-07-06-LoweringIRForCodeGen.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-07-06-LoweringIRForCodeGen.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-07-06-LoweringIRForCodeGen.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,31 @@
+Date: Fri, 6 Jul 2001 16:56:56 -0500
+From: Vikram S. Adve <vadve at cs.uiuc.edu>
+To: Chris Lattner <lattner at cs.uiuc.edu>
+Subject: lowering the IR
+
+BTW, I do think that we should consider lowering the IR as you said.  I
+didn't get time to raise it today, but it comes up with the SPARC
+move-conditional instruction.  I don't think we want to put that in the core
+VM -- it is a little too specialized.  But without a corresponding
+conditional move instruction in the VM, it is pretty difficult to maintain a
+close mapping between VM and machine code.  Other architectures may have
+other such instructions.
+
+What I was going to suggest was that for a particular processor, we define
+additional VM instructions that match some of the unusual opcodes on the
+processor but have VM semantics otherwise, i.e., all operands are in SSA
+form and typed.  This means that we can re-generate core VM code from the
+more specialized code any time we want (so that portability is not lost).
+
+Typically, a static compiler like gcc would generate just the core VM, which
+is relatively portable.  Anyone (an offline tool, the linker, etc., or even
+the static compiler itself if it chooses) can transform that into more
+specialized target-specific VM code for a particular architecture.  If the
+linker does it, it can do it after all machine-independent optimizations.
+This would be the most convenient, but not necessary.
+
+The main benefit of lowering will be that we will be able to retain a close
+mapping between VM and machine code.
+
+--Vikram
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2001-09-18-OptimizeExceptions.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2001-09-18-OptimizeExceptions.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2001-09-18-OptimizeExceptions.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2001-09-18-OptimizeExceptions.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,56 @@
+Date: Tue, 18 Sep 2001 00:38:37 -0500 (CDT)
+From: Chris Lattner <sabre at nondot.org>
+To: Vikram S. Adve <vadve at cs.uiuc.edu>
+Subject: Idea for a simple, useful link time optimization
+
+
+In C++ programs, exceptions suck, and here's why:
+
+1. In virtually all function calls, you must assume that the function
+   throws an exception, unless it is defined as 'nothrow'.  This means
+   that every function call has to have code to invoke dtors on objects
+   locally if one is thrown by the function.  Most functions don't throw
+   exceptions, so this code is dead [with all the bad effects of dead
+   code, including icache pollution].
+2. Declaring a function nothrow causes catch blocks to be added to every
+   call that isnot  provably nothrow.  This makes them very slow.
+3. Extra extraneous exception edges reduce the opportunity for code
+   motion.
+4. EH is typically implemented with large lookup tables.  Ours is going to
+   be much smaller (than the "standard" way of doing it) to start with,
+   but eliminating it entirely would be nice. :)
+5. It is physically impossible to correctly put (accurate, correct)
+   exception specifications on generic, templated code.  But it is trivial
+   to analyze instantiations of said code.
+6. Most large C++ programs throw few exceptions.  Most well designed
+   programs only throw exceptions in specific planned portions of the
+   code.
+
+Given our _planned_ model of handling exceptions, all of this would be
+pretty trivial to eliminate through some pretty simplistic interprocedural
+analysis.  The DCE factor alone could probably be pretty significant.  The
+extra code motion opportunities could also be exploited though...
+
+Additionally, this optimization can be implemented in a straight forward
+conservative manner, allowing libraries to be optimized or individual
+files even (if there are leaf functions visible in the translation unit
+that are called).
+
+I think it's a reasonable optimization that hasn't really been addressed
+(because assembly is way too low level for this), and could have decent
+payoffs... without being a overly complex optimization.
+
+After I wrote all of that, I found this page that is talking about
+basically the same thing I just wrote, except that it is translation unit
+at a time, tree based approach:
+http://www.ocston.org/~jls/ehopt.html
+
+but is very useful from "expected gain" and references perspective.  Note
+that their compiler is apparently unable to inline functions that use
+exceptions, so there numbers are pretty worthless... also our results
+would (hopefully) be better because it's interprocedural...
+
+What do you think?
+
+-Chris
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2002-05-12-InstListChange.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2002-05-12-InstListChange.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2002-05-12-InstListChange.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2002-05-12-InstListChange.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,55 @@
+Date: Sun, 12 May 2002 17:12:53 -0500 (CDT)
+From: Chris Lattner <sabre at nondot.org>
+To: "Vikram S. Adve" <vadve at cs.uiuc.edu>
+Subject: LLVM change
+
+There is a fairly fundemental change that I would like to make to the LLVM 
+infrastructure, but I'd like to know if you see any drawbacks that I 
+don't...
+
+Basically right now at the basic block level, each basic block contains an 
+instruction list (returned by getInstList()) that is a ValueHolder of 
+instructions.  To iterate over instructions, we must actually iterate over 
+the instlist, and access the instructions through the instlist.
+
+To add or remove an instruction from a basic block, we need to get an 
+iterator to an instruction, which, given just an Instruction*, requires a 
+linear search of the basic block the instruction is contained in... just 
+to insert an instruction before another instruction, or to delete an 
+instruction!  This complicates algorithms that should be very simple (like 
+simple constant propogation), because they aren't actually sparse anymore, 
+they have to traverse basic blocks to remove constant propogated 
+instructions.
+
+Additionally, adding or removing instructions to a basic block 
+_invalidates all iterators_ pointing into that block, which is really 
+irritating.
+
+To fix these problems (and others), I would like to make the ordering of
+the instructions be represented with a doubly linked list in the
+instructions themselves, instead of an external data structure.  This is 
+how many other representations do it, and frankly I can't remember why I 
+originally implemented it the way I did.
+
+Long term, all of the code that depends on the nasty features in the 
+instruction list (which can be found by grep'ing for getInstList()) will 
+be changed to do nice local transformations.  In the short term, I'll 
+change the representation, but preserve the interface (including 
+getInstList()) so that all of the code doesn't have to change.
+
+Iteration over the instructions in a basic block remains the simple:
+for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) ...
+
+But we will also support:
+for (Instruction *I = BB->front(); I; I = I->getNext()) ...
+
+After converting instructions over, I'll convert basic blocks and 
+functions to have a similar interface.
+
+The only negative aspect of this change that I see is that it increases 
+the amount of memory consumed by one pointer per instruction.  Given the 
+benefits, I think this is a very reasonable tradeoff. 
+
+What do you think?
+
+-Chris

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2002-06-25-MegaPatchInfo.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2002-06-25-MegaPatchInfo.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2002-06-25-MegaPatchInfo.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2002-06-25-MegaPatchInfo.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,72 @@
+Changes:
+* Change the casting code to be const correct.  Now, doing this is invalid:
+     const Value *V = ...;
+     Instruction *I = dyn_cast<Instruction>(V);
+  instead, the second line should be:
+     const Instruction *I = dyn_cast<Instruction>(V);
+
+* Change the casting code to allow casting a reference value thus:
+     const Value &V = ...;
+     Instruction &I = cast<Instruction>(V);
+
+  dyn_cast does not work with references, because it must return a null pointer
+  on failure.
+
+* Fundamentally change how instructions and other values are represented.
+  Before, every llvm container was an instance of the ValueHolder template,
+  instantiated for each container type.  This ValueHolder was effectively a
+  wrapper around a vector of pointers to the sub-objects.
+
+  Now, instead of having a vector to pointers of objects, the objects are
+  maintained in a doubly linked list of values (ie each Instruction now has
+  Next & Previous fields).  The containers are now instances of ilist (intrusive
+  linked list class), which use the next and previous fields to chain them
+  together.  The advantage of this implementation is that iterators can be
+  formed directly from pointers to the LLVM value, and invalidation is much
+  easier to handle.
+
+* As part of the above change, dereferencing an iterator (for example:
+  BasicBlock::iterator) now produces a reference to the underlying type (same
+  example: Instruction&) instead of a pointer to the underlying object.  This
+  makes it much easier to write nested loops that iterator over things, changing
+  this:
+
+    for (Function::iterator BI = Func->begin(); BI != Func->end(); ++BI)
+      for (BasicBlock::iterator II = (*BI)->begin(); II != (*BI)->end(); ++II)
+        (*II)->dump();
+
+  into:
+
+    for (Function::iterator BI = Func->begin(); BI != Func->end(); ++BI)
+      for (BasicBlock::iterator II = BI->begin(); II != BI->end(); ++II)
+        II->dump();
+
+  which is much more natural and what users expect.
+
+* Simplification of #include's: Before, it was necessary for a .cpp file to
+  include every .h file that it used.  Now things are batched a little bit more
+  to make it easier to use.  Specifically, the include graph now includes these
+  edges:
+    Module.h -> Function.h, GlobalVariable.h
+    Function.h -> BasicBlock.h, Argument.h
+    BasicBlock.h -> Instruction.h
+
+  Which means that #including Function.h is usually sufficient for getting the
+  lower level #includes.
+
+* Printing out a Value* has now changed: Printing a Value* will soon print out
+  the address of the value instead of the contents of the Value.  To print out
+  the contents, you must convert it to a reference with (for example)
+  'cout << *I' instead of 'cout << I;'.  This conversion is not yet complete,
+  but will be eventually.  In the mean time, both forms print out the contents.
+
+* References are used much more throughout the code base.  In general, if a
+  pointer is known to never be null, it is passed in as a reference instead of a
+  pointer.  For example, the instruction visitor class uses references instead
+  of pointers, and that Pass subclasses now all receive references to Values
+  instead of pointers, because they may never be null.
+
+* The Function class now has helper functions for accessing the Arguments list.
+  Instead of having to go through getArgumentList for simple things like
+  iterator over the arguments, now the a*() methods can be used to access them.
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2003-01-23-CygwinNotes.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2003-01-23-CygwinNotes.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2003-01-23-CygwinNotes.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2003-01-23-CygwinNotes.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,28 @@
+Date: Mon, 20 Jan 2003 00:00:28 -0600
+From: Brian R. Gaeke <gaeke at uiuc.edu>
+Subject: windows vs. llvm
+
+If you're interested, here are some of the major problems compiling LLVM
+under Cygwin and/or Mingw.
+
+1. Cygwin doesn't have <inttypes.h> or <stdint.h>, so all the INT*_MAX
+   symbols and standard int*_t types are off in limbo somewhere. Mingw has
+   <stdint.h>, but Cygwin doesn't like it.
+
+2. Mingw doesn't have <dlfcn.h> (because Windows doesn't have it.)
+
+3. SA_SIGINFO and friends are not around; only signal() seems to work.
+
+4. Relink, aka ld -r, doesn't work (probably an ld bug); you need
+   DONT_BUILD_RELINKED. This breaks all the tools makefiles; you just need to
+   change them to have .a's.
+
+5. There isn't a <values.h>.
+
+6. There isn't a mallinfo() (or, at least, it's documented, but it doesn't seem
+   to link).
+
+7. The version of Bison that cygwin (and newer Linux versions) comes with
+   does not like = signs in rules. Burg's gram.yc source file uses them. I think
+   you can just take them out.
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-25-Reoptimizer1.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-25-Reoptimizer1.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-25-Reoptimizer1.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-25-Reoptimizer1.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,137 @@
+Wed Jun 25 15:13:51 CDT 2003
+
+First-level instrumentation
+---------------------------
+
+We use opt to do Bytecode-to-bytecode instrumentation. Look at
+back-edges and insert llvm_first_trigger() function call which takes
+no arguments and no return value. This instrumentation is designed to
+be easy to remove, for instance by writing a NOP over the function
+call instruction.
+
+Keep count of every call to llvm_first_trigger(), and maintain
+counters in a map indexed by return address. If the trigger count
+exceeds a threshold, we identify a hot loop and perform second-level
+instrumentation on the hot loop region (the instructions between the
+target of the back-edge and the branch that causes the back-edge).  We
+do not move code across basic-block boundaries.
+
+
+Second-level instrumentation
+---------------------------
+
+We remove the first-level instrumentation by overwriting the CALL to
+llvm_first_trigger() with a NOP.
+
+The reoptimizer maintains a map between machine-code basic blocks and
+LLVM BasicBlock*s.  We only keep track of paths that start at the
+first machine-code basic block of the hot loop region.
+
+How do we keep track of which edges to instrument, and which edges are
+exits from the hot region? 3 step process.
+
+1) Do a DFS from the first machine-code basic block of the hot loop
+region and mark reachable edges.
+
+2) Do a DFS from the last machine-code basic block of the hot loop
+region IGNORING back edges, and mark the edges which are reachable in
+1) and also in 2) (i.e., must be reachable from both the start BB and
+the end BB of the hot region).
+
+3) Mark BBs which end in edges that exit the hot region; we need to
+instrument these differently.
+
+Assume that there is 1 free register. On SPARC we use %g1, which LLC
+has agreed not to use.  Shift a 1 into it at the beginning. At every
+edge which corresponds to a conditional branch, we shift 0 for not
+taken and 1 for taken into a register. This uniquely numbers the paths
+through the hot region. Silently fail if we need more than 64 bits.
+
+At the end BB we call countPath and increment the counter based on %g1
+and the return address of the countPath call.  We keep track of the
+number of iterations and the number of paths.  We only run this
+version 30 or 40 times.
+
+Find the BBs that total 90% or more of execution, and aggregate them
+together to form our trace. But we do not allow more than 5 paths; if
+we have more than 5 we take the ones that are executed the most.  We
+verify our assumption that we picked a hot back-edge in first-level
+instrumentation, by making sure that the number of times we took an
+exit edge from the hot trace is less than 10% of the number of
+iterations.
+
+LLC has been taught to recognize llvm_first_trigger() calls and NOT
+generate saves and restores of caller-saved registers around these
+calls.
+
+
+Phase behavior
+--------------
+
+We turn off llvm_first_trigger() calls with NOPs, but this would hide
+phase behavior from us (when some funcs/traces stop being hot and
+others become hot.)
+
+We have a SIGALRM timer that counts time for us. Every time we get a
+SIGALRM we look at our priority queue of locations where we have
+removed llvm_first_trigger() calls. Each location is inserted along
+with a time when we will next turn instrumentation back on for that
+call site. If the time has arrived for a particular call site, we pop
+that off the prio. queue and turn instrumentation back on for that
+call site.
+
+
+Generating traces
+-----------------
+
+When we finally generate an optimized trace we first copy the code
+into the trace cache. This leaves us with 3 copies of the code: the
+original code, the instrumented code, and the optimized trace. The
+optimized trace does not have instrumentation. The original code and
+the instrumented code are modified to have a branch to the trace
+cache, where the optimized traces are kept.
+
+We copy the code from the original to the instrumentation version
+by tracing the LLVM-to-Machine code basic block map and then copying
+each machine code basic block we think is in the hot region into the
+trace cache. Then we instrument that code. The process is similar for
+generating the final optimized trace; we copy the same basic blocks
+because we might need to put in fixup code for exit BBs.
+
+LLVM basic blocks are not typically used in the Reoptimizer except
+for the mapping information.
+
+We are restricted to using single instructions to branch between the
+original code, trace, and instrumented code. So we have to keep the
+code copies in memory near the original code (they can't be far enough
+away that a single pc-relative branch would not work.) Malloc() or
+data region space is too far away. this impacts the design of the 
+trace cache.
+
+We use a dummy function that is full of a bunch of for loops which we
+overwrite with trace-cache code. The trace manager keeps track of
+whether or not we have enough space in the trace cache, etc.
+
+The trace insertion routine takes an original start address, a vector
+of machine instructions representing the trace, index of branches and
+their corresponding absolute targets, and index of calls and their
+corresponding absolute targets.
+
+The trace insertion routine is responsible for inserting branches from
+the beginning of the original code to the beginning of the optimized
+trace. This is because at some point the trace cache may run out of
+space and it may have to evict a trace, at which point the branch to
+the trace would also have to be removed. It uses a round-robin
+replacement policy; we have found that this is almost as good as LRU
+and better than random (especially because of problems fitting the new
+trace in.)
+
+We cannot deal with discontiguous trace cache areas.  The trace cache
+is supposed to be cache-line-aligned, but it is not page-aligned.
+
+We generate instrumentation traces and optimized traces into separate
+trace caches. We keep the instrumented code around because you don't
+want to delete a trace when you still might have to return to it
+(i.e., return from a llvm_first_trigger() or countPath() call.)
+
+

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-26-Reoptimizer2.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-26-Reoptimizer2.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-26-Reoptimizer2.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2003-06-26-Reoptimizer2.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,110 @@
+Thu Jun 26 14:43:04 CDT 2003
+
+Information about BinInterface
+------------------------------
+
+Take in a set of instructions with some particular register
+allocation. It allows you to add, modify, or delete some instructions,
+in SSA form (kind of like LLVM's MachineInstrs.) Then re-allocate
+registers. It assumes that the transformations you are doing are safe.
+It does not update the mapping information or the LLVM representation
+for the modified trace (so it would not, for instance, support
+multiple optimization passes; passes have to be aware of and update
+manually the mapping information.)
+
+The way you use it is you take the original code and provide it to
+BinInterface; then you do optimizations to it, then you put it in the
+trace cache.
+
+The BinInterface tries to find live-outs for traces so that it can do
+register allocation on just the trace, and stitch the trace back into
+the original code. It has to preserve the live-ins and live-outs when
+it does its register allocation.  (On exits from the trace we have
+epilogues that copy live-outs back into the right registers, but
+live-ins have to be in the right registers.)
+
+
+Limitations of BinInterface
+---------------------------
+
+It does copy insertions for PHIs, which it infers from the machine
+code. The mapping info inserted by LLC is not sufficient to determine
+the PHIs.
+
+It does not handle integer or floating-point condition codes and it
+does not handle floating-point register allocation.
+
+It is not aggressively able to use lots of registers.
+
+There is a problem with alloca: we cannot find our spill space for
+spilling registers, normally allocated on the stack, if the trace
+follows an alloca(). What might be an acceptable solution would be to
+disable trace generation on functions that have variable-sized
+alloca()s. Variable-sized allocas in the trace would also probably
+screw things up.
+
+Because of the FP and alloca limitations, the BinInterface is
+completely disabled right now.
+
+
+Demo
+----
+
+This is a demo of the Ball & Larus version that does NOT use 2-level
+profiling.
+
+1. Compile program with llvm-gcc.
+2. Run opt -lowerswitch -paths -emitfuncs on the bytecode.
+   -lowerswitch change switch statements to branches
+   -paths       Ball & Larus path-profiling algorithm
+   -emitfuncs   emit the table of functions
+3. Run llc to generate SPARC assembly code for the result of step 2.
+4. Use g++ to link the (instrumented) assembly code.
+
+We use a script to do all this:
+------------------------------------------------------------------------------
+#!/bin/sh
+llvm-gcc $1.c -o $1
+opt -lowerswitch -paths -emitfuncs $1.bc > $1.run.bc
+llc -f $1.run.bc 
+LIBS=$HOME/llvm_sparc/lib/Debug
+GXX=/usr/dcs/software/evaluation/bin/g++
+$GXX -g -L $LIBS $1.run.s -o $1.run.llc \
+$LIBS/tracecache.o \
+$LIBS/mapinfo.o \
+$LIBS/trigger.o \
+$LIBS/profpaths.o \
+$LIBS/bininterface.o \
+$LIBS/support.o \
+$LIBS/vmcore.o \
+$LIBS/transformutils.o \
+$LIBS/bcreader.o \
+-lscalaropts -lscalaropts -lanalysis \
+-lmalloc -lcpc -lm -ldl
+------------------------------------------------------------------------------
+
+5. Run the resulting binary.  You will see output from BinInterface
+(described below) intermixed with the output from the program.
+
+
+Output from BinInterface
+------------------------
+
+BinInterface's debugging code prints out the following stuff in order:
+
+1. Initial code provided to BinInterface with original register
+allocation.
+
+2. Section 0 is the trace prolog, consisting mainly of live-ins and
+register saves which will be restored in epilogs.
+
+3. Section 1 is the trace itself, in SSA form used by BinInterface,
+along with the PHIs that are inserted.
+PHIs are followed by the copies that implement them.
+Each branch (i.e., out of the trace) is annotated with the
+section number that represents the epilog it branches to.
+
+4. All the other sections starting with Section 2 are trace epilogs.
+Every branch from the trace has to go to some epilog.
+
+5. After the last section is the register allocation output.

Added: www-releases/trunk/2.9/docs/HistoricalNotes/2007-OriginalClangReadme.txt
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HistoricalNotes/2007-OriginalClangReadme.txt?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HistoricalNotes/2007-OriginalClangReadme.txt (added)
+++ www-releases/trunk/2.9/docs/HistoricalNotes/2007-OriginalClangReadme.txt Thu Apr  7 00:46:10 2011
@@ -0,0 +1,178 @@
+//===----------------------------------------------------------------------===//
+// C Language Family Front-end
+//===----------------------------------------------------------------------===//
+                                                             Chris Lattner
+
+I. Introduction:
+ 
+ clang: noun
+    1. A loud, resonant, metallic sound.
+    2. The strident call of a crane or goose.
+    3. C-language family front-end toolkit.
+
+ The world needs better compiler tools, tools which are built as libraries. This
+ design point allows reuse of the tools in new and novel ways. However, building
+ the tools as libraries isn't enough: they must have clean APIs, be as
+ decoupled from each other as possible, and be easy to modify/extend.  This
+ requires clean layering, decent design, and avoiding tying the libraries to a
+ specific use.  Oh yeah, did I mention that we want the resultant libraries to
+ be as fast as possible? :)
+
+ This front-end is built as a component of the LLVM toolkit that can be used
+ with the LLVM backend or independently of it.  In this spirit, the API has been
+ carefully designed as the following components:
+ 
+   libsupport  - Basic support library, reused from LLVM.
+
+   libsystem   - System abstraction library, reused from LLVM.
+   
+   libbasic    - Diagnostics, SourceLocations, SourceBuffer abstraction,
+                 file system caching for input source files.  This depends on
+                 libsupport and libsystem.
+
+   libast      - Provides classes to represent the C AST, the C type system,
+                 builtin functions, and various helpers for analyzing and
+                 manipulating the AST (visitors, pretty printers, etc).  This
+                 library depends on libbasic.
+
+
+   liblex      - C/C++/ObjC lexing and preprocessing, identifier hash table,
+                 pragma handling, tokens, and macros.  This depends on libbasic.
+
+   libparse    - C (for now) parsing and local semantic analysis. This library
+                 invokes coarse-grained 'Actions' provided by the client to do
+                 stuff (e.g. libsema builds ASTs).  This depends on liblex.
+
+   libsema     - Provides a set of parser actions to build a standardized AST
+                 for programs.  AST's are 'streamed' out a top-level declaration
+                 at a time, allowing clients to use decl-at-a-time processing,
+                 build up entire translation units, or even build 'whole
+                 program' ASTs depending on how they use the APIs.  This depends
+                 on libast and libparse.
+
+   librewrite  - Fast, scalable rewriting of source code.  This operates on
+                 the raw syntactic text of source code, allowing a client
+                 to insert and delete text in very large source files using
+                 the same source location information embedded in ASTs.  This
+                 is intended to be a low-level API that is useful for
+                 higher-level clients and libraries such as code refactoring.
+
+   libanalysis - Source-level dataflow analysis useful for performing analyses
+                 such as computing live variables.  It also includes a
+                 path-sensitive "graph-reachability" engine for writing
+                 analyses that reason about different possible paths of
+                 execution through source code.  This is currently being
+                 employed to write a set of checks for finding bugs in software.
+
+   libcodegen  - Lower the AST to LLVM IR for optimization & codegen.  Depends
+                 on libast.
+                 
+   clang       - An example driver, client of the libraries at various levels.
+                 This depends on all these libraries, and on LLVM VMCore.
+
+ This front-end has been intentionally built as a DAG of libraries, making it
+ easy to  reuse individual parts or replace pieces if desired. For example, to
+ build a preprocessor, you take the Basic and Lexer libraries. If you want an
+ indexer, you take those plus the Parser library and provide some actions for
+ indexing.  If you want a refactoring, static analysis, or source-to-source
+ compiler tool, it makes sense to take those plus the AST building and semantic
+ analyzer library.  Finally, if you want to use this with the LLVM backend,
+ you'd take these components plus the AST to LLVM lowering code.
+ 
+ In the future I hope this toolkit will grow to include new and interesting
+ components, including a C++ front-end, ObjC support, and a whole lot of other
+ things.
+
+ Finally, it should be pointed out that the goal here is to build something that
+ is high-quality and industrial-strength: all the obnoxious features of the C
+ family must be correctly supported (trigraphs, preprocessor arcana, K&R-style
+ prototypes, GCC/MS extensions, etc).  It cannot be used if it is not 'real'.
+
+
+II. Usage of clang driver:
+
+ * Basic Command-Line Options:
+   - Help: clang --help
+   - Standard GCC options accepted: -E, -I*, -i*, -pedantic, -std=c90, etc.
+   - To make diagnostics more gcc-like: -fno-caret-diagnostics -fno-show-column
+   - Enable metric printing: -stats
+
+ * -fsyntax-only is currently the default mode.
+
+ * -E mode works the same way as GCC.
+
+ * -Eonly mode does all preprocessing, but does not print the output,
+     useful for timing the preprocessor.
+ 
+ * -fsyntax-only is currently partially implemented, lacking some
+     semantic analysis (some errors and warnings are not produced).
+
+ * -parse-noop parses code without building an AST.  This is useful
+     for timing the cost of the parser without including AST building
+     time.
+ 
+ * -parse-ast builds ASTs, but doesn't print them.  This is most
+     useful for timing AST building vs -parse-noop.
+ 
+ * -parse-ast-print pretty prints most expression and statements nodes.
+
+ * -parse-ast-check checks that diagnostic messages that are expected
+     are reported and that those which are reported are expected.
+
+ * -dump-cfg builds ASTs and then CFGs.  CFGs are then pretty-printed.
+
+ * -view-cfg builds ASTs and then CFGs.  CFGs are then visualized by
+     invoking Graphviz.
+
+     For more information on getting Graphviz to work with clang/LLVM,
+     see: http://llvm.org/docs/ProgrammersManual.html#ViewGraph
+
+
+III. Current advantages over GCC:
+
+ * Column numbers are fully tracked (no 256 col limit, no GCC-style pruning).
+ * All diagnostics have column numbers, includes 'caret diagnostics', and they
+   highlight regions of interesting code (e.g. the LHS and RHS of a binop).
+ * Full diagnostic customization by client (can format diagnostics however they
+   like, e.g. in an IDE or refactoring tool) through DiagnosticClient interface.
+ * Built as a framework, can be reused by multiple tools.
+ * All languages supported linked into same library (no cc1,cc1obj, ...).
+ * mmap's code in read-only, does not dirty the pages like GCC (mem footprint).
+ * LLVM License, can be linked into non-GPL projects.
+ * Full diagnostic control, per diagnostic.  Diagnostics are identified by ID.
+ * Significantly faster than GCC at semantic analysis, parsing, preprocessing
+   and lexing.
+ * Defers exposing platform-specific stuff to as late as possible, tracks use of
+   platform-specific features (e.g. #ifdef PPC) to allow 'portable bytecodes'.
+ * The lexer doesn't rely on the "lexer hack": it has no notion of scope and
+   does not categorize identifiers as types or variables -- this is up to the
+   parser to decide.
+
+Potential Future Features:
+
+ * Fine grained diag control within the source (#pragma enable/disable warning).
+ * Better token tracking within macros?  (Token came from this line, which is
+   a macro argument instantiated here, recursively instantiated here).
+ * Fast #import with a module system.
+ * Dependency tracking: change to header file doesn't recompile every function
+   that texually depends on it: recompile only those functions that need it.
+   This is aka 'incremental parsing'.
+
+
+IV. Missing Functionality / Improvements
+
+Lexer:
+ * Source character mapping.  GCC supports ASCII and UTF-8.
+   See GCC options: -ftarget-charset and -ftarget-wide-charset.
+ * Universal character support.  Experimental in GCC, enabled with
+   -fextended-identifiers.
+ * -fpreprocessed mode.
+
+Preprocessor:
+ * #assert/#unassert
+ * MSExtension: "L#param" stringizes to a wide string literal.
+ * Add support for -M*
+
+Traditional Preprocessor:
+ * Currently, we have none. :)
+

Added: www-releases/trunk/2.9/docs/HowToReleaseLLVM.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HowToReleaseLLVM.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HowToReleaseLLVM.html (added)
+++ www-releases/trunk/2.9/docs/HowToReleaseLLVM.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,626 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>How To Release LLVM To The Public</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">How To Release LLVM To The Public</div>
+<ol>
+  <li><a href="#introduction">Introduction</a></li>
+  <li><a href="#criteria">Qualification Criteria</a></li>
+  <li><a href="#introduction">Release Timeline</a></li>
+  <li><a href="#process">Release Process</a></li>
+</ol>
+<div class="doc_author">
+  <p>Written by <a href="mailto:tonic at nondot.org">Tanya Lattner</a>,
+  <a href="mailto:rspencer at x10sys.com">Reid Spencer</a>,
+  <a href="mailto:criswell at cs.uiuc.edu">John Criswell</a>, &
+  <a href="mailto:wendling at apple.com">Bill Wendling</a>
+  </p>
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="introduction">Introduction</a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>This document contains information about successfully releasing LLVM —
+   including subprojects: e.g., <tt>llvm-gcc</tt> and <tt>clang</tt> — to
+   the public. It is the Release Manager's responsibility to ensure that a high
+   quality build of LLVM is released.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="process">Release Timeline</a></div>
+<!-- *********************************************************************** -->
+<div class="doc_text">
+
+<p>LLVM is released on a time based schedule — roughly every 6 months. We
+   do not normally have dot releases because of the nature of LLVM's incremental
+   development philosophy. That said, the only thing preventing dot releases for
+   critical bug fixes from happening is a lack of resources — testers,
+   machines, time, etc. And, because of the high quality we desire for LLVM
+   releases, we cannot allow for a truncated form of release qualification.</p>
+
+<p>The release process is roughly as follows:</p>
+
+<ul>
+  <li><p>Set code freeze and branch creation date for 6 months after last code
+      freeze date. Announce release schedule to the LLVM community and update
+      the website.</p></li>
+
+  <li><p>Create release branch and begin release process.</p></li>
+
+  <li><p>Send out release candidate sources for first round of testing. Testing
+      lasts 7-10 days. During the first round of testing, any regressions found
+      should be fixed. Patches are merged from mainline into the release
+      branch. Also, all features need to be completed during this time. Any
+      features not completed at the end of the first round of testing will be
+      removed or disabled for the release.</p></li>
+
+  <li><p>Generate and send out the second release candidate sources. Only
+      <em>critial</em> bugs found during this testing phase will be fixed. Any
+      bugs introduced by merged patches will be fixed. If so a third round of
+      testing is needed.</p></li>
+
+  <li><p>The release notes are updated.</p></li>
+
+  <li><p>Finally, release!</p></li>
+</ul>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="process">Release Process</a></div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<ol>
+  <li><a href="#release-admin">Release Administrative Tasks</a></li>
+  <ol>
+    <li><a href="#branch">Create Release Branch</a></li>
+    <li><a href="#verchanges">Update Version Numbers</a></li>
+  </ol>
+  <li><a href="#release-build">Building the Release</a></li>
+  <ol>
+    <li><a href="#dist">Build the LLVM Source Distributions</a></li>
+    <li><a href="#build">Build LLVM</a></li>
+    <li><a href="#llvmgccbin">Build the LLVM-GCC Binary Distribution</a></li>
+    <li><a href="#clangbin">Build the Clang Binary Distribution</a></li>
+    <li><a href="#target-build">Target Specific Build Details</a></li>
+  </ol>
+  <li><a href="#release-qualify">Release Qualification Criteria</a></li>
+  <ol>
+    <li><a href="#llvm-qualify">Qualify LLVM</a></li>
+    <li><a href="#llvmgcc-qualify">Qualify LLVM-GCC</a></li>
+    <li><a href="#clang-qualify">Qualify Clang</a></li>
+    <li><a href="#targets">Specific Target Qualification Details</a></li>
+  </ol>
+
+  <li><a href="#commTest">Community Testing</a></li>    
+  <li><a href="#release-patch">Release Patch Rules</a></li>
+  <li><a href="#release-final">Release final tasks</a></li>
+
+  <ol>
+    <li><a href="#updocs">Update Documentation</a></li>
+    <li><a href="#tag">Tag the LLVM Final Release</a></li>
+    <li><a href="#updemo">Update the LLVM Demo Page</a></li>
+    <li><a href="#webupdates">Update the LLVM Website</a></li>
+    <li><a href="#announce">Announce the Release</a></li>
+  </ol>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="release-admin">Release Administrative Tasks</a></div>
+
+<div class="doc_text">
+
+<p>This section describes a few administrative tasks that need to be done for
+   the release process to begin. Specifically, it involves:</p>
+
+<ul>
+  <li>Creating the release branch,</li>
+  <li>Setting version numbers, and</li>
+  <li>Tagging release candidates for the release team to begin testing</li>
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="branch">Create Release Branch</a></div>
+
+<div class="doc_text">
+
+<p>Branch the Subversion trunk using the following procedure:</p>
+
+<ol>
+  <li><p>Remind developers that the release branching is imminent and to refrain
+      from committing patches that might break the build. E.g., new features,
+      large patches for works in progress, an overhaul of the type system, an
+      exciting new TableGen feature, etc.</p></li>
+
+  <li><p>Verify that the current Subversion trunk is in decent shape by
+      examining nightly tester and buildbot results.</p></li>
+
+  <li><p>Create the release branch for <tt>llvm</tt>, <tt>llvm-gcc-4.2</tt>,
+      <tt>clang</tt>, and the <tt>test-suite</tt> from the last known good
+      revision. The branch's name is <tt>release_XY</tt>, where <tt>X</tt> is
+      the major and <tt>Y</tt> the minor release numbers. The branches should be
+      created using the following commands:</p>
+  
+<div class="doc_code">
+<pre>
+$ svn copy https://llvm.org/svn/llvm-project/llvm/trunk \
+           https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XY</i>
+
+$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/trunk \
+           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_<i>XY</i>
+
+$ svn copy https://llvm.org/svn/llvm-project/test-suite/trunk \
+           https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XY</i>
+
+$ svn copy https://llvm.org/svn/llvm-project/cfe/trunk \
+           https://llvm.org/svn/llvm-project/cfe/branches/release_<i>XY</i>
+</pre>
+</div></li>
+
+  <li><p>Advise developers that they may now check their patches into the
+      Subversion tree again.</p></li>
+
+  <li><p>The Release Manager should switch to the release branch, because all
+      changes to the release will now be done in the branch. The easiest way to
+      do this is to grab a working copy using the following commands:</p>
+
+<div class="doc_code">
+<pre>
+$ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XY</i> llvm-<i>X.Y</i>
+
+$ svn co https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_<i>XY</i> llvm-gcc-4.2-<i>X.Y</i>
+
+$ svn co https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XY</i> test-suite-<i>X.Y</i>
+
+$ svn co https://llvm.org/svn/llvm-project/cfe/branches/release_<i>XY</i> clang-<i>X.Y</i>
+</pre>
+</div></li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="verchanges">Update LLVM Version</a></div>
+
+<div class="doc_text">
+
+<p>After creating the LLVM release branch, update the release branches'
+   <tt>autoconf</tt> and <tt>configure.ac</tt> versions from '<tt>X.Ysvn</tt>'
+   to '<tt>X.Y</tt>'. Update it on mainline as well to be the next version
+   ('<tt>X.Y+1svn</tt>'). Regenerate the configure scripts for both
+   <tt>llvm</tt> and the <tt>test-suite</tt>.</p>
+
+<p>In addition, the version numbers of all the Bugzilla components must be
+   updated for the next release.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="dist">Build the LLVM Release Candidates</a></div>
+
+<div class="doc_text">
+
+<p>Create release candidates for <tt>llvm</tt>, <tt>llvm-gcc</tt>,
+   <tt>clang</tt>, and the LLVM <tt>test-suite</tt> by tagging the branch with
+   the respective release candidate number. For instance, to create <b>Release
+   Candidate 1</b> you would issue the following commands:</p>
+
+<div class="doc_code">
+<pre>
+$ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XY</i>
+$ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_<i>XY</i> \
+           https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XY</i>/rc1
+
+$ svn mkdir https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_<i>XY</i>
+$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_<i>XY</i> \
+           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_<i>XY</i>/rc1
+
+$ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XY</i>
+$ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_<i>XY</i> \
+           https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XY</i>/rc1
+
+$ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_<i>XY</i>
+$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_<i>XY</i> \
+           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_<i>XY</i>/rc1
+</pre>
+</div>
+
+<p>Similarly, <b>Release Candidate 2</b> would be named <tt>RC2</tt> and so
+   on. This keeps a permanent copy of the release candidate around for people to
+   export and build as they wish. The final released sources will be tagged in
+   the <tt>RELEASE_<i>XY</i></tt> directory as <tt>Final</tt>
+   (c.f. <a href="#tag">Tag the LLVM Final Release</a>).</p>
+
+<p>The Release Manager may supply pre-packaged source tarballs for users. This
+   can be done with the following commands:</p>
+
+<div class="doc_code">
+<pre>
+$ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XY</i>/rc1 llvm-<i>X.Y</i>rc1
+$ svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_<i>XY</i>/rc1 llvm-gcc4.2-<i>X.Y</i>rc1
+$ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XY</i>/rc1 llvm-test-<i>X.Y</i>rc1
+$ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_<i>XY</i>/rc1 clang-<i>X.Y</i>rc1
+
+$ tar -czvf - llvm-<i>X.Y</i>rc1        | gzip > llvm-<i>X.Y</i>rc1.src.tar.gz
+$ tar -czvf - llvm-test-<i>X.Y</i>rc1   | gzip > llvm-test-<i>X.Y</i>rc1.src.tar.gz
+$ tar -czvf - llvm-gcc4.2-<i>X.Y</i>rc1 | gzip > llvm-gcc-4.2-<i>X.Y</i>rc1.src.tar.gz
+$ tar -czvf - clang-<i>X.Y</i>rc1       | gzip > clang-<i>X.Y</i>rc1.src.tar.gz
+</pre>
+</div>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="release-build">Building the Release</a></div>
+
+<div class="doc_text">
+
+<p>The builds of <tt>llvm</tt>, <tt>llvm-gcc</tt>, and <tt>clang</tt>
+   <em>must</em> be free of errors and warnings in Debug, Release+Asserts, and
+   Release builds. If all builds are clean, then the release passes Build
+   Qualification.</p>
+
+<p>The <tt>make</tt> options for building the different modes:</p>
+
+<table>
+  <tr><th>Mode</th><th>Options</th></tr>
+  <tr align="left"><td>Debug</td><td><tt>ENABLE_OPTIMIZED=0</tt></td></tr>
+  <tr align="left"><td>Release+Asserts</td><td><tt>ENABLE_OPTIMIZED=1</tt></td></tr>
+  <tr align="left"><td>Release</td><td><tt>ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1</tt></td></tr>
+</table>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="build">Build LLVM</a></div>
+
+<div class="doc_text">
+
+<p>Build <tt>Debug</tt>, <tt>Release+Asserts</tt>, and <tt>Release</tt> versions
+   of <tt>llvm</tt> on all supported platforms. Directions to build
+   <tt>llvm</tt> are
+   <a href="http://llvm.org/docs/GettingStarted.html#quickstart">here</a>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="llvmgccbin">Build the LLVM GCC Binary Distribution</a></div>
+
+<div class="doc_text">
+
+<p>Creating the <tt>llvm-gcc</tt> binary distribution (Release/Optimized)
+   requires performing the following steps for each supported platform:</p>
+
+<ol>
+  <li><p>Build the <tt>llvm-gcc</tt> front-end by following the directions in
+      the <tt>README.LLVM</tt> file. The front-end must be compiled with C, C++,
+      Objective-C (Mac only), Objective-C++ (Mac only), and Fortran
+      support.</p></li>
+
+  <li><p>Boostrapping must be enabled.</p></li>
+
+  <li><p>Be sure to build with <tt>LLVM_VERSION_INFO=X.Y</tt>, where <tt>X</tt>
+      is the major and <tt>Y</tt> is the minor release numbers.</p></li>
+
+  <li><p>Copy the installation directory to a directory named for the specific
+      target. For example on Red Hat Enterprise Linux, the directory would be
+      named <tt>llvm-gcc4.2-2.6-x86-linux-RHEL4</tt>. Archive and compress the
+      new directory.</p></li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="clangbin">Build Clang Binary Distribution</a></div>
+
+<div class="doc_text">
+
+<p>Creating the <tt>clang</tt> binary distribution
+   (Debug/Release+Asserts/Release) requires performing the following steps for
+   each supported platform:</p>
+
+<ol>
+  <li>Build clang according to the directions
+      <a href="http://clang.llvm.org/get_started.html">here</a>.</li>
+
+  <li>Build both a debug and release version of clang. The binary will be the
+      release build.</lI>
+
+  <li>Package <tt>clang</tt> (details to follow).</li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="target-build">Target Specific Build Details</a></div>
+
+<div class="doc_text">
+
+<p>The table below specifies which compilers are used for each Arch/OS
+   combination when qualifying the build of <tt>llvm</tt>, <tt>llvm-gcc</tt>,
+   and <tt>clang</tt>.</p>
+
+<table>
+  <tr><th>Architecture</th><th>OS</th><th>compiler</th></tr>
+  <tr><td>x86-32</td><td>Mac OS 10.5</td><td>gcc 4.0.1</td></tr>
+  <tr><td>x86-32</td><td>Linux</td><td>gcc 4.2.X, gcc 4.3.X</td></tr>
+  <tr><td>x86-32</td><td>FreeBSD</td><td>gcc 4.2.X</td></tr>
+  <tr><td>x86-32</td><td>mingw</td><td>gcc 3.4.5</td></tr>
+  <tr><td>x86-64</td><td>Mac OS 10.5</td><td>gcc 4.0.1</td></tr>
+  <tr><td>x86-64</td><td>Linux</td><td>gcc 4.2.X, gcc 4.3.X</td></tr>
+  <tr><td>x86-64</td><td>FreeBSD</td><td>gcc 4.2.X</td></tr>
+</table> 
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="release-qualify">
+Building the Release</a></div>
+
+<div class="doc_text">
+
+<p>A release is qualified when it has no regressions from the previous release
+   (or baseline). Regressions are related to correctness first and performance
+   second. (We may tolerate some minor performance regressions if they are
+   deemed necessary for the general quality of the compiler.)</p>
+
+<p><b>Regressions are new failures in the set of tests that are used to qualify
+   each product and only include things on the list. Every release will have
+   some bugs in it. It is the reality of developing a complex piece of
+   software. We need a very concrete and definitive release criteria that
+   ensures we have monotonically improving quality on some metric. The metric we
+   use is described below. This doesn't mean that we don't care about other
+   criteria, but these are the criteria which we found to be most important and
+   which must be satisfied before a release can go out</b></p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="llvm-qualify">Qualify LLVM</a></div>
+
+<div class="doc_text">
+
+<p>LLVM is qualified when it has a clean test run without a front-end. And it
+   has no regressions when using either <tt>llvm-gcc</tt> or <tt>clang</tt> with
+   the <tt>test-suite</tt> from the previous release.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="llvmgcc-qualify">Qualify LLVM-GCC</a></div>
+
+<div class="doc_text">
+
+<p><tt>LLVM-GCC</tt> is qualified when front-end specific tests in the
+   <tt>llvm</tt> regression test suite all pass and there are no regressions in
+   the <tt>test-suite</tt>.</p>
+
+<p>We do not use the GCC DejaGNU test suite as release criteria.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="clang-qualify">Qualify Clang</a></div>
+
+<div class="doc_text">
+
+<p><tt>Clang</tt> is qualified when front-end specific tests in the 
+   <tt>llvm</tt> dejagnu test suite all pass, clang's own test suite passes
+   cleanly, and there are no regressions in the <tt>test-suite</tt>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="targets">Specific Target 
+Qualification Details</a></div>
+
+<div class="doc_text">
+
+<table>
+  <tr><th>Architecture</th><th>OS</th><th>llvm-gcc baseline</th><th>clang baseline</th><th>tests</th></tr>
+  <tr><td>x86-32</td><td>Linux</td><td>last release</td><td>last release</td><td>llvm dejagnu, clang tests, test-suite (including spec)</td></tr>
+  <tr><td>x86-32</td><td>FreeBSD</td><td>none</td><td>last release</td><td>llvm dejagnu, clang tests, test-suite</td></tr>
+  <tr><td>x86-32</td><td>mingw</td><td>last release</td><td>none</td><td>QT</td></tr>
+  <tr><td>x86-64</td><td>Mac OS 10.X</td><td>last release</td><td>last release</td><td>llvm dejagnu, clang tests, test-suite (including spec)</td></tr>
+  <tr><td>x86-64</td><td>Linux</td><td>last release</td><td>last release</td><td>llvm dejagnu, clang tests, test-suite (including spec)</td></tr>
+  <tr><td>x86-64</td><td>FreeBSD</td><td>none</td><td>last release</td><td>llvm dejagnu, clang tests, test-suite</td></tr>
+</table>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="commTest">Community Testing</a></div>
+<div class="doc_text">
+
+<p>Once all testing has been completed and appropriate bugs filed, the release
+   candidate tarballs are put on the website and the LLVM community is
+   notified. Ask that all LLVM developers test the release in 2 ways:</p>
+
+<ol>
+  <li>Download <tt>llvm-<i>X.Y</i></tt>, <tt>llvm-test-<i>X.Y</i></tt>, and the
+      appropriate <tt>llvm-gcc</tt> and/or <tt>clang</tt> binary. Build
+      LLVM. Run <tt>make check</tt> and the full LLVM test suite (<tt>make
+      TEST=nightly report</tt>).</li>
+
+  <li>Download <tt>llvm-<i>X.Y</i></tt>, <tt>llvm-test-<i>X.Y</i></tt>, and the
+      <tt>llvm-gcc</tt> and/or <tt>clang</tt> source. Compile everything. Run
+      <tt>make check</tt> and the full LLVM test suite (<tt>make TEST=nightly
+      report</tt>).</li>
+</ol>
+
+<p>Ask LLVM developers to submit the test suite report and <tt>make check</tt>
+   results to the list. Verify that there are no regressions from the previous
+   release. The results are not used to qualify a release, but to spot other
+   potential problems. For unsupported targets, verify that <tt>make check</tt>
+   is at least clean.</p>
+  
+<p>During the first round of testing, all regressions must be fixed before the
+   second release candidate is tagged.</p>
+  
+<p>If this is the second round of testing, the testing is only to ensure that
+   bug fixes previously merged in have not created new major problems. <i>This
+   is not the time to solve additional and unrelated bugs!</i> If no patches are
+   merged in, the release is determined to be ready and the release manager may
+   move onto the next stage.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="release-patch">Release Patch Rules</a></div>
+
+<div class="doc_text">
+
+<p>Below are the rules regarding patching the release branch:</p>
+
+<ol>
+  <li><p>Patches applied to the release branch may only be applied by the
+      release manager.</p></li>
+
+  <li><p>During the first round of testing, patches that fix regressions or that
+      are small and relatively risk free (verified by the appropriate code
+      owner) are applied to the branch. Code owners are asked to be very
+      conservative in approving patches for the branch. We reserve the right to
+      reject any patch that does not fix a regression as previously
+      defined.</p></li>
+
+  <li><p>During the remaining rounds of testing, only patches that fix critical
+      regressions may be applied.</p></li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="release-final">Release Final Tasks 
+</a></div>
+
+<div class="doc_text">
+
+<p>The final stages of the release process involves tagging the "final" release
+   branch, updating documentation that refers to the release, and updating the
+   demo page.</p>
+
+</div>
+
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="updocs">Update Documentation</a></div>
+
+<div class="doc_text">
+
+<p>Review the documentation and ensure that it is up to date. The "Release
+   Notes" must be updated to reflect new features, bug fixes, new known issues,
+   and changes in the list of supported platforms. The "Getting Started Guide"
+   should be updated to reflect the new release version number tag avaiable from
+   Subversion and changes in basic system requirements. Merge both changes from
+   mainline into the release branch.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="tag">Tag the LLVM Final Release</a></div>
+
+<div class="doc_text">
+
+<p>Tag the final release sources using the following procedure:</p>
+
+<div class="doc_code">
+<pre>
+$ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \
+           https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_<i>XY</i>/Final
+
+$ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY \
+           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_<i>XY</i>/Final
+
+$ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \
+           https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_<i>XY</i>/Final
+
+$ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
+           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_<i>XY</i>/Final
+</pre>
+</div>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="updemo">Update the LLVM Demo Page</a></div>
+
+<div class="doc_text">
+
+<p>The LLVM demo page must be updated to use the new release. This consists of
+   using the new <tt>llvm-gcc</tt> binary and building LLVM.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="webupdates">Update the LLVM Website</a></div>
+
+<div class="doc_text">
+
+<p>The website must be updated before the release announcement is sent out. Here
+   is what to do:</p>
+
+<ol>
+  <li>Check out the <tt>www</tt> module from Subversion.</li>
+
+  <li>Create a new subdirectory <tt>X.Y</tt> in the releases directory.</li>
+
+  <li>Commit the <tt>llvm</tt>, <tt>test-suite</tt>, <tt>llvm-gcc</tt> source,
+      <tt>clang source</tt>, <tt>clang binaries</tt>, and <tt>llvm-gcc</tt>
+      binaries in this new directory.</li>
+
+  <li>Copy and commit the <tt>llvm/docs</tt> and <tt>LICENSE.txt</tt> files
+      into this new directory. The docs should be built with
+      <tt>BUILD_FOR_WEBSITE=1</tt>.</li>
+
+  <li>Commit the <tt>index.html</tt> to the <tt>release/X.Y</tt> directory to
+      redirect (use from previous release.</li>
+
+  <li>Update the <tt>releases/download.html</tt> file with the new release.</li>
+
+  <li>Update the <tt>releases/index.html</tt> with the new release and link to
+      release documentation.</li>
+
+  <li>Finally, update the main page (<tt>index.html</tt> and sidebar) to point
+      to the new release and release announcement. Make sure this all gets
+      committed back into Subversion.</li>
+</ol>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"><a name="announce">Announce the Release</a></div>
+
+<div class="doc_text">
+
+<p>Have Chris send out the release announcement when everything is finished.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+  <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a>
+  <br>
+  Last modified: $Date: 2011-03-06 23:37:12 -0800 (Sun, 06 Mar 2011) $
+</address>
+</body>
+</html>

Added: www-releases/trunk/2.9/docs/HowToSubmitABug.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/2.9/docs/HowToSubmitABug.html?rev=129058&view=auto
==============================================================================
--- www-releases/trunk/2.9/docs/HowToSubmitABug.html (added)
+++ www-releases/trunk/2.9/docs/HowToSubmitABug.html Thu Apr  7 00:46:10 2011
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+                      "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>How to submit an LLVM bug report</title>
+  <link rel="stylesheet" href="llvm.css" type="text/css">
+</head>
+<body>
+
+<div class="doc_title">
+  How to submit an LLVM bug report
+</div>
+
+<table class="layout" style="width: 90%" >
+<tr class="layout">
+  <td class="left">
+<ol>
+  <li><a href="#introduction">Introduction - Got bugs?</a></li>
+  <li><a href="#crashers">Crashing Bugs</a>
+    <ul>
+    <li><a href="#front-end">Front-end bugs</a>
+    <li><a href="#ct_optimizer">Compile-time optimization bugs</a>
+    <li><a href="#ct_codegen">Code generator bugs</a>
+    </ul></li>
+  <li><a href="#miscompilations">Miscompilations</a></li>
+  <li><a href="#codegen">Incorrect code generation (JIT and LLC)</a></li>
+</ol>
+<div class="doc_author">
+  <p>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a> and
+                <a href="http://misha.brukman.net">Misha Brukman</a></p>
+</div>
+</td>
+<td class="right">
+  <img src="img/Debugging.gif" alt="Debugging" width="444" height="314">
+</td>
+</tr>
+</table>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="introduction">Introduction - Got bugs?</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>If you're working with LLVM and run into a bug, we definitely want to know
+about it.  This document describes what you can do to increase the odds of
+getting it fixed quickly.</p>
+
+<p>Basically you have to do two things at a minimum.  First, decide whether the
+bug <a href="#crashers">crashes the compiler</a> (or an LLVM pass), or if the
+compiler is <a href="#miscompilations">miscompiling</a> the program (i.e., the
+compiler successfully produces an executable, but it doesn't run right).  Based
+on
+what type of bug it is, follow the instructions in the linked section to narrow
+down the bug so that the person who fixes it will be able to find the problem
+more easily.</p>
+
+<p>Once you have a reduced test-case, go to <a
+href="http://llvm.org/bugs/enter_bug.cgi">the LLVM Bug Tracking
+System</a> and fill out the form with the necessary details (note that you don't
+need to pick a category, just use the "new-bugs" category if you're not sure).
+The bug description should contain the following
+information:</p>
+
+<ul>
+  <li>All information necessary to reproduce the problem.</li>
+  <li>The reduced test-case that triggers the bug.</li>
+  <li>The location where you obtained LLVM (if not from our Subversion
+  repository).</li>
+</ul>
+
+<p>Thanks for helping us make LLVM better!</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="crashers">Crashing Bugs</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>More often than not, bugs in the compiler cause it to crash—often due
+to an assertion failure of some sort. The most important
+piece of the puzzle is to figure out if it is crashing in the GCC front-end
+or if it is one of the LLVM libraries (e.g. the optimizer or code generator)
+that has problems.</p>
+
+<p>To figure out which component is crashing (the front-end,
+optimizer or code generator), run the
+<tt><b>llvm-gcc</b></tt> command line as you were when the crash occurred, but
+with the following extra command line options:</p>
+
+<ul>
+  <li><tt><b>-O0 -emit-llvm</b></tt>: If <tt>llvm-gcc</tt> still crashes when
+  passed these options (which disable the optimizer and code generator), then
+  the crash is in the front-end.  Jump ahead to the section on <a
+  href="#front-end">front-end bugs</a>.</li>
+
+  <li><tt><b>-emit-llvm</b></tt>: If <tt>llvm-gcc</tt> crashes with this option
+  (which disables the code generator), you found an optimizer bug.  Jump ahead
+  to <a href="#ct_optimizer"> compile-time optimization bugs</a>.</li>
+
+  <li>Otherwise, you have a code generator crash.  Jump ahead to <a
+  href="#ct_codegen">code generator bugs</a>.</li>
+
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="front-end">Front-end bugs</a>
+</div>
+
+<div class="doc_text">
+
+<p>If the problem is in the front-end, you should re-run the same
+<tt>llvm-gcc</tt> command that resulted in the crash, but add the
+<tt>-save-temps</tt> option.  The compiler will crash again, but it will leave
+behind a <tt><i>foo</i>.i</tt> file (containing preprocessed C source code) and
+possibly <tt><i>foo</i>.s</tt> for each
+compiled <tt><i>foo</i>.c</tt> file. Send us the <tt><i>foo</i>.i</tt> file,
+along with the options you passed to llvm-gcc, and a brief description of the
+error it caused.</p>
+
+<p>The <a href="http://delta.tigris.org/">delta</a> tool helps to reduce the
+preprocessed file down to the smallest amount of code that still replicates the
+problem. You're encouraged to use delta to reduce the code to make the
+developers' lives easier. <a
+href="http://gcc.gnu.org/wiki/A_guide_to_testcase_reduction">This website</a>
+has instructions on the best way to use delta.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="ct_optimizer">Compile-time optimization bugs</a>
+</div>
+
+<div class="doc_text">
+
+<p>If you find that a bug crashes in the optimizer, compile your test-case to a
+<tt>.bc</tt> file by passing "<tt><b>-emit-llvm -O0 -c -o foo.bc</b></tt>".
+Then run:</p>
+
+<div class="doc_code">
+<p><tt><b>opt</b> -std-compile-opts -debug-pass=Arguments foo.bc
+    -disable-output</tt></p>
+</div>
+
+<p>This command should do two things: it should print out a list of passes, and
+then it should crash in the same was as llvm-gcc.  If it doesn't crash, please
+follow the instructions for a <a href="#front-end">front-end bug</a>.</p>
+
+<p>If this does crash, then you should be able to debug this with the following
+bugpoint command:</p>
+
+<div class="doc_code">
+<p><tt><b>bugpoint</b> foo.bc <list of passes printed by 
+<b>opt</b>></tt></p>
+</div>
+
+<p>Please run this, then file a bug with the instructions and reduced .bc files
+that bugpoint emits.  If something goes wrong with bugpoint, please submit the
+"foo.bc" file and the list of passes printed by <b>opt</b>.</p>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="ct_codegen">Code generator bugs</a>
+</div>
+
+<div class="doc_text">
+
+<p>If you find a bug that crashes llvm-gcc in the code generator, compile your
+source file to a .bc file by passing "<tt><b>-emit-llvm -c -o foo.bc</b></tt>"
+to llvm-gcc (in addition to the options you already pass).  Once your have
+foo.bc, one of the following commands should fail:</p>
+
+<ol>
+<li><tt><b>llc</b> foo.bc</tt></li>
+<li><tt><b>llc</b> foo.bc -relocation-model=pic</tt></li>
+<li><tt><b>llc</b> foo.bc -relocation-model=static</tt></li>
+</ol>
+
+<p>If none of these crash, please follow the instructions for a
+<a href="#front-end">front-end bug</a>.  If one of these do crash, you should
+be able to reduce this with one of the following bugpoint command lines (use
+the one corresponding to the command above that failed):</p>
+
+<ol>
+<li><tt><b>bugpoint</b> -run-llc foo.bc</tt></li>
+<li><tt><b>bugpoint</b> -run-llc foo.bc --tool-args
+           -relocation-model=pic</tt></li>
+<li><tt><b>bugpoint</b> -run-llc foo.bc --tool-args
+           -relocation-model=static</tt></li>
+</ol>
+
+<p>Please run this, then file a bug with the instructions and reduced .bc file
+that bugpoint emits.  If something goes wrong with bugpoint, please submit the
+"foo.bc" file and the option that llc crashes with.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="miscompilations">Miscompilations</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>If llvm-gcc successfully produces an executable, but that executable doesn't
+run right, this is either a bug in the code or a bug in the
+compiler.  The first thing to check is to make sure it is not using undefined
+behavior (e.g. reading a variable before it is defined).  In particular, check
+to see if the program <a href="http://valgrind.org/">valgrind</a>s clean,
+passes purify, or some other memory checker tool.  Many of the "LLVM bugs" that
+we have chased down ended up being bugs in the program being compiled, not
+ LLVM.</p>
+
+<p>Once you determine that the program itself is not buggy, you should choose 
+which code generator you wish to compile the program with (e.g. C backend, the 
+JIT, or LLC) and optionally a series of LLVM passes to run.  For example:</p>
+
+<div class="doc_code">
+<p><tt>
+<b>bugpoint</b> -run-cbe [... optzn passes ...] file-to-test.bc --args -- [program arguments]</tt></p>
+</div>
+
+<p><tt>bugpoint</tt> will try to narrow down your list of passes to the one pass
+that causes an error, and simplify the bitcode file as much as it can to assist
+you. It will print a message letting you know how to reproduce the resulting
+error.</p>
+
+</div>
+
+<!-- *********************************************************************** -->
+<div class="doc_section">
+  <a name="codegen">Incorrect code generation</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="doc_text">
+
+<p>Similarly to debugging incorrect compilation by mis-behaving passes, you can
+debug incorrect code generation by either LLC or the JIT, using
+<tt>bugpoint</tt>. The process <tt>bugpoint</tt> follows in this case is to try
+to narrow the code down to a function that is miscompiled by one or the other
+method, but since for correctness, the entire program must be run,
+<tt>bugpoint</tt> will compile the code it deems to not be affected with the C
+Backend, and then link in the shared object it generates.</p>
+
+<p>To debug the JIT:</p>
+
+<div class="doc_code">
+<pre>
+bugpoint -run-jit -output=[correct output file] [bitcode file]  \
+         --tool-args -- [arguments to pass to lli]              \
+         --args -- [program arguments]
+</pre>
+</div>
+
+<p>Similarly, to debug the LLC, one would run:</p>
+
+<div class="doc_code">
+<pre>
+bugpoint -run-llc -output=[correct output file] [bitcode file]  \
+         --tool-args -- [arguments to pass to llc]              \
+         --args -- [program arguments]
+</pre>
+</div>
+
+<p><b>Special note:</b> if you are debugging MultiSource or SPEC tests that
+already exist in the <tt>llvm/test</tt> hierarchy, there is an easier way to
+debug the JIT, LLC, and CBE, using the pre-written Makefile targets, which
+will pass the program options specified in the Makefiles:</p>
+
+<div class="doc_code">
+<p><tt>
+cd llvm/test/../../program<br>
+make bugpoint-jit
+</tt></p>
+</div>
+
+<p>At the end of a successful <tt>bugpoint</tt> run, you will be presented
+with two bitcode files: a <em>safe</em> file which can be compiled with the C
+backend and the <em>test</em> file which either LLC or the JIT
+mis-codegenerates, and thus causes the error.</p>
+
+<p>To reproduce the error that <tt>bugpoint</tt> found, it is sufficient to do
+the following:</p>
+
+<ol>
+
+<li><p>Regenerate the shared object from the safe bitcode file:</p>
+
+<div class="doc_code">
+<p><tt>
+<b>llc</b> -march=c safe.bc -o safe.c<br>
+<b>gcc</b> -shared safe.c -o safe.so
+</tt></p>
+</div></li>
+
+<li><p>If debugging LLC, compile test bitcode native and link with the shared
+    object:</p>
+
+<div class="doc_code">
+<p><tt>
+<b>llc</b> test.bc -o test.s<br>
+<b>gcc</b> test.s safe.so -o test.llc<br>
+./test.llc [program options]
+</tt></p>
+</div></li>
+    
+<li><p>If debugging the JIT, load the shared object and supply the test
+    bitcode:</p>
+
+<div class="doc_code">
+<p><tt><b>lli</b> -load=safe.so test.bc [program options]</tt></p>
+</div></li>  
+
+</ol>
+
+</div>
+
+<!-- *********************************************************************** -->
+<hr>
+<address>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
+  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
+  <a href="http://validator.w3.org/check/referer"><img
+  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
+
+  <a href="mailto:sabre at nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.org">The LLVM Compiler Infrastructure</a>
+  <br>
+  Last modified: $Date: 2010-05-06 17:28:04 -0700 (Thu, 06 May 2010) $
+</address>
+
+</body>
+</html>





More information about the llvm-commits mailing list