Commit Graph

88 Commits

Author SHA1 Message Date
Duncan P. N. Exon Smith
7838818ad7 IR: Implement uselistorder assembly directives
Implement `uselistorder` and `uselistorder_bb` assembly directives,
which allow the use-list order to be recovered when round-tripping to
assembly.

This is the bulk of PR20515.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216025 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-19 21:30:15 +00:00
Rafael Espindola
1f21e0dd0d Remove the linker_private and linker_private_weak linkages.
These linkages were introduced some time ago, but it was never very
clear what exactly their semantics were or what they should be used
for. Some investigation found these uses:

* utf-16 strings in clang.
* non-unnamed_addr strings produced by the sanitizers.

It turns out they were just working around a more fundamental problem.
For some sections a MachO linker needs a symbol in order to split the
section into atoms, and llvm had no idea that was the case. I fixed
that in r201700 and it is now safe to use the private linkage. When
the object ends up in a section that requires symbols, llvm will use a
'l' prefix instead of a 'L' prefix and things just work.

With that, these linkages were already dead, but there was a potential
future user in the objc metadata information. I am still looking at
CGObjcMac.cpp, but at this point I am convinced that linker_private
and linker_private_weak are not what they need.

The objc uses are currently split in

* Regular symbols (no '\01' prefix). LLVM already directly provides
whatever semantics they need.
* Uses of a private name (start with "\01L" or "\01l") and private
linkage. We can drop the "\01L" and "\01l" prefixes as soon as llvm
agrees with clang on L being ok or not for a given section. I have two
patches in code review for this.
* Uses of private name and weak linkage.

The last case is the one that one could think would fit one of these
linkages. That is not the case. The semantics are

* the linker will merge these symbol by *name*.
* the linker will hide them in the final DSO.

Given that the merging is done by name, any of the private (or
internal) linkages would be a bad match. They allow llvm to rename the
symbols, and that is really not what we want. From the llvm point of
view, these objects should really be (linkonce|weak)(_odr)?.

For now, just keeping the "\01l" prefix is probably the best for these
symbols. If we one day want to have a more direct support in llvm,
IMHO what we should add is not a linkage, it is just a hidden_symbol
attribute. It would be applicable to multiple linkages. For example,
on weak it would produce the current behavior we have for objc
metadata. On internal, it would be equivalent to private (and we
should then remove private).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203866 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-13 23:18:37 +00:00
Matt Arsenault
59d3ae6cdc Add addrspacecast instruction.
Patch by Michele Scandale!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194760 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-15 01:34:59 +00:00
Rafael Espindola
19794da02c Remove linkonce_odr_auto_hide.
linkonce_odr_auto_hide was in incomplete attempt to implement a way
for the linker to hide symbols that are known to be available in every
TU and whose addresses are not relevant for a particular DSO.

It was redundant in that it all its uses are equivalent to
linkonce_odr+unnamed_addr. Unlike those, it has never been connected
to clang or llvm's optimizers, so it was effectively dead.

Given that nothing produces it, this patch just nukes it
(other than the llvm-c enum value).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193865 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-01 17:09:14 +00:00
Andrea Di Biagio
5768bb8d77 Add function attribute 'optnone'.
This function attribute indicates that the function is not optimized
by any optimization or code generator passes with the 
exception of interprocedural optimization passes.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189101 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-23 11:53:55 +00:00
Charles Davis
ac226bbf45 Target/X86: Add explicit Win64 and System V/x86-64 calling conventions.
Summary:
This patch adds explicit calling convention types for the Win64 and
System V/x86-64 ABIs. This allows code to override the default, and use
the Win64 convention on a target that wants to use SysV (and
vice-versa). This is needed to implement the `ms_abi` and `sysv_abi` GNU
attributes.

Reviewers:

CC:

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186144 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-12 06:02:35 +00:00
Bill Wendling
9bf3e3972d Enable syntax highlighting for reStructuredText files.
Patch by Journeyer J. Joh!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176235 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-28 06:43:24 +00:00
Kostya Serebryany
8eec41fc77 Unify clang/llvm attributes for asan/tsan/msan (LLVM part)
These are two related changes (one in llvm, one in clang).
LLVM: 
- rename address_safety => sanitize_address (the enum value is the same, so we preserve binary compatibility with old bitcode)
- rename thread_safety => sanitize_thread
- rename no_uninitialized_checks -> sanitize_memory

CLANG: 
- add __attribute__((no_sanitize_address)) as a synonym for __attribute__((no_address_safety_analysis))
- add __attribute__((no_sanitize_thread))
- add __attribute__((no_sanitize_memory))

for S in address thread memory
If -fsanitize=S is present and __attribute__((no_sanitize_S)) is not
set llvm attribute sanitize_S


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176075 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-26 06:58:09 +00:00
Kostya Serebryany
ab39afa9d9 [tsan/msan] adding thread_safety and uninitialized_checks attributes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174864 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-11 08:13:54 +00:00
Bill Wendling
114baee1fa Add the IR attribute 'sspstrong'.
SSPStrong applies a heuristic to insert stack protectors in these situations:

* A Protector is required for functions which contain an array, regardless of
  type or length.

* A Protector is required for functions which contain a structure/union which
  contains an array, regardless of type or length.  Note, there is no limit to
  the depth of nesting.

* A protector is required when the address of a local variable (i.e., stack
  based variable) is exposed. (E.g., such as through a local whose address is
  taken as part of the RHS of an assignment or a local whose address is taken as
  part of a function argument.)

This patch implements the SSPString attribute to be equivalent to
SSPRequired. This will change in a subsequent patch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173230 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-23 06:41:41 +00:00
Benjamin Kramer
f39eab91b6 Bring vim keyword lists up to date.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169110 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-02 16:40:38 +00:00
Michael Ilseman
79f09f7508 Vim mode updated to recognize fast-math flags
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169055 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-30 23:18:21 +00:00
Daniel Dunbar
f793fbc569 lit: Remove support for XTARGET.
- The XTARGET feature (inherited from old DG tests) was just confusing (and
   barely ever used). The same effect can now be achieved with a combination of
   the more useful REQUIRES and XFAIL.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166305 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-19 20:29:27 +00:00
Owen Anderson
5e7469647c Add the half type to the LLVM IR vim syntax highlighting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156080 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-03 17:24:12 +00:00
David Greene
cebb4ee93a Add Foreach Loop
Add some data structures to represent for loops.  These will be
referenced during object processing to do any needed iteration and
instantiation.

Add foreach keyword support to the lexer.

Add a mode to indicate that we're parsing a foreach loop.  This allows
the value parser to early-out when processing the foreach value list.

Add a routine to parse foreach iteration declarations.  This is
separate from ParseDeclaration because the type of the named value
(the iterator) doesn't match the type of the initializer value (the
value list).  It also needs to add two values to the foreach record:
the iterator and the value list.

Add parsing support for foreach.

Add the code to process foreach loops and create defs based
on iterator values.

Allow foreach loops to be matched at the top level.

When parsing an IDValue check if it is a foreach loop iterator for one
of the active loops.  If so, return a VarInit for it.

Add Emacs keyword support for foreach.

Add VIM keyword support for foreach.

Add tests to check foreach operation.

Add TableGen documentation for foreach.

Support foreach with multiple objects.

Support non-braced foreach body with one object.

Do not require types for the foreach declaration.  Assume the iterator
type from the iteration list element type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151164 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-22 16:09:41 +00:00
David Greene
a1b1b79be1 Remove Multidefs
Multidefs are a bit unwieldy and incomplete.  Remove them in favor of
another mechanism, probably for loops.

Revert "Make Test More Thorough"
Revert "Fix a typo."
Revert "Vim Support for Multidefs"
Revert "Emacs Support for Multidefs"
Revert "Document Multidefs"
Revert "Add a Multidef Test"
Revert "Update Test for Multidefs"
Revert "Process Multidefs"
Revert "Parser Multidef Support"
Revert "Lexer Support for Multidefs"
Revert "Add Multidef Data Structures"

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141378 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-07 18:25:05 +00:00
David Greene
6494af4d77 Vim Support for Multidefs
Add vim highlighting support for multidefs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141238 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-05 22:42:52 +00:00
Bruno Cardoso Lopes
23e9ef994e Update uwtable vim color!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137806 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17 02:29:07 +00:00
Dan Gohman
f99f1197c7 Enable clang autocompletion by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117415 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-26 23:24:54 +00:00
Che-Liang Chiou
f9930da2ef Add ret instruction to PTX backend
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114788 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-25 07:46:17 +00:00
Dan Gohman
2465dcf4c8 Remove a TODO comment; this is now filed in bugzilla (PR8005).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112982 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-03 18:06:11 +00:00
Dan Gohman
245ae51dce Remove obsolete keywords which are no longer relevant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112382 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-28 20:14:05 +00:00
Dan Gohman
04a7858241 Remove unions from the vim syntax highlighting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112381 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-28 20:11:28 +00:00
Dan Gohman
349370a1d6 Clarify a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112266 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 15:16:40 +00:00
Dan Gohman
88b3a68490 Parse " (Hidden)" and cope with it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112265 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 15:16:09 +00:00
Dan Gohman
34a92b7f82 Default to looking for clang++ in the PATH, rather than trying to
guess a path that will work.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112264 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 15:15:31 +00:00
Dan Gohman
446c6c41f5 Experimental clang-based code-completion support for vim. This currently
depends on some clang patches which are not yet upstream.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112204 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26 18:12:22 +00:00
Owen Anderson
2a5892fe66 Make un-named values legible in certain vim configurations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109772 91177308-0d34-0410-b5e6-96231b3b80d8
2010-07-29 17:57:57 +00:00
Dan Gohman
f34ff01a7a Fix grammaro in a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97273 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-26 21:45:37 +00:00
Dan Gohman
7b14fc211c Add Revision keywords to these files, as it's common for them to be
copied out of the source tree.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97270 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-26 21:38:04 +00:00
Dan Gohman
d30103dd36 Improve the vim code for highlighting trailing whitespace and lines
longer than 80 columns. This replaces the heavy-handed "textwidth"
mechanism, and makes the trailing-whitespace highlighting lazy so
that it isn't constantly jumping on the user during typing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97267 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-26 21:24:46 +00:00
Dan Gohman
79073e3ea0 Add the alignstack keyword.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97264 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-26 21:16:17 +00:00
Dan Gohman
77c8ff906a Remove bogus Updated line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97263 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-26 21:15:49 +00:00
Dan Gohman
5f8bfebb38 Add the union keyword.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97155 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-25 18:17:58 +00:00
Jakob Stoklund Olesen
570a4a5d9c Reintroduce the InlineHint function attribute.
This time it's for real! I am going to hook this up in the frontends as well.

The inliner has some experimental heuristics for dealing with the inline hint.
When given a -respect-inlinehint option, functions marked with the inline
keyword are given a threshold just above the default for -O3.

We need some experiments to determine if that is the right thing to do.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95466 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-06 01:16:28 +00:00
Eric Christopher
606a1d1f59 Remove the InlineHint attribute. There are no current or planned
users.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93558 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-15 21:36:30 +00:00
Dan Gohman
7a523dde57 Tighten up the vim LLVM IR syntax highlighting regex for labels, and add a
highlighting rule for identifiers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93056 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-09 17:22:48 +00:00
Dan Gohman
acb75a9d70 Set the vim auto-indent setting for open braces after case statements to
follow LLVM source convention.

Before:
  case X: {
            stuff;
          }

After:
  case X: {
    stuff;
  }


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93055 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-09 17:15:21 +00:00
Dan Gohman
6b3bd7bbde Add indirectbr and blockaddress to the vim syntax highlighting file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85451 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-29 00:14:44 +00:00
Dale Johannesen
de86d473fc Add an 'inline hint' attribute to represent source
code hints that it would be a good idea to inline
a function ("inline" keyword).  No functional change
yet; FEs do not emit this and inliner does not use it.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80063 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-26 01:08:21 +00:00
Dan Gohman
b8281ca992 Add new function attribute keywords to the vim syntax.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78205 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05 16:38:48 +00:00
Dan Gohman
d5c947022d vim syntax highlighting for inbounds keyword.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77260 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-27 21:54:51 +00:00
Dan Gohman
e02a0aa3c6 Add new keywords to the vim syntax highlighting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76812 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-22 22:45:50 +00:00
Dan Gohman
21de024b90 Add the private keyword to the VIM syntax highlighting.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76134 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-17 01:06:53 +00:00
Dan Gohman
ae3a0be92e Split the Add, Sub, and Mul instruction opcodes into separate
integer and floating-point opcodes, introducing
FAdd, FSub, and FMul.

For now, the AsmParser, BitcodeReader, and IRBuilder all preserve
backwards compatability, and the Core LLVM APIs preserve backwards
compatibility for IR producers. Most front-ends won't need to change
immediately.

This implements the first step of the plan outlined here:
http://nondot.org/sabre/LLVMNotes/IntegerOverflow.txt


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72897 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-04 22:49:04 +00:00
Duncan Sands
4dc2b39bf8 It makes no sense to have a ODR version of common
linkage, so remove it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66690 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-11 20:14:15 +00:00
Duncan Sands
5f4ee1fc5d 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66650 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-11 08:08:06 +00:00
Duncan Sands
667d4b8de6 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66339 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-07 15:45:40 +00:00
Dan Gohman
748dbc6afb Fix a missing word.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62720 91177308-0d34-0410-b5e6-96231b3b80d8
2009-01-21 21:54:44 +00:00
Dan Gohman
907532dcbb Versions of VIM included with Intrepid and Leopard at least appear
to handle symlinks just fine, so reword the instructions in the
README accordingly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62719 91177308-0d34-0410-b5e6-96231b3b80d8
2009-01-21 21:52:42 +00:00