#
fe34c5e4 |
| 14-Mar-2017 |
Oren Ben Simhon <oren.ben.simhon@intel.com> |
Disable Callee Saved Registers
Each Calling convention (CC) defines a static list of registers that should be preserved by a callee function. All other registers should be saved by the caller. Some
Disable Callee Saved Registers
Each Calling convention (CC) defines a static list of registers that should be preserved by a callee function. All other registers should be saved by the caller. Some CCs use additional condition: If the register is used for passing/returning arguments – the caller needs to save it - even if it is part of the Callee Saved Registers (CSR) list. The current LLVM implementation doesn’t support it. It will save a register if it is part of the static CSR list and will not care if the register is passed/returned by the callee. The solution is to dynamically allocate the CSR lists (Only for these CCs). The lists will be updated with actual registers that should be saved by the callee. Since we need the allocated lists to live as long as the function exists, the list should reside inside the Machine Register Info (MRI) which is a property of the Machine Function and managed by it (and has the same life span). The lists should be saved in the MRI and populated upon LowerCall and LowerFormalArguments. The patch will also assist to implement future no_caller_saved_regsiters attribute intended for interrupt handler CC.
Differential Revision: https://reviews.llvm.org/D28566
llvm-svn: 297715
show more ...
|
#
93f47e5f |
| 09-Mar-2017 |
Eli Friedman <efriedma@codeaurora.org> |
Refactor alias check from MISched into common helper. NFC.
Differential Revision: https://reviews.llvm.org/D30598
llvm-svn: 297421
|
Revision tags: llvmorg-4.0.0, llvmorg-4.0.0-rc4, llvmorg-4.0.0-rc3 |
|
#
97119d48 |
| 23-Feb-2017 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[CodeGen] Print MI without a newline when skipping debugloc. NFC.
This matches the behavior for skip-operands. While there, document it. This is a follow-up to r296007.
llvm-svn: 296011
|
#
43192246 |
| 23-Feb-2017 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[CodeGen] Add a way to SkipDebugLoc in MachineInstr::print(). NFC.
llvm-svn: 296007
|
Revision tags: llvmorg-4.0.0-rc2 |
|
#
a4976c61 |
| 29-Jan-2017 |
Matthias Braun <matze@braunis.de> |
MachineInstr: Remove parameter from dump()
The primary use of the dump() functions in LLVM is for use in a debugger. Unfortunately lldb does not seem to handle default arguments so using `p SomeMI.d
MachineInstr: Remove parameter from dump()
The primary use of the dump() functions in LLVM is for use in a debugger. Unfortunately lldb does not seem to handle default arguments so using `p SomeMI.dump()` fails and you have to type the longer `p SomeMI.dump(nullptr)`. Remove the paramter to make the most common use easy. (You can always construct something like `p SomeMI.print(dbgs(),MyTII)` if you need more features).
Differential Revision: https://reviews.llvm.org/D29241
llvm-svn: 293440
show more ...
|
#
8c209aa8 |
| 28-Jan-2017 |
Matthias Braun <matze@braunis.de> |
Cleanup dump() functions.
We had various variants of defining dump() functions in LLVM. Normalize them (this should just consistently implement the things discussed in http://lists.llvm.org/pipermai
Cleanup dump() functions.
We had various variants of defining dump() functions in LLVM. Normalize them (this should just consistently implement the things discussed in http://lists.llvm.org/pipermail/cfe-dev/2014-January/034323.html
For reference: - Public headers should just declare the dump() method but not use LLVM_DUMP_METHOD or #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - The definition of a dump method should look like this: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) LLVM_DUMP_METHOD void MyClass::dump() { // print stuff to dbgs()... } #endif
llvm-svn: 293359
show more ...
|
Revision tags: llvmorg-4.0.0-rc1 |
|
#
a3743084 |
| 09-Jan-2017 |
Matthias Braun <matze@braunis.de> |
MachineInstr: Print name for subreg index in SUBREG_TO_REG
SUBREG_TO_REG takes a subregister index as 3rd operand, print the name instead of a number. We already do the same for INSERT_SUBREG and RE
MachineInstr: Print name for subreg index in SUBREG_TO_REG
SUBREG_TO_REG takes a subregister index as 3rd operand, print the name instead of a number. We already do the same for INSERT_SUBREG and REG_SEQUENCE.
llvm-svn: 291481
show more ...
|
#
77794843 |
| 21-Dec-2016 |
Sebastian Pop <sebpop@gmail.com> |
machine combiner: fix pretty printer
we used to print UNKNOWN instructions when the instruction to be printer was not yet inserted in any BB: in that case the pretty printer would not be able to com
machine combiner: fix pretty printer
we used to print UNKNOWN instructions when the instruction to be printer was not yet inserted in any BB: in that case the pretty printer would not be able to compute a TII as the instruction does not belong to any BB or function yet. This patch explicitly passes the TII to the pretty-printer.
Differential Revision: https://reviews.llvm.org/D27645
llvm-svn: 290228
show more ...
|
#
b29a15ec |
| 19-Dec-2016 |
Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> |
[CodeGen] Make MachineInstr::isIdenticalTo() symmetric.
Summary: MachineInstr::isIdenticalTo() is for some reason not symmetric when comparing bundles, which gives us the property:
I1->isIdentica
[CodeGen] Make MachineInstr::isIdenticalTo() symmetric.
Summary: MachineInstr::isIdenticalTo() is for some reason not symmetric when comparing bundles, which gives us the property:
I1->isIdenticalTo(*I2) != I2->isIdenticalTo(*I1)
when comparing bundles where one bundle is longer than the other.
This patch makes sure that bundles of different length always are considered as not being identical. Thus, the result of the comparison will be the same regardless of which side that happens to be to the left.
Reviewers: dexonsmith, jonpa, andrew.w.kaylor
Subscribers: llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D27508
llvm-svn: 290095
show more ...
|
#
17c7f703 |
| 14-Dec-2016 |
Stephan Bergmann <sbergman@redhat.com> |
Replace APFloatBase static fltSemantics data members with getter functions
At least the plugin used by the LibreOffice build (<https://wiki.documentfoundation.org/Development/Clang_plugins>) indirec
Replace APFloatBase static fltSemantics data members with getter functions
At least the plugin used by the LibreOffice build (<https://wiki.documentfoundation.org/Development/Clang_plugins>) indirectly uses those members (through inline functions in LLVM/Clang include files in turn using them), but they are not exported by utils/extract_symbols.py on Windows, and accessing data across DLL/EXE boundaries on Windows is generally problematic.
Differential Revision: https://reviews.llvm.org/D26671
llvm-svn: 289647
show more ...
|
Revision tags: llvmorg-3.9.1, llvmorg-3.9.1-rc3, llvmorg-3.9.1-rc2, llvmorg-3.9.1-rc1 |
|
#
637488db |
| 18-Nov-2016 |
Matthias Braun <matze@braunis.de> |
MachineOperand: Add dump() method
llvm-svn: 287302
|
#
8ea0246e |
| 15-Oct-2016 |
Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> |
[MachineMemOperand] Move synchronization scope and atomic orderings from SDNode to MachineMemOperand, and remove redundant getAtomic* member functions from SelectionDAG.
Differential Revision: https
[MachineMemOperand] Move synchronization scope and atomic orderings from SDNode to MachineMemOperand, and remove redundant getAtomic* member functions from SelectionDAG.
Differential Revision: https://reviews.llvm.org/D24577
llvm-svn: 284312
show more ...
|
#
48d9fdc1 |
| 11-Oct-2016 |
Fraser Cormack <fraser@codeplay.com> |
Fix formatting in findRegisterUseOperandIdx. NFC.
llvm-svn: 283860
|
#
25dba300 |
| 13-Sep-2016 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
AMDGPU: Support commuting a FrameIndex operand
llvm-svn: 281369
|
#
925961b2 |
| 12-Sep-2016 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[GlobalISel] Fix mismatched "<..)" in intrinsic MO printing. NFC.
llvm-svn: 281229
|
#
adbf09e8 |
| 11-Sep-2016 |
Justin Lebar <jlebar@google.com> |
[CodeGen] Split out the notions of MI invariance and MI dereferenceability.
Summary: An IR load can be invariant, dereferenceable, neither, or both. But currently, MI's notion of invariance is IR-i
[CodeGen] Split out the notions of MI invariance and MI dereferenceability.
Summary: An IR load can be invariant, dereferenceable, neither, or both. But currently, MI's notion of invariance is IR-invariant && IR-dereferenceable.
This patch splits up the notions of invariance and dereferenceability at the MI level. It's NFC, so adds some probably-unnecessary "is-dereferenceable" checks, which we can remove later if desired.
Reviewers: chandlerc, tstellarAMD
Subscribers: jholewinski, arsenm, nemanjai, llvm-commits
Differential Revision: https://reviews.llvm.org/D23371
llvm-svn: 281151
show more ...
|
#
d98cf00c |
| 10-Sep-2016 |
Justin Lebar <jlebar@google.com> |
[CodeGen] Rename MachineInstr::isInvariantLoad to isDereferenceableInvariantLoad. NFC
Summary: I want to separate out the notions of invariance and dereferenceability at the MI level, so that they
[CodeGen] Rename MachineInstr::isInvariantLoad to isDereferenceableInvariantLoad. NFC
Summary: I want to separate out the notions of invariance and dereferenceability at the MI level, so that they correspond to the equivalent concepts at the IR level. (Currently an MI load is MI-invariant iff it's IR-invariant and IR-dereferenceable.)
First step is renaming this function.
Reviewers: chandlerc
Subscribers: MatzeB, jfb, llvm-commits
Differential Revision: https://reviews.llvm.org/D23370
llvm-svn: 281125
show more ...
|
#
0f140c76 |
| 09-Sep-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: move type information to MachineRegisterInfo.
We want each register to have a canonical type, which means the best place to store this is in MachineRegisterInfo rather than on every Mach
GlobalISel: move type information to MachineRegisterInfo.
We want each register to have a canonical type, which means the best place to store this is in MachineRegisterInfo rather than on every MachineInstr that happens to use or define that register.
Most changes following from this are pretty simple (you need an MRI anyway if you're going to be doing any transformations, so just check the type there). But legalization doesn't really want to check redundant operands (when, for example, a G_ADD only ever has one type) so I've made use of MCInstrDesc's operand type field to encode these constraints and limit legalization's work.
As an added bonus, more validation is possible, both in MachineVerifier and MachineIRBuilder (coming soon).
llvm-svn: 281035
show more ...
|
Revision tags: llvmorg-3.9.0, llvmorg-3.9.0-rc3 |
|
#
036b94da |
| 23-Aug-2016 |
Pete Cooper <peter_cooper@apple.com> |
Fix some more asserts after r279466.
That commit added a new version of Intrinsic::getName which should only be called when the intrinsic has no overloaded types. There are several debugging paths,
Fix some more asserts after r279466.
That commit added a new version of Intrinsic::getName which should only be called when the intrinsic has no overloaded types. There are several debugging paths, such as SDNode::dump which are printing the name of the intrinsic but don't have the overloaded types. These paths should be ok to just print the name instead of crashing.
The fix here is ultimately to just add a 'None' second argument as that calls the overload capable getName, which is less efficient, but this is a debugging path anyway, and not perf critical.
Thanks to Björn Pettersson for pointing out that there were more crashes.
llvm-svn: 279528
show more ...
|
#
673b347e |
| 22-Aug-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Reset isUndef when removing subreg from a def operand
llvm-svn: 279437
|
Revision tags: llvmorg-3.9.0-rc2 |
|
#
de3aea04 |
| 17-Aug-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: support irtranslation of icmp instructions.
llvm-svn: 278969
|
#
0a16c228 |
| 11-Aug-2016 |
David Majnemer <david.majnemer@gmail.com> |
Use range algorithms instead of unpacking begin/end
No functionality change is intended.
llvm-svn: 278417
|
#
6b3bd612 |
| 29-Jul-2016 |
Tim Northover <tnorthover@apple.com> |
CodeGen: add new "intrinsic" MachineOperand kind.
This will be used during GlobalISel, where we need a more robust and readable way to write tests than a simple immediate ID.
llvm-svn: 277209
|
Revision tags: llvmorg-3.9.0-rc1 |
|
#
941a705b |
| 28-Jul-2016 |
Matthias Braun <matze@braunis.de> |
MachineFunction: Return reference for getFrameInfo(); NFC
getFrameInfo() never returns nullptr so we should use a reference instead of a pointer.
llvm-svn: 277017
|
#
46c05fc8 |
| 28-Jul-2016 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[GlobalISel] Remove types on selected insts instead of using LLT().
LLT() has a particular meaning: it's one invalid type. But we really want selected instructions to have no type whatsoever.
Also
[GlobalISel] Remove types on selected insts instead of using LLT().
LLT() has a particular meaning: it's one invalid type. But we really want selected instructions to have no type whatsoever.
Also verify that types don't linger after ISel, and enable the verifier on the AArch64 select test.
llvm-svn: 277001
show more ...
|