Commit Graph

20896 Commits

Author SHA1 Message Date
Justin Lebar f66cee6be5 [CodeGen] Refactor MachineMemOperand's Flags enum.
Summary:
- Give it a shorter name (because we're going to refer to it often from
  SelectionDAG and friends).

- Split the flags and alignment into separate variables.

- Specialize FlagsEnumTraits for it, so we can do bitwise ops on it
  without losing type information.

- Make some enum values constants in MachineMemOperand instead.
  MOMaxBits should not be a valid Flag.

- Simplify some of the bitwise ops for dealing with Flags.

Reviewers: chandlerc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275438 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-14 17:07:44 +00:00
Ahmed Bougacha 8b8511816c [GlobalISel] Fix #include ordering/spacing. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275423 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-14 14:52:55 +00:00
Dean Michael Berris f585634128 Remove extra ';' to appease -Wpedantic
Summary:

Reviewers: dok

Subscribers: llvm-commits

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275399 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-14 11:46:41 +00:00
Dean Michael Berris cee9af9136 XRay: Add entry and exit sleds
Summary:
In this patch we implement the following parts of XRay:

- Supporting a function attribute named 'function-instrument' which currently only supports 'xray-always'. We should be able to use this attribute for other instrumentation approaches.
- Supporting a function attribute named 'xray-instruction-threshold' used to determine whether a function is instrumented with a minimum number of instructions (IR instruction counts).
- X86-specific nop sleds as described in the white paper.
- A machine function pass that adds the different instrumentation marker instructions at a very late stage.
- A way of identifying which return opcode is considered "normal" for each architecture.

There are some caveats here:

1) We don't handle PATCHABLE_RET in platforms other than x86_64 yet -- this means if IR used PATCHABLE_RET directly instead of a normal ret, instruction lowering for that platform might do the wrong thing. We think this should be handled at instruction selection time to by default be unpacked for platforms where XRay is not availble yet.

2) The generated section for X86 is different from what is described from the white paper for the sole reason that LLVM allows us to do this neatly. We're taking the opportunity to deviate from the white paper from this perspective to allow us to get richer information from the runtime library.

Reviewers: sanjoy, eugenis, kcc, pcc, echristo, rnk

Subscribers: niravd, majnemer, atrick, rnk, emaste, bmakam, mcrosier, mehdi_amini, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275367 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-14 04:06:33 +00:00
Matthias Braun 18d2e0ea00 MIRParser: Fix MIRParser not reporting nullptr on error.
While some code paths in MIRParserImpl::parse() already returned nullptr
in case of error one of the important ones did not.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-14 00:42:37 +00:00
Mehdi Amini f167a26c50 Add EnableIPRA to TargetOptions, and move the cl::opt -enable-ipra to TargetMachine.cpp
Avoid exposing a cl::opt in a public header and instead promote this
option in the API.
Alternatively, we could land the cl::opt in CommandFlags.h so that
it is available to every tool, but we would still have to find an
option for clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275348 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 23:39:46 +00:00
Mehdi Amini bf8318ccc8 [IPRA] Set callee saved registers to none for local function when IPRA is enabled.
IPRA try to optimize caller saved register by propagating register
usage information from callee to caller so it is beneficial to have
caller saved registers compare to callee saved registers when IPRA
is enabled. Please find more detailed explanation here
https://groups.google.com/d/msg/llvm-dev/XRzGhJ9wtZg/tjAJqb0eEgAJ.

This change makes local function do not have any callee preserved
register when IPRA is enabled. A simple test case is also added to
verify this change.

Patch by Vivek Pandya <vivekvpandya@gmail.com>

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275347 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 23:39:34 +00:00
Michael Kuperstein 95c81ed0a1 Fix copy/paste bug in r275340.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275343 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 23:28:00 +00:00
Matthias Braun 67cca86db4 MIRParser: Move SlotMapping and SourceMgr refs to PFS; NFC
Code cleanup: Move references to SlotMapping and SourceMgr into the
PerFunctionMIParsingState to avoid unnecessary passing around in
parameters.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275342 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 23:27:50 +00:00
Michael Kuperstein a38e7e4c53 [DAG] Correctly chain masked loads
If a masked loads is not added to the chain, it should not reset the chain's
root.

This fixes the remaining part of PR28515.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275340 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 23:23:40 +00:00
Justin Lebar 6e665c85a4 [MI] Clean up some loops over MachineInstr::memoperands(). NFC
Use range-based for loops and llvm::any_of instead of explicit
iterators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275332 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 22:35:19 +00:00
Justin Lebar ff8bc4a1cf [MI] Fix MachineInstr::isInvariantLoad.
Summary:
Previously it would say we had an invariant load if any of the memory
operands were invariant.  But the load should be invariant only if *all*
the memory operands are invariant.

No testcase because this has proven to be very difficult to tickle in
practice.  As just one example, ARM's ldrd instruction, which loads 64
bits into two 32-bit regs, is theoretically affected by this.  But when
it's produced, it loses its memoperands' invariance bits!

Reviewers: jfb

Subscribers: llvm-commits, aemerson

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275331 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 22:34:50 +00:00
Matthias Braun 13b86678de MIRParser: Move MachineFunction reference into PFS; NFC
Code cleanup: The PerFunctionMIParsingState is per function, moving a
reference into PFS we can avoid passing around the MachineFunction in an
extra parameter most of the time.

Also change most signatures to consistently pass PFS reference first.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275329 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 22:23:23 +00:00
Quentin Colombet 3d35f0d482 [MIR] Print on the given output instead of stderr.
Currently the MIR framework prints all its outputs (errors and actual
representation) on stderr.

This patch fixes that by printing the regular output in the output
specified with -o.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275314 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 20:36:03 +00:00
Andrew Kaylor b9ed6a643a Reverting r275284 due to platform-specific test failures
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275304 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 19:09:16 +00:00
Andrew Kaylor c949e6e642 Fix for Bug 26903, adds support to inline __builtin_mempcpy
Patch by Sunita Marathe

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275284 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 17:25:11 +00:00
Matthias Braun e01c09683d PatchableFunction: Skip pseudos that do not create code
This fixes http://llvm.org/PR28524

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275278 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-13 16:37:29 +00:00
Tim Northover 5ae8ffe436 GlobalISel: freeze reserved regs after IRTranslator.
We can freeze the registers after the MachineFrameInfo has been configured (by
telling it about calls, inline asm, ...). This doesn't happen at all yet, but
will be part of IR translation.

Fixes -verify-machineinstrs assertion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275221 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 22:23:42 +00:00
Matthias Braun 1efbc7fef5 BranchFolding: Use LivePhysReg to update live in lists.
Use LivePhysRegs with a backwards walking algorithm to update live in
lists, this way the results do not depend on the presence of kill flags
anymore.

This patch also reduces the number of registers added as live-in.
Previously all pristine registers as well as all sub registers of a
super register were added resulting in unnecessarily large live in
lists. This fixed https://llvm.org/PR25263.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275201 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 18:44:33 +00:00
Krzysztof Parzyszek bbfa7fe14f Fix printing of debugging information in LiveIntervals::shrinkToUses
Print VNI->def before calling VNI->markUnused(), since markUnused makes
the def invalid.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275196 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 17:55:28 +00:00
Krzysztof Parzyszek 29e2ed1854 Add print/dump routines to LiveInterval::SubRange
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275194 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 17:37:44 +00:00
Amjad Aboud dd79b0c35c [codeview] Improved array type support.
Added support for:
1. Multi dimension array.
2. Array of structure type, which previously was declared incompletely.
3. Dynamic size array.
4. Array where element type is a typedef, volatile or constant (this should resolve PR28311).

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275167 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 12:06:34 +00:00
Kyle Butt 9423d77c86 Codegen: Fix comment in BranchFolding.cpp
Blocks to be tail-merged may share more than one successor. Correct the
comment to state that they share a specific successor, SuccBB, rather
than a single successor, which is not true.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275104 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-11 21:37:03 +00:00
Sanjay Patel 7228de8778 fix documentation comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275101 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-11 20:50:39 +00:00
Chad Rosier fdc8303ecb [IPRA] Properly compute register usage at call sites.
Differential Revision: http://reviews.llvm.org/D21395
Patch by Vivek Pandya.
PR28144

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275087 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-11 18:45:49 +00:00
Nirav Dave aee0f143c9 Provide support for preserving assembly comments
Preserve assembly comments from input in output assembly and flags to
toggle property. This is on by default for inline assembly and off in
llvm-mc.

Parsed comments are emitted immediately before an EOL which generally
places them on the expected line.

Reviewers: rtrieu, dwmw2, rnk, majnemer

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275058 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-11 12:42:14 +00:00
Sanjay Patel 03c714d84a [DAG] make isConstantSplatVector() available to the rest of lowering
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275025 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-10 21:27:06 +00:00
Sanjay Patel 2495a35fca fix documentation comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275021 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-10 21:02:16 +00:00
Sanjay Patel 7ea0bdecfe reformat, fix comments/names; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275015 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-10 13:05:57 +00:00
Benjamin Kramer a27e16e477 Give helper classes/functions internal linkage. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275014 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-10 11:28:51 +00:00
David Majnemer 01d1f77974 [COFF, Dwarf] Don't emit DW_AT_location for dllimported entities
There exists no relocation which can describe the address of a
dllimported variable: do not try to describe their location.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274986 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 20:47:48 +00:00
Sanjay Patel ed029b06bb fix documentation comments; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274981 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 18:52:07 +00:00
Matthias Braun c7bb08fdc6 LivePhysRegs: addLiveOuts() can skip addPristines() in ret block
Drive-by improvement: We would 1) add CSRs, 2) remove callee saved CSRs
and 3) add all CSRs again for the return block.  Just adding CSRs once
obviously gives the same results.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274955 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 01:31:36 +00:00
Matthias Braun 79519fecc3 VirtRegMap: Replace some identity copies with KILL instructions.
An identity COPY like this:
   %AL = COPY %AL, %EAX<imp-def>
has no semantic effect, but encodes liveness information: Further users
of %EAX only depend on this instruction even though it does not define
the full register.

Replace the COPY with a KILL instruction in those cases to maintain this
liveness information. (This reverts a small part of r238588 but this
time adds a comment explaining why a KILL instruction is useful).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274952 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 00:19:07 +00:00
Matthias Braun 93ad397da1 AsmPrinter: Fix emitKill() not flush()ing a raw_string_ostream
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274951 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-09 00:18:43 +00:00
Matt Arsenault db12f54967 Reapply r274829 with fix for FP vectors
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274937 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 21:25:33 +00:00
Wei Mi 4eae2788ea Allow dead insts to be kept in DeadRemat only when they are rematerializable.
Because isReallyTriviallyReMaterializableGeneric puts many limits on
rematerializable instructions, this fix can prevent instructions with
tied virtual operands and instructions with virtual register uses from
being kept in DeadRemat, so as to workaround the live interval consistency
problem for the dummy instructions kept in DeadRemat.

But we still need to fix the live interval consistency problem. This patch
is just a short time relieve. PR28464 has been filed as a reminder.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274928 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 21:08:09 +00:00
Nico Weber b2e9a53e5c Revert r274829, it caused PR28472.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274916 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 19:52:19 +00:00
Duncan P. N. Exon Smith 5de74a6760 AsmPrinter: Avoid implicit iterator conversions in DbgValueHistoryCalculator, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274911 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 19:31:47 +00:00
Duncan P. N. Exon Smith 86a3f7842e SelectionDAG: Avoid implicit iterator conversions in SelectionDAGBuilder, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274907 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 19:23:12 +00:00
Duncan P. N. Exon Smith 9ea0ae7891 SelectionDAG: Avoid implicit iterator conversions in SelectionDAGISel, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274904 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 19:11:40 +00:00
Duncan P. N. Exon Smith a60f808fc9 SelectionDAG: Avoid implicit iterator conversions in ScheduleDAGSDNodes, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274903 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 19:07:09 +00:00
Duncan P. N. Exon Smith cc2c87f587 SelectionDAG: Avoid implicit iterator conversions in FastISel, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274899 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 18:36:41 +00:00
Duncan P. N. Exon Smith ccb7a2f240 CodeGen: Avoid iterator conversions in TwoAddressInstructionPass, NFC
Mostly through preferring MachineInstr&, avoid implicit conversions from
iterator to pointer.

Although this may bitrot (since there are other uses blocking me from
removing the implicit operator), this removes the last of the implicit
conversions from MachineInstrBundleIterator to MachineInstr* in the
LLVMCodeGen build target.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274893 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 17:43:08 +00:00
Duncan P. N. Exon Smith fccaf97f84 CodeGen: Use MachineInstr& in StackSlotColoring, NFC
Avoid implicit iterator to pointer conversions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274892 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 17:28:40 +00:00
Duncan P. N. Exon Smith c3d3821c07 CodeGen: Use MachineInstr& in RegisterScavenging, NFC
Prefer MachineInstr& in order to avoid implicit conversions from
MachineInstrBundleIterator to MachineInstr*.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274888 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 17:16:57 +00:00
David Majnemer 700f7026c8 [CodeGen, TargetPassConfig] Remove a race from createRegAllocPass
The createRegAllocPass reads and writes to a global variable 'Registry'
via calls to getDefault and setDefault.  Run this under a call_once to
avoid races.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274875 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 16:39:00 +00:00
Matt Arsenault a3314a5719 PeepholeOptimizer: Make pass name match DEBUG_TYPE
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274874 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 16:29:11 +00:00
Sjoerd Meijer d83fc587ba Do not expand SDIV when compiling for minimum code size
Differential Revision: http://reviews.llvm.org/D22139


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274855 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 15:32:01 +00:00
Sjoerd Meijer 234942365d Addressing post-commit comments regarding not expanding UDIV;
we don't expand only when compiling for minimum code size.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@274847 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-08 14:17:09 +00:00