Commit Graph

440 Commits

Author SHA1 Message Date
Nick Lewycky 49f891958f Add support for embedded metadata to LLVM. This introduces two new types of
Constant, MDString and MDNode which can only be used by globals with a name
that starts with "llvm." or as arguments to a function with the same naming
restriction.

llvm-svn: 68420
2009-04-04 07:22:01 +00:00
Duncan Sands b1656c1e1f Add some explanations of how apint loads and stores
work.

llvm-svn: 67471
2009-03-22 11:33:16 +00:00
Duncan Sands 4581bebf2a It makes no sense to have a ODR version of common
linkage, so remove it.

llvm-svn: 66690
2009-03-11 20:14:15 +00:00
Duncan Sands e2881053c9 Remove the one-definition-rule version of extern_weak
linkage: this linkage type only applies to declarations,
but ODR is only relevant to globals with definitions.

llvm-svn: 66650
2009-03-11 08:08:06 +00:00
Chris Lattner dd282825a8 Clarify wording, patch by Stefanus Du Toit!
llvm-svn: 66458
2009-03-09 20:55:18 +00:00
Duncan Sands 12da8ce3d2 Introduce new linkage types linkonce_odr, weak_odr, common_odr
and extern_weak_odr.  These are the same as the non-odr versions,
except that they indicate that the global will only be overridden
by an *equivalent* global.  In C, a function with weak linkage can
be overridden by a function which behaves completely differently.
This means that IP passes have to skip weak functions, since any
deductions made from the function definition might be wrong, since
the definition could be replaced by something completely different
at link time.   This is not allowed in C++, thanks to the ODR
(One-Definition-Rule): if a function is replaced by another at
link-time, then the new function must be the same as the original
function.  If a language knows that a function or other global can
only be overridden by an equivalent global, it can give it the
weak_odr linkage type, and the optimizers will understand that it
is alright to make deductions based on the function body.  The
code generators on the other hand map weak and weak_odr linkage
to the same thing.

llvm-svn: 66339
2009-03-07 15:45:40 +00:00
Bill Wendling 050ee8fb8d Fix grammaro.
llvm-svn: 65727
2009-02-28 22:12:54 +00:00
Chris Lattner 361bfcd932 don't use the word 'aggregate' with constants, it is confusing.
llvm-svn: 65702
2009-02-28 18:32:25 +00:00
Chris Lattner 789dee38a5 don't redescribe bitcast constraints in two places. It is not valid to
bitcast from one aggregate to another.

llvm-svn: 65700
2009-02-28 18:27:03 +00:00
Nick Lewycky cd5b1443bb Update this text for first-class aggregates.
llvm-svn: 65697
2009-02-28 17:30:06 +00:00
Nick Lewycky dac78d87cb Demonstrate the act of including multiple space-separated parameter attributes,
by request on IRC.

llvm-svn: 64619
2009-02-15 23:06:14 +00:00
Dale Johannesen cd4a301a1a Edit description of floating point constants to
reflect reality.  Acknowledgements to John Clements
for prodding me into this.

llvm-svn: 64332
2009-02-11 22:14:51 +00:00
Chris Lattner bf1d5458ad fix typo, patch by Jonathan Brandmeyer!
llvm-svn: 64132
2009-02-09 10:00:56 +00:00
Bill Wendling b9a7327006 Document llvm.umul.with.overflow indicating that it's badly broken and not intended for use.
llvm-svn: 64104
2009-02-08 23:00:09 +00:00
Chris Lattner d1d4cffae9 I can't type today apparently.
llvm-svn: 64097
2009-02-08 22:21:28 +00:00
Chris Lattner 04c57c5bae fix typo
llvm-svn: 64090
2009-02-08 19:59:51 +00:00
Chris Lattner 4a67c91d0b document pointer type constraints, PR3513
llvm-svn: 64088
2009-02-08 19:53:29 +00:00
Bill Wendling fd2bd720da Fixes from feedback.
llvm-svn: 64070
2009-02-08 04:04:40 +00:00
Bill Wendling f4d70628a3 Document the 'llvm.OP.with.overflow' intrinsics.
llvm-svn: 64066
2009-02-08 01:40:31 +00:00
Chris Lattner 08aa90643e PR3485, document alignment on byref.
llvm-svn: 63836
2009-02-05 05:42:28 +00:00
Chris Lattner 5e66858152 validation error fix.
llvm-svn: 63503
2009-02-02 07:33:15 +00:00
Chris Lattner cf7a584341 Document type upreferences (PR3380), patch by Stein Roger Skafløtten
with enhancements and corrections by me.

llvm-svn: 63502
2009-02-02 07:32:36 +00:00
Dan Gohman 142ccc0e15 Add more documentation mentioning the limitations due to PR2660.
llvm-svn: 62919
2009-01-24 15:58:40 +00:00
Dan Gohman a5127abeec Add a few more notes about LLVM IR features that codegen doesn't
yet support.

llvm-svn: 62739
2009-01-22 01:39:38 +00:00
Duncan Sands 35e43c12f1 Grammar fix.
llvm-svn: 62319
2009-01-16 09:29:46 +00:00
Rafael Espindola 6de96a1b5d Add the private linkage.
llvm-svn: 62279
2009-01-15 20:18:42 +00:00
Dan Gohman 3065b6169f Document several current CodeGen limitations in LangRef.html.
Patches for any of these are welcome!

llvm-svn: 62120
2009-01-12 23:12:39 +00:00
Dan Gohman 33a9cef204 The LLVM Assembly Language Reference incorrectly stated that the
prefix used for dll{import,export} is _imp__; it is actually __imp_.
Patch by Mahadevan R!

llvm-svn: 62103
2009-01-12 21:35:55 +00:00
Chris Lattner bc088218e6 Implement PR3313, and while I'm at it address a very FAQ.
llvm-svn: 62048
2009-01-11 20:53:49 +00:00
Dan Gohman aaa679b270 Fix the example syntax for named sections.
llvm-svn: 62033
2009-01-11 00:40:00 +00:00
Dan Gohman 7a5acb5be5 A few more whitespace tidyments.
llvm-svn: 61655
2009-01-04 23:49:44 +00:00
Dan Gohman 623806eb2b Tidy whitespace.
llvm-svn: 61653
2009-01-04 23:44:43 +00:00
Chris Lattner 8730c6d46c new non-ambiguous syntax.
llvm-svn: 61559
2009-01-02 07:02:56 +00:00
Nick Lewycky 2abb108f1b Resubmit support for the 'nocapture' attribute.
The problematic part of this patch is that we were out of attribute bits,
requiring some fancy bit hacking to make it fit (by shrinking alignment)
without breaking existing users or the file format.

This change will require users to rebuild llvm-gcc to match llvm.

llvm-svn: 61239
2008-12-19 06:39:12 +00:00
Bill Wendling a397baea88 Temporarily revert r61019, r61030, and r61040. These were breaking LLVM Release
builds.

llvm-svn: 61094
2008-12-16 19:06:48 +00:00
Nick Lewycky ddffe620e4 Introducing nocapture, a parameter attribute for pointers to indicate that the
callee will not introduce any new aliases of that pointer.

The attributes had all bits allocated already, so I decided to collapse
alignment. Alignment was previously stored as a 16-bit integer from bits 16 to
32 of the attribute, but it was required to be a power of 2. Now it's stored in
log2 encoded form in five bits from 16 to 21. That gives us 11 more bits of
space.

You may have already noticed that you only need four bits to encode a 16-bit
power of two, so why five bits? Because the AsmParser accepted 32-bit
alignments, even though we couldn't store them (they were silently discarded).
Now we can store them in memory, but not in the bitcode.

The bitcode format was already storing these as 64-bit VBR integers. So, the
bitcode format stays the same, keeping the alignment values stored as 16 bit
raw values. There's some hideous code in the reader and writer that deals with
this, waiting to be ripped out the moment we run out of bits again and have to
replace the parameter attributes table encoding.

llvm-svn: 61019
2008-12-15 01:34:58 +00:00
Misha Brukman 86242e1990 Global replace of yellow W3C "valid HTML/CSS" icons with blue ones.
llvm-svn: 60880
2008-12-11 17:34:48 +00:00
Mon P Wang 68d4eee062 Added a little more information that vector shifts require vector shift amount.
llvm-svn: 60831
2008-12-10 08:55:09 +00:00
Mon P Wang 4dd832d241 Fix getNode to allow a vector for the shift amount for shifts of vectors.
Fix the shift amount when unrolling a vector shift into scalar shifts.
Fix problem in getShuffleScalarElt where it assumes that the input of
a bit convert must be a vector.

llvm-svn: 60740
2008-12-09 05:46:39 +00:00
Misha Brukman c9813bda47 Fixed HTML closing tag, cleaned up some spacing.
llvm-svn: 60153
2008-11-27 06:41:20 +00:00
Bill Wendling 6e41adddab Small formatting change.
llvm-svn: 60113
2008-11-26 19:19:05 +00:00
Bill Wendling 0f5541e4cf Update to explain how ssp and sspreq attributes override each other.
llvm-svn: 60112
2008-11-26 19:07:40 +00:00
Dan Gohman 8ef449828f Fix a few HTML tidiness issues.
llvm-svn: 59966
2008-11-24 17:18:39 +00:00
Torok Edwin 9bc1a6554e NULL, unique pointers from malloc(0), and freed pointers are legal values for
noalias attribute parameters/return values.

llvm-svn: 59955
2008-11-24 08:02:24 +00:00
Nick Lewycky d59572cb22 Seriously strengthen the guarantee offered by noalias on a function's return
value. It must now be as if the pointer were allocated and has not escaped to
the caller. Thanks to Dan Gohman for pointing out the error in the original
and helping devise this definition.

llvm-svn: 59940
2008-11-24 05:00:44 +00:00
Nick Lewycky f5ffcbcd0b Extend the 'noalias' attribute to function return values. This is intended to
indicate functions that allocate, such as operator new, or list::insert. The
actual definition is slightly less strict (for now).

No changes to the bitcode reader/writer, asm printer or verifier were needed.

llvm-svn: 59934
2008-11-24 03:41:24 +00:00
Misha Brukman 50de2b2365 Fixed named anchor for llvm.stackprotector intrinsic.
llvm-svn: 59893
2008-11-22 23:55:29 +00:00
Chris Lattner dd7083452f reapply Sanjiv's patch to genericize memcpy/memset/memmove to take an
arbitrary integer width for the count.

llvm-svn: 59823
2008-11-21 16:42:48 +00:00
Bill Wendling 4bce2bff88 Revert r59802. It was breaking the build of llvm-gcc:
g++ -m32 -c -g -DIN_GCC -W -Wall -Wwrite-strings -Wmissing-format-attribute -fno-common -mdynamic-no-pic -DHAVE_CONFIG_H -Wno-unused -DTARGET_NAME=\"i386-apple-darwin9.5.0\" -I. -I. -I../../llvm-gcc.src/gcc -I../../llvm-gcc.src/gcc/. -I../../llvm-gcc.src/gcc/../include -I./../intl -I../../llvm-gcc.src/gcc/../libcpp/include  -I../../llvm-gcc.src/gcc/../libdecnumber -I../libdecnumber -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/include -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/include -DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/../llvm.src/include  -D_DEBUG  -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS   -I. -I. -I../../llvm-gcc.src/gcc -I../../llvm-gcc.src/gcc/. -I../../llvm-gcc.src/gcc/../include -I./../intl -I../../llvm-gcc.src/gcc/../libcpp/include  -I../../llvm-gcc.src/gcc/../libdecnumber -I../libdecnumber -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/include -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/include ../../llvm-gcc.src/gcc/llvm-types.cpp -o llvm-types.o
../../llvm-gcc.src/gcc/llvm-convert.cpp: In member function 'void TreeToLLVM::EmitMemCpy(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int)':
../../llvm-gcc.src/gcc/llvm-convert.cpp:1496: error: 'memcpy_i32' is not a member of 'llvm::Intrinsic'
../../llvm-gcc.src/gcc/llvm-convert.cpp:1496: error: 'memcpy_i64' is not a member of 'llvm::Intrinsic'
../../llvm-gcc.src/gcc/llvm-convert.cpp: In member function 'void TreeToLLVM::EmitMemMove(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int)':
../../llvm-gcc.src/gcc/llvm-convert.cpp:1512: error: 'memmove_i32' is not a member of 'llvm::Intrinsic'
../../llvm-gcc.src/gcc/llvm-convert.cpp:1512: error: 'memmove_i64' is not a member of 'llvm::Intrinsic'
../../llvm-gcc.src/gcc/llvm-convert.cpp: In member function 'void TreeToLLVM::EmitMemSet(llvm::Value*, llvm::Value*, llvm::Value*, unsigned int)':
../../llvm-gcc.src/gcc/llvm-convert.cpp:1528: error: 'memset_i32' is not a member of 'llvm::Intrinsic'
../../llvm-gcc.src/gcc/llvm-convert.cpp:1528: error: 'memset_i64' is not a member of 'llvm::Intrinsic'
make[3]: *** [llvm-convert.o] Error 1
make[3]: *** Waiting for unfinished jobs....
rm fsf-funding.pod gcov.pod gfdl.pod cpp.pod gpl.pod gcc.pod
make[2]: *** [all-stage1-gcc] Error 2
make[1]: *** [stage1-bubble] Error 2
make: *** [all] Error 2

llvm-svn: 59809
2008-11-21 09:09:41 +00:00
Sanjiv Gupta 09a203765a Make mem[cpy,move,set] intrinsics overloaded.
llvm-svn: 59802
2008-11-21 07:49:09 +00:00