summaryrefslogtreecommitdiff
path: root/docs/ReleaseNotes.html
blob: 1bf36212817db07884cf538601ce45f5de48501b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
<!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">
  <meta encoding="utf8">
  <link rel="stylesheet" href="llvm.css" type="text/css">
  <title>LLVM 2.9 Release Notes</title>
</head>
<body>

<div class="doc_title">LLVM 2.9 Release Notes</div>

<img align=right src="http://llvm.org/img/DragonSmall.png"
    width="136" height="136" alt="LLVM Dragon Logo">

<ol>
  <li><a href="#intro">Introduction</a></li>
  <li><a href="#subproj">Sub-project Status Update</a></li>
  <li><a href="#externalproj">External Projects Using LLVM 2.9</a></li>
  <li><a href="#whatsnew">What's New in LLVM 2.9?</a></li>
  <li><a href="GettingStarted.html">Installation Instructions</a></li>
  <li><a href="#knownproblems">Known Problems</a></li>
  <li><a href="#additionalinfo">Additional Information</a></li>
</ol>

<div class="doc_author">
  <p>Written by the <a href="http://llvm.org">LLVM Team</a></p>
</div>

<h1 style="color:red">These are in-progress notes for the upcoming LLVM 2.9
release.<br>
You may prefer the
<a href="http://llvm.org/releases/2.8/docs/ReleaseNotes.html">LLVM 2.8
Release Notes</a>.</h1>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="intro">Introduction</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This document contains the release notes for the LLVM Compiler
Infrastructure, release 2.9.  Here we describe the status of LLVM, including
major improvements from the previous release and significant known problems.
All LLVM releases may be downloaded from the <a
href="http://llvm.org/releases/">LLVM releases web site</a>.</p>

<p>For more information about LLVM, including information about the latest
release, please check out the <a href="http://llvm.org/">main LLVM
web site</a>.  If you have questions or comments, the <a
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM Developer's
Mailing List</a> is a good place to send them.</p>

<p>Note that if you are reading this file from a Subversion checkout or the
main LLVM web page, this document applies to the <i>next</i> release, not the
current one.  To see the release notes for a specific release, please see the
<a href="http://llvm.org/releases/">releases page</a>.</p>

</div>

<!--
Almost dead code.
  lib/Transforms/IPO/MergeFunctions.cpp => consider for 3.0.
-->
 
   
<!-- Features that need text if they're finished for 3.0:
  combiner-aa?
  strong phi elim
  loop dependence analysis
  CorrelatedValuePropagation
 -->
 
<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="subproj">Sub-project Status Update</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">
<p>
The LLVM 2.9 distribution currently consists of code from the core LLVM
repository (which roughly includes the LLVM optimizers, code generators
and supporting tools), the Clang repository and the llvm-gcc repository.  In
addition to this code, the LLVM Project includes other sub-projects that are in
development.  Here we include updates on these subprojects.
</p>

</div>


<!--=========================================================================-->
<div class="doc_subsection">
<a name="clang">Clang: C/C++/Objective-C Frontend Toolkit</a>
</div>

<div class="doc_text">

<p><a href="http://clang.llvm.org/">Clang</a> is an LLVM front end for the C,
C++, and Objective-C languages. Clang aims to provide a better user experience
through expressive diagnostics, a high level of conformance to language
standards, fast compilation, and low memory use. Like LLVM, Clang provides a
modular, library-based architecture that makes it suitable for creating or
integrating with other development tools. Clang is considered a
production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
(32- and 64-bit), and for darwin-arm targets.</p>

<p>In the LLVM 2.9 time-frame, the Clang team has made many improvements in C,
C++ and Objective-C support.  C++ support is now generally rock solid, has
been exercised on a broad variety of code, and has several new C++'0x features
implemented (such as rvalue references and variadic templates).  LLVM 2.9 has
also brought in a large range of bug fixes and minor features (e.g. __label__
support), and is much more compatible with the Linux Kernel.</p>  
  
<p>If Clang rejects your code that is built with another compiler, please take a
look at the <a href="http://clang.llvm.org/compatibility.html">language
compatibility</a> guide to make sure the issue isn't intentional or a known
issue.
</p>

<ul>
</ul>
</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="dragonegg">DragonEgg: GCC front-ends, LLVM back-end</a>
</div>

<div class="doc_text">
<p>
<a href="http://dragonegg.llvm.org/">DragonEgg</a> is a
<a href="http://gcc.gnu.org/wiki/plugins">gcc plugin</a> that replaces GCC's
optimizers and code generators with LLVM's.
Currently it requires a patched version of gcc-4.5.
The plugin can target the x86-32 and x86-64 processor families and has been
used successfully on the Darwin, FreeBSD and Linux platforms.
The Ada, C, C++ and Fortran languages work well.
The plugin is capable of compiling plenty of Obj-C, Obj-C++ and Java but it is
not known whether the compiled code actually works or not!
</p>

<p>
The 2.9 release has the following notable changes:
<ul>
<li>The plugin is much more stable when compiling Fortran.</li>
<li>Inline asm where an asm output is tied to an input of a different size is
now supported in many more cases.</li>
<li>Basic support for the __float128 type was added.  It is now possible to
generate LLVM IR from programs using __float128 but code generation does not
work yet.</li>
<li>Compiling Java programs no longer systematically crashes the plugin.</li>
</ul>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="compiler-rt">compiler-rt: Compiler Runtime Library</a>
</div>

<div class="doc_text">
<p>
The new LLVM <a href="http://compiler-rt.llvm.org/">compiler-rt project</a>
is a simple library that provides an implementation of the low-level
target-specific hooks required by code generation and other runtime components.
For example, when compiling for a 32-bit target, converting a double to a 64-bit
unsigned integer is compiled into a runtime call to the "__fixunsdfdi"
function. The compiler-rt library provides highly optimized implementations of
this and other low-level routines (some are 3x faster than the equivalent
libgcc routines).</p>

<p>
All of the code in the compiler-rt project is available under the standard LLVM
License, a "BSD-style" license.  

compiler_rt is now dual licensed under MIT and UIUC license
  
Several minor changes for better ARM support.

New in LLVM 2.9,  UPDATE</p>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="lldb">LLDB: Low Level Debugger</a>
</div>

<div class="doc_text">
<p>
<a href="http://lldb.llvm.org/">LLDB</a> is a brand new member of the LLVM
umbrella of projects. LLDB is a next generation, high-performance debugger. It
is built as a set of reusable components which highly leverage existing
libraries in the larger LLVM Project, such as the Clang expression parser, the
LLVM disassembler and the LLVM JIT.</p>

<p>
LLDB is in early development and not included as part of the LLVM 2.9 release,

  
  
<!--
but is mature enough to support basic debugging scenarios on Mac OS X in C,
Objective-C and C++.  We'd really like help extending and expanding LLDB to 
support new platforms, new languages, new architectures, and new features.-->
</p>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="libc++">libc++: C++ Standard Library</a>
</div>

<div class="doc_text">
<p>
<a href="http://libcxx.llvm.org/">libc++</a> is another new member of the LLVM
family.  It is an implementation of the C++ standard library, written from the
ground up to specifically target the forthcoming C++'0X standard and focus on
delivering great performance.</p>

<p>
As of the LLVM 2.9 release, UPDATE!

libc++ is now dual licensed under MIT and UIUC license
  
<!--libc++ is virtually feature complete, but would
benefit from more testing and better integration with Clang++.  It is also
looking forward to the C++ committee finalizing the C++'0x standard.-->
</p>

</div>



<!--=========================================================================-->
<!--
<div class="doc_subsection">
<a name="klee">KLEE: A Symbolic Execution Virtual Machine</a>
</div>

<div class="doc_text">
<p>
<a href="http://klee.llvm.org/">KLEE</a> is a symbolic execution framework for
programs in LLVM bitcode form. KLEE tries to symbolically evaluate "all" paths
through the application and records state transitions that lead to fault
states. This allows it to construct testcases that lead to faults and can even
be used to verify some algorithms.
</p>

<p>UPDATE!</p>
</div>-->


<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="externalproj">External Open Source Projects Using LLVM 2.9</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>An exciting aspect of LLVM is that it is used as an enabling technology for
   a lot of other language and tools projects.  This section lists some of the
   projects that have already been updated to work with LLVM 2.9.</p>
</div>




<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="whatsnew">What's New in LLVM 2.9?</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This release includes a huge number of bug fixes, performance tweaks and
minor improvements.  Some of the major improvements and new features are listed
in this section.
</p>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="majorfeatures">Major New Features</a>
</div>

<div class="doc_text">

<p>LLVM 2.9 includes several major new capabilities:</p>

<ul>
<li><pre>
  last release for llvm-gcc
TBAA: On by default in clang.  Disable it with -fno-strict-aliasing.
  Could be more aggressive for structs.
  
Triple::normalize is new, llvm triples are always stored in normalized form internally.

Triple x86_64--mingw64 is obsoleted. Use x86_64--mingw32 instead.

MC Assembler: X86 now generates much better diagnostics for common errors,
    is much faster at matching instructions, is much more bug-compatible with
    the GAS assembler, and is now generally useful for a broad range of X86
    assembly.
  
New Nvidia PTX backend, not generally useful in 2.9 though.

Much better debug info generated, particularly in optimized code situations.

ARM Fast ISel

ELF MC support: on by default in clang.  There are still known missing features
  for human written assembly.

X86: Reimplemented all of MMX to introduce a new LLVM IR x86_mmx type.  Now
  random types like &lt;2 x i32&gt; are not iseld to mmx without emms.  The
  -disable-mmx flag is gone now.

Some basic <a href="CodeGenerator.html#mc">internals documentation</a> for MC. 
  
MC Assembler support for .file and .loc.
  
  
inline asm multiple alternative constraint support.
  
LoopIdiom: memset/memcpy formation.  Build with -ffreestanding or -fno-builtin
  if your memcpy is being compiled into infinite recursion.
  

TargetLibraryInfo
  
X86 support for FS/GS relative loads and stores using address space 256/257 are
  reliable now.
  
ARM: New code placement pass.
  
unnamed_addr + PR8927
  
PointerTracking has been removed from mainline, moved to ClamAV.
  
EarlyCSE pass.
LoopInstSimplify pass.

- DIBuilder provides simpler interface for front ends like Clang to encode debug info in LLVM IR.
  - This interface hides implementation details (e.g. DIDerivedType, existence of compile unit etc..) that any front end should not know about.
  For example,
  Ty = DebugFactory.CreateDerivedType(DW_TAG_volatile_type,
  findRegion(TYPE_CONTEXT(type)),
  StringRef(),
  getOrCreateFile(main_input_filename),
  0 /*line no*/,
  NodeSizeInBits(type),
  NodeAlignInBits(type),
  0 /*offset */,
  0 /* flags */,
  MainTy);
  can be replaced by
  DbgTy = DBuilder.createQualifiedType(DW_TAG_volatile_type, MainTy); 
  
PPC: Switched to MCInstPrinter, and MCCodeEmitter.  Ready to implement support
  for directly writing out mach-o object files, but noone seems interested.

ARM: Improved code generation for Cortex-A8 and Cortex-A9 CPUs.
  
Scheduler now models operand latency and pipeline forwarding.
  
error_code + libsystem + PathV2 changes
  The system_error header from C++0x was added.
  * Use if (error_code ec = function()) to check for error conditions
  from functions which return it.
  * error_code::message returns a human readable description of the error.
  
  PathV1 has been deprecated in favor of PathV2 (sorry I didn't finish
  this before the release).
  * No Path class, use a r-value convertible to a twine instead.
  * Assumes all paths are UTF-8.
  
new macho-dump tool

Major regalloc rewrite, not on by default for 2.9 and not advised to use it.
 * New basic register allocator that can be used as a safe fallback when
   debugging. Enable with -regalloc=basic.
 * New infrastructure for live range splitting. SplitKit can break a live
   interval into smaller pieces while preserving SSA form, and SpillPlacement
   can help find the best split points. This is a work in progress so the API
   is changing quickly.
 * The inline spiller has learned to clean up after live range splitting. It
   can hoist spills out of loops, and it can eliminate redundant spills.
   Rematerialization works with live range splitting.
 * New greedy register allocator using live range splitting. This will be the
   default register allocator in the next LLVM release, but it is not turned on
   by default in 2.9.

ARM: __builtin_prefetch turns into prefetch instructions.
  
MC assembler support for 3dNow! and 3DNowA instructions.
  
tblgen support for assembler aliases: <a 
  href="CodeGenerator.html#na_instparsing">MnemonicAlias and InstAlias</a>
  
LoopIndexSplit pass was removed, unmaintained.
  
include/llvm/System merged into include/llvm/Support.
 
Win32 PE-COFF support in the MC assembler has made a lot of progress in the 2.9
  timeframe, but is still not generally useful.  Please see 
  "http://llvm.org/bugs/showdependencytree.cgi?id=9100&amp;hide_resolved=1" for open bugs?

New <a href="WritingAnLLVMPass.html#RegionPass">RegionPass</a> infrastructure
  for region-based optimizations.
  
MicroBlaze: major updates for aggressive delay slot filler, MC-based assembly
   printing, assembly instruction parsing, ELF .o file emission, and MC
   instruction disassembler.
  
Countless ARM microoptimizations.

Speedups to various mid-level passes:
  GVN is much faster on functions with deep dominator trees / lots of BBs.
  DomTree and DominatorFrontier are much faster to compute, and preserved by
    more passes (so they are computed less often)
  
  
new 'hotpatch' attribute: LangRef.html#fnattrs

APInt API changes, see PR5207.

DSE is more aggressive with stores of different types: e.g. a large store 
  following a small one to the same address.
  
New naming rules in coding standards: CodingStandards.html#ll_naming
  
LiveDebugVariables is a new pass that keeps track of debugging information for
  user variables that are kept in registers in optimized builds.
  
We now optimize various idioms for overflow detection into check of the flag
  register on various CPUs, e.g.:
   unsigned long t = a+b;
   if (t &lt; a) ...
  into:
  	addq	%rdi, %rbx
  	jno	LBB0_2

X86: Much better codegen for several cases using adc/sbb instead of cmovs for
  conditional increment and other idioms.
  
MVT::Flag renamed to MVT::Glue
  
Removed the PartialSpecialization pass, it was unmaintained and buggy.
  
</pre></li>
</ul>
  
Still todo: [110117-110228]

  
</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="coreimprovements">LLVM IR and Core Improvements</a>
</div>

<div class="doc_text">
<p>LLVM IR has several new features for better support of new targets and that
expose new optimization opportunities:</p>

<ul>
</ul>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="optimizer">Optimizer Improvements</a>
</div>

<div class="doc_text">

<p>In addition to a large array of minor performance tweaks and bug fixes, this
release includes a few major enhancements and additions to the optimizers:</p>

<ul>
  <li>TBAA.</li>
  <li>LTO has been improved to use MC for parsing inline asm and now
  can build large programs like Firefox 4 on both OS X and Linux.</li>
</ul>

<!--
<p>In addition to these features that are done in 2.8, there is preliminary
   support in the release for Type Based Alias Analysis 
  Preliminary work on TBAA but not usable in 2.8.
  New CorrelatedValuePropagation pass, not on by default in 2.8 yet.
-->

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="mc">MC Level Improvements</a>
</div>

<div class="doc_text">
<p>
The LLVM Machine Code (aka MC) subsystem was created to solve a number
of problems in the realm of assembly, disassembly, object file format handling,
and a number of other related areas that CPU instruction-set level tools work
in.</p>

<ul>
  <li>MC is now used by default for ELF systems on x86 and
  x86-64.</li>
  <li>MC supports and CodeGen uses the <tt>.loc</tt> directives for
  producing line number debug info. This produces more compact line
  tables.</li>
  <li>MC supports the <tt>.cfi_*</tt> directives for producing DWARF
  frame information, but it is still not used by CodeGen by default.</li>
  <li>COFF support?</li>
</ul>

<p>For more information, please see the <a
href="http://blog.llvm.org/2010/04/intro-to-llvm-mc-project.html">Intro to the
LLVM MC Project Blog Post</a>.
</p>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="codegen">Target Independent Code Generator Improvements</a>
</div>

<div class="doc_text">

<p>We have put a significant amount of work into the code generator
infrastructure, which allows us to implement more aggressive algorithms and make
it run faster:</p>

<ul>
<!-- SplitKit -->
FastISel for ARM.
</ul>
</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="x86">X86-32 and X86-64 Target Improvements</a>
</div>

<div class="doc_text">
<p>New features and major changes in the X86 target include:
</p>

<ul>
  <li>Several bugs have been fixed for Windows x64 code generator.</li>
</ul>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="ARM">ARM Target Improvements</a>
</div>

<div class="doc_text">
<p>New features of the ARM target include:
</p>

<ul>
</ul>
</div>


<!--=========================================================================-->
<div class="doc_subsection">
<a name="changes">Major Changes and Removed Features</a>
</div>

<div class="doc_text">

<p>If you're already an LLVM user or developer with out-of-tree changes based
on LLVM 2.8, this section lists some "gotchas" that you may run into upgrading
from the previous release.</p>

<ul>
</ul>



<p>In addition, many APIs have changed in this release.  Some of the major LLVM
API changes are:</p>
<ul>
</ul>

</div>

<!--=========================================================================-->
<div class="doc_subsection">
<a name="devtree_changes">Development Infrastructure Changes</a>
</div>

<div class="doc_text">

<p>This section lists changes to the LLVM development infrastructure. This
mostly impacts users who actively work on LLVM or follow development on
mainline, but may also impact users who leverage the LLVM build infrastructure
or are interested in LLVM qualification.</p>

<ul>
</ul>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="knownproblems">Known Problems</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>This section contains significant known problems with the LLVM system,
listed by component.  If you run into a problem, please check the <a
href="http://llvm.org/bugs/">LLVM bug database</a> and submit a bug if
there isn't already one.</p>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="experimental">Experimental features included with this release</a>
</div>

<div class="doc_text">

<p>The following components of this LLVM release are either untested, known to
be broken or unreliable, or are in early development.  These components should
not be relied on, and bugs should not be filed against them, but they may be
useful to some people.  In particular, if you would like to work on one of these
components, please contact us on the <a
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>

<ul>
<li>The Alpha, Blackfin, CellSPU, MicroBlaze, MSP430, MIPS, PTX, SystemZ
    and XCore backends are experimental.</li>
<li><tt>llc</tt> "<tt>-filetype=obj</tt>" is experimental on all targets
    other than darwin-i386 and darwin-x86_64. FIXME: Not true on ELF anymore?</li>
    
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="x86-be">Known problems with the X86 back-end</a>
</div>

<div class="doc_text">

<ul>
  <li>The X86 backend does not yet support
    all <a href="http://llvm.org/PR879">inline assembly that uses the X86
    floating point stack</a>.  It supports the 'f' and 't' constraints, but not
    'u'.</li>
  <li>The X86-64 backend does not yet support the LLVM IR instruction
      <tt>va_arg</tt>. Currently, front-ends support variadic
      argument constructs on X86-64 by lowering them manually.</li>
  <li>Windows x64 (aka Win64) code generator has a few issues.
    <ul>
      <li>llvm-gcc cannot build the mingw-w64 runtime currently
       due to lack of support for the 'u' inline assembly
       constraint and for X87 floating point inline assembly.</li>
      <li>On mingw-w64, you will see unresolved symbol <tt>__chkstk</tt>
       due to <a href="http://llvm.org/bugs/show_bug.cgi?id=8919">Bug 8919</a>.
       It is fixed in <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110321/118499.html">r128206</a>.</li>
      <li>Miss-aligned MOVDQA might crash your program. It is due to
       <a href="http://llvm.org/bugs/show_bug.cgi?id=9483">Bug 9483</a>,
       lack of handling aligned internal globals.</li>
      </ul>
  </li>

</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="ppc-be">Known problems with the PowerPC back-end</a>
</div>

<div class="doc_text">

<ul>
<li>The Linux PPC32/ABI support needs testing for the interpreter and static
compilation, and lacks support for debug information.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="arm-be">Known problems with the ARM back-end</a>
</div>

<div class="doc_text">

<ul>
<li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
processors, thumb programs can crash or produce wrong
results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
<li>Compilation for ARM Linux OABI (old ABI) is supported but not fully tested.
</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="sparc-be">Known problems with the SPARC back-end</a>
</div>

<div class="doc_text">

<ul>
<li>The SPARC backend only supports the 32-bit SPARC ABI (-m32); it does not
    support the 64-bit SPARC ABI (-m64).</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="mips-be">Known problems with the MIPS back-end</a>
</div>

<div class="doc_text">

<ul>
<li>64-bit MIPS targets are not supported yet.</li>
</ul>

</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="alpha-be">Known problems with the Alpha back-end</a>
</div>

<div class="doc_text">

<ul>

<li>On 21164s, some rare FP arithmetic sequences which may trap do not have the
appropriate nops inserted to ensure restartability.</li>

</ul>
</div>

<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="c-be">Known problems with the C back-end</a>
</div>

<div class="doc_text">

<p>The C backend has numerous problems and is not being actively maintained.
Depending on it for anything serious is not advised.</p>

<ul>
<li><a href="http://llvm.org/PR802">The C backend has only basic support for
    inline assembly code</a>.</li>
<li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common
    C++ programs</a>, preventing intermixing between C++ compiled by the CBE and
    C++ code compiled with <tt>llc</tt> or native compilers.</li>
<li>The C backend does not support all exception handling constructs.</li>
<li>The C backend does not support arbitrary precision integers.</li>
</ul>

</div>


<!-- ======================================================================= -->
<div class="doc_subsection">
  <a name="llvm-gcc">Known problems with the llvm-gcc front-end</a>
</div>

<div class="doc_text">

<p>llvm-gcc is generally very stable for the C family of languages.  The only
   major language feature of GCC not supported by llvm-gcc is the
   <tt>__builtin_apply</tt> family of builtins.   However, some extensions
   are only supported on some targets.  For example, trampolines are only
   supported on some targets (these are used when you take the address of a
   nested function).</p>

<p>Fortran support generally works, but there are still several unresolved bugs
   in <a href="http://llvm.org/bugs/">Bugzilla</a>.  Please see the
   tools/gfortran component for details.  Note that llvm-gcc is missing major
   Fortran performance work in the frontend and library that went into GCC after
   4.2.  If you are interested in Fortran, we recommend that you consider using
   <a href="#dragonegg">dragonegg</a> instead.</p>

<p>The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being
actively maintained.  If you are interested in Ada, we recommend that you
consider using <a href="#dragonegg">dragonegg</a> instead.</p>
</div>

<!-- *********************************************************************** -->
<div class="doc_section">
  <a name="additionalinfo">Additional Information</a>
</div>
<!-- *********************************************************************** -->

<div class="doc_text">

<p>A wide variety of additional information is available on the <a
href="http://llvm.org">LLVM web page</a>, in particular in the <a
href="http://llvm.org/docs/">documentation</a> section.  The web page also
contains versions of the API documentation which is up-to-date with the
Subversion version of the source code.
You can access versions of these documents specific to this release by going
into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>

<p>If you have any questions or comments about LLVM, please feel free to contact
us via the <a href="http://llvm.org/docs/#maillist"> mailing
lists</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$
</address>

</body>
</html>