Craig Topper [Thu, 11 Jul 2013 05:39:44 +0000 (05:39 +0000)]
Fix indentation. No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186065
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Thu, 11 Jul 2013 05:39:02 +0000 (05:39 +0000)]
Fix a warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186064
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Thu, 11 Jul 2013 05:15:11 +0000 (05:15 +0000)]
Consolidate more lit tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186063
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Thu, 11 Jul 2013 05:11:33 +0000 (05:11 +0000)]
Consolidate some of the lit tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186062
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Thu, 11 Jul 2013 05:01:50 +0000 (05:01 +0000)]
Consolidate some of the lit tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186060
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Thu, 11 Jul 2013 04:54:05 +0000 (04:54 +0000)]
SLPVectorizer: refactor the code that places extracts. Place the code that decides where to put extracts in the build-tree phase. This allows us to take the cost of the extracts into account.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186058
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Gottesman [Thu, 11 Jul 2013 04:40:01 +0000 (04:40 +0000)]
Teach TailRecursionElimination to handle certain cases of nocapture escaping allocas.
Without the changes introduced into this patch, if TRE saw any allocas at all,
TRE would not perform TRE *or* mark callsites with the tail marker.
Because TRE runs after mem2reg, this inadequacy is not a death sentence. But
given a callsite A without escaping alloca argument, A may not be able to have
the tail marker placed on it due to a separate callsite B having a write-back
parameter passed in via an argument with the nocapture attribute.
Assume that B is the only other callsite besides A and B only has nocapture
escaping alloca arguments (*NOTE* B may have other arguments that are not passed
allocas). In this case not marking A with the tail marker is unnecessarily
conservative since:
1. By assumption A has no escaping alloca arguments itself so it can not
access the caller's stack via its arguments.
2. Since all of B's escaping alloca arguments are passed as parameters with
the nocapture attribute, we know that B does not stash said escaping
allocas in a manner that outlives B itself and thus could be accessed
indirectly by A.
With the changes introduced by this patch:
1. If we see any escaping allocas passed as a capturing argument, we do
nothing and bail early.
2. If we do not see any escaping allocas passed as captured arguments but we
do see escaping allocas passed as nocapture arguments:
i. We do not perform TRE to avoid PR962 since the code generator produces
significantly worse code for the dynamic allocas that would be created
by the TRE algorithm.
ii. If we do not return twice, mark call sites without escaping allocas
with the tail marker. *NOTE* This excludes functions with escaping
nocapture allocas.
3. If we do not see any escaping allocas at all (whether captured or not):
i. If we do not have usage of setjmp, mark all callsites with the tail
marker.
ii. If there are no dynamic/variable sized allocas in the function,
attempt to perform TRE on all callsites in the function.
Based off of a patch by Nick Lewycky.
rdar://
14324281.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186057
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Thu, 11 Jul 2013 01:55:55 +0000 (01:55 +0000)]
Move r186044 tests into CodeGen/X86
I had thought that these tests could be target-neutral, but in practice this is
not the case (on some targets, like Hexagon and Darwin), they trigger an assert
(a different assert than the one that r186044 fixes).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186051
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 10 Jul 2013 23:25:03 +0000 (23:25 +0000)]
Set REQUIRES shell on the test cases for r186044
Trying to fix the i686-mingw32 build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186046
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 10 Jul 2013 23:11:14 +0000 (23:11 +0000)]
XFAIL the test cases for r186044 on Hexagon
For some reason, the Hexagon backend does not reject these invalid static
initializer expressions, but instead crashes in AsmPrinter::EmitGlobalConstant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186045
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 10 Jul 2013 22:51:01 +0000 (22:51 +0000)]
Don't assert if we can't constant fold extract/insertvalue
A non-constant-foldable static initializer expression containing insertvalue or
extractvalue had been causing an assert:
Constants.cpp:1971: Assertion `FC && "ExtractValue constant expr couldn't be
folded!"' failed.
Now we report a more-sensible "Unsupported expression in static initializer"
error instead.
Fixes PR15417.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186044
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 22:15:29 +0000 (22:15 +0000)]
Remove this test for now.
It is not reliable to depend on the output of llvm_unreachable. The original
change will have proper tests when llvm-ar moves to lib/Object (soon).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186043
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Wed, 10 Jul 2013 22:09:22 +0000 (22:09 +0000)]
CommandLine.rst: remove tiny bit of bad mark-up
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186042
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 22:07:59 +0000 (22:07 +0000)]
Find the symbol table on archives created on OS X.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186041
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 21:47:16 +0000 (21:47 +0000)]
Move tests from test/Archive to test/Object.
There is no lib/Archive anymore and some archive tests were in test/Archive and
others in test/Object. Since archive is just one of the formats supported by
lib/Object, test/Object is probably the best location.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186038
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 21:08:02 +0000 (21:08 +0000)]
Add a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186035
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Wed, 10 Jul 2013 20:58:17 +0000 (20:58 +0000)]
Put ELF COMDAT relocations into the relevant COMDAT group.
Patch from Игорь Пашев (I do hope we support utf-8 commit messages; I
also hope he'll forgive me for transliterating it as Igor Pashev in
case things go horribly wrong).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186034
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Wed, 10 Jul 2013 20:47:39 +0000 (20:47 +0000)]
Remove trailing whitespac
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186032
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 20:43:29 +0000 (20:43 +0000)]
Add a testcase for r186014.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186031
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 20:14:22 +0000 (20:14 +0000)]
Don't crash in 'llvm -s' when an archive has no symtab.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186029
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jul 2013 18:55:06 +0000 (18:55 +0000)]
Fix %t typo in Ocaml bindings test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186027
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Gottesman [Wed, 10 Jul 2013 18:49:00 +0000 (18:49 +0000)]
[objc-arc] Changed 'mode: c++' => 'C++' at Nick Lewycky's suggestion. Also removed unnecessary mode: c++ lines from .cpp files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186026
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Gottesman [Wed, 10 Jul 2013 18:40:49 +0000 (18:40 +0000)]
Changed "mode: c++" => "C++" at the suggestion of Nick Lewycky.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186025
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Wed, 10 Jul 2013 18:01:16 +0000 (18:01 +0000)]
Update doxygen comment to match renamed parameters.
Found by -Wdocumentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186021
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 17:30:39 +0000 (17:30 +0000)]
MemoryBuffer::getFile handles zero sized files, no need to duplicate the test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186018
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Wed, 10 Jul 2013 17:19:22 +0000 (17:19 +0000)]
Replacing an empty switch with its moral equivalent. No functional changes intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186017
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Wed, 10 Jul 2013 17:16:40 +0000 (17:16 +0000)]
Use status to implement file_size.
The status function is already using a syscall that returns the file size.
Remember it and implement file_size as a simple wrapper.
No functionally change, but clients that already use status now can avoid
calling file_size.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186016
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 16:56:52 +0000 (16:56 +0000)]
Use the appropriate unsigned int type for the offset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186015
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 16:56:47 +0000 (16:56 +0000)]
Safeguard DBG_VALUE handling. Unbreaks the ASAN buildbot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186014
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 10 Jul 2013 16:38:35 +0000 (16:38 +0000)]
Simplify code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186013
91177308-0d34-0410-b5e6-
96231b3b80d8
Michel Danzer [Wed, 10 Jul 2013 16:37:07 +0000 (16:37 +0000)]
R600/SI: Initial local memory support
Enough for the radeonsi driver to use it for calculating derivatives.
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186012
91177308-0d34-0410-b5e6-
96231b3b80d8
Michel Danzer [Wed, 10 Jul 2013 16:36:57 +0000 (16:36 +0000)]
R600/SI: Add pattern for the AMDGPU.barrier.local intrinsic
lit test coverage to follow in the next commit.
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186011
91177308-0d34-0410-b5e6-
96231b3b80d8
Michel Danzer [Wed, 10 Jul 2013 16:36:52 +0000 (16:36 +0000)]
R600/SI: Add intrinsic for retrieving the current thread ID
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186010
91177308-0d34-0410-b5e6-
96231b3b80d8
Michel Danzer [Wed, 10 Jul 2013 16:36:43 +0000 (16:36 +0000)]
R600/SI: Initial support for LDS/GDS instructions
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186009
91177308-0d34-0410-b5e6-
96231b3b80d8
Michel Danzer [Wed, 10 Jul 2013 16:36:36 +0000 (16:36 +0000)]
R600/SI: Add intrinsics for texture sampling with user derivatives
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186008
91177308-0d34-0410-b5e6-
96231b3b80d8
Argyrios Kyrtzidis [Wed, 10 Jul 2013 15:33:20 +0000 (15:33 +0000)]
Remove llvm/ADT/NullablePtr.h, there are no uses of it in-tree.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186006
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 10 Jul 2013 15:29:01 +0000 (15:29 +0000)]
PPC: Add a better comment about the i64 FI fixup
In discussing this change with Bill Schmidt, it was decided that the original
comment about negative FIs was incorrect. We'll still exclude them for now, but
now with a more-accurate explanation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186005
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Wed, 10 Jul 2013 12:27:25 +0000 (12:27 +0000)]
Reverting commit r185999 due to buildboot failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186001
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Wed, 10 Jul 2013 12:26:26 +0000 (12:26 +0000)]
Reverting commit r185999 due to buildboot failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186000
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Wed, 10 Jul 2013 10:18:10 +0000 (10:18 +0000)]
Add support for Mips break and syscall insructions. The corresponding test cases are added.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185999
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Wed, 10 Jul 2013 01:57:39 +0000 (01:57 +0000)]
Fix typo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185995
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Wed, 10 Jul 2013 01:54:24 +0000 (01:54 +0000)]
Explicitly define ARMISelLowering::isFMAFasterThanFMulAndFAdd. No functionality change.
Currently ARM is the only backend that supports FMA instructions (for at least some subtargets) but does not implement this virtual, so FMAs are never generated except from explicit fma intrinsic calls. Apparently this is due to the fact that it supports both fused (one rounding step) and unfused (two rounding step) multiply + add instructions. This patch clarifies that this the case without changing behavior by implementing the virtual function to simply return false, as the default TargetLoweringBase version does.
It is possible that some cpus perform the fused version faster than the unfused version and vice-versa, so the function implementation should be revisited if hard data is found.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185994
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 01:53:37 +0000 (01:53 +0000)]
Un-break the buildbot by tweaking the indirection flag.
Pulled in a testcase from the debuginfo-test suite.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185993
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 10 Jul 2013 01:53:30 +0000 (01:53 +0000)]
Document a known limitation of the status quo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185992
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan Sands [Wed, 10 Jul 2013 00:52:41 +0000 (00:52 +0000)]
Correct comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185987
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 9 Jul 2013 23:48:45 +0000 (23:48 +0000)]
Fix comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185984
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Tue, 9 Jul 2013 22:59:22 +0000 (22:59 +0000)]
ARM: Fix incorrect pack pattern for thumb2
Propagate the fix from r185712 to Thumb2 codegen as well. Original
commit message applies here as well:
A "pkhtb x, x, y asr #num" uses the lower 16 bits of "y asr #num" and
packs them in the bottom half of "x". An arithmetic and logic shift are
only equivalent in this context if the shift amount is 16. We would be
shifting in ones into the bottom 16bits instead of zeros if "y" is
negative.
rdar://
14338767
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185982
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jul 2013 22:03:17 +0000 (22:03 +0000)]
Implement categories for special case lists.
A special case list can now specify categories for specific globals,
which can be used to instruct an instrumentation pass to treat certain
functions or global variables in a specific way, such as by omitting
certain aspects of instrumentation while keeping others, or informing
the instrumentation pass that a specific uninstrumentable function
has certain semantics, thus allowing the pass to instrument callers
according to those semantics.
For example, AddressSanitizer now uses the "init" category instead of
global-init prefixes for globals whose initializers should not be
instrumented, but which in all other respects should be instrumented.
The motivating use case is DataFlowSanitizer, which will have a
number of different categories for uninstrumentable functions, such
as "functional" which specifies that a function has pure functional
semantics, or "discard" which indicates that a function's return
value should not be labelled.
Differential Revision: http://llvm-reviews.chandlerc.com/D1092
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185978
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jul 2013 22:03:12 +0000 (22:03 +0000)]
Add some SpecialCaseList unit tests.
Differential Revision: http://llvm-reviews.chandlerc.com/D1091
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185977
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jul 2013 22:03:09 +0000 (22:03 +0000)]
Introduce a SpecialCaseList ctor which takes a MemoryBuffer to make
it more unit testable, and fix memory leak in the other ctor.
Differential Revision: http://llvm-reviews.chandlerc.com/D1090
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185976
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jul 2013 22:02:49 +0000 (22:02 +0000)]
Rename BlackList class to SpecialCaseList and move it to Transforms/Utils.
Differential Revision: http://llvm-reviews.chandlerc.com/D1089
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185975
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 22:01:22 +0000 (22:01 +0000)]
InstSimplify: X >> X -> 0
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185973
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 9 Jul 2013 21:44:11 +0000 (21:44 +0000)]
move test into the appropriate subdir.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185972
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 9 Jul 2013 21:44:06 +0000 (21:44 +0000)]
Typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185971
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Tue, 9 Jul 2013 21:38:08 +0000 (21:38 +0000)]
Fix PR16571, which is a bug in the code that checks that all of the types in the bundle are uniform.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185970
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 9 Jul 2013 20:28:37 +0000 (20:28 +0000)]
Reapply an improved version of r180816/180817.
Change the informal convention of DBG_VALUE machine instructions so that
we can express a register-indirect address with an offset of 0.
The old convention was that a DBG_VALUE is a register-indirect value if
the offset (operand 1) is nonzero. The new convention is that a DBG_VALUE
is register-indirect if the first operand is a register and the second
operand is an immediate. For plain register values the combination reg,
reg is used. MachineInstrBuilder::BuildMI knows how to build the new
DBG_VALUES.
rdar://problem/
13658587
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185966
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Gottesman [Tue, 9 Jul 2013 20:08:46 +0000 (20:08 +0000)]
Fixed up the comments in FastISel.h so that they conform to the LLVM style guide.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185964
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Gottesman [Tue, 9 Jul 2013 20:00:25 +0000 (20:00 +0000)]
Added "mode: c++" to FastISel.h header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185963
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Tue, 9 Jul 2013 19:27:10 +0000 (19:27 +0000)]
Appease buildbots after r185956: just set -mcpu explicitly, as it should have been from the beginning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185962
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Tue, 9 Jul 2013 18:55:52 +0000 (18:55 +0000)]
Appease Atom buildbot after r185956 (explicitly turn on AVX)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185961
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 9 Jul 2013 18:55:10 +0000 (18:55 +0000)]
WidenVecRes_BUILD_VECTOR must use the first operand's type
Because integer BUILD_VECTOR operands may have a larger type than the result's
vector element type, and all operands must have the same type, when widening a
BUILD_VECTOR node by adding UNDEFs, we cannot use the vector element type, but
rather must use the type of the existing operands.
Another bug found by llvm-stress.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185960
91177308-0d34-0410-b5e6-
96231b3b80d8
Bill Schmidt [Tue, 9 Jul 2013 18:50:20 +0000 (18:50 +0000)]
[PowerPC] Better fix for PR16556.
A more complete example of the bug in PR16556 was recently provided,
showing that the previous fix was not sufficient. The previous fix is
reverted herein.
The real problem is that ReplaceNodeResults() uses LowerFP_TO_INT as
custom lowering for FP_TO_SINT during type legalization, without
checking whether the input type is handled by that routine.
LowerFP_TO_INT requires the input to be f32 or f64, so we fail when
the input is ppcf128.
I'm leaving the test case from the initial fix (r185821) in place, and
adding the new test as another crash-only check.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185959
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Tue, 9 Jul 2013 18:41:43 +0000 (18:41 +0000)]
Attempt to appease buildbot after r185956 by explicitly turning setting -fma,-fma4 attrs (I'm assuming they're set because the bot is running on machine that has one or the other.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185958
91177308-0d34-0410-b5e6-
96231b3b80d8
Stephen Lin [Tue, 9 Jul 2013 18:16:56 +0000 (18:16 +0000)]
AArch64/PowerPC/SystemZ/X86: This patch fixes the interface, usage, and all
in-tree implementations of TargetLoweringBase::isFMAFasterThanMulAndAdd in
order to resolve the following issues with fmuladd (i.e. optional FMA)
intrinsics:
1. On X86(-64) targets, ISD::FMA nodes are formed when lowering fmuladd
intrinsics even if the subtarget does not support FMA instructions, leading
to laughably bad code generation in some situations.
2. On AArch64 targets, ISD::FMA nodes are formed for operations on fp128,
resulting in a call to a software fp128 FMA implementation.
3. On PowerPC targets, FMAs are not generated from fmuladd intrinsics on types
like v2f32, v8f32, v4f64, etc., even though they promote, split, scalarize,
etc. to types that support hardware FMAs.
The function has also been slightly renamed for consistency and to force a
merge/build conflict for any out-of-tree target implementing it. To resolve,
see comments and fixed in-tree examples.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185956
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 9 Jul 2013 18:16:16 +0000 (18:16 +0000)]
Don't crash in SE dealing with ashr x, -1
ScalarEvolution::getSignedRange uses ComputeNumSignBits from ValueTracking on
ashr instructions. ComputeNumSignBits can return zero, but this case was not
handled correctly by the code in getSignedRange which was calling:
APInt::getSignedMinValue(BitWidth).ashr(NS - 1)
with NS = 0, resulting in an assertion failure in APInt::ashr.
Now, we just return the conservative result (as with NS == 1).
Another bug found by llvm-stress.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185955
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 18:11:10 +0000 (18:11 +0000)]
ValueTracking: Fix bugs in isKnownToBeAPowerOfTwo
(add nsw x, (and x, y)) isn't a power of two if x is zero, it's zero
(add nsw x, (xor x, y)) isn't a power of two if y has bits set that aren't set in x
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185954
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Tue, 9 Jul 2013 17:55:36 +0000 (17:55 +0000)]
Set the default insert point to the first instruction, and not to end()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185953
91177308-0d34-0410-b5e6-
96231b3b80d8
Nadav Rotem [Tue, 9 Jul 2013 17:54:22 +0000 (17:54 +0000)]
IRBuilder: add an assertion that checks if we try to get a debug loc from ->end();
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185952
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 9 Jul 2013 17:02:45 +0000 (17:02 +0000)]
DAGCombine tryFoldToZero cannot create illegal types after type legalization
When folding sub x, x (and other similar constructs), where x is a vector, the
result is a vector of zeros. After type legalization, make sure that the input
zero elements have a legal type. This type may be larger than the result's
vector element type.
This was another bug found by llvm-stress.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185949
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Tue, 9 Jul 2013 16:41:09 +0000 (16:41 +0000)]
[PowerPC] Revert r185476 and fix up TLS variant kinds
In the commit message to r185476 I wrote:
>The PowerPC-specific modifiers VK_PPC_TLSGD and VK_PPC_TLSLD
>correspond exactly to the generic modifiers VK_TLSGD and VK_TLSLD.
>This causes some confusion with the asm parser, since VK_PPC_TLSGD
>is output as @tlsgd, which is then read back in as VK_TLSGD.
>
>To avoid this confusion, this patch removes the PowerPC-specific
>modifiers and uses the generic modifiers throughout. (The only
>drawback is that the generic modifiers are printed in upper case
>while the usual convention on PowerPC is to use lower-case modifiers.
>But this is just a cosmetic issue.)
This was unfortunately incorrect, there is is fact another,
serious drawback to using the default VK_TLSLD/VK_TLSGD
variant kinds: using these causes ELFObjectWriter::RelocNeedsGOT
to return true, which in turn causes the ELFObjectWriter to emit
an undefined reference to _GLOBAL_OFFSET_TABLE_.
This is a problem on powerpc64, because it uses the TOC instead
of the GOT, and the linker does not provide _GLOBAL_OFFSET_TABLE_,
so the symbol remains undefined. This means shared libraries
using TLS built with the integrated assembler are currently
broken.
While the whole RelocNeedsGOT / _GLOBAL_OFFSET_TABLE_ situation
probably ought to be properly fixed at some point, for now I'm
simply reverting the r185476 commit. Now this in turn exposes
the breakage of handling @tlsgd/@tlsld in the asm parser that
this check-in was originally intended to fix.
To avoid this regression, I'm also adding a different fix for
this problem: while common code now parses @tlsgd as VK_TLSGD,
a special hack in the asm parser translates this code to the
platform-specific VK_PPC_TLSGD that the back-end now expects.
While this is not really pretty, it's self-contained and
shouldn't hurt anything else for now. One the underlying
problem is fixed, this hack can be reverted again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185945
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Tue, 9 Jul 2013 15:03:33 +0000 (15:03 +0000)]
R600: Do not predicated basic block with multiple alu clause
Test is not included as it is several 1000 lines long.
To test this functionnality, a test case must generate at least 2 ALU clauses,
where an ALU clause is ~110 instructions long.
NOTE: This is a candidate for the stable branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185943
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Tue, 9 Jul 2013 15:03:25 +0000 (15:03 +0000)]
R600: Fix a rare bug where swizzle optimization returns wrong values
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185942
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Tue, 9 Jul 2013 15:03:19 +0000 (15:03 +0000)]
R600: Fix wrong export reswizzling
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185941
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Tue, 9 Jul 2013 15:03:11 +0000 (15:03 +0000)]
R600: Use DAG lowering pass to handle fcos/fsin
NOTE: This is a candidate for the stable branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185940
91177308-0d34-0410-b5e6-
96231b3b80d8
Vincent Lejeune [Tue, 9 Jul 2013 15:03:03 +0000 (15:03 +0000)]
R600: Print Export Swizzle
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185939
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 12:49:24 +0000 (12:49 +0000)]
Add missing getters. They will be used in llvm-ar.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185937
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 12:45:11 +0000 (12:45 +0000)]
Archive members cannot be larger than 4GB. Return a uint32_t.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185936
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 12:30:10 +0000 (12:30 +0000)]
We never compare iterators from two archives. Assert that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185934
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 12:22:05 +0000 (12:22 +0000)]
Add getHeader helper and move ToHeader to the cpp file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185933
91177308-0d34-0410-b5e6-
96231b3b80d8
Joey Gouly [Tue, 9 Jul 2013 11:26:18 +0000 (11:26 +0000)]
Add MC assembly/disassembly support for VRINT{A, N, P, M} to V8FP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185929
91177308-0d34-0410-b5e6-
96231b3b80d8
Joey Gouly [Tue, 9 Jul 2013 11:03:21 +0000 (11:03 +0000)]
Add MC assembly/disassembly support for VRINT{Z, X, R} to V8FP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185926
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Tue, 9 Jul 2013 10:56:13 +0000 (10:56 +0000)]
Document LLVM_USE_SANITIZER CMake option
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185925
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Tue, 9 Jul 2013 10:00:34 +0000 (10:00 +0000)]
[PowerPC] Support ".machine any"
The PowerPC assembler is supposed to provide a directive .machine
that allows switching the supported CPU instruction set on the fly.
Since we do not yet check CPU feature sets at all and always accept
any available instruction, this is not really useful at this point.
However, it makes sense to accept (and ignore) ".machine any" to
avoid spuriously rejecting existing assembler files that use this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185924
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Potapenko [Tue, 9 Jul 2013 10:00:16 +0000 (10:00 +0000)]
Revert r185872 - "Stop emitting weak symbols into the "coal" sections"
This patch broke `make check-asan` on Mac, causing ld warnings like the following one:
ld: warning: direct access in __GLOBAL__I_a to global weak symbol
___asan_mapping_scale means the weak symbol cannot be overridden at
runtime. This was likely caused by different translation units being
compiled with different visibility settings.
The resulting test binaries crashed with incorrect ASan warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185923
91177308-0d34-0410-b5e6-
96231b3b80d8
Joey Gouly [Tue, 9 Jul 2013 09:59:04 +0000 (09:59 +0000)]
Add MC assembly/disassembly support for VCVT{A, N, P, M} to V8FP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185922
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Tue, 9 Jul 2013 09:46:39 +0000 (09:46 +0000)]
[SystemZ] Use MVC for simple load/store pairs
Look for patterns of the form (store (load ...), ...) in which the two
locations are known not to partially overlap. (Identical locations are OK.)
These sequences are better implemented by MVC unless either the load or
the store could use RELATIVE LONG instructions.
The testcase showed that we weren't using LHRL and LGHRL for extload16,
only sextloadi16. The patch fixes that too.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185919
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Sandiford [Tue, 9 Jul 2013 09:32:42 +0000 (09:32 +0000)]
[SystemZ] Use "STC;MVC" for memset
Use "STC;MVC" for memsets that are too big for two STCs or MV...Is yet
small enough for a single MVC. As with memcpy, I'm leaving longer cases
till later.
The number of tests might seem excessive, but f33 & f34 from memset-04.ll
failed the first cut because I'd not added the "?:" on the calculation
of Size1.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185918
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 09:24:35 +0000 (09:24 +0000)]
InstCombine: Fix typo in comment for visitICmpInstWithInstAndIntCst
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185916
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 09:20:58 +0000 (09:20 +0000)]
InstCombine: variations on 0xffffffff - x >= 4
The following transforms are valid if -C is a power of 2:
(icmp ugt (xor X, C), ~C) -> (icmp ult X, C)
(icmp ult (xor X, C), -C) -> (icmp uge X, C)
These are nice, they get rid of the xor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185915
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 08:09:32 +0000 (08:09 +0000)]
InstCombine: X & -C != -C -> X <= u ~C
Tests were added in r185910 somehow.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185912
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Tue, 9 Jul 2013 07:59:25 +0000 (07:59 +0000)]
[PowerPC] Support .llong and fix .word
This adds support for the .llong PowerPC-specifc assembler directive.
In doing so, I notices that .word is currently incorrect: it is
supposed to define a 2-byte data element, not a 4-byte one.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185911
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 07:58:32 +0000 (07:58 +0000)]
Commit r185909 was a misapplied patch, fix it
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185910
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Tue, 9 Jul 2013 07:50:59 +0000 (07:50 +0000)]
InstCombine: add more transforms
C1-X <u C2 -> (X|(C2-1)) == C1
C1-X >u C2 -> (X|C2) == C1
X-C1 <u C2 -> (X & -C2) == C1
X-C1 >u C2 -> (X & ~C2) == C1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185909
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 9 Jul 2013 06:34:51 +0000 (06:34 +0000)]
PPC: Allocate RS spill slot for unaligned i64 load/store
This fixes another bug found by llvm-stress!
If we happen to be doing an i64 load or store into a stack slot that has less
than a 4-byte alignment, then the frame-index elimination may need to use an
indexed load or store instruction (because the offset may not be a multiple of
4, a requirement of the STD/LD instructions). The extra register needed to hold
the offset comes from the register scavenger, and it is possible that the
scavenger will need to use an emergency spill slot. As a result, we need to
make sure that a spill slot is allocated when doing an i64 load/store into a
less-than-4-byte-aligned stack slot.
Because test cases for things like this tend to be fairly fragile, I've
concatenated a few small bugpoint-reduced test cases together to form the
regression test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185907
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 05:26:25 +0000 (05:26 +0000)]
Compute the size of an archive member in the constructor.
It is always computed the same way (by parsing the header). Doing it in the
constructor simplifies the callers a bit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185905
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 05:09:08 +0000 (05:09 +0000)]
Remove declare but not implemented methods.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185904
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 9 Jul 2013 03:39:35 +0000 (03:39 +0000)]
Move some code out of line. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185901
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Tue, 9 Jul 2013 02:07:28 +0000 (02:07 +0000)]
X86: Add comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185900
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Tue, 9 Jul 2013 02:07:25 +0000 (02:07 +0000)]
X86 fast-isel: Avoid explicit AH subreg reference for [SU]Rem.
Explicit references to %AH for an i8 remainder instruction can lead to
references to %AH in a REX prefixed instruction, which causes things to
blow up. Do the same thing in FastISel as we do for DAG isel and instead
shift %AX right by 8 bits and then extract the 8-bit subreg from that
result.
rdar://
14203849
http://llvm.org/bugs/show_bug.cgi?id=16105
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185899
91177308-0d34-0410-b5e6-
96231b3b80d8
Sean Silva [Tue, 9 Jul 2013 00:54:46 +0000 (00:54 +0000)]
Make BinaryRef output correctly in case of empty data.
Previously, it would simply output nothing, but it should output an
empty string `""`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185894
91177308-0d34-0410-b5e6-
96231b3b80d8