Revision tags: llvmorg-3.9.1-rc1 |
|
#
c1051ab2 |
| 05-Oct-2016 |
David Callahan <dcallahan@fb.com> |
Modify df_iterator to support post-order actions
Summary: This makes a change to the state used to maintain visited information for depth first iterator. We know assume a method "completed(...)" whi
Modify df_iterator to support post-order actions
Summary: This makes a change to the state used to maintain visited information for depth first iterator. We know assume a method "completed(...)" which is called after all children of a node have been visited. In all existing cases, this method does nothing so this patch has no functional changes. It will however allow a client to distinguish back from cross edges in a DFS tree.
Reviewers: nadav, mehdi_amini, dberlin
Subscribers: MatzeB, mzolotukhin, twoh, freik, llvm-commits
Differential Revision: https://reviews.llvm.org/D25191
llvm-svn: 283391
show more ...
|
#
32a078ad |
| 15-Sep-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: remove "unsized" LLT
It was only really there as a sentinel when instructions had to have precisely one type. Now that registers are typed, each register really has to have a type that i
GlobalISel: remove "unsized" LLT
It was only really there as a sentinel when instructions had to have precisely one type. Now that registers are typed, each register really has to have a type that is sized.
llvm-svn: 281599
show more ...
|
#
25d1286e |
| 09-Sep-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: remove G_TYPE and G_PHI
These instructions were only necessary when type information was stored in the MachineInstr (because only generic MachineInstrs possessed a type). Now that it's i
GlobalISel: remove G_TYPE and G_PHI
These instructions were only necessary when type information was stored in the MachineInstr (because only generic MachineInstrs possessed a type). Now that it's in MachineRegisterInfo, COPY and PHI work fine.
llvm-svn: 281037
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 ...
|
#
8cc24ead |
| 03-Sep-2016 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
ADT: Remove external uses of ilist_iterator, NFC
Delete the dead code for Write(ilist_iterator) in the IR Verifier, inline report(ilist_iterator) at its call sites in the MachineVerifier, and use si
ADT: Remove external uses of ilist_iterator, NFC
Delete the dead code for Write(ilist_iterator) in the IR Verifier, inline report(ilist_iterator) at its call sites in the MachineVerifier, and use simple_ilist<>::iterator in SymbolTableListTraits.
The only remaining reference to ilist_iterator outside of the ilist implementation is from MachineInstrBundleIterator. I'll get rid of that in a follow-up.
llvm-svn: 280565
show more ...
|
#
11a23546 |
| 31-Aug-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: use G_TYPE to annotate physregs with a type.
More preparation for dropping source types from MachineInstrs: regsters coming out of already-selected code (i.e. non-generic instructions) d
GlobalISel: use G_TYPE to annotate physregs with a type.
More preparation for dropping source types from MachineInstrs: regsters coming out of already-selected code (i.e. non-generic instructions) don't have a type, but that information is needed so we must add it manually.
This is done via a new G_TYPE instruction.
llvm-svn: 280292
show more ...
|
#
e5102de6 |
| 30-Aug-2016 |
Tim Northover <tnorthover@apple.com> |
GlobalISel: forbid physical registers on generic MIs.
We're intending to move to a world where the type of a register is determined by its (unique) def. This is incompatible with physregs, which are
GlobalISel: forbid physical registers on generic MIs.
We're intending to move to a world where the type of a register is determined by its (unique) def. This is incompatible with physregs, which are untyped.
It also means the other passes don't have to worry quite so much about register-class compatibility and inserting COPYs appropriately.
llvm-svn: 280132
show more ...
|
#
0a955d6d |
| 29-Aug-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Do not use MRI::getMaxLaneMaskForVReg as a mask covering whole register
MRI::getMaxLaneMaskForVReg does not always cover the whole register. For example, on X86 the upper 16 bits of EAX cannot be ac
Do not use MRI::getMaxLaneMaskForVReg as a mask covering whole register
MRI::getMaxLaneMaskForVReg does not always cover the whole register. For example, on X86 the upper 16 bits of EAX cannot be accessed via any subregister. Consequently, there is no lane mask that only covers that part of EAX. The getMaxLaneMaskForVReg will return the union of the lane masks for all subregisters, and in case of EAX, that union will not cover the upper 16 bits.
This fixes https://llvm.org/bugs/show_bug.cgi?id=29132
llvm-svn: 279969
show more ...
|
#
1eb47368 |
| 25-Aug-2016 |
Matthias Braun <matze@braunis.de> |
MachineFunctionProperties/MIRParser: Rename AllVRegsAllocated->NoVRegs, compute it
Rename AllVRegsAllocated to NoVRegs. This avoids the connotation of running after register and simply describes tha
MachineFunctionProperties/MIRParser: Rename AllVRegsAllocated->NoVRegs, compute it
Rename AllVRegsAllocated to NoVRegs. This avoids the connotation of running after register and simply describes that no vregs are used in a machine function. With that we can simply compute the property and do not need to dump/parse it in .mir files.
Differential Revision: http://reviews.llvm.org/D23850
llvm-svn: 279698
show more ...
|
Revision tags: llvmorg-3.9.0, llvmorg-3.9.0-rc3 |
|
#
a7ed090b |
| 24-Aug-2016 |
Krzysztof Parzyszek <kparzysz@codeaurora.org> |
Create subranges for new intervals resulting from live interval splitting
The register allocator can split a live interval of a register into a set of smaller intervals. After the allocation of regi
Create subranges for new intervals resulting from live interval splitting
The register allocator can split a live interval of a register into a set of smaller intervals. After the allocation of registers is complete, the rewriter will modify the IR to replace virtual registers with the corres- ponding physical registers. At this stage, if a register corresponding to a subregister of a virtual register is used, the rewriter will check if that subregister is undefined, and if so, it will add the <undef> flag to the machine operand. The function verifying liveness of the subregis- ter would assume that it is undefined, unless any of the subranges of the live interval proves otherwise. The problem is that the live intervals created during splitting do not have any subranges, even if the original parent interval did. This could result in the <undef> flag placed on a register that is actually defined.
Differential Revision: http://reviews.llvm.org/D21189
llvm-svn: 279625
show more ...
|
#
79f85b3b |
| 24-Aug-2016 |
Matthias Braun <matze@braunis.de> |
MIRParser/MIRPrinter: Compute isSSA instead of printing/parsing it.
Specifying isSSA is an extra line at best and results in invalid MI at worst. Compute the value instead.
Differential Revision: h
MIRParser/MIRPrinter: Compute isSSA instead of printing/parsing it.
Specifying isSSA is an extra line at best and results in invalid MI at worst. Compute the value instead.
Differential Revision: http://reviews.llvm.org/D22722
llvm-svn: 279600
show more ...
|
#
90799ce8 |
| 23-Aug-2016 |
Matthias Braun <matze@braunis.de> |
MachineFunction: Introduce NoPHIs property
I want to compute the SSA property of .mir files automatically in upcoming patches. The problem with this is that some inputs will be reported as static si
MachineFunction: Introduce NoPHIs property
I want to compute the SSA property of .mir files automatically in upcoming patches. The problem with this is that some inputs will be reported as static single assignment with some passes claiming not to support SSA form. In reality though those passes do not support PHI instructions => Track the presence of PHI instructions separate from the SSA property.
Differential Revision: https://reviews.llvm.org/D22719
llvm-svn: 279573
show more ...
|
Revision tags: llvmorg-3.9.0-rc2 |
|
#
0d955d0b |
| 11-Aug-2016 |
David Majnemer <david.majnemer@gmail.com> |
Use the range variant of find instead of unpacking begin/end
If the result of the find is only used to compare against end(), just use is_contained instead.
No functionality change is intended.
ll
Use the range variant of find instead of unpacking begin/end
If the result of the find is only used to compare against end(), just use is_contained instead.
No functionality change is intended.
llvm-svn: 278433
show more ...
|
#
b14e944c |
| 02-Aug-2016 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[GlobalISel] Verify Selected MF property.
After instruction selection, there should be no pre-isel generic instructions remaining, nor should generic virtual registers be used. Verify that.
llvm-sv
[GlobalISel] Verify Selected MF property.
After instruction selection, there should be no pre-isel generic instructions remaining, nor should generic virtual registers be used. Verify that.
llvm-svn: 277483
show more ...
|
#
3681c772 |
| 02-Aug-2016 |
Ahmed Bougacha <ahmed.bougacha@gmail.com> |
[GlobalISel] Verify RegBankSelected MF property.
RegBankSelected functions shouldn't have any generic virtual register not assigned to a bank. Verify that.
llvm-svn: 277476
|
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 ...
|
#
892fcd0b |
| 25-Jul-2016 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
MachineVerifier: Fix printing nonsense for physical registers
llvm-svn: 276677
|
#
71c30a14 |
| 15-Jul-2016 |
Jacques Pienaar <jpienaar@google.com> |
Rename AnalyzeBranch* to analyzeBranch*.
Summary: NFC. Rename AnalyzeBranch/AnalyzeBranchPredicate to analyzeBranch/analyzeBranchPredicate to follow LLVM coding style and be consistent with TargetIn
Rename AnalyzeBranch* to analyzeBranch*.
Summary: NFC. Rename AnalyzeBranch/AnalyzeBranchPredicate to analyzeBranch/analyzeBranchPredicate to follow LLVM coding style and be consistent with TargetInstrInfo's analyzeCompare and analyzeSelect.
Reviewers: tstellarAMD, mcrosier
Subscribers: mcrosier, jholewinski, jfb, arsenm, dschuff, jyknight, dsanders, nemanjai
Differential Revision: https://reviews.llvm.org/D22409
llvm-svn: 275564
show more ...
|
#
9cfc75c2 |
| 30-Jun-2016 |
Duncan P. N. Exon Smith <dexonsmith@apple.com> |
CodeGen: Use MachineInstr& in TargetInstrInfo, NFC
This is mostly a mechanical change to make TargetInstrInfo API take MachineInstr& (instead of MachineInstr* or MachineBasicBlock::iterator) when th
CodeGen: Use MachineInstr& in TargetInstrInfo, NFC
This is mostly a mechanical change to make TargetInstrInfo API take MachineInstr& (instead of MachineInstr* or MachineBasicBlock::iterator) when the argument is expected to be a valid MachineInstr. This is a general API improvement.
Although it would be possible to do this one function at a time, that would demand a quadratic amount of churn since many of these functions call each other. Instead I've done everything as a block and just updated what was necessary.
This is mostly mechanical fixes: adding and removing `*` and `&` operators. The only non-mechanical change is to split ARMBaseInstrInfo::getOperandLatencyImpl out from ARMBaseInstrInfo::getOperandLatency. Previously, the latter took a `MachineInstr*` which it updated to the instruction bundle leader; now, the latter calls the former either with the same `MachineInstr&` or the bundle leader.
As a side effect, this removes a bunch of MachineInstr* to MachineBasicBlock::iterator implicit conversions, a necessary step toward fixing PR26753.
Note: I updated WebAssembly, Lanai, and AVR (despite being off-by-default) since it turned out to be easy. I couldn't run tests for AVR since llc doesn't link with it turned on.
llvm-svn: 274189
show more ...
|
#
0526e7f8 |
| 22-Jun-2016 |
Wei Ding <wei.ding2@amd.com> |
AMDGPU: Add convergent flag to INLINEASM instruction.
Differential Revision: http://reviews.llvm.org/D21214
llvm-svn: 273455
|
#
48975881 |
| 21-Jun-2016 |
Rafael Espindola <rafael.espindola@gmail.com> |
Delete some dead code.
Found by gcc 6.
llvm-svn: 273303
|
Revision tags: llvmorg-3.8.1, llvmorg-3.8.1-rc1 |
|
#
e29b7689 |
| 20-May-2016 |
Matthias Braun <matze@braunis.de> |
MachineVerifier: subregs so not require defs/valnos on every path
It is fine for subregister ranges to be undefined on some CFG paths as we may have a "vregX:other_subreg<read-undef> =" def on that
MachineVerifier: subregs so not require defs/valnos on every path
It is fine for subregister ranges to be undefined on some CFG paths as we may have a "vregX:other_subreg<read-undef> =" def on that path. We do not (and should not) have live segments for the subregister ranges. The MachineVerifier should not complain about this.
This is a slight variant of http://llvm.org/PR27705
llvm-svn: 270290
show more ...
|
#
30668dd8 |
| 11-May-2016 |
Matthias Braun <matze@braunis.de> |
MachineVerifier: Fix error reporting.
Do not use getVRegDef() to print "the definition" of a vreg. If there are multiple or none the function will fail.
llvm-svn: 269239
|
#
c1c94bc2 |
| 08-Apr-2016 |
Quentin Colombet <qcolombet@apple.com> |
[MachineVerifier] Teach how to check some of the properties of generic virtual registers.
Generic virtual registers: - May not have a register class - May not have a register bank - If they do not h
[MachineVerifier] Teach how to check some of the properties of generic virtual registers.
Generic virtual registers: - May not have a register class - May not have a register bank - If they do not have a register class they must have a size - If they have a register bank, the size of the register bank must be greater or equal to the size of the virtual register (basically check that the virtual register will fit into that register class)
llvm-svn: 265798
show more ...
|