platform/upstream/llvm.git
10 years ago[PowerPC] ELFv2 explicit CFI for CR fields
Ulrich Weigand [Mon, 21 Jul 2014 00:03:18 +0000 (00:03 +0000)]
[PowerPC] ELFv2 explicit CFI for CR fields

This is a minor improvement in the ELFv2 ABI.   In ELFv1, DWARF CFI
would represent a saved CR word (holding CR fields CR2, CR3, and CR4)
using just a single CFI record refering to CR2.   In ELFv2 instead,
each of the CR fields is represented by its own CFI record.  The
advantage is that the compiler can now chose to save just a single
(or two) CR fields instead of all of them, if those are the only ones
that actually need saving.  That can lead to more efficient code using
mf(o)crf instead of the (slow) mfcr instruction.

Note that this patch does not (yet) implement this more efficient
code generation, but it does implement the part that is required to
be ABI compliant: creating multiple CFI records if multiple CR fields
are saved.

Reviewed by Hal Finkel.

llvm-svn: 213492

10 years ago[PowerPC] ELFv2 dynamic loader support
Ulrich Weigand [Sun, 20 Jul 2014 23:53:14 +0000 (23:53 +0000)]
[PowerPC] ELFv2 dynamic loader support

This patch enables the new ELFv2 ABI in the runtime dynamic loader.
The loader has to implement the following features:
- In the ELFv2 ABI, do not look up a function descriptor in .opd, but
  instead use the local entry point when resolving a direct call.
- Update the TOC restore code to use the new TOC slot linkage area
  offset.
- Create PLT stubs appropriate for the ELFv2 ABI.

Note that this patch also adds common-code changes. These are necessary
because the loader must check the newly added ELF flags: the e_flags
header bits encoding the ABI version, and the st_other symbol table
entry bits encoding the local entry point offset.  There is currently
no way to access these, so I've added ObjectFile::getPlatformFlags and
SymbolRef::getOther accessors.

Reviewed by Hal Finkel.

llvm-svn: 213491

10 years ago[PowerPC] ELFv2 stack space reduction
Ulrich Weigand [Sun, 20 Jul 2014 23:43:15 +0000 (23:43 +0000)]
[PowerPC] ELFv2 stack space reduction

The ELFv2 ABI reduces the amount of stack required to implement an
ABI-compliant function call in two ways:
* the "linkage area" is reduced from 48 bytes to 32 bytes by
  eliminating two unused doublewords
* the 64-byte "parameter save area" is now optional and need not be
  present in certain cases (it remains mandatory in functions with
  variable arguments, and functions that have any parameter that is
  passed on the stack)

The following patch implements this required changes:
- reducing the linkage area, and associated relocation of the TOC save
  slot, in getLinkageSize / getTOCSaveOffset (this requires updating all
  callers of these routines to pass in the isELFv2ABI flag).
- (partially) handling the case where the parameter save are is optional

This latter part requires some extra explanation:  Currently, we still
always allocate the parameter save area when *calling* a function.
That is certainly always compliant with the ABI, but may cause code to
allocate stack unnecessarily.  This can be addressed by a follow-on
optimization patch.

On the *callee* side, in LowerFormalArguments, we *must* track
correctly whether the ABI guarantees that the caller has allocated
the parameter save area for our use, and the patch does so. However,
there is one complication: the code that handles incoming "byval"
arguments will currently *always* write to the parameter save area,
because it has to force incoming register arguments to the stack since
it must return an *address* to implement the byval semantics.

To fix this, the patch changes the LowerFormalArguments code to write
arguments to a freshly allocated stack slot on the function's own stack
frame instead of the argument save area in those cases where that area
is not present.

Reviewed by Hal Finkel.

llvm-svn: 213490

10 years ago[PowerPC] ELFv2 function call changes
Ulrich Weigand [Sun, 20 Jul 2014 23:31:44 +0000 (23:31 +0000)]
[PowerPC] ELFv2 function call changes

This patch builds upon the two preceding MC changes to implement the
basic ELFv2 function call convention.  In the ELFv1 ABI, a "function
descriptor" was associated with every function, pointing to both the
entry address and the related TOC base (and a static chain pointer
for nested functions).  Function pointers would actually refer to that
descriptor, and the indirect call sequence needed to load up both entry
address and TOC base.

In the ELFv2 ABI, there are no more function descriptors, and function
pointers simply refer to the (global) entry point of the function code.
Indirect function calls simply branch to that address, after loading it
up into r12 (as required by the ABI rules for a global entry point).
Direct function calls continue to just do a "bl" to the target symbol;
this will be resolved by the linker to the local entry point of the
target function if it is local, and to a PLT stub if it is global.
That PLT stub would then load the (global) entry point address of the
final target into r12 and branch to it.  Note that when performing a
local function call, r2 must be set up to point to the current TOC
base: if the target ends up local, the ABI requires that its local
entry point is called with r2 set up; if the target ends up global,
the PLT stub requires that r2 is set up.

This patch implements all LLVM changes to implement that scheme:
- No longer create a function descriptor when emitting a function
  definition (in EmitFunctionEntryLabel)
- Emit two entry points *if* the function needs the TOC base (r2)
  anywhere (this is done EmitFunctionBodyStart; note that this cannot
  be done in EmitFunctionBodyStart because the global entry point
  prologue code must be *part* of the function as covered by debug info).
- In order to make use tracking of r2 (as needed above) work correctly,
  mark direct function calls as implicitly using r2.
- Implement the ELFv2 indirect function call sequence (no function
  descriptors; load target address into r12).
- When creating an ELFv2 object file, emit the .abiversion 2 directive
  to tell the linker to create the appropriate version of PLT stubs.

Reviewed by Hal Finkel.

llvm-svn: 213489

10 years ago[LoopVectorize] Remove an unused private AA pointer
Hal Finkel [Sun, 20 Jul 2014 23:28:25 +0000 (23:28 +0000)]
[LoopVectorize] Remove an unused private AA pointer

Thanks to the lld-x86_64-darwin13 builder for catching this first.

llvm-svn: 213488

10 years ago[MC] Pass MCSymbolData to needsRelocateWithSymbol
Ulrich Weigand [Sun, 20 Jul 2014 23:15:06 +0000 (23:15 +0000)]
[MC] Pass MCSymbolData to needsRelocateWithSymbol

As discussed in a previous checking to support the .localentry
directive on PowerPC, we need to inspect the actual target symbol
in needsRelocateWithSymbol to make the appropriate decision based
on that symbol's st_other bits.

Currently, needsRelocateWithSymbol does not get the target symbol.
However, it is directly available to its sole caller.  This patch
therefore simply extends the needsRelocateWithSymbol by a new
parameter "const MCSymbolData &SD", passes in the target symbol,
and updates all derived implementations.

In particular, in the PowerPC implementation, this patch removes
the FIXME added by the previous checkin.

llvm-svn: 213487

10 years ago[LoopVectorize] Use AA to partition potential dependency checks
Hal Finkel [Sun, 20 Jul 2014 23:07:52 +0000 (23:07 +0000)]
[LoopVectorize] Use AA to partition potential dependency checks

Prior to this change, the loop vectorizer did not make use of the alias
analysis infrastructure. Instead, it performed memory dependence analysis using
ScalarEvolution-based linear dependence checks within equivalence classes
derived from the results of ValueTracking's GetUnderlyingObjects.

Unfortunately, this meant that:
  1. The loop vectorizer had logic that essentially duplicated that in BasicAA
     for aliasing based on identified objects.
  2. The loop vectorizer could not partition the space of dependency checks
     based on information only easily available from within AA (TBAA metadata is
     currently the prime example).

This means, for example, regardless of whether -fno-strict-aliasing was
provided, the vectorizer would only vectorize this loop with a runtime
memory-overlap check:

void foo(int *a, float *b) {
  for (int i = 0; i < 1600; ++i)
    a[i] = b[i];
}

This is suboptimal because the TBAA metadata already provides the information
necessary to show that this check unnecessary. Of course, the vectorizer has a
limit on the number of such checks it will insert, so in practice, ignoring
TBAA means not vectorizing more-complicated loops that we should.

This change causes the vectorizer to use an AliasSetTracker to keep track of
the pointers in the loop. The resulting alias sets are then used to partition
the space of dependency checks, and potential runtime checks; this results in
more-efficient vectorizations.

When pointer locations are added to the AliasSetTracker, two things are done:
  1. The location size is set to UnknownSize (otherwise you'd not catch
     inter-iteration dependencies)
  2. For instructions in blocks that would need to be predicated, TBAA is
     removed (because the metadata might have a control dependency on the condition
     being speculated).

For non-predicated blocks, you can leave the TBAA metadata. This is safe
because you can't have an iteration dependency on the TBAA metadata (if you
did, and you unrolled sufficiently, you'd end up with the same pointer value
used by two accesses that TBAA says should not alias, and that would yield
undefined behavior).

llvm-svn: 213486

10 years ago[PowerPC] ELFv2 MC support for .localentry directive
Ulrich Weigand [Sun, 20 Jul 2014 23:06:03 +0000 (23:06 +0000)]
[PowerPC] ELFv2 MC support for .localentry directive

A second binutils feature needed to support ELFv2 is the .localentry
directive.  In the ELFv2 ABI, functions may have two entry points:
one for calling the routine locally via "bl", and one for calling the
function via function pointer (either at the source level, or implicitly
via a PLT stub for global calls).  The two entry points share a single
ELF symbol, where the ELF symbol address identifies the global entry
point address, while the local entry point is found by adding a delta
offset to the symbol address.  That offset is encoded into three
platform-specific bits of the ELF symbol st_other field.

The .localentry directive instructs the assembler to set those fields
to encode a particular offset.  This is typically used by a function
prologue sequence like this:

func:
        addis r2, r12, (.TOC.-func)@ha
        addi r2, r2, (.TOC.-func)@l
        .localentry func, .-func

Note that according to the ABI, when calling the global entry point,
r12 must be set to point the global entry point address itself; while
when calling the local entry point, r2 must be set to point to the TOC
base.  The two instructions between the global and local entry point in
the above example translate the first requirement into the second.

This patch implements support in the PowerPC MC streamers to emit the
.localentry directive (both into assembler and ELF object output), as
well as support in the assembler parser to parse that directive.

In addition, there is another change required in MC fixup/relocation
handling to properly deal with relocations targeting function symbols
with two entry points: When the target function is known local, the MC
layer would immediately handle the fixup by inserting the target
address -- this is wrong, since the call may need to go to the local
entry point instead.  The GNU assembler handles this case by *not*
directly resolving fixups targeting functions with two entry points,
but always emits the relocation and relies on the linker to handle
this case correctly.  This patch changes LLVM MC to do the same (this
is done via the processFixupValue routine).

Similarly, there are cases where the assembler would normally emit a
relocation, but "simplify" it to a relocation targeting a *section*
instead of the actual symbol.  For the same reason as above, this
may be wrong when the target symbol has two entry points.  The GNU
assembler again handles this case by not performing this simplification
in that case, but leaving the relocation targeting the full symbol,
which is then resolved by the linker.  This patch changes LLVM MC
to do the same (via the needsRelocateWithSymbol routine).
NOTE: The method used in this patch is overly pessimistic, since the
needsRelocateWithSymbol routine currently does not have access to the
actual target symbol, and thus must always assume that it might have
two entry points.  This will be improved upon by a follow-on patch
that modifies common code to pass the target symbol when calling
needsRelocateWithSymbol.

Reviewed by Hal Finkel.

llvm-svn: 213485

10 years ago[PowerPC] ELFv2 MC support for .abiversion directive
Ulrich Weigand [Sun, 20 Jul 2014 22:56:57 +0000 (22:56 +0000)]
[PowerPC] ELFv2 MC support for .abiversion directive

ELFv2 binaries are marked by a bit in the ELF header e_flags field.
A new assembler directive .abiversion can be used to set that flag.
This patch implements support in the PowerPC MC streamers to emit the
.abiversion directive (both into assembler and ELF binary output),
as well as support in the assembler parser to parse the .abiversion
directive.

Reviewed by Hal Finkel.

llvm-svn: 213484

10 years ago[PowerPC] Refactor byval handling in LowerFormalArguments_64SVR4
Ulrich Weigand [Sun, 20 Jul 2014 22:36:52 +0000 (22:36 +0000)]
[PowerPC] Refactor byval handling in LowerFormalArguments_64SVR4

When handling an incoming byval argument, we need to possibly write
incoming registers to the stack in order to create an on-stack image
of the parameter, so we can return its address to common code.

This currently uses CreateFixedObject to access the parts of the
parameter save area where the argument is (or needs to be) stored.
However, sometimes we need to access multiple parts of that area,
e.g. to write multiple registers.  The code currently uses a new
CreateFixedObject call for each of these accesses, resulting in
a patchwork of overlapping (fixed) stack objects.

This doesn't really matter in the case of fixed objects, since
any access to those turns into a fixed stackpointer + offset
address anyway.  However, with the upcoming ELFv2 patches, we
may actually need to place an incoming argument into our *own*
stack frame instead of the caller's.  This means we need to use
CreateStackObject instead, and we cannot have multiple overlapping
instances of those.

To make the rest of the argument handling code work equally in
both situations, this patch refactors it to always use just a
single call to CreateFixedObject, and access parts of that object
as required using address arithmetic.  This way, we can in a future
patch substitute CreateStackObject without further changes.

No change to generated code intended.

llvm-svn: 213483

10 years ago[PowerPC] Fix FrameIndex handling in SelectAddressRegImm
Ulrich Weigand [Sun, 20 Jul 2014 22:26:40 +0000 (22:26 +0000)]
[PowerPC] Fix FrameIndex handling in SelectAddressRegImm

The PPCTargetLowering::SelectAddressRegImm routine needs to handle
FrameIndex nodes in a special manner, by tranlating them into a
TargetFrameIndex node.  This was done in most cases, but seems to
have been neglected in one path: when the input tree has an OR of
the FrameIndex with an immediate.  This can happen if the FrameIndex
can be proven to be sufficiently aligned that an OR of that immediate
is equivalent to an ADD.

The missing handling of FrameIndex in that case caused the SelectionDAG
instruction selection to miss opportunities to merge the OR back into
the FrameIndex node, leading to superfluous addi/ori instructions in
the final assembler output.

llvm-svn: 213482

10 years agoRedo THUMB support.
Joerg Sonnenberger [Sun, 20 Jul 2014 20:53:37 +0000 (20:53 +0000)]
Redo THUMB support.

Discussed with and tested by: Saleem Abdulrasool

llvm-svn: 213481

10 years ago[Mips] Replace assembler code by YAML to make the 'dynlib-fileheader.test'
Simon Atanasyan [Sun, 20 Jul 2014 20:03:46 +0000 (20:03 +0000)]
[Mips] Replace assembler code by YAML to make the 'dynlib-fileheader.test'
test target independent.

llvm-svn: 213480

10 years agoRevert r213467, it breaks non-thumb mode.
Joerg Sonnenberger [Sun, 20 Jul 2014 20:00:26 +0000 (20:00 +0000)]
Revert r213467, it breaks non-thumb mode.

llvm-svn: 213479

10 years agoNamespace cleanup (no functional change)
Artyom Skrobov [Sun, 20 Jul 2014 12:08:28 +0000 (12:08 +0000)]
Namespace cleanup (no functional change)

llvm-svn: 213478

10 years agoSIISelLowering.cpp: Define _USE_MATH_DEFINES to let M_PI provided on MS <cmath>.
NAKAMURA Takumi [Sun, 20 Jul 2014 11:15:07 +0000 (11:15 +0000)]
SIISelLowering.cpp: Define _USE_MATH_DEFINES to let M_PI provided on MS <cmath>.

FIXME: Would it be better to move it into configure?
llvm-svn: 213477

10 years agoMachineRegionInfo.cpp: Another fix on MachineRegionInfo::MachineRegionInfo::recalcula...
NAKAMURA Takumi [Sun, 20 Jul 2014 11:14:55 +0000 (11:14 +0000)]
MachineRegionInfo.cpp: Another fix on MachineRegionInfo::MachineRegionInfo::recalculate() to appease msc17.

llvm-svn: 213476

10 years agoRemove braces around single-statement block and rangify outer loop.
Manuel Jacob [Sun, 20 Jul 2014 09:20:47 +0000 (09:20 +0000)]
Remove braces around single-statement block and rangify outer loop.

This is a follow-up to r213474.

llvm-svn: 213475

10 years ago[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges.
Manuel Jacob [Sun, 20 Jul 2014 09:10:11 +0000 (09:10 +0000)]
[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges.

Summary: This patch introduces two new iterator ranges and updates existing code to use it.  No functional change intended.

Test Plan: All tests (make check-all) still pass.

Reviewers: dblaikie

Reviewed By: dblaikie

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D4481

llvm-svn: 213474

10 years agoR600: Add missing test for concat_vectors
Matt Arsenault [Sun, 20 Jul 2014 07:13:17 +0000 (07:13 +0000)]
R600: Add missing test for concat_vectors

llvm-svn: 213473

10 years agoR600: Remove unused function
Matt Arsenault [Sun, 20 Jul 2014 06:31:06 +0000 (06:31 +0000)]
R600: Remove unused function

llvm-svn: 213472

10 years agoR600/SI: Remove dead code and add missing tests.
Matt Arsenault [Sun, 20 Jul 2014 06:11:02 +0000 (06:11 +0000)]
R600/SI: Remove dead code and add missing tests.

This probably was killed by some generic DAGCombiner
improvements in checking the TargetBooleanContents instead
of just 1.

llvm-svn: 213471

10 years agolinux process: silence GCC switch coverage warning
Saleem Abdulrasool [Sun, 20 Jul 2014 05:28:57 +0000 (05:28 +0000)]
linux process: silence GCC switch coverage warning

Add missing entry for eExecMessage message type to silence GCC switch coverage
warning.

llvm-svn: 213470

10 years agobuild: fix cmake warning with newer CMake
Saleem Abdulrasool [Sun, 20 Jul 2014 05:28:55 +0000 (05:28 +0000)]
build: fix cmake warning with newer CMake

Hoist the compatibility macros out a level and re-use them when adding link
dependencies.  Silences a warning from CMake.

llvm-svn: 213469

10 years agoUpdate formatting with clang-format.
Bill Wendling [Sun, 20 Jul 2014 05:28:52 +0000 (05:28 +0000)]
Update formatting with clang-format.

llvm-svn: 213468

10 years agoARM: fix division in some cases
Saleem Abdulrasool [Sun, 20 Jul 2014 04:44:21 +0000 (04:44 +0000)]
ARM: fix division in some cases

For ARM cores that are ARMv6T2+ but not ARMv7ve or ARMv7-r and not an updated
ARMv7-a that has the idiv extension (chips with clz but not idiv), an incorrect
jump would be calculated due to the preference to thumb instructions over ARM.

Rather than computing the target at runtime, use a jumptable instead.  This
trades a bit of storage for performance.  The overhead is 32-bytes for each of
the three routines, but avoid the calculation of the offset.

Because clz was introduced in ARMv6T2 and idiv in certain versions of ARMv7,
the non-clz, non-idiv case implies a target which does not support Thumb-2, and
thus we cannot use Thumb on those targets (as it is unlikely that the assembly
will assemble).

Take the opportunity to refactor the IT block macros into assembly.h rather than
redefining them in the TUs where they are used.

Existing tests cover the full change already, so no new tests are added.

This effectively reverts SVN r213309.

llvm-svn: 213467

10 years agoFix msc17 build. RegionInfo::RegionInfo::recalculate() doesn't make sense.
NAKAMURA Takumi [Sun, 20 Jul 2014 03:57:51 +0000 (03:57 +0000)]
Fix msc17 build. RegionInfo::RegionInfo::recalculate() doesn't make sense.

llvm-svn: 213466

10 years agoFix -Asserts build introduced since r213456.
NAKAMURA Takumi [Sun, 20 Jul 2014 00:00:42 +0000 (00:00 +0000)]
Fix -Asserts build introduced since r213456.

llvm-svn: 213465

10 years agoSure up ownership passing of the PBQPBuilder by passing unique_ptrs by value rather...
David Blaikie [Sat, 19 Jul 2014 21:19:45 +0000 (21:19 +0000)]
Sure up ownership passing of the PBQPBuilder by passing unique_ptrs by value rather than lvalue reference.

Also removes an unnecessary '.release()' that should've been a std::move
anyway. (I'm on a hunt for '.release()' calls)

llvm-svn: 213464

10 years agoMC: permit emitting a symbol value as section relative
Saleem Abdulrasool [Sat, 19 Jul 2014 21:01:58 +0000 (21:01 +0000)]
MC: permit emitting a symbol value as section relative

This adds an optional parameter to the EmitSymbolValue method in MCStreamer to
permit emitting a symbol value as a section relative value.  This is to cover
the use in MCDwarf which should not really know about how to emit a section
relative value for a given target.

This addresses post-review comments from Eric Christopher in SVN r213275.

llvm-svn: 213463

10 years ago[Mips] Replace assembler code by YAML to make the test 'dynlib-dynamic.test'
Simon Atanasyan [Sat, 19 Jul 2014 20:18:46 +0000 (20:18 +0000)]
[Mips] Replace assembler code by YAML to make the test 'dynlib-dynamic.test'
target independent.

llvm-svn: 213462

10 years agoRevert accidentally committed r213459
Matt Arsenault [Sat, 19 Jul 2014 19:17:33 +0000 (19:17 +0000)]
Revert accidentally committed r213459

llvm-svn: 213461

10 years agoFix build with GCC.
Matt Arsenault [Sat, 19 Jul 2014 19:16:36 +0000 (19:16 +0000)]
Fix build with GCC.

Seems like a bug in either GCC or clang, but I'm
not sure which is right.

llvm-svn: 213460

10 years agoXXX - Increase unroll threshold
Matt Arsenault [Sat, 19 Jul 2014 19:16:34 +0000 (19:16 +0000)]
XXX - Increase unroll threshold

llvm-svn: 213459

10 years agoR600/SI: implement range reduction for sin/cos
Matt Arsenault [Sat, 19 Jul 2014 18:44:39 +0000 (18:44 +0000)]
R600/SI: implement range reduction for sin/cos

These instructions can only take a limited input range, and return
the constant value 1 out of range. We should do range reduction to
be able to process arbitrary values. Use a FRACT instruction after
normalization to achieve this. Also add a test for constant folding
with the lowered code with unsafe-fp-math enabled.

v2: use DAG lowering instead of intrinsic, adapt test
v3: calculate constant, fold pattern into instruction definition
v4: misc style fixes, add sin-fold testcase, cosmetics

Patch by Grigori Goronzy

llvm-svn: 213458

10 years agoUpdate for RegionInfo changes.
Matt Arsenault [Sat, 19 Jul 2014 18:40:17 +0000 (18:40 +0000)]
Update for RegionInfo changes.

Mostly related to missing includes and renaming of
the pass to RegionInfoPass.

llvm-svn: 213457

10 years agoTemplatify RegionInfo so it works on MachineBasicBlocks
Matt Arsenault [Sat, 19 Jul 2014 18:29:29 +0000 (18:29 +0000)]
Templatify RegionInfo so it works on MachineBasicBlocks

llvm-svn: 213456

10 years agoR600: Implement a few simple TTI queries.
Matt Arsenault [Sat, 19 Jul 2014 18:15:16 +0000 (18:15 +0000)]
R600: Implement a few simple TTI queries.

I'm not sure if these have any effect right now.

llvm-svn: 213455

10 years agoIf a module build reports errors, don't try to load it
Ben Langmuir [Sat, 19 Jul 2014 16:29:28 +0000 (16:29 +0000)]
If a module build reports errors, don't try to load it

... just to find out that it didn't build.

llvm-svn: 213454

10 years ago[LoopVectorize] Use CreateAligned(Load|Store)
Hal Finkel [Sat, 19 Jul 2014 13:39:45 +0000 (13:39 +0000)]
[LoopVectorize] Use CreateAligned(Load|Store)

IRBuilder has CreateAligned(Load|Store) functions; use them and we don't need
to make a second call to setAlignment.

No functionality change intended.

llvm-svn: 213453

10 years ago[LoopVectorize] Propagate known metadata to vectorized instructions
Hal Finkel [Sat, 19 Jul 2014 13:33:16 +0000 (13:33 +0000)]
[LoopVectorize] Propagate known metadata to vectorized instructions

There are some kinds of metadata that are safe to propagate from the scalar
instructions to the vector instructions (fpmath and tbaa currently).

Regarding TBAA, one might worry about propagating it on if-converted loads and
stores, because the metadata might have had a control dependency on the
condition, and thus actually aliased with some other non-speculated memory
access when the condition was false. However, this would be caught by the
runtime overlap checks.

llvm-svn: 213452

10 years ago[x86] Fix wrong shuffle mask in test 'combine-vec-shuffle-3.ll'. No functional change.
Andrea Di Biagio [Sat, 19 Jul 2014 07:52:58 +0000 (07:52 +0000)]
[x86] Fix wrong shuffle mask in test 'combine-vec-shuffle-3.ll'. No functional change.

Function @test3c should check that the DAGCombiner is able to fold a pair of
shuffles into a new shuffle with a permute mask of <6,7,2,3>. However, one of
the shuffles in @test3c had a wrong permute mask; this prevented the DAGCombiner
from folding the shuffles into the expected result.
Now that the shuffle mask is fixed, the backend correctly folds the two shuffles
in function @test3c into a single movhlps instruction.

llvm-svn: 213451

10 years agoRevert D3908 due to issues on Mac platforms
Viktor Kutuzov [Sat, 19 Jul 2014 05:58:38 +0000 (05:58 +0000)]
Revert D3908 due to issues on Mac platforms

llvm-svn: 213450

10 years agoHandle AddrSpaceCast in stripAndAccumulateInBoundsConstantOffsets
Hal Finkel [Sat, 19 Jul 2014 03:32:02 +0000 (03:32 +0000)]
Handle AddrSpaceCast in stripAndAccumulateInBoundsConstantOffsets

All of the other similar functions in that part of the file look through
addrspacecast in addition to bitcast, and I see no reason why
stripAndAccumulateInBoundsConstantOffsets shouldn't do so also.

llvm-svn: 213449

10 years agoMergedLoadStoreMotion.cpp: Fix msc17 build. Member initializer is unavailable.
NAKAMURA Takumi [Sat, 19 Jul 2014 03:29:25 +0000 (03:29 +0000)]
MergedLoadStoreMotion.cpp: Fix msc17 build. Member initializer is unavailable.

llvm-svn: 213448

10 years agoMake Value::isDereferenceablePointer handle offsets to pointer types with dereference...
Hal Finkel [Sat, 19 Jul 2014 03:25:16 +0000 (03:25 +0000)]
Make Value::isDereferenceablePointer handle offsets to pointer types with dereferenceable attributes

When we have a parameter (or call site return) with a dereferenceable
attribute, it can specify the size of an array pointed to by that parameter. If
we have a value for which we can accumulate a constant offset to such a
parameter, then we can use that offset in a direct comparison with the size
specified by the dereferenceable attribute.

This enables us to handle cases like this:

  int foo(int a[static 3]) {
    return a[2]; /* this is always dereferenceable */
  }

llvm-svn: 213447

10 years agoCleanup comparisons to VariableArrayType::Static for non-VLAs
Hal Finkel [Sat, 19 Jul 2014 02:13:40 +0000 (02:13 +0000)]
Cleanup comparisons to VariableArrayType::Static for non-VLAs

The enum is part of ArrayType, so there is no functional change, but comparing
to ArrayType::Static for non-VLAs makes more sense.

llvm-svn: 213446

10 years agoTypePrinter should not ignore IndexTypeCVRQualifiers on constant-sized arrays
Hal Finkel [Sat, 19 Jul 2014 02:01:03 +0000 (02:01 +0000)]
TypePrinter should not ignore IndexTypeCVRQualifiers on constant-sized arrays

C99 array parameters can have index-type CVR qualifiers, and the TypePrinter
should print them when present (and we were not for constant-sized arrays).
Otherwise, we'd drop the restrict in:

  int foo(int a[restrict static 3]) { ... }

llvm-svn: 213445

10 years agoUse the dereferenceable attribute on C99 array parameters with static
Hal Finkel [Sat, 19 Jul 2014 01:41:07 +0000 (01:41 +0000)]
Use the dereferenceable attribute on C99 array parameters with static

In C99, an array parameter declarator might have the form:
  direct-declarator '[' 'static' type-qual-list[opt] assign-expr ']'

where the static keyword indicates that the caller will always provide a
pointer to the beginning of an array with at least the number of elements
specified by the assignment expression. For constant sizes, we can use the
new dereferenceable attribute to pass this information to the optimizer. For
VLAs, we don't know the size, but (for addrspace(0)) do know that the pointer
must be nonnull (and so we can use the nonnull attribute).

llvm-svn: 213444

10 years agoPR20356: Fix all Sema warnings with mismatched ext_/warn_ versus
Richard Smith [Sat, 19 Jul 2014 01:39:17 +0000 (01:39 +0000)]
PR20356: Fix all Sema warnings with mismatched ext_/warn_ versus
ExtWarn/Warnings. Mostly the name of the warning was changed to match the
semantics, but in the PR20356 cases, the warning was about valid code, so the
diagnostic was changed from ExtWarn to Warning instead.

llvm-svn: 213443

10 years agoARM: correct WoA __builtin_alloca handling on O0
Saleem Abdulrasool [Sat, 19 Jul 2014 01:29:51 +0000 (01:29 +0000)]
ARM: correct WoA __builtin_alloca handling on O0

When performing a dynamic stack adjustment without optimisations, we would mark
SP as def and R4 as kill.  This occurred as part of the expansion of a
WIN__CHKSTK SDNode which indicated the proper handling of SP and R4.  The result
would be that we would double define SP as part of an operation, which is
obviously incorrect.

Furthermore, the VTList for the chain had an incorrect parameter type of i32
instead of Other.

Correct these to permit proper lowering of __builtin_alloca at -O0.

llvm-svn: 213442

10 years agoclang/test/Misc/backend-optimization-failure.cpp: Appease to add -triple=x86_64.
NAKAMURA Takumi [Sat, 19 Jul 2014 01:17:32 +0000 (01:17 +0000)]
clang/test/Misc/backend-optimization-failure.cpp: Appease to add -triple=x86_64.

FIXME: Could this be made generic?
llvm-svn: 213441

10 years agoAdd the ability to suppress the creation of a persistent
Jim Ingham [Sat, 19 Jul 2014 01:09:16 +0000 (01:09 +0000)]
Add the ability to suppress the creation of a persistent
result variable and use in in "Process::LoadImage" so that,
for instance, "process load" doesn't increment the return
variable number.

llvm-svn: 213440

10 years agoRemove uses of the redundant ".reset(nullptr)" of unique_ptr, in favor of ".reset()"
David Blaikie [Sat, 19 Jul 2014 01:06:45 +0000 (01:06 +0000)]
Remove uses of the redundant ".reset(nullptr)" of unique_ptr, in favor of ".reset()"

It's also possible to just write "= nullptr", but there's some question
of whether that's as readable, so I leave it up to authors to pick which
they prefer for now. If we want to discuss standardizing on one or the
other, we can do that at some point in the future.

llvm-svn: 213439

10 years agoRemove uses of the redundant ".reset(nullptr)" of unique_ptr, in favor of ".reset()"
David Blaikie [Sat, 19 Jul 2014 01:05:11 +0000 (01:05 +0000)]
Remove uses of the redundant ".reset(nullptr)" of unique_ptr, in favor of ".reset()"

It's also possible to just write "= nullptr", but there's some question
of whether that's as readable, so I leave it up to authors to pick which
they prefer for now. If we want to discuss standardizing on one or the
other, we can do that at some point in the future.

llvm-svn: 213438

10 years ago[MS-ABI] Assign SEH handler indices to __try blocks
Warren Hunt [Sat, 19 Jul 2014 00:45:07 +0000 (00:45 +0000)]
[MS-ABI] Assign SEH handler indices to __try blocks
Assigns indices to try blocks. These indices will used in constructing
tables that the mscrt function __except_handler3 reads during SEH.
Testing will occur once we actually emit the tables, in a subsequent
patch.

llvm-svn: 213437

10 years agoIn Process::LoadImage, use the same function call both to call dlopen and to collect
Jim Ingham [Sat, 19 Jul 2014 00:37:06 +0000 (00:37 +0000)]
In Process::LoadImage, use the same function call both to call dlopen and to collect
the error if there is one.

llvm-svn: 213436

10 years ago[MCJIT] Add a 'decodeAddend' method to RuntimeDyldMachO and teach
Lang Hames [Sat, 19 Jul 2014 00:19:17 +0000 (00:19 +0000)]
[MCJIT] Add a 'decodeAddend' method to RuntimeDyldMachO and teach
getBasicRelocationEntry to use this rather than 'memcpy' to get the
relocation addend. Targets with non-trivial addend encodings (E.g. AArch64) can
override decodeAddend to handle immediates with interesting encodings.

No functional change.

llvm-svn: 213435

10 years agoCodeGen: Properly null-check typeid expressions
David Majnemer [Sat, 19 Jul 2014 00:17:06 +0000 (00:17 +0000)]
CodeGen: Properly null-check typeid expressions

Thoroughly check for a pointer dereference which yields a glvalue.  Look
through casts, comma operators, conditional operators, paren
expressions, etc.

This was originally D4416.

Differential Revision: http://reviews.llvm.org/D4592

llvm-svn: 213434

10 years agoLLDB now correctly handles virtual inheritance.
Greg Clayton [Sat, 19 Jul 2014 00:12:57 +0000 (00:12 +0000)]
LLDB now correctly handles virtual inheritance.

Test case added as well.

<rdar://problem/16785904>

llvm-svn: 213433

10 years agoRevert "Reapply "DebugInfo: Ensure that all debug location scope chains from instruct...
Eric Christopher [Fri, 18 Jul 2014 23:57:20 +0000 (23:57 +0000)]
Revert "Reapply "DebugInfo: Ensure that all debug location scope chains from instructions within a function, lead to the function itself.""""

After a successful build it seems to have come back on a later build.

This reverts commit r213391.

llvm-svn: 213432

10 years agoRevert r213415, "Merge two lines". It broke tests in -Asserts builds.
NAKAMURA Takumi [Fri, 18 Jul 2014 23:46:16 +0000 (23:46 +0000)]
Revert r213415, "Merge two lines". It broke tests in -Asserts builds.

CGBuilder doesn't name instructions with Name. We should use Inst::setName() to name an instruction explicitly here.

llvm-svn: 213431

10 years agoFundamentally change the MipsSubtarget replacement machinery:
Eric Christopher [Fri, 18 Jul 2014 23:41:32 +0000 (23:41 +0000)]
Fundamentally change the MipsSubtarget replacement machinery:

a) Move the replacement level decision to the target machine.
b) Create additional subtargets at the TargetMachine level to
   cache and make replacement easy.
c) Make the mips16 features obvious.
d) Remove the override logic as it no longer does anything.
e) Have MipsModuleDAGToDAGISel take only the target machine.
f) Have the constant islands pass grab the current subtarget
   from the MachineFunction (via the TargetMachine) instead
   of caching it.
g) Unconditionally initialize TLOF.
h) Remove the old complicated subtarget based resetting and
   replace it with simple conditionals.

llvm-svn: 213430

10 years agoFrameLowering depends only upon the Subtarget, so only take a subtarget
Eric Christopher [Fri, 18 Jul 2014 23:33:47 +0000 (23:33 +0000)]
FrameLowering depends only upon the Subtarget, so only take a subtarget
during initialization.

llvm-svn: 213429

10 years ago[X86 inline-asm] Error out on inline-asm constraint "=f".
Akira Hatanaka [Fri, 18 Jul 2014 23:30:30 +0000 (23:30 +0000)]
[X86 inline-asm] Error out on inline-asm constraint "=f".

<rdar://problem/17476689>

llvm-svn: 213428

10 years ago[PowerPC] 32-bit ELF PIC support
Hal Finkel [Fri, 18 Jul 2014 23:29:49 +0000 (23:29 +0000)]
[PowerPC] 32-bit ELF PIC support

This adds initial support for PPC32 ELF PIC (Position Independent Code; the
-fPIC variety), thus rectifying a long-standing deficiency in the PowerPC
backend.

Patch by Justin Hibbits!

llvm-svn: 213427

10 years agoIn preparation for replacing the whole subtarget on the target machine,
Eric Christopher [Fri, 18 Jul 2014 23:25:04 +0000 (23:25 +0000)]
In preparation for replacing the whole subtarget on the target machine,
have target lowering take the subtarget explicitly.

llvm-svn: 213426

10 years agoMake InstrInfo depend only upon the Subtarget getting passed in
Eric Christopher [Fri, 18 Jul 2014 23:25:00 +0000 (23:25 +0000)]
Make InstrInfo depend only upon the Subtarget getting passed in
rather than the TargetMachine.

llvm-svn: 213425

10 years agoTypePrinter should not omit the static keyword in array parameter declarators
Hal Finkel [Fri, 18 Jul 2014 23:19:20 +0000 (23:19 +0000)]
TypePrinter should not omit the static keyword in array parameter declarators

In C99, an array parameter declarator might have the form: direct-declarator
'[' 'static' type-qual-list[opt] assign-expr ']'

and when the size of the array is a constant, don't omit the static keyword
when printing the type. Also, in the VLA case, put a space after the static
keyword (some assignment expression must follow it).

llvm-svn: 213424

10 years agoObjective-C. Patch to warn if the result of calling a property getter
Fariborz Jahanian [Fri, 18 Jul 2014 22:59:10 +0000 (22:59 +0000)]
Objective-C. Patch to warn if the result of calling a property getter
is unused (this is match behavior when property-dot syntax is used to
use same getter). rdar://17514245
Patch by Anders Carlsson with minor refactoring by me.

llvm-svn: 213423

10 years agoThe subtarget in MipsTargetLowering isn't going to change and
Eric Christopher [Fri, 18 Jul 2014 22:55:25 +0000 (22:55 +0000)]
The subtarget in MipsTargetLowering isn't going to change and
so doesn't need to be a pointer, but a reference.

llvm-svn: 213422

10 years agoAllow the user to override the LLDB_TEST_COMPILER at CMake level.
Zachary Turner [Fri, 18 Jul 2014 22:46:22 +0000 (22:46 +0000)]
Allow the user to override the LLDB_TEST_COMPILER at CMake level.

llvm-svn: 213421

10 years agoAvoid caching the relocation model on the subtarget, this is for
Eric Christopher [Fri, 18 Jul 2014 22:34:20 +0000 (22:34 +0000)]
Avoid caching the relocation model on the subtarget, this is for
two reasons:

a) we're already caching the target machine which contains it,
b) which relocation model you get is dependent upon whether or
not you ask before MCCodeGenInfo is constructed on the target
machine, so avoid any latent issues there.

llvm-svn: 213420

10 years agoRemove commented out code.
Eric Christopher [Fri, 18 Jul 2014 22:34:18 +0000 (22:34 +0000)]
Remove commented out code.

llvm-svn: 213419

10 years agoClean up some style and formatting issues.
Eric Christopher [Fri, 18 Jul 2014 22:34:14 +0000 (22:34 +0000)]
Clean up some style and formatting issues.

llvm-svn: 213418

10 years agoDebugInfo: Assert that all abstract scopes are subprograms, rather than conditionalizing.
David Blaikie [Fri, 18 Jul 2014 22:26:59 +0000 (22:26 +0000)]
DebugInfo: Assert that all abstract scopes are subprograms, rather than conditionalizing.

There's nothing else these should ever be...

llvm-svn: 213417

10 years agoReinstate r213348, reverted in r213395, with an additional bug fix and more
Richard Smith [Fri, 18 Jul 2014 22:13:40 +0000 (22:13 +0000)]
Reinstate r213348, reverted in r213395, with an additional bug fix and more
thorough tests.

Original commit message:

[modules] Fix macro hiding bug exposed if:

 * A submodule of module A is imported into module B
 * Another submodule of module A that is not imported into B exports a macro
 * Some submodule of module B also exports a definition of the macro, and
   happens to be the first submodule of B that imports module A.

In this case, we would incorrectly determine that A's macro redefines B's
macro, and so we don't need to re-export B's macro at all.

This happens with the 'assert' macro in an LLVM self-host. =(

llvm-svn: 213416

10 years agoMerge two lines
Alexey Samsonov [Fri, 18 Jul 2014 21:29:55 +0000 (21:29 +0000)]
Merge two lines

llvm-svn: 213415

10 years agoFix build breakage introduced with r213412.
Mark Heffernan [Fri, 18 Jul 2014 21:29:41 +0000 (21:29 +0000)]
Fix build breakage introduced with r213412.

llvm-svn: 213414

10 years agoTest commit. Having trouble committing from one machine but not
Zachary Turner [Fri, 18 Jul 2014 21:06:51 +0000 (21:06 +0000)]
Test commit.  Having trouble committing from one machine but not
another, attempting to fix it.

llvm-svn: 213413

10 years agoRemove unroll pragma metadata after it is used.
Mark Heffernan [Fri, 18 Jul 2014 21:04:33 +0000 (21:04 +0000)]
Remove unroll pragma metadata after it is used.

llvm-svn: 213412

10 years agoFix a bug with order of operations.
Zachary Turner [Fri, 18 Jul 2014 21:03:06 +0000 (21:03 +0000)]
Fix a bug with order of operations.

llvm-svn: 213411

10 years agoMake lldb -P work on Windows.
Zachary Turner [Fri, 18 Jul 2014 20:36:08 +0000 (20:36 +0000)]
Make lldb -P work on Windows.

lldb -P, which outputs its python path, works by using Host-layer
facilities to get information about the loaded python module.  This
Host functionality was unimplemented on Windows, so this patch
implements it.  Additionally, it removes a pexpect dependency from
the test runner and uses an equivalent invocation of subprocess.

Reviewed by: Todd Fiala

Differential Revision: http://reviews.llvm.org/D4548

llvm-svn: 213410

10 years agoFix a couple of formatting and style issues.
Eric Christopher [Fri, 18 Jul 2014 20:35:49 +0000 (20:35 +0000)]
Fix a couple of formatting and style issues.

llvm-svn: 213409

10 years ago[MCJIT] [AArch64] Make sure to propegate ARM64_RELOC_ADDEND values into the
Lang Hames [Fri, 18 Jul 2014 20:29:36 +0000 (20:29 +0000)]
[MCJIT] [AArch64] Make sure to propegate ARM64_RELOC_ADDEND values into the
RelocationEntry.

No test case yet, as this primarily hits GOT entries, which RuntimeDyldChecker
can't examine yet. I'm actively working on features that will enable us to
test this.

llvm-svn: 213408

10 years agoMake non-module passes unconditionally added in the pass
Eric Christopher [Fri, 18 Jul 2014 20:29:02 +0000 (20:29 +0000)]
Make non-module passes unconditionally added in the pass
manager for mips, and early exit if we don't want to do
anything because of the current subtarget.

llvm-svn: 213407

10 years agoAdd tests for atomic adds on floats.
Eli Bendersky [Fri, 18 Jul 2014 20:11:26 +0000 (20:11 +0000)]
Add tests for atomic adds on floats.

llvm-svn: 213406

10 years agoRevert "CodeGen: Properly null-check typeid expressions"
David Majnemer [Fri, 18 Jul 2014 20:00:13 +0000 (20:00 +0000)]
Revert "CodeGen: Properly null-check typeid expressions"

This reverts commit r213401, r213402, r213403, and r213404.

I accidently committed these changes instead of updating the
differential.

llvm-svn: 213405

10 years agoAddress Richard's latest feedback.
David Majnemer [Fri, 18 Jul 2014 19:53:25 +0000 (19:53 +0000)]
Address Richard's latest feedback.

llvm-svn: 213404

10 years agoAddress Richard's comments
David Majnemer [Fri, 18 Jul 2014 19:53:23 +0000 (19:53 +0000)]
Address Richard's comments

llvm-svn: 213403

10 years agoAddress Richard's comments.
David Majnemer [Fri, 18 Jul 2014 19:53:21 +0000 (19:53 +0000)]
Address Richard's comments.

llvm-svn: 213402

10 years agoCodeGen: Properly null-check typeid expressions
David Majnemer [Fri, 18 Jul 2014 19:53:17 +0000 (19:53 +0000)]
CodeGen: Properly null-check typeid expressions

Summary:
Thoroughly check for a pointer dereference which yields a glvalue.  Look
through casts, comma operators, conditional operators, paren
expressions, etc.

Reviewers: rsmith

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4416

llvm-svn: 213401

10 years agoRecommit: Handle diagnostic warnings in Frontend diagnostic handler.
Tyler Nowicki [Fri, 18 Jul 2014 19:40:19 +0000 (19:40 +0000)]
Recommit: Handle diagnostic warnings in Frontend diagnostic handler.

Clang uses a diagnostic handler to grab diagnostic messages so it can print them
with the line of source code they refer to. This patch extends this to handle
optimization failures that were added to llvm to produce a warning when
loop vectorization is explicitly specified (using a pragma clang loop directive)
but fails.

Update renames warning flag name to avoid indicating the flag's severity and
adds a test.

Reviewed by Alp Toker

llvm-svn: 213400

10 years agoRename DiagnosticInfoOptimizationWarning to DiagnosticInfoOptimizationFailure
Tyler Nowicki [Fri, 18 Jul 2014 19:36:04 +0000 (19:36 +0000)]
Rename DiagnosticInfoOptimizationWarning to DiagnosticInfoOptimizationFailure
so the severity of the message is not part of the type name.

Reviewed by Alp Toker

llvm-svn: 213399

10 years agoUse CHECK-LABEL where appropriate in this test.
Eli Bendersky [Fri, 18 Jul 2014 19:32:09 +0000 (19:32 +0000)]
Use CHECK-LABEL where appropriate in this test.

llvm-svn: 213398

10 years agoAdd loop unrolling metadata descriptions to docs/LangRef.rst.
Mark Heffernan [Fri, 18 Jul 2014 19:24:51 +0000 (19:24 +0000)]
Add loop unrolling metadata descriptions to docs/LangRef.rst.

llvm-svn: 213397

10 years agoMergedLoadStoreMotion pass
Gerolf Hoflehner [Fri, 18 Jul 2014 19:13:09 +0000 (19:13 +0000)]
MergedLoadStoreMotion pass

Merges equivalent loads on both sides of a hammock/diamond
and hoists into into the header.
Merges equivalent stores on both sides of a hammock/diamond
and sinks it to the footer.
Can enable if conversion and tolerate better load misses
and store operand latencies.

llvm-svn: 213396

10 years agoRevert "[modules] Fix macro hiding bug exposed if:"
Ben Langmuir [Fri, 18 Jul 2014 18:38:24 +0000 (18:38 +0000)]
Revert "[modules] Fix macro hiding bug exposed if:"

This is breaking the system modules on Darwin, because something that
was defined and re-exported no longer is.  Might be this patch, or might
just be a really poor interaction with an existing visibility bug.

This reverts commit r213348.

llvm-svn: 213395

10 years agoFixing warnings shouldn't introduce a crasher.
Greg Clayton [Fri, 18 Jul 2014 18:32:45 +0000 (18:32 +0000)]
Fixing warnings shouldn't introduce a crasher.

Fix the warning the correct way without making things crash when ENABLE_MUTEX_ERROR_CHECKING is non enabled.

<rdar://problem/17703039>

llvm-svn: 213394

10 years ago[UBsan] Skip -fsanitize=vptr instrumentations when the pointer value is null.
Alexey Samsonov [Fri, 18 Jul 2014 18:15:39 +0000 (18:15 +0000)]
[UBsan] Skip -fsanitize=vptr instrumentations when the pointer value is null.

Otherwise -fsanitize=vptr causes the program to crash when it downcasts
a null pointer.

Reviewed in http://reviews.llvm.org/D4412.
Patch by Byoungyoung Lee!

llvm-svn: 213393