Commit Graph

4223 Commits

Author SHA1 Message Date
Kostya Serebryany
164b86b439 Extend Attributes to 64 bits
Problem: LLVM needs more function attributes than currently available (32 bits).
One such proposed attribute is "address_safety", which shows that a function is being checked for address safety (by AddressSanitizer, SAFECode, etc).

Solution:
- extend the Attributes from 32 bits to 64-bits
- wrap the object into a class so that unsigned is never erroneously used instead
- change "unsigned" to "Attributes" throughout the code, including one place in clang.
- the class has no "operator uint64 ()", but it has "uint64_t Raw() " to support packing/unpacking.
- the class has "safe operator bool()" to support the common idiom:  if (Attributes attr = getAttrs()) useAttrs(attr);
- The CTOR from uint64_t is marked explicit, so I had to add a few explicit CTOR calls
- Add the new attribute "address_safety". Doing it in the same commit to check that attributes beyond first 32 bits actually work.
- Some of the functions from the Attribute namespace are worth moving inside the class, but I'd prefer to have it as a separate commit.

Tested:
"make check" on Linux (32-bit and 64-bit) and Mac (10.6)
built/run spec CPU 2006 on Linux with clang -O2.


This change will break clang build in lib/CodeGen/CGCall.cpp.
The following patch will fix it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148553 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-20 17:56:17 +00:00
Chad Rosier
f46fbade8a Fix typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148497 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-19 21:50:08 +00:00
Jakob Stoklund Olesen
7739cad69d Add a new kind of MachineOperand: MO_RegisterMask.
Register masks will be used as a compact representation of large clobber
lists.  Currently, an x86 call instruction has some 40 operands
representing call-clobbered registers.  That's more than 1kB of useless
operands per call site.

A register mask operand references a bit mask of call-preserved
registers, everything else is clobbered.  The bit mask will typically
come from TargetRegisterInfo::getCallPreservedMask().

By abandoning ImplicitDefs for call-clobbered registers, it also becomes
possible to share call instruction descriptions between calling
conventions, and we can get rid of the WINCALL* instructions.

This patch introduces the new operand kind.  Future patches will add
RegMask support to target-independent passes before finally the fixed
clobber lists can be removed from call instruction descriptions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148250 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-16 19:22:00 +00:00
Joe Abbey
a0c1fc3bd3 Adding a Hexagon cell for segmented stacks, as they have been implemented for X86 and not Sparc...
Committed as obvious


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148237 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-16 13:16:05 +00:00
Duncan Sands
8d6796b796 Try to clarify a little how exception handling works.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148136 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-13 19:59:16 +00:00
Bill Wendling
bf5b13d07e Revert accidental commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148065 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-12 23:06:28 +00:00
Bill Wendling
86b1a7d614 Fix the code that was WRONG.
The registers are placed into the saved registers list in the reverse order,
which is why the original loop was written to loop backwards.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148064 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-12 23:05:03 +00:00
Eli Bendersky
0ff100dec0 Fix dead link
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147721 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-07 04:11:27 +00:00
Eli Bendersky
30c90c973a test commit (verifyiing commit access)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147600 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-05 08:18:41 +00:00
Jakob Stoklund Olesen
d9e5c764bf Freeze reserved registers before starting register allocation.
The register allocators don't currently support adding reserved
registers while they are running.  Extend the MRI API to keep track of
the set of reserved registers when register allocation started.

Target hooks like hasFP() and needsStackRealignment() can look at this
set to avoid reserving more registers during register allocation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147577 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-05 00:26:49 +00:00
Eric Christopher
5e33d21d7f Fix typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147456 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-03 18:38:37 +00:00
Duncan Sands
cf6bd5a7c3 Correct spelling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147435 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-02 16:55:01 +00:00
NAKAMURA Takumi
45ba16588d Happy new year 2012!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147395 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-01 08:16:56 +00:00
Nadav Rotem
859c645310 Update the LangRef documentation: the codegen does support this instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147274 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-25 21:32:35 +00:00
Nadav Rotem
7559766c63 Add a few lines to the release notes:
1. pointer-vector
2. type legalizer changes and vector-select
3. X86 ISA changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146964 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-20 08:02:50 +00:00
Dan Gohman
eb4c70b9c4 Add a line to ReleaseNotes for half float.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146939 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-20 01:10:56 +00:00
Jakob Stoklund Olesen
9897c622e0 Remove a register class that can just as well be synthesized.
Add the new TableGen register class synthesizer feature to the release
notes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146875 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-19 16:53:40 +00:00
Dan Gohman
ce16339930 The powers that be have decided that LLVM IR should now support 16-bit
"half precision" floating-point with a first-class type.

This patch adds basic IR support (but not codegen support).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146786 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-17 00:04:22 +00:00
Eric Christopher
adfc1ef14a Fix spacing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146782 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-16 23:42:35 +00:00
Eric Christopher
402e12a2f3 Update documentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146781 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-16 23:42:33 +00:00
Devang Patel
473f95febe Clarify and fix subprogram description.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146743 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-16 17:50:04 +00:00
Jakob Stoklund Olesen
f5bb45f895 Note ARM constant island alignment in the release notes.
The command line option should be removed, but not until the feature has
gotten a lot of testing. The ARMConstantIslandPass tends to have subtle
bugs that only show up after a while.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146739 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-16 16:07:41 +00:00
Evan Cheng
28681863af Add a blurb about MachineInstr bundling support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146603 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-14 22:57:45 +00:00
Evan Cheng
2e9c7244b9 Add high level description of MachineInstr bundles.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146589 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-14 21:32:14 +00:00
Duncan Sands
20536b5bca Vectors are not aggregate types (see isAggregateType).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146561 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-14 15:44:20 +00:00
Kostya Serebryany
1ff33e52c3 mention AddressSanitizer in 3.1 release notes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146505 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13 19:46:24 +00:00
Chris Lattner
21e1b7a13c Rip llvm 3.0 out of the release notes, making room for LLVM 3.1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146493 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13 17:55:30 +00:00
Bill Wendling
a349539f87 Use the example from clang, not the GCC frontend, which doesn't exist anymore.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146461 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13 01:07:07 +00:00
Daniel Dunbar
e5609abccb llvm-build: Switch to using the common subdirectory list instead of
autodiscovery.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146437 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12 22:45:59 +00:00
Daniel Dunbar
a3217165c6 llvm-build: Add sketchy support for preserving comments when using
--write-llvmbuild.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146434 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12 22:45:35 +00:00
Tony Linthicum
b4b54153ad Hexagon backend support
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146412 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12 21:14:40 +00:00
Daniel Dunbar
4ab406d7fc LLVMBuild: Remove trailing newline, which irked me.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146409 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12 19:48:00 +00:00
Chandler Carruth
48b0bbf930 Update the LangRef documentation for llvm.ctlz and llvm.cttz to specify
the behavior with the newly added flag for undefined results on a zero
input.

I'm terrible at documentation, so comments and suggestions welcome here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146361 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12 04:36:04 +00:00
Bill Wendling
262396b644 Random cleanups. No description changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146288 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09 22:41:40 +00:00
Bill Wendling
b583e42265 Revert r146041 et al. The FunctionPass doesn't take an address but the ID.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146268 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09 19:11:02 +00:00
Chad Rosier
85f5a1ae39 Typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146234 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09 02:00:44 +00:00
Bill Wendling
996ff1469f Also pass in correct initializer here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146044 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-07 18:18:11 +00:00
Bill Wendling
465becf481 Correct initializer in example.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146041 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-07 18:02:44 +00:00
Jakub Staszak
f8de54f37b Make Release Notes HTML 4.01 Strict.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145991 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 23:33:07 +00:00
Anshuman Dasgupta
6805b56e77 Add documentation for machine-independent DFA packetizer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145988 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 23:12:42 +00:00
Jakub Staszak
44762ca82f Add link to builtin_expect in Release Notes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145979 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 22:31:27 +00:00
Jakub Staszak
93e9d3abe5 Add link to llvm.expect in Release Notes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145964 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 20:56:36 +00:00
Dan Gohman
e1a2984847 Fix a subtle semantic issue with poison values that came up in
recent discussions. Poison can't make every value that depends on
it act in maximally undefined ways, because the optimizer may still
hoist code following the usual rules for undef. Make Poison invoke
its full undefined behavior only when it reaches an instruction with
externally visible side effects.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145913 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 03:35:58 +00:00
Dan Gohman
5cdc51ea7b Line up the comments in a code example.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145908 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 03:31:14 +00:00
Dan Gohman
bfb056dccf Rename "Trap Values" to "Poison Values", to better reflect their
purpose, and to avoid ambiguity with other uses of the word "trap"
in LangRef.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145907 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06 03:18:47 +00:00
Bill Wendling
9bd5d044b7 Move 'returns_twice' definition into alphabetical place.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145854 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-05 21:27:54 +00:00
Nadav Rotem
1608769abe Add support for vectors of pointers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145801 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-05 06:29:09 +00:00
Jakub Staszak
8e1b12ae68 Fix table of contents.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145793 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-04 20:44:25 +00:00
Jakub Staszak
b170e2de83 Add 'llvm.expect' intrinsic description.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145792 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-04 18:29:26 +00:00
Chris Lattner
9b15ba934c fix broken tag
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145590 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-01 17:25:28 +00:00