#
44ede33a |
| 09-Jul-2015 |
Mehdi Amini <mehdi.amini@apple.com> |
Make TargetLowering::getPointerTy() taking DataLayout as an argument
Summary: This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the
Make TargetLowering::getPointerTy() taking DataLayout as an argument
Summary: This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the one owned by the module.
Reviewers: echristo
Subscribers: jholewinski, ted, yaron.keren, rafael, llvm-commits
Differential Revision: http://reviews.llvm.org/D11028
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 241775
show more ...
|
#
56228dab |
| 09-Jul-2015 |
Mehdi Amini <mehdi.amini@apple.com> |
Redirect DataLayout from TargetMachine to Module in ComputeValueVTs()
Summary: Avoid using the TargetMachine owned DataLayout and use the Module owned one instead. This requires passing the DataLayo
Redirect DataLayout from TargetMachine to Module in ComputeValueVTs()
Summary: Avoid using the TargetMachine owned DataLayout and use the Module owned one instead. This requires passing the DataLayout up the stack to ComputeValueVTs().
This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the one owned by the module.
Reviewers: echristo
Subscribers: jholewinski, yaron.keren, rafael, llvm-commits
Differential Revision: http://reviews.llvm.org/D11019
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 241773
show more ...
|
#
ffc1402f |
| 08-Jul-2015 |
Mehdi Amini <mehdi.amini@apple.com> |
Remove IsLittleEndian from TargetLowering and redirect to DataLayout
Summary: This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the
Remove IsLittleEndian from TargetLowering and redirect to DataLayout
Summary: This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the one owned by the module.
Reviewers: echristo
Subscribers: llvm-commits, rafael, yaron.keren
Differential Revision: http://reviews.llvm.org/D11017
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 241655
show more ...
|
#
e69bdb86 |
| 07-Jul-2015 |
Reid Kleckner <reid@kleckner.net> |
[WinEH] Make llvm.x86.seh.restoreframe work for stack realignment prologues
The incoming EBP value points to the end of a local stack allocation, so we can use that to restore ESI, the base pointer.
[WinEH] Make llvm.x86.seh.restoreframe work for stack realignment prologues
The incoming EBP value points to the end of a local stack allocation, so we can use that to restore ESI, the base pointer. Once we do that, we can use local stack allocations. If we know we need stack realignment, spill the original frame pointer in the prologue and reload it after restoring ESI.
llvm-svn: 241648
show more ...
|
#
60381791 |
| 07-Jul-2015 |
Reid Kleckner <reid@kleckner.net> |
Rename llvm.frameescape and llvm.framerecover to localescape and localrecover
Summary: Initially, these intrinsics seemed like part of a family of "frame" related intrinsics, but now I think that's
Rename llvm.frameescape and llvm.framerecover to localescape and localrecover
Summary: Initially, these intrinsics seemed like part of a family of "frame" related intrinsics, but now I think that's more confusing than helpful. Initially, the LangRef specified that this would create a new kind of allocation that would be allocated at a fixed offset from the frame pointer (EBP/RBP). We ended up dropping that design, and leaving the stack frame layout alone.
These intrinsics are really about sharing local stack allocations, not frame pointers. I intend to go further and add an `llvm.localaddress()` intrinsic that returns whatever register (EBP, ESI, ESP, RBX) is being used to address locals, which should not be confused with the frame pointer.
Naming suggestions at this point are welcome, I'm happy to re-run sed.
Reviewers: majnemer, nicholas
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D11011
llvm-svn: 241633
show more ...
|
#
8ac7a9d5 |
| 07-Jul-2015 |
Mehdi Amini <mehdi.amini@apple.com> |
Redirect DataLayout from TargetMachine to Module in SelectionDAG
Summary: SelectionDAG itself is not invoking directly the DataLayout in the TargetMachine, but the "TargetLowering" class is still us
Redirect DataLayout from TargetMachine to Module in SelectionDAG
Summary: SelectionDAG itself is not invoking directly the DataLayout in the TargetMachine, but the "TargetLowering" class is still using it. I'll address it in a following commit.
This change is part of a series of commits dedicated to have a single DataLayout during compilation by using always the one owned by the module.
Reviewers: echristo
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D11000
From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 241618
show more ...
|
#
754eb7c5 |
| 02-Jul-2015 |
Nadav Rotem <nrotem@apple.com> |
Fix an overly aggressive assertion in getCopyFromPartsVector.
The assertion in getCopyFromPartsVector assumed that the vector 'part' must match the type of argument (arguments are potentially split
Fix an overly aggressive assertion in getCopyFromPartsVector.
The assertion in getCopyFromPartsVector assumed that the vector 'part' must match the type of argument (arguments are potentially split into multiple parts). However, in some cases the targets return a 'part' of the right size but with a different type. We already handle this case correctly later on and generate a bitcast. This commit just makes sure that we are actually checking the property that we care about.
llvm-svn: 241312
show more ...
|
#
56c70441 |
| 02-Jul-2015 |
Akira Hatanaka <ahatanaka@apple.com> |
Use function attribute "trap-func-name" and remove TargetOptions::TrapFuncName.
This commit changes normal isel and fast isel to read the user-defined trap function name from function attribute "tra
Use function attribute "trap-func-name" and remove TargetOptions::TrapFuncName.
This commit changes normal isel and fast isel to read the user-defined trap function name from function attribute "trap-func-name" attached to llvm.trap or llvm.debugtrap instead of from TargetOptions::TrapFuncName. This is needed to use clang's command line option "-ftrap-function" for LTO and enable changing the trap function name on a per-call-site basis.
Out-of-tree projects currently using TargetOptions::TrapFuncName to specify the trap function name should attach attribute "trap-func-name" to the call sites of llvm.trap and llvm.debugtrap instead.
rdar://problem/21225723
Differential Revision: http://reviews.llvm.org/D10832
llvm-svn: 241305
show more ...
|
#
5b455f0b |
| 27-Jun-2015 |
Benjamin Kramer <benny.kra@googlemail.com> |
[SDAG] Now that we have a way to communicate the exact bit on sdiv use it to simplify sdiv by a constant.
We had a hack in SDAGBuilder in place to work around this but now we can avoid that. Call Bu
[SDAG] Now that we have a way to communicate the exact bit on sdiv use it to simplify sdiv by a constant.
We had a hack in SDAGBuilder in place to work around this but now we can avoid that. Call BuildExactSDIV from BuildSDIV so DAGCombiner can perform this trick automatically.
The added check in DAGCombiner is necessary to prevent exact sdiv by pow2 from regressing as the target-specific pow2 lowering is not aware of exact bits yet.
This is mostly covered by existing tests. One side effect is that we get the better lowering for exact vector sdivs now too :)
llvm-svn: 240891
show more ...
|
#
e4aedb55 |
| 25-Jun-2015 |
Sanjay Patel <spatel@rotateright.com> |
fix typos; NFC
llvm-svn: 240699
|
Revision tags: llvmorg-3.6.2, llvmorg-3.6.2-rc1 |
|
#
36b718fc |
| 22-Jun-2015 |
Rafael Espindola <rafael.espindola@gmail.com> |
Avoid a Symbol -> Name -> Symbol conversion.
Before this we were producing a TargetExternalSymbol from a MCSymbol. That meant extracting the symbol name and fetching the symbol again down the pipeli
Avoid a Symbol -> Name -> Symbol conversion.
Before this we were producing a TargetExternalSymbol from a MCSymbol. That meant extracting the symbol name and fetching the symbol again down the pipeline.
This patch adds a DAG.getMCSymbol that lets the MCSymbol pass unchanged on the DAG.
Doing so removes the need for MO_NOPREFIX and fixes the root cause of pr23900, allowing r240130 to be committed again.
llvm-svn: 240300
show more ...
|
#
6ed81cbc |
| 20-Jun-2015 |
Hans Wennborg <hans@hanshq.net> |
Switch lowering: add heuristic for filling leaf nodes in the weight-balanced binary search tree
Sparse switches with profile info are lowered as weight-balanced BSTs. For example, if the node weight
Switch lowering: add heuristic for filling leaf nodes in the weight-balanced binary search tree
Sparse switches with profile info are lowered as weight-balanced BSTs. For example, if the node weights are {1,1,1,1,1,1000}, the right-most node would end up in a tree by itself, bringing it closer to the top.
However, a leaf in this BST can contain up to 3 cases, and having a single case in a leaf node as in the example means the tree might become unnecessarily high.
This patch adds a heauristic to the pivot selection algorithm that moves more cases into leaf nodes unless that would lower their rank. It still doesn't yield the optimal tree in every case, but I believe it's conservatibely correct.
llvm-svn: 240224
show more ...
|
#
67d492a5 |
| 18-Jun-2015 |
Hans Wennborg <hans@hanshq.net> |
Switch lowering: enable whole-switch jump tables at -O0.
To same compile time, the analysis to find dense case-clusters in switches is not done at -O0. However, when the whole switch is dense enough
Switch lowering: enable whole-switch jump tables at -O0.
To same compile time, the analysis to find dense case-clusters in switches is not done at -O0. However, when the whole switch is dense enough, it is easy to turn it into a jump table, resulting in much faster code with no extra effort.
llvm-svn: 240071
show more ...
|
#
a3f423b4 |
| 17-Jun-2015 |
Sanjay Patel <spatel@rotateright.com> |
remove unnecessary casts; NFC
llvm-svn: 239942
|
#
dcaa5379 |
| 17-Jun-2015 |
Sanjay Patel <spatel@rotateright.com> |
fix typos in comments; NFC
llvm-svn: 239916
|
#
ac80dc75 |
| 17-Jun-2015 |
Chandler Carruth <chandlerc@gmail.com> |
[PM/AA] Remove the Location typedef from the AliasAnalysis class now that it is its own entity in the form of MemoryLocation, and update all the callers.
This is an entirely mechanical change. Refer
[PM/AA] Remove the Location typedef from the AliasAnalysis class now that it is its own entity in the form of MemoryLocation, and update all the callers.
This is an entirely mechanical change. References to "Location" within AA subclases become "MemoryLocation", and elsewhere "AliasAnalysis::Location" becomes "MemoryLocation". Hope that helps out-of-tree folks update.
llvm-svn: 239885
show more ...
|
#
f134048b |
| 16-Jun-2015 |
Sanjay Patel <spatel@rotateright.com> |
propagate IR-level fast-math-flags to DAG nodes, disabled by default
This is an updated version of the patch that was checked in at: http://reviews.llvm.org/rL237046
but subsequently reverted becau
propagate IR-level fast-math-flags to DAG nodes, disabled by default
This is an updated version of the patch that was checked in at: http://reviews.llvm.org/rL237046
but subsequently reverted because it exposed a bug in the DAG Combiner: http://reviews.llvm.org/D9893
This time, there's an enablement flag ("EnableFMFInDAG") around the code in SelectionDAGBuilder where we copy the set of FP optimization flags from IR instructions to DAG nodes. So, in theory, there should be no functional change from this patch as-is, but it will allow testing with the added functionality to proceed via "-enable-fmf-dag" passed to llc.
This patch adds the minimum plumbing necessary to use IR-level fast-math-flags (FMF) in the backend without actually using them for anything yet. This is a follow-on to: http://reviews.llvm.org/rL235997
Differential Revision: http://reviews.llvm.org/D10403
llvm-svn: 239828
show more ...
|
#
f12c030f |
| 09-Jun-2015 |
Reid Kleckner <reid@kleckner.net> |
[WinEH] Add 32-bit SEH state table emission prototype
This gets all the handler info through to the asm printer and we can look at the .xdata tables now. I've convinced one small catch-all test case
[WinEH] Add 32-bit SEH state table emission prototype
This gets all the handler info through to the asm printer and we can look at the .xdata tables now. I've convinced one small catch-all test case to work, but other than that, it would be a stretch to say this is functional.
The state numbering algorithm avoids doing any scope reconstruction as we do for C++ to simplify the implementation.
llvm-svn: 239433
show more ...
|
#
ff0fb693 |
| 04-Jun-2015 |
Benjamin Kramer <benny.kra@googlemail.com> |
[SDAG switch lowering] Fix switch case -> or merging for 0 and INT_MIN
The big/small ordering here is based on signed values so SmallValue will be INT_MIN and BigValue 0. This shouldn't be a problem
[SDAG switch lowering] Fix switch case -> or merging for 0 and INT_MIN
The big/small ordering here is based on signed values so SmallValue will be INT_MIN and BigValue 0. This shouldn't be a problem but the code assumed that BigValue always had more bits set than SmallValue.
We used to just miss the transformation, but a recent refactoring of mine turned this into an assertion failure.
llvm-svn: 239105
show more ...
|
#
3160d02b |
| 04-Jun-2015 |
Sergey Dmitrouk <sdmitrouk@accesssoftek.com> |
Erase constant dbgloc on reuse in PHI node
Basic block selection involves checking successor BBs for PHI nodes that depend on the current BB. In case such BBs are found, the value being selected is
Erase constant dbgloc on reuse in PHI node
Basic block selection involves checking successor BBs for PHI nodes that depend on the current BB. In case such BBs are found, the value being selected is a constant and such constant already exists in current BB, it's value is reused.
This might lead to wrong locations in some situations, especially if same constant value ends up being materialized twice in two different ways, which discards that sharing and leaves us with wrong debug location in the successor BB.
In code this involves the following sequence of calls:
SelectionDAGBuilder::HandlePHINodesInSuccessorBlocks -> SelectionDAGBuilder::CopyValueToVirtualRegister -> SelectionDAGBuilder::getNonRegisterValue
llvm-svn: 239089
show more ...
|
#
185579bf |
| 04-Jun-2015 |
Benjamin Kramer <benny.kra@googlemail.com> |
[SDag switch lowering] Simplify code a bit. No functional change intended.
llvm-svn: 239056
|
#
d9229156 |
| 04-Jun-2015 |
Hans Wennborg <hans@hanshq.net> |
Switch lowering: fix assert in buildBitTests (PR23738)
When checking (High - Low + 1).sle(BitWidth), BitWidth would be truncated to the size of the left-hand side. In the case of this PR, the left-h
Switch lowering: fix assert in buildBitTests (PR23738)
When checking (High - Low + 1).sle(BitWidth), BitWidth would be truncated to the size of the left-hand side. In the case of this PR, the left-hand side was i4, so BitWidth=64 got truncated to 0 and the assert failed.
llvm-svn: 239048
show more ...
|
#
37593732 |
| 04-Jun-2015 |
James Molloy <james.molloy@arm.com> |
Don't create a MIN/MAX node if the underlying compare has more than one use.
If the compare in a select pattern has another use then it can't be removed, so we'd just be creating repeated code if we
Don't create a MIN/MAX node if the underlying compare has more than one use.
If the compare in a select pattern has another use then it can't be removed, so we'd just be creating repeated code if we created a min/max node.
Spotted by Matt Arsenault!
llvm-svn: 239037
show more ...
|
#
513aadec |
| 02-Jun-2015 |
Sanjoy Das <sanjoy@playingwithpointers.com> |
[SelectionDAG] Fix PR23603.
Summary: LLVM's MI level notion of invariant_load is different from LLVM's IR level notion of invariant_load with respect to dereferenceability. The IR notion of invaria
[SelectionDAG] Fix PR23603.
Summary: LLVM's MI level notion of invariant_load is different from LLVM's IR level notion of invariant_load with respect to dereferenceability. The IR notion of invariant_load only guarantees that all *non-faulting* invariant loads result in the same value. The MI notion of invariant load guarantees that the load can be legally moved to any location within its containing function. The MI notion of invariant_load is stronger than the IR notion of invariant_load -- an MI invariant_load is an IR invariant_load + a guarantee that the location being loaded from is dereferenceable throughout the function's lifetime.
Reviewers: hfinkel, reames
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10075
llvm-svn: 238881
show more ...
|
#
f5e2fc47 |
| 29-May-2015 |
Benjamin Kramer <benny.kra@googlemail.com> |
Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types
If the type isn't trivially moveable emplace can skip a potentially expensive move. It also saves a couple of charact
Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types
If the type isn't trivially moveable emplace can skip a potentially expensive move. It also saves a couple of characters.
Call sites were found with the ASTMatcher + some semi-automated cleanup.
memberCallExpr( argumentCountIs(1), callee(methodDecl(hasName("push_back"))), on(hasType(recordDecl(has(namedDecl(hasName("emplace_back")))))), hasArgument(0, bindTemporaryExpr( hasType(recordDecl(hasNonTrivialDestructor())), has(constructExpr()))), unless(isInTemplateInstantiation()))
No functional change intended.
llvm-svn: 238602
show more ...
|