Daniel Sanders [Wed, 9 Jul 2014 10:40:20 +0000 (10:40 +0000)]
[mips][mips64r6] Correct cond names in the cmp.cond.[ds] instructions
Summary:
It seems we accidentally read the wrong column of the table MIPS64r6 spec
and used the names for c.cond.fmt instead of cmp.cond.fmt.
Differential Revision: http://reviews.llvm.org/D4387
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212607
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 9 Jul 2014 10:36:42 +0000 (10:36 +0000)]
[x86] Initialize a pointer to null to fix a bug in r212602.
This should restore GCC hosts (which happen to put the bad stuff into
the pointer) and MSan, etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212606
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 9 Jul 2014 10:21:59 +0000 (10:21 +0000)]
[mips][mips64r6] Use JALR for indirect branches instead of JR (which is not available on MIPS32r6/MIPS64r6)
Summary:
This completes the change to use JALR instead of JR on MIPS32r6/MIPS64r6.
Reviewers: jkolek, vmedic, zoran.jovanovic, dsanders
Reviewed By: dsanders
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D4269
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212605
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 9 Jul 2014 10:16:07 +0000 (10:16 +0000)]
[mips][mips64r6] Use JALR for returns instead of JR (which is not available on MIPS32r6/MIPS64r6)
Summary:
RET, and RET_MM have been replaced by a pseudo named PseudoReturn.
In addition a version with a 64-bit GPR named PseudoReturn64 has been
added.
Instruction selection for a return matches RetRA, which is expanded post
register allocation to PseudoReturn/PseudoReturn64. During MipsAsmPrinter,
this PseudoReturn/PseudoReturn64 are emitted as:
- (JALR64 $zero, $rs) on MIPS64r6
- (JALR $zero, $rs) on MIPS32r6
- (JR_MM $rs) on microMIPS
- (JR $rs) otherwise
On MIPS32r6/MIPS64r6, 'jr $rs' is an alias for 'jalr $zero, $rs'. To aid
development and review (specifically, to ensure all cases of jr are
updated), these aliases are temporarily named 'r6.jr' instead of 'jr'.
A follow up patch will change them back to the correct mnemonic.
Added (JALR $zero, $rs) to MipsNaClELFStreamer's definition of an indirect
jump, and removed it from its definition of a call.
Note: I haven't accounted for MIPS64 in MipsNaClELFStreamer since it's
doesn't appear to account for any MIPS64-specifics.
The return instruction created as part of eh_return expansion is now expanded
using expandRetRA() so we use the right return instruction on MIPS32r6/MIPS64r6
('jalr $zero, $rs').
Also, fixed a misuse of isABI_N64() to detect 64-bit wide registers in
expandEhReturn().
Reviewers: jkolek, vmedic, mseaborn, zoran.jovanovic, dsanders
Reviewed By: dsanders
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D4268
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212604
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 9 Jul 2014 10:07:36 +0000 (10:07 +0000)]
Add ability to emit internal instruction representation to CodeGen assembly output.
Summary:
This patch re-uses the implementation of 'llvm-mc -show-inst' and makes it
available to llc as 'llc -asm-show-inst'.
This is necessary to test parts of MIPS32r6/MIPS64r6 without resorting to
'llc -filetype=obj' tests. For example, on MIPS32r2 and earlier we use the
'jr $rs' instruction for indirect branches and returns. On MIPS32r6, we no
longer have 'jr $rs' and use 'jalr $zero, $rs' instead. The catch is that,
on MIPS32r6, 'jr $rs' is an alias for 'jalr $zero, $rs' and is the preferred
way of writing this instruction. As a result, all MIPS ISA's emit 'jr $rs' in
their assembly output and the assembler encodes this to different opcodes
according to the ISA.
Using this option, we can check that the MCInst really is a JR or a JALR by
matching the emitted comment. This removes the need for a 'llc -filetype=obj'
test.
Reviewers: rafael, dsanders
Reviewed By: dsanders
Subscribers: zoran.jovanovic, llvm-commits
Differential Revision: http://reviews.llvm.org/D4267
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212603
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 9 Jul 2014 10:06:58 +0000 (10:06 +0000)]
[x86] Re-apply a variant of the x86 side of r212324 now that the rest
has settled without incident, removing the x86-specific and overly
strict 'isVectorSplat' routine in favor of generic and more powerful
splat detection.
The primary motivation and result of this is that the x86 backend can
now see through splats which contain undef elements. This is essential
if we are using a widening form of legalization and I've updated a test
case to also run in that mode as before this change the generated code
for the test case was completely scalarized.
This version of the patch much more carefully handles the undef lanes.
- We aren't overly conservative about them in the shift lowering
(where we will never use the splat itself).
- One place where the splat would have been re-used by the existing code
now explicitly constructs a new constant splat that will be safe.
- The broadcast lowering is much more reasonable with undefs by doing
a correct check of whether the splat is the only user of a loaded
value, checking that the splat actually crosses multiple lanes before
using a broadcast, and handling broadcasts of non-constant splats.
As a consequence of the last bullet, the weird usage of vpshufd instead
of vbroadcast is gone, and we actually can lower an AVX splat with
vbroadcastss where before we emitted a really strange pattern of
a vector load and a manual splat across the vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212602
91177308-0d34-0410-b5e6-
96231b3b80d8
Timur Iskhodzhanov [Wed, 9 Jul 2014 08:35:33 +0000 (08:35 +0000)]
[ASan/Win] Don't instrument COMDAT globals. Properly fixes PR20244.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212596
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitri Gribenko [Wed, 9 Jul 2014 08:30:15 +0000 (08:30 +0000)]
SourceMgr: consistently use 'unsigned' for the memory buffer ID type
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212595
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Wed, 9 Jul 2014 06:27:05 +0000 (06:27 +0000)]
Prospective -fsanitize=memory build fix following r212586
This -f group flag appears to influence linker flags, breaking the usual rules
and causing CMake's link invocation to fail during feature detection due to
missing link dependencies (msan_*).
Let's forcibly add it for now to get things the way they were before feature
detection started working.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212590
91177308-0d34-0410-b5e6-
96231b3b80d8
Nikola Smiljanic [Wed, 9 Jul 2014 05:34:24 +0000 (05:34 +0000)]
Use correct memeber when displaying StringMap's size.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212588
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Wed, 9 Jul 2014 03:39:32 +0000 (03:39 +0000)]
CMake: make __DATE__, __TIME__ etc. macro usage an error
When LLVM_ENABLE_TIMESTAMPS has been disabled we can prevent the preprocessor
from embedding dates, times and file timestamps.
There are a few motivations for this:
1) Validate the recent CMake feature detection bugfix from LLVM r212586 with
a flag that's not actually available everywhere.
2) Dogfood clang's new -Wdate-time warning from r210511 when bootstrapping.
3) Encourage reproducible builds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212587
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Wed, 9 Jul 2014 03:38:19 +0000 (03:38 +0000)]
CMake: fix compiler feature detection
add_flag_if_supported() and add_flag_or_print_warning() were effectively
no-ops, just returning the value of the first result (usually
'-fno-omit-frame-pointer') for all subsequent checks for different flags.
Due to the way CMake caches feature detection results, we need to provide
symbolic variable names which will persist the cached results. This commit
fixes feature detection using these two macros.
The feature checks now run and get stored correctly, and the correct output can
be observed in configure logs:
-- Performing Test C_SUPPORTS_FPIC
-- Performing Test C_SUPPORTS_FPIC - Success
-- Performing Test CXX_SUPPORTS_FPIC
-- Performing Test CXX_SUPPORTS_FPIC - Success
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212586
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 9 Jul 2014 00:41:34 +0000 (00:41 +0000)]
[SDAG] At the suggestion of Hal, switch to an output parameter that
tracks which elements of the build vector are in fact undef.
This should make actually inpsecting them (likely in my next patch)
reasonably pretty. Also makes the output parameter optional as it is
clear now that *most* users are happy with undefs in their splats.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212581
91177308-0d34-0410-b5e6-
96231b3b80d8
Ehsan Akhgari [Wed, 9 Jul 2014 00:40:50 +0000 (00:40 +0000)]
[ms-coff] Add a test for proper handling of full Windows path names in the .drectve section
Summary: This test ensures that we can correctly specify a full Windows path to the clang ASAN runtime libraries. This is in preparation to fix PR20246.
Reviewers: rafael
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D4427
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212580
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Tue, 8 Jul 2014 23:48:22 +0000 (23:48 +0000)]
MipsTargetStreamer.h: Avoid "using" to appease msc17.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212577
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Tue, 8 Jul 2014 23:47:31 +0000 (23:47 +0000)]
Changed the lvm-nm alias "-s" for -print-armap to "-M".
This will allow the "-s" flag to implemented in the future as it
is in darwin’s nm(1) to list symbols only in the specified section.
Given a LGTM by Shankar Easwaran who originally implemented
the support for lvm-nm’s -print-armap and archive map symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212576
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Tue, 8 Jul 2014 23:28:48 +0000 (23:28 +0000)]
AArch64: Better codegen for loading from __fp16.
Loading will generally extend to an f32 or an 64, so make sure
to match those patterns directly to load into the FPR16 register
class directly rather than going through the integer GPRs.
This also eliminates an extra step in the convert-to-f64 path
which was first converting to f32 and then to f64 from there.
rdar://
17594379
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212573
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 8 Jul 2014 23:16:49 +0000 (23:16 +0000)]
Improve BasicAA CS-CS queries
BasicAA contains knowledge of certain intrinsics, such as memcpy and memset,
and uses that information to form more-accurate answers to CallSite vs. Loc
ModRef queries. Unfortunately, it did not use this information when answering
CallSite vs. CallSite queries.
Generically, when an intrinsic takes one or more pointers and the intrinsic is
marked only to read/write from its arguments, the offset/size is unknown. As a
result, the generic code that answers CallSite vs. CallSite (and CallSite vs.
Loc) queries in AA uses UnknownSize when forming Locs from an intrinsic's
arguments. While BasicAA's CallSite vs. Loc override could use more-accurate
size information for some intrinsics, it did not do the same for CallSite vs.
CallSite queries.
This change refactors the intrinsic-specific logic in BasicAA into a generic AA
query function: getArgLocation, which is overridden by BasicAA to supply the
intrinsic-specific knowledge, and used by AA's generic implementation. This
allows the intrinsic-specific knowledge to be used by both CallSite vs. Loc and
CallSite vs. CallSite queries, and simplifies the BasicAA implementation.
Currently, only one function, Mac's memset_pattern16, is handled by BasicAA
(all the rest are intrinsics). As a side-effect of this refactoring, BasicAA's
getModRefBehavior override now also returns OnlyAccessesArgumentPointees for
this function (which is an improvement).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212572
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Tue, 8 Jul 2014 22:51:03 +0000 (22:51 +0000)]
DominanceInfo is strongly preferred over RegionInfo
This is and always was strong community consensus. Make this clear in the header
in case newcomers may not be aware.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212570
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Tue, 8 Jul 2014 22:10:02 +0000 (22:10 +0000)]
Add support for BSD format Archive map symbols (aka the table of contents
from a __.SYMDEF or "__.SYMDEF SORTED" archive member).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212568
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 8 Jul 2014 17:06:03 +0000 (17:06 +0000)]
Revert "GlobalDCE: Delete available_externally initializers if it allows removing the value the initializer is referring to."
This reverts commit
5b55a47e94e28fbb56d0cd5d72c3db9105c15b4c.
A test case was found to crash after this was applied. I'll file a bug to track fixing this with the test case needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212550
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Tue, 8 Jul 2014 16:16:02 +0000 (16:16 +0000)]
[PowerPC] Implement atomic NAND operations as actual NAND
This changes the implementation of atomic NAND operations
from "a & ~b" (compatible with GCC < 4.4) to actual "~(a & b)"
(compatible with GCC >= 4.4).
This is in line with the common-code and ARM back-end change
implemented in r212433.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212547
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Tue, 8 Jul 2014 15:22:29 +0000 (15:22 +0000)]
[DAG] Teach how to combine a pair of shuffles into a single shuffle if the resulting mask is legal.
This patch teaches how to fold a shuffle according to rule:
shuffle (shuffle (x, undef, M0), undef, M1) -> shuffle(x, undef, M2)
We do this only if the resulting mask M2 is legal; this is to avoid introducing
illegal shuffles that are potentially expanded into a sub-optimal sequence
of target specific dag nodes.
This patch has the advantage of being target independent, since it works on ISD
nodes. Therefore, all targets (not only x86) can take advantage of this rule.
The idea behind this patch is that most shuffle pairs can be safely combined
before we run the legalizer on vector operations. This allows us to
combine/simplify dag nodes earlier in the process and not only immediately
before instruction selection stage.
That said. This patch is not meant to replace any existing target specific
combine rules; backends might still introduce new shuffles during legalization
stage. Also, this rule is very simple and avoids to aggressively optimize
shuffles.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212539
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Tue, 8 Jul 2014 14:55:06 +0000 (14:55 +0000)]
Fix some Twine locals.
Two of those are use after frees. Found by clang-tidy, fixed by me.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212537
91177308-0d34-0410-b5e6-
96231b3b80d8
Timur Iskhodzhanov [Tue, 8 Jul 2014 13:18:58 +0000 (13:18 +0000)]
[ASan/Win] Don't instrument private COMDAT globals until PR20244 is properly fixed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212530
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 8 Jul 2014 13:13:42 +0000 (13:13 +0000)]
[mips] Fixed struct/class mismatch introduced in r212522.
Clang emits a warning about this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212528
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 8 Jul 2014 10:35:52 +0000 (10:35 +0000)]
Fix r212522 - [mips] Improve encapsulation of the .MIPS.abiflags implementation and limit scope of related enums
Added two lines that should have been in r212522.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212523
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 8 Jul 2014 10:11:38 +0000 (10:11 +0000)]
[mips] Improve encapsulation of the .MIPS.abiflags implementation and limit scope of related enums
Summary:
Follow on to r212519 to improve the encapsulation and limit the scope of the enums.
Also merged two very similar parser functions, fixed a bug where ASE's
were not being reported, and marked CPR1's as being 128-bit when MSA is
enabled.
Differential Revision: http://reviews.llvm.org/D4384
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212522
91177308-0d34-0410-b5e6-
96231b3b80d8
Renato Golin [Tue, 8 Jul 2014 10:06:16 +0000 (10:06 +0000)]
Revert "Refactor ARM subarchitecture parsing"
This reverts commit
7b4a6882467e7fef4516a0cbc418cbfce0fc6f6d.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212521
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnaud A. de Grandmaison [Tue, 8 Jul 2014 09:53:04 +0000 (09:53 +0000)]
Truncate the immediate in logical operation to the register width
And continue to produce an error if the 32 most significant bits are not all ones or zeros.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212520
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Tue, 8 Jul 2014 08:59:22 +0000 (08:59 +0000)]
Mips.abiflags is a new implicitly generated section that will be present on all new modules. The section contains a versioned data structure which represents essentially information to allow a program loader to determine the requirements of the application. This patch implements mips.abiflags section and provides test cases for it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212519
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 8 Jul 2014 08:45:38 +0000 (08:45 +0000)]
[x86,SDAG] Sink the logic for folding shuffles of splats more
aggressively from the x86 shuffle lowering to the generic SDAG vector
shuffle formation code.
This code already tried to fold away shuffles of splats! It just had
lots of bugs and couldn't handle the case my new x86 shuffle lowering
needed.
First, it failed to correctly compute whether N2 was undef because it
pre-computed this, then did transformations which could *make* N2 undef,
then failed to ever re-consider the precomputed state.
Second, it didn't look through bitcasts at all, even in the safe cases
where they are just element-type bitcasts with no change to the number
of elements.
Third, it didn't handle all-zero bit casts nicely the way my code in the
x86 side of things did, which is essential to getting good zext-shuffle
lowerings.
But all of these are generic. I just ported the code down to this layer
and fixed the surrounding bugs. Tests exercising this in the x86 backend
still pass and some silly code in widen_cast-6.ll gets better. I updated
that test to be a bit more precise but it's still pretty unclear what
the value of the test is in this day and age.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212517
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 8 Jul 2014 07:44:15 +0000 (07:44 +0000)]
[SDAG] Actually check for a non-constant splat and clarify comments
around the handling of UNDEF lanes in boolean vector content analysis.
The code before my changes here also failed to check for non-constant
splats in a buildvector. I have no idea how to trigger this, I just
spotted by inspection when trying to understand the code. It seems
extremely unlikely to be worth the trouble to teach the only caller of
this code (DAG combining setcc patterns) how to cleverly handle undef
lanes, so I've just commented more thoroughly that we're giving up
there.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212515
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Tue, 8 Jul 2014 07:19:55 +0000 (07:19 +0000)]
[SDAG] Build up a more rich set of APIs for querying build-vector SDAG
nodes about whether they are splats. This is factored out and improved
from r212324 which got reverted as it was far too aggressive. The new
API should help more conservatively handle buildvectors that are
a mixture of splatted and undef values.
No functionality change at this point. The hope is to slowly
re-introduce the undef-tolerant optimization of splats, but each time
being forced to make a concious decision about how to handle the undefs
in a way that doesn't lead to contradicting assumptions about the
collapsed value.
Hal has pointed out in discussions that this may not end up being the
desired API and instead it may be more convenient to get a mask of the
undef elements or something similar. I'm starting simple and will expand
the API as I adapt actual callers and see exactly what they need.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212514
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Tue, 8 Jul 2014 00:50:49 +0000 (00:50 +0000)]
[ASan] Completely remove sanitizer blacklist file from instrumentation pass.
All blacklisting logic is now moved to the frontend (Clang).
If a function (or source file it is in) is blacklisted, it doesn't
get sanitize_address attribute and is therefore not instrumented.
If a global variable (or source file it is in) is blacklisted, it is
reported to be blacklisted by the entry in llvm.asan.globals metadata,
and is not modified by the instrumentation.
The latter may lead to certain false positives - not all the globals
created by Clang are described in llvm.asan.globals metadata (e.g,
RTTI descriptors are not), so we may start reporting errors on them
even if "module" they appear in is blacklisted. We assume it's fine
to take such risk:
1) errors on these globals are rare and usually indicate wild memory access
2) we can lazily add descriptors for these globals into llvm.asan.globals
lazily.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212505
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Tue, 8 Jul 2014 00:22:32 +0000 (00:22 +0000)]
[X86] AVX512: Only allow k1-k7 as predicates to vpcmp*
As destination k0 is allowed but not as predicate/writemask.
I also modified the test to allow checking of error messages by the assembler.
I applied a similar approach to the test ret.s in the same directory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212504
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Tue, 8 Jul 2014 00:03:11 +0000 (00:03 +0000)]
Kill unnecessary include
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212503
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Mon, 7 Jul 2014 23:25:23 +0000 (23:25 +0000)]
[x86] Fix assertion failure caused by a wrong combine of PSHUFD nodes with different types.
When combining a sequence of two PSHUFD dag nodes into a single PSHUFD,
make sure that we assign the correct type to the resulting PSHUFD.
X86ISD::PSHUFD dag nodes can be either MVT::v4i32 or MVT::v4f32.
Before this change, an assertion failure was triggered in method
'DAGCombinerInfo::CombineTo' when trying to combine the shuffles from the test
below into a single PSHUFD.
define <4 x float> @test1(<4 x float> %V) {
%1 = shufflevector <4 x float> %V, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
%2 = shufflevector <4 x float> %1, <4 x float> undef, <4 x i32> <i32 3, i32 0, i32 2, i32 1>
ret <4 x float> %2
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212498
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 7 Jul 2014 22:13:58 +0000 (22:13 +0000)]
fixed some typos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212495
91177308-0d34-0410-b5e6-
96231b3b80d8
Juergen Ributzka [Mon, 7 Jul 2014 21:52:21 +0000 (21:52 +0000)]
[FastISel][X86] Fix smul.with.overflow.i8 lowering.
Add custom lowering code for signed multiply instruction selection, because the
default FastISel instruction selection for ISD::MUL will use unsigned multiply
for the i8 type and signed multiply for all other types. This would set the
incorrect flags for the overflow check.
This fixes <rdar://problem/
17549300>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212493
91177308-0d34-0410-b5e6-
96231b3b80d8
Louis Gerbarg [Mon, 7 Jul 2014 21:37:51 +0000 (21:37 +0000)]
Allow AArch64FastISel to degrade graceully in the presence of an MVT::i128
Currently AArch64FastISel crashes if it tries to extend an integer into an
MVT::i128. This can happen by creating 128 bit integers like so:
typedef unsigned int uint128_t __attribute__((mode(TI)));
typedef int sint128_t __attribute__((mode(TI)));
This patch makes EmitIntExt check for their presence and then falls back to
SelectionDAG.
Tests included.
rdar://
17516686
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212492
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 7 Jul 2014 21:19:00 +0000 (21:19 +0000)]
Fix for PR17073 ( llvm.org/pr17073 ), simplifycfg illegally hoists an operation in a phi node that can trap.
This patch adds to an existing loop over phi nodes in SimplifyCondBranchToCondBranch() to check for trapping ops and bails out of the optimization if we find one of those.
The test cases verify that trapping ops are not hoisted and non-trapping ops are still optimized as expected.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212490
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 7 Jul 2014 20:34:51 +0000 (20:34 +0000)]
Use raw_fd_ostream instead of std::ofstream.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212483
91177308-0d34-0410-b5e6-
96231b3b80d8
Renato Golin [Mon, 7 Jul 2014 20:01:11 +0000 (20:01 +0000)]
Refactor ARM subarchitecture parsing
According to a FIXME in ARMMCTargetDesc.cpp the ARM version parsing should be
in the Triple helper class.
Patch by: Gabor Ballabas
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212479
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Mon, 7 Jul 2014 19:41:54 +0000 (19:41 +0000)]
[PowerPC] Fix testcase regression
Use -mcpu to avoid different codegen depending on host platform.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212478
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Mon, 7 Jul 2014 19:39:44 +0000 (19:39 +0000)]
[PowerPC] Fix no-assert build
r212476 caused a compile failure (unused variable) in a non-assertion
build ...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212477
91177308-0d34-0410-b5e6-
96231b3b80d8
Ulrich Weigand [Mon, 7 Jul 2014 19:26:41 +0000 (19:26 +0000)]
[PowerPC] Fix "byval align" arguments
Arguments passed as "byval align" should get the specified alignment
in the parameter save area. There was some code in PPCISelLowering.cpp
that attempted to implement this, but this didn't work correctly:
while code did update the ArgOffset value, it neglected to update
the PtrOff value (which was already computed from the old ArgOffset),
and it also neglected to update GPR_idx -- fields skipped due to
alignment in the save area must likewise be skipped in GPRs.
This patch fixes and simplifies this logic by:
- handling argument offset alignment right at the beginning
of argument processing, using a new helper routine
CalculateStackSlotAlignment (this avoids having to update
PtrOff and other derived values later on)
- not tracking GPR_idx separately, but always computing the
correct GPR_idx for each argument *from* its ArgOffset
- removing some redundant computation in LowerFormalArguments:
MinReservedArea must equal ArgOffset after argument processing,
so there's no use in computing it twice.
[This doesn't change the behavior of the current clang front-end,
since that never creates "byval align" arguments at the moment.
This will change with a follow-on patch, however.]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212476
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 7 Jul 2014 19:03:32 +0000 (19:03 +0000)]
[x86] Revert r212324 which was too aggressive w.r.t. allowing undef
lanes in vector splats.
The core problem here is that undef lanes can't *unilaterally* be
considered to contribute to splats. Their handling needs to be more
cautious. There is also a reported failure of the nightly testers
(thanks Tobias!) that may well stem from the same core issue. I'm going
to fix this theoretical issue, factor the APIs a bit better, and then
verify that I don't see anything bad with Tobias's reduction from the
test suite before recommitting.
Original commit message for r212324:
[x86] Generalize BuildVectorSDNode::getConstantSplatValue to work for
any constant, constant FP, or undef splat and to tolerate any undef
lanes in a splat, then replace all uses of isSplatVector in X86's
lowering with it.
This fixes issues where undef lanes in an otherwise splat vector would
prevent the splat logic from firing. It is a touch more awkward to use
this interface, but it is much more accurate. Suggestions for better
interface structuring welcome.
With this fix, the code generated with the widening legalization
strategy for widen_cast-4.ll is *dramatically* improved as the special
lowering strategies for a v16i8 SRA kick in even though the high lanes
are undef.
We also get a slightly different choice for broadcasting an aligned
memory location, and use vpshufd instead of vbroadcastss. This looks
like a minor win for pipelining and domain crossing, but a minor loss
for the number of micro-ops. I suspect its a wash, but folks can
easily tweak the lowering if they want.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212475
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Mon, 7 Jul 2014 18:34:45 +0000 (18:34 +0000)]
R600: Fix mishandling of load / store chains.
Fixes various bugs with reordering loads and stores.
Scalarized vector loads weren't collecting the chains
at all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212473
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Mon, 7 Jul 2014 18:34:42 +0000 (18:34 +0000)]
Fix typo, weird indentation
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212472
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 7 Jul 2014 15:26:53 +0000 (15:26 +0000)]
[testing]: lld generally lives in tools/, so fix llvm-lit.
Otherwise we can't run individual tests directly ("llvm-lit /path/to/test")
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212461
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 7 Jul 2014 14:47:51 +0000 (14:47 +0000)]
Make helper functions static.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212460
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 7 Jul 2014 14:06:42 +0000 (14:06 +0000)]
X86: revert unintentional change to X86FastISel.
This crept in with r212443.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212459
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Mon, 7 Jul 2014 13:57:37 +0000 (13:57 +0000)]
[asan] Generate asm instrumentation in MC.
Generate entire ASan asm instrumentation in MC without
relying on runtime helper functions.
Patch by Yuri Gorshenin.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212455
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Mon, 7 Jul 2014 13:28:31 +0000 (13:28 +0000)]
[msan] Fix handling of phi in blacklisted functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212454
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 7 Jul 2014 11:01:16 +0000 (11:01 +0000)]
InstCombine: Simplify code, no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212449
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 7 Jul 2014 09:06:58 +0000 (09:06 +0000)]
[x86] Teach the new vector shuffle lowering code to handle what is
essentially a DAG combine that never gets a chance to run.
We might typically expect DAG combining to remove shuffles-of-splats and
other similar patterns, but we don't get a chance to run the DAG
combiner when we recursively form sub-shuffles during the lowering of
a shuffle. So instead hand-roll a really important combine directly into
the lowering code to detect shuffles-of-splats, especially shuffles of
an all-zero splat which needn't even have the same element width, etc.
This lets the new vector shuffle lowering handle shuffles which
implement things like zero-extension really nicely. This will become
even more important when I wire the legalization of zero-extension to
vector shuffles with the new widening legalization strategy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212444
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 7 Jul 2014 09:06:35 +0000 (09:06 +0000)]
CodeGen: it turns out that NAND is not the same thing as BIC. At all.
We've been performing the wrong operation on ARM for "atomicrmw nand" for
years, since "a NAND b" is "~(a & b)" rather than ARM's very tempting "a & ~b".
This bled over into the generic expansion pass.
So I assume no-one has ever actually tried to do an atomic nand in the real
world. Oh well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212443
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 7 Jul 2014 05:18:35 +0000 (05:18 +0000)]
ARM: properly lower dllimport'ed global values
This completes the handling for DLL import storage symbols when lowering
instructions. A DLL import storage symbol must have an additional load
performed prior to use. This is applicable to variables and functions.
This is particularly important for non-function symbols as it is possible to
handle function references by emitting a thunk which performs the translation
from the unprefixed __imp_ symbol to the proper symbol (although, this is a
non-optimal lowering). For a variable symbol, no such thunk can be
accommodated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212431
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 7 Jul 2014 05:18:30 +0000 (05:18 +0000)]
ARM: correctly mangle dllimport symbols
Add support for tracking DLLImport storage class information on a per symbol
basis in the ARM instruction selection. Use that information to correctly
mangle the symbol (dllimport symbols are referenced via *__imp_<name>).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212430
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 7 Jul 2014 05:18:22 +0000 (05:18 +0000)]
ARM: unify symbol name retrieval
Ensure that all paths that retrieve the symbol name go through GetARMGVSymbol
rather than getSymbol. This is desirable so that any global symbol mangling can
be centralised to this function. The motivation for this is handling of symbols
that are marked as having dll import dll storage. Such a symbol requires an
extra load that is currently handled in the backend and a __imp_ prefix on the
symbol name.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212429
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Qin [Mon, 7 Jul 2014 02:45:40 +0000 (02:45 +0000)]
[AArch64] Normalize all constants to build a vector.
The value of constant operands will be truncated to fit element width.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212428
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 6 Jul 2014 23:24:53 +0000 (23:24 +0000)]
fixed typos in comments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212424
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 6 Jul 2014 23:10:24 +0000 (23:10 +0000)]
fixed some typos in comments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212423
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sun, 6 Jul 2014 22:13:26 +0000 (22:13 +0000)]
AArch64: whitespace cleanup
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212420
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sun, 6 Jul 2014 20:20:02 +0000 (20:20 +0000)]
These should be EXPECT_TRUE, not EXPECT_FALSE. Amends r212415.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212419
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sun, 6 Jul 2014 19:34:52 +0000 (19:34 +0000)]
Fixing compile errors related to changes with MemoryBuffer::getFile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212415
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 6 Jul 2014 17:43:13 +0000 (17:43 +0000)]
Update the MemoryBuffer API to use ErrorOr.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212405
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 6 Jul 2014 14:31:22 +0000 (14:31 +0000)]
Declare variable on first use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212403
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 6 Jul 2014 14:24:03 +0000 (14:24 +0000)]
This only needs a StringRef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212402
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sun, 6 Jul 2014 14:17:29 +0000 (14:17 +0000)]
This only needs a StringRef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212401
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Sun, 6 Jul 2014 10:54:41 +0000 (10:54 +0000)]
Fix the MSVC build following r212382
Looks like the casts are needed there after all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212399
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Sun, 6 Jul 2014 10:33:31 +0000 (10:33 +0000)]
SourceMgr: make valid buffer IDs start from one
Use 0 for the invalid buffer instead of -1/~0 and switch to unsigned
representation to enable more idiomatic usage.
Also introduce a trivial SourceMgr::getMainFileID() instead of hard-coding 0/1
to identify the main file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212398
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Sun, 6 Jul 2014 10:32:55 +0000 (10:32 +0000)]
Don't use StringRef iterator functions for data access
And also remove some redundant casts from r212371.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212397
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Sat, 5 Jul 2014 22:20:59 +0000 (22:20 +0000)]
Remove IntrusiveRefCntPtr::getPtr() function
It was deprecated in r212366 and all uses have been switched to get().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212382
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 5 Jul 2014 21:16:43 +0000 (21:16 +0000)]
Use cast<> instead of dyn_cast + assert
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212380
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 5 Jul 2014 21:16:40 +0000 (21:16 +0000)]
Fix grammar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212379
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 5 Jul 2014 20:09:24 +0000 (20:09 +0000)]
ARM: mark matching ARM intrinsics as MSBuiltin
A number of the ARM intrinsics are aliased with alternative names in MSVC
compatibility mode. This change indicates those intrinsics to permit tablegen
to construct an appropriate list of MSBuiltins. With the corresponding change
in clang, these intrinsics can then be mapped from the frontend.
The tests to validate the intrinsics are aliased correctly will be added with
the corresponding clang change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212377
91177308-0d34-0410-b5e6-
96231b3b80d8
Ehsan Akhgari [Sat, 5 Jul 2014 19:46:10 +0000 (19:46 +0000)]
Revert r212375 because of test failures
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212376
91177308-0d34-0410-b5e6-
96231b3b80d8
Ehsan Akhgari [Sat, 5 Jul 2014 19:40:35 +0000 (19:40 +0000)]
Add a test case for the tilde operator in Microsoft inline assembly
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212375
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Sat, 5 Jul 2014 19:28:49 +0000 (19:28 +0000)]
[llvm-readobj] Fix output of MIPS GOT without local and global entries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212374
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 5 Jul 2014 11:38:52 +0000 (11:38 +0000)]
This only needs a StringRef. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212371
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sat, 5 Jul 2014 06:12:30 +0000 (06:12 +0000)]
ADT: Add a drop_back() helper to ArrayRef
The slice(N, M) interface is powerful but not concise when wanting to
drop a few elements off of an ArrayRef, fix this by adding a drop_back
method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212370
91177308-0d34-0410-b5e6-
96231b3b80d8
Alp Toker [Sat, 5 Jul 2014 03:03:21 +0000 (03:03 +0000)]
Deprecate IntrusiveRefCntPtr::getPtr() in favour of get()
This better aligns with other LLVM-specific and C++ standard library smart
pointer types.
In particular there are at least a few uses of intrusive refcounting in the
frontend where it's worth investigating std::shared_ptr as a more appropriate
alternative.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212366
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sat, 5 Jul 2014 00:39:52 +0000 (00:39 +0000)]
MC: make MCSymbolData::dump work on const objects
This just lets us dump a const MCSymbolData object, no functionality
changed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212365
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Sat, 5 Jul 2014 00:39:08 +0000 (00:39 +0000)]
Make a helper function static. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212364
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 4 Jul 2014 23:20:46 +0000 (23:20 +0000)]
MC: Correct comment in ExportSymbol
No functionality changed, just make it so that the code _could_ be
uncommented.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212363
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 4 Jul 2014 23:15:28 +0000 (23:15 +0000)]
MC: Cleanup COFFAsmParser::ParseSectionFlags
Switch a normal for-loop to a range-based for. No functionality changed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212362
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 22:44:18 +0000 (22:44 +0000)]
Make RecordStreamer.h private.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212361
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 4 Jul 2014 22:05:26 +0000 (22:05 +0000)]
IR: Fold away compares between GV GEPs and GVs
A GEP of a non-weak global variable will not be equivalent to another
non-weak global variable or a GEP of such a variable.
Differential Revision: http://reviews.llvm.org/D4238
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212360
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 20:05:56 +0000 (20:05 +0000)]
Fix a bug in the conversion to ErrorOr.
The regular end of the bitcode parsing is in the BitstreamEntry::EndBlock
case.
Should fix the LTO bootstrap on OS X (this function is only used by ld64).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212357
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 20:02:42 +0000 (20:02 +0000)]
Revert "Convert a few std::strings to StringRef."
This reverts commit r212342.
We can get a StringRef into the current Record, but not one in the bitcode
itself since the string is compressed in it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212356
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 4 Jul 2014 19:40:43 +0000 (19:40 +0000)]
fixed typos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212355
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 19:31:27 +0000 (19:31 +0000)]
Ignore llvm specific symbols in the LTOModule.
These are the llvm.* globals and functions.
I don't think it is possible to test this directly since llvm-lto is not
a full linker and will not report duplicated symbols, but this fixes
bootstrap with gold and lto enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212354
91177308-0d34-0410-b5e6-
96231b3b80d8
Ehsan Akhgari [Fri, 4 Jul 2014 19:13:05 +0000 (19:13 +0000)]
Add support for parsing the not operator in Microsoft inline assembly
This fixes http://llvm.org/PR20202
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212352
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 19:08:22 +0000 (19:08 +0000)]
Ignore llvm.* globals.
It is not clear if llvm.global_ctors should or should not be in llvm.metadata,
but in practice it is not and we need to ignore it for LTO.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212351
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 4 Jul 2014 18:42:25 +0000 (18:42 +0000)]
TableGen: introduce support for MSBuiltin
Add MSBuiltin which is similar in vein to GCCBuiltin. This allows for adding
intrinsics for Microsoft compatibility to individual instructions. This is
needed to permit the creation of ARM specific MSVC extensions.
This is not currently in use, and requires an associated change in clang to
enable use of the intrinsics defined by this new class. This merely sets the
LLVM portion of the infrastructure in place to permit the use of this
functionality. A separate set of changes will enable the new intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212350
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 18:40:36 +0000 (18:40 +0000)]
Implement LTOModule on top of IRObjectFile.
IRObjectFile provides all the logic for producing mangled names and getting
symbols from inline assembly.
LTOModule then adds logic for linking specific tasks, like constructing
llvm.compiler_user or extracting linker options from the bitcode.
The rule of the thumb is that IRObjectFile has the functionality that is
needed by both LTO and llvm-ar.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212349
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 16:37:02 +0000 (16:37 +0000)]
Avoid mangling names twice. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212348
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 4 Jul 2014 15:58:00 +0000 (15:58 +0000)]
Mark intrinsic functions as llvm-specific.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212347
91177308-0d34-0410-b5e6-
96231b3b80d8