81906 Commits

Author SHA1 Message Date
Matt Arsenault
de67abf186 AMDGPU: Remove SCCReg.
These should be handled as a physical register rather
than a virtual register class with one member.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244061 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 16:42:54 +00:00
Chad Rosier
22c5f2a36e [AArch64] Register (existing) AArch64BranchRelaxation pass with LLVM pass manager.
Summary: Among other things, this allows -print-after-all/-print-before-all to
dump IR around this pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244060 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 16:12:10 +00:00
Steven Wu
6277e1f662 Force the MachO generated for Darwin to have VERSION_MIN load command
On Darwin, it is required to stamp the object file with VERSION_MIN load
command. This commit will provide a VERSRION_MIN load command to the
MachO file that doesn't specify the version itself by inferring from
Target Triple.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244059 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 15:36:38 +00:00
Chad Rosier
f9bc05ce57 [AArch64] Make the naming of the Address Type Promotion pass consistent.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244057 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 15:32:23 +00:00
Chad Rosier
085e440316 [AArch64] Register (existing) AArch64AdvSIMDScalar pass with LLVM pass manager.
Summary: Among other things, this allows -print-after-all/-print-before-all to
dump IR around this pass.

IIRC, this pass is off by default, but it's still helpful when debugging.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244056 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 15:18:58 +00:00
Sanjay Patel
3e95f49778 revert r243687: enable fast-math-flag propagation to DAG nodes
We can't propagate FMF partially without breaking DAG-level CSE. We either need to
relax CSE to account for mismatched FMF as a temporary work-around or fully propagate
FMF throughout the DAG.

Surprisingly, there are no existing regression tests for this, but here's an example:

  define float @fmf(float %a, float %b) {
    %mul1 = fmul fast float %a, %b
    %nega = fsub fast float 0.0, %a
    %mul2 = fmul fast float %nega, %b
    %abx2 = fsub fast float %mul1, %mul2
    ret float %abx2
  }


$ llc -o - badflags.ll -march=x86-64 -mattr=fma -enable-unsafe-fp-math -enable-fmf-dag=0
...
    vmulss    %xmm1, %xmm0, %xmm0
    vaddss    %xmm0, %xmm0, %xmm0
    retq

$ llc -o - badflags.ll -march=x86-64 -mattr=fma -enable-unsafe-fp-math -enable-fmf-dag=1
...
    vmulss    %xmm1, %xmm0, %xmm2
    vfmadd213ss    %xmm2, %xmm1, %xmm0  <--- failed to recognize that (a * b) was already calculated
    retq



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244053 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 15:12:03 +00:00
Chad Rosier
7e16546ad8 Make this less error prone by using a #define. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244048 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 14:48:44 +00:00
Chad Rosier
1778d2b6ac [AArch64] Register (existing) AArch64ExpandPseudo pass with LLVM pass manager.
Summary: Among other things, this allows -print-after-all/-print-before-all to
dump IR around this pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244046 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 14:22:53 +00:00
Benjamin Kramer
1ef7132e82 [AA] Use CallSite cast idiom. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244045 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 14:16:44 +00:00
Benjamin Kramer
37545e0b0b [YAMLTraits] Use StringRef::copy. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244044 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 14:16:38 +00:00
Benjamin Kramer
1678794d10 [IR] Simplify code with ArrayRef::copy. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244043 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 14:16:28 +00:00
Chad Rosier
b8d7701cce [AArch64] Register (existing) AArch64LoadStoreOpt pass with LLVM pass manager.
Summary: Among other things, this allows -print-after-all/-print-before-all to
dump IR around this pass.

This is the AArch64 version of r243052.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244041 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 13:44:51 +00:00
Chad Rosier
9934920086 Update comment. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244038 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 12:40:13 +00:00
Artyom Skrobov
7cadb8f32b ARMISelDAGToDAG.cpp had this self-contradictory code:
return StringSwitch<int>(Flags)
          .Case("g", 0x1)
          .Case("nzcvq", 0x2)
          .Case("nzcvqg", 0x3)
          .Default(-1);
...

  // The _g and _nzcvqg versions are only valid if the DSP extension is
  // available.
  if (!Subtarget->hasThumb2DSP() && (Mask & 0x2))
    return -1;

ARMARM confirms that the comment is right, and the code was wrong.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244029 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 11:02:14 +00:00
Simon Pilgrim
0ba30b8745 Fixed line endings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244021 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 08:18:00 +00:00
Hal Finkel
7b3dad09cd [MachineCombiner] Don't use the opcode-only form of computeInstrLatency
In r242277, I updated the MachineCombiner to work with itineraries, but I
missed a call that is scheduling-model-only (the opcode-only form of
computeInstrLatency). Using the form that takes an MI* allows this to work with
itineraries (and should be NFC for subtargets with scheduling models).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244020 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 07:45:28 +00:00
NAKAMURA Takumi
68765af149 Windows/COM.inc: Fix emacs mode in the first line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244016 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 06:11:08 +00:00
Tanya Lattner
377a98477d Rename all references to old mailing lists to new lists.llvm.org address.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243999 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-05 03:51:17 +00:00
Yaron Keren
a639e155a2 Avoid passing nullptr to std::equal.
As documented in the LLVM Coding Standards, indeed MSVC incorrectly asserts 
on this in Debug mode. This happens when building clang with Visual C++ and
-triple i686-pc-windows-gnu on these clang regression tests:

 clang/test/CodeGen/2011-03-08-ZeroFieldUnionInitializer.c
 clang/test/CodeGen/empty-union-init.c



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243996 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 15:57:04 +00:00
Sanjay Patel
f360983642 wrap OptSize and MinSize attributes for easier and consistent access (NFCI)
Create wrapper methods in the Function class for the OptimizeForSize and MinSize
attributes. We want to hide the logic of "or'ing" them together when optimizing
just for size (-Os).

Currently, we are not consistent about this and rely on a front-end to always set
OptimizeForSize (-Os) if MinSize (-Oz) is on. Thus, there are 18 FIXME changes here
that should be added as follow-on patches with regression tests.

This patch is NFC-intended: it just replaces existing direct accesses of the attributes
by the equivalent wrapper call.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243994 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 15:49:57 +00:00
Hal Finkel
2cbb48f2e3 [RuntimeDyld] Adapt PPC64 relocations to PPC32
Begin adapting some of the implemented PPC64 relocations for PPC32 (with a
test case).

Patch by Pierre-Andre Saulais!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243991 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 15:29:00 +00:00
Sanjay Patel
91add497c6 [x86] machine combiner reassociation: mark EFLAGS operand as 'dead'
In the commentary for D11660, I wasn't sure if it was alright to create new
integer machine instructions without also creating the implicit EFLAGS operand. 
From what I can see, the implicit operand is always created by the MachineInstrBuilder
based on the instruction type, so we don't have to do that explicitly. However, in
reviewing the debug output, I noticed that the operand was not marked as 'dead'. 
The machine combiner should do that to preserve future optimization opportunities 
that may be checking for that dead EFLAGS operand themselves.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243990 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 15:21:56 +00:00
Vasileios Kalintiris
ec5601a7f6 [mips][FastISel] Disable code generation for unsupported targets through FastISel.
Summary:
Previously, we would check whether the target is supported or not, only in
fastSelectInstruction(). This means that 64-bit targets could use FastISel too.
We fix this by checking every overridden method of the FastISel class and
by falling back to SelectionDAG if the target isn't supported. This change
should have been committed along with r243638, but somehow I missed it.

Reviewers: dsanders

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243986 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 14:35:50 +00:00
Vasileios Kalintiris
edcaae782e Revert r229675 - [mips] Avoid redundant sign extension of the result of binary bitwise instructions.
It introduced two regressions on 64-bit big-endian targets running under N32
(MultiSource/Benchmarks/tramp3d-v4/tramp3d-v4, and
MultiSource/Applications/kimwitu++/kc) The issue is that on 64-bit targets
comparisons such as BEQ compare the whole GPR64 but incorrectly tell the
instruction selector that they operate on GPR32's. This leads to the
elimination of i32->i64 extensions that are actually required by
comparisons to work correctly.

There's currently a patch under review that fixes this problem.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243984 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 14:26:35 +00:00
Duncan P. N. Exon Smith
7f68d74dde Fix 80-column
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243977 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 13:24:26 +00:00
Duncan P. N. Exon Smith
5c935a9796 Linker: Fix ASan failure from r243961
r243883 and r243961 made a use-after-free far more likely:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/6041/steps/check-llvm%20asan/logs/stdio

Unresolved nodes get inserted into the `Cycles` array.  If they later
get resolved through RAUW, we need to update the reference.  It's
interesting that this never hit before (maybe an asan-ified clang
bootstrap with `-flto -g` would have hit it, but I admit I haven't tried
anything quite that crazy).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243976 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 13:23:30 +00:00
David Majnemer
b892465b6c Drive-by fixes for LandingPad -> EHPad
This change was done as an audit and is by inspection.  The new EH
system is still very much a work in progress.  NFC for the landingpad
case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243965 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 08:21:40 +00:00
Simon Pilgrim
de0b8ca2b4 [InstCombine] Moved SSE vector shift constant folding into its own helper function. NFCI.
This will make some upcoming bugfixes + improvements easier to manage.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243962 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 07:49:58 +00:00
Duncan P. N. Exon Smith
81032088a7 Linker: Fix references to uniqued nodes after r243883
r243883 started moving 'distinct' nodes instead of duplicated them in
lib/Linker.  This had the side-effect of sometimes not cloning uniqued
nodes that reference them.  I missed a corner case:

    !named = !{!0}
    !0 = !{!1}
    !1 = distinct !{!0}

!0 is the entry point for "remapping", and a temporary clone (say,
!0-temp) is created and mapped in case we need to model a uniquing
cycle.

    Recursive descent into !1.  !1 is distinct, so we leave it alone,
    but update its operand to !0-temp.

Pop back out to !0.  Its only operand, !1, hasn't changed, so we don't
need to use !0-temp.  !0-temp goes out of scope, and we're finished
remapping, but we're left with:

    !named = !{!0}
    !0 = !{!1}
    !1 = distinct !{null} ; uh oh...

Previously, if !0 and !0-temp ended up with identical operands, then
!0-temp couldn't have been referenced at all.  Now that distinct nodes
don't get duplicated, that assumption is invalid.  We need to
!0-temp->replaceAllUsesWith(!0) before freeing !0-temp.

I found this while running an internal `-flto -g` bootstrap.  Strangely,
there was no case of this in the open source bootstrap I'd done before
commit...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243961 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 06:42:31 +00:00
Justin Bogner
c85a9b26cf Remove the configure and cmake checks for sys/wait.h
If we don't have sys/wait.h and we're on a unix system there's no way
that several of the llvm tools work at all. This includes clang.

Just remove the configure and cmake checks entirely - we'll get a
build error instead of building something broken now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243957 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 06:29:58 +00:00
Hal Finkel
647faa9bd9 [SDAG] Fix a result chain in ExpandUnalignedLoad
On the code path in ExpandUnalignedLoad which expands an unaligned vector/fp
value in terms of a legal integer load of the same size, the ChainResult needs
to be the chain result of the integer load.

No in-tree test case is currently available.

Patch by Jan Hranac!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243956 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 06:29:12 +00:00
Adam Nemet
9a9814fc15 [LAA] Remove unused pointer partition argument from addRuntimeCheck, NFC
This variant of addRuntimeCheck is only used now from the LoopVectorizer
which does not use this parameter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243955 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 05:16:20 +00:00
Chen Li
7b3ed76a63 Introduce enum value for previously defined metadata -- make.implicit
Summary: This patch adds enum value for an existing metadata type -- make.implicit. Using preassigned enum will be helpful to get compile time type checking and avoid string construction and comparison. The patch also changes uses of make.implicit from string metadata to enum metadata. There is no functionality change.

Reviewers: reames

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243954 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 04:41:34 +00:00
Saleem Abdulrasool
a89971af5a ARM: support windows division routines
This adds the software division routines for the Windows RTABI.  These are not
expected to be used often though as most modern Windows ARM capable targets
support hardware division.  In the case that the target CPU doesnt support
hardware division, this will be the fallback.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243952 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 03:57:56 +00:00
Saleem Abdulrasool
8905090aa8 ARM: make Darwin libcall registration table driven (NFC)
Make the libcall updating table driven similar to the approach that the Linux
and Windows codepath does below.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243951 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 03:57:52 +00:00
Chandler Carruth
1a092e8289 [UB] Don't allocate space for contained types and then try to copy the
contained types into the space when we have no contained types. This
fixes the UB stemming from a call to memcpy with a null pointer. This
also reduces the calls to allocate because this actually happens in
a notable client - Clang.

Found by UBSan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243944 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 03:48:26 +00:00
Sanjoy Das
e18cdd45dd Revert "[LSR] Generate and use zero extends"
This reverts commit r243348 and r243357.  They caused PR24347.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243939 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 01:52:05 +00:00
Ahmed Bougacha
3e59e1aa47 [AArch64] Rename FP formats to be more consistent. NFC.
Some are named "FP", others "SD", others still "FP*SD".
Rename all this to just use "FP", which, except for conversions
(which don't use this format naming scheme), implies "SD" anyway.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243936 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 01:38:08 +00:00
Ahmed Bougacha
09ae369f4f [AArch64] Add isel support for f16 indexed LD/ST.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243935 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 01:29:38 +00:00
Chandler Carruth
4f2a94439a [UB] Fix yet another use of memcpy with a null pointer argument. I think
this is the last of them in my build of LLVM. Haven't tried Clang yet.

Found via UBSan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243934 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 01:00:56 +00:00
Ahmed Bougacha
d35480e9b1 [AArch64][v8.1a] The "pan" sysreg isn't MSR-specific. NFCI.
It's already in SysRegMappings, no need to also have it in MSRMappings:
the latter is only used if we didn't find a match in the former.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243933 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:55:11 +00:00
Ahmed Bougacha
6c2eae9338 [AArch64] Remove unnecessary "break". NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243931 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:49:08 +00:00
Ahmed Bougacha
d51a68a542 [AArch64] Use SDValue bool operator. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243930 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:48:02 +00:00
Ahmed Bougacha
a05d8be1a2 [AArch64] Vector FCOPYSIGN supports Custom-lowering: mark it as such.
There's a bunch of code in LowerFCOPYSIGN that does smart lowering, and
is actually already vector-aware; let's use it instead of scalarizing!

The only interesting change is that for v2f32, we previously always used
use v4i32 as the integer vector type.
Use v2i32 instead, and mark FCOPYSIGN as Custom.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243926 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:42:34 +00:00
Ahmed Bougacha
5ce70cc2c1 [CodeGen] Fix FCOPYSIGN legalization to account for mismatched types.
We used to legalize it like it's any other binary operations.  It's not,
because it accepts mismatched operand types.  Because of that, we used
to hit various asserts and miscompiles.

Specialize vector legalizations to, in the worst case, unroll, or, when
possible, to just legalize the operand that needs legalization.

Scalarization isn't covered, because I can't think of a target where
some but not all of the 1-element vector types are to be scalarized.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243924 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:32:55 +00:00
Alex Lorenz
1731b66081 MIR Serialization: Serialize the 'volatile' machine memory operand flag.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243923 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-04 00:24:45 +00:00
Adam Nemet
ea0f5e2108 [LAA] Remove unused needsAnyChecking(), NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243921 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-03 23:33:03 +00:00
Adam Nemet
f6b29bc36c [LoopVer] Remove unused needsRuntimeChecks(), NFC
The previous commits moved this functionality into the client.

Also remove the now unused member variable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243920 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-03 23:32:57 +00:00
Alex Lorenz
3db44ce9a8 MIR Serialization: Initial serialization of the machine memory operands.
Reviewers: Duncan P. N. Exon Smith


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243915 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-03 23:08:19 +00:00
David Blaikie
c4423f0478 -Wdeprecated-clean: Fix cases of violating the rule of 5 in ways that are deprecated in C++11
Various value handles needed to be copy constructible and copy
assignable (mostly for their use in DenseMap). But to avoid an API that
might allow accidental slicing, make these members protected in the base
class and make derived classes final (the special members become
implicitly public there - but disallowing further derived classes that
might be sliced to the intermediate type).

Might be worth having a warning a bit like -Wnon-virtual-dtor that
catches public move/copy assign/ctors in classes with virtual functions.
(suppressable in the same way - by making them protected in the base,
and making the derived classes final) Could be fancier and only diagnose
them when they're actually called, potentially.

Also allow a few default implementations where custom implementations
(especially with non-standard return types) were implemented.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243909 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-03 22:30:24 +00:00