Revision tags: llvmorg-11.1.0-rc1 |
|
#
8f8c207b |
| 12-Jan-2021 |
Serguei Katkov <serguei.katkov@azul.com> |
[Verifier] Add tied-ness verification to statepoint intsruction
Reviewers: reames, dantrushin Reviewed By: reames, dantrushin Subscribers: llvm-commits Differential Revision: https://reviews.llvm.or
[Verifier] Add tied-ness verification to statepoint intsruction
Reviewers: reames, dantrushin Reviewed By: reames, dantrushin Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D94483
show more ...
|
#
fba9805b |
| 12-Jan-2021 |
Serguei Katkov <serguei.katkov@azul.com> |
[Verifier] Extend statepoint verifier to cover more constants
Also old mir tests are updated to meet last changes in STATEPOINT format.
Reviewers: reames, dantrushin Reviewed By: reames, dantrushin
[Verifier] Extend statepoint verifier to cover more constants
Also old mir tests are updated to meet last changes in STATEPOINT format.
Reviewers: reames, dantrushin Reviewed By: reames, dantrushin Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D94482
show more ...
|
Revision tags: llvmorg-11.0.1, llvmorg-11.0.1-rc2 |
|
#
0447f350 |
| 10-Dec-2020 |
David Green <david.green@arm.com> |
[ARM][RegAlloc] Add t2LoopEndDec
We currently have problems with the way that low overhead loops are specified, with LR being spilled between the t2LoopDec and the t2LoopEnd forcing the entire loop
[ARM][RegAlloc] Add t2LoopEndDec
We currently have problems with the way that low overhead loops are specified, with LR being spilled between the t2LoopDec and the t2LoopEnd forcing the entire loop to be reverted late in the backend. As they will eventually become a single instruction, this patch introduces a t2LoopEndDec which is the combination of the two, combined before registry allocation to make sure this does not fail.
Unfortunately this instruction is a terminator that produces a value (and also branches - it only produces the value around the branching edge). So this needs some adjustment to phi elimination and the register allocator to make sure that we do not spill this LR def around the loop (needing to put a spill after the terminator). We treat the loop very carefully, making sure that there is nothing else like calls that would break it's ability to use LR. For that, this adds a isUnspillableTerminator to opt in the new behaviour.
There is a chance that this could cause problems, and so I have added an escape option incase. But I have not seen any problems in the testing that I've tried, and not reverting Low overhead loops is important for our performance. If this does work then we can hopefully do the same for t2WhileLoopStart and t2DoLoopStart instructions.
This patch also contains the code needed to convert or revert the t2LoopEndDec in the backend (which just needs a subs; bne) and the code pre-ra to create them.
Differential Revision: https://reviews.llvm.org/D91358
show more ...
|
Revision tags: llvmorg-11.0.1-rc1 |
|
#
5e731625 |
| 20-Oct-2020 |
Mircea Trofin <mtrofin@google.com> |
[NFC][MC] Use [MC]Register in MachineVerifier
Differential Revision: https://reviews.llvm.org/D89815
|
#
c2551c1f |
| 09-Oct-2020 |
Amara Emerson <amara@apple.com> |
[GlobalISel] Remove scalar src from non-sequential fadd/fmul reductions.
It's probably better to split these into separate G_FADD/G_FMUL + G_VECREDUCE operations in the translator rather than carryi
[GlobalISel] Remove scalar src from non-sequential fadd/fmul reductions.
It's probably better to split these into separate G_FADD/G_FMUL + G_VECREDUCE operations in the translator rather than carrying the scalar around. The majority of the time it'll get simplified away as the scalars are probably identity values.
Differential Revision: https://reviews.llvm.org/D89150
show more ...
|
#
2c5f3d54 |
| 14-Oct-2020 |
Jeremy Morse <jeremy.morse@sony.com> |
[DebugInstrRef] Parse debug instruction-references from/to MIR
This patch defines the MIR format for debug instruction references: it's an integer trailing an instruction, marked out by "debug-instr
[DebugInstrRef] Parse debug instruction-references from/to MIR
This patch defines the MIR format for debug instruction references: it's an integer trailing an instruction, marked out by "debug-instr-number", much like how "debug-location" identifies the DebugLoc metadata of an instruction. The instruction number is stored directly in a MachineInstr.
Actually referring to an instruction comes in a later patch, but is done using one of these instruction numbers.
I've added a round-trip test and two verifier checks: that we don't label meta-instructions as generating values, and that there are no duplicates.
Differential Revision: https://reviews.llvm.org/D85746
show more ...
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6 |
|
#
283b4d6b |
| 02-Oct-2020 |
Amara Emerson <amara@apple.com> |
[GlobalISel] Add G_VECREDUCE_* opcodes for vector reductions.
These mirror the IR and SelectionDAG intrinsics & nodes.
Opcodes added: G_VECREDUCE_SEQ_FADD G_VECREDUCE_SEQ_FMUL G_VECREDUCE_FADD G_VE
[GlobalISel] Add G_VECREDUCE_* opcodes for vector reductions.
These mirror the IR and SelectionDAG intrinsics & nodes.
Opcodes added: G_VECREDUCE_SEQ_FADD G_VECREDUCE_SEQ_FMUL G_VECREDUCE_FADD G_VECREDUCE_FMUL G_VECREDUCE_FMAX G_VECREDUCE_FMIN G_VECREDUCE_ADD G_VECREDUCE_MUL G_VECREDUCE_AND G_VECREDUCE_OR G_VECREDUCE_XOR G_VECREDUCE_SMAX G_VECREDUCE_SMIN G_VECREDUCE_UMAX G_VECREDUCE_UMIN
Differential Revision: https://reviews.llvm.org/D88750
show more ...
|
Revision tags: llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
#
6913812a |
| 20-Sep-2020 |
Fangrui Song <i@maskray.me> |
Fix some clang-tidy bugprone-argument-comment issues
|
#
6e85c3d5 |
| 15-Sep-2020 |
Mircea Trofin <mtrofin@google.com> |
[NFC][Regalloc] accessors for 'reg' and 'weight'
Also renamed the fields to follow style guidelines.
Accessors help with readability - weight mutation, in particular, is easier to follow this way.
[NFC][Regalloc] accessors for 'reg' and 'weight'
Also renamed the fields to follow style guidelines.
Accessors help with readability - weight mutation, in particular, is easier to follow this way.
Differential Revision: https://reviews.llvm.org/D87725
show more ...
|
#
a3e41d45 |
| 27-Aug-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM] Make MachineVerifier more strict about terminators
Fix the ARM backend's analyzeBranch so it doesn't ignore predicated return instructions, and make the MachineVerifier rule more strict.
Diff
[ARM] Make MachineVerifier more strict about terminators
Fix the ARM backend's analyzeBranch so it doesn't ignore predicated return instructions, and make the MachineVerifier rule more strict.
Differential Revision: https://reviews.llvm.org/D40061
show more ...
|
Revision tags: llvmorg-11.0.0-rc2 |
|
#
0b7f6cc7 |
| 03-Aug-2020 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
GlobalISel: Add generic instructions for memory intrinsics
AArch64, X86 and Mips currently directly consumes these and custom lowering to produce a libcall, but really these should follow the normal
GlobalISel: Add generic instructions for memory intrinsics
AArch64, X86 and Mips currently directly consumes these and custom lowering to produce a libcall, but really these should follow the normal legalization process through the libcall/lower action.
show more ...
|
#
a5ed20b5 |
| 13-Aug-2020 |
Yuanfang Chen <yuanfang.chen@sony.com> |
[NewPM][CodeGen] Add machine code verification callback
D83608 need this.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D85916
|
#
39617aae |
| 11-Aug-2020 |
Yuanfang Chen <yuanfang.chen@sony.com> |
NFC. Constify MachineVerifier::verify parameter
|
#
e73f5d86 |
| 01-Aug-2020 |
Evgeny Leviant <eleviant@accesssoftek.com> |
[MachineVerifier] Refactor calcRegsPassed. NFC
Patch improves performance of verify-machineinstrs pass up to 10x. Differential revision: https://reviews.llvm.org/D84105
|
#
a4ade9ed |
| 29-Jul-2020 |
Kang Zhang <shkzhang@cn.ibm.com> |
[MachineVerifier] Handle the PHI node for verifyLiveVariables()
Summary: When doing MachineVerifier for LiveVariables, the MachineVerifier pass will calculate the LiveVariables, and compares the res
[MachineVerifier] Handle the PHI node for verifyLiveVariables()
Summary: When doing MachineVerifier for LiveVariables, the MachineVerifier pass will calculate the LiveVariables, and compares the result with the result livevars pass gave. If they are different, verifyLiveVariables() will give error.
But when we calculate the LiveVariables in MachineVerifier, we don't consider the PHI node, while livevars considers.
This patch is to fix above bug.
Reviewed By: bjope
Differential Revision: https://reviews.llvm.org/D80274
show more ...
|
Revision tags: llvmorg-11.0.0-rc1 |
|
#
e04fe9ae |
| 16-Jul-2020 |
Denis Antrushin <dantrushin@gmail.com> |
[Statepoint] Fix bug found by sanitaizer.
Statepoint has no static operands, so it cannot be verified against MCInstrDescr. Revert NumDefs change introduced by ef658ebd629.
|
Revision tags: llvmorg-12-init, llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2 |
|
#
ef658ebd |
| 10-Jun-2020 |
Denis Antrushin <dantrushin@gmail.com> |
MIR Statepoint refactoring. Part 1: Basic MI level changes.
Basic support for variadic-def MIR Statepoint: - Change TableGen STATEPOINT description to variadic out list (For self-documentation pur
MIR Statepoint refactoring. Part 1: Basic MI level changes.
Basic support for variadic-def MIR Statepoint: - Change TableGen STATEPOINT description to variadic out list (For self-documentation purpose; by itself it does not affect code generation in any way). - Update StatepointOpers helper class to handle variadic defs. - Update MachineVerifier to properly handle them, too.
With this change, new Statepoint instruction can be passed through backend (excluding ISEL) without errors.
Full change set is available at D81603. Reviewed By: reames Differential Revision: https://reviews.llvm.org/D81645
show more ...
|
#
74a148ad |
| 09-Jun-2020 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
GlobalISel: Verify G_BITCAST changes the type
Updated the AArch64 tests the best I could with my vague, inferred understanding of AArch64 register banks. As far as I can tell, there is only one 32-b
GlobalISel: Verify G_BITCAST changes the type
Updated the AArch64 tests the best I could with my vague, inferred understanding of AArch64 register banks. As far as I can tell, there is only one 32-bit/64-bit type which will use the gpr register bank, so we have to use the fpr bank for the other operand.
show more ...
|
Revision tags: llvmorg-10.0.1-rc1 |
|
#
4b0aa572 |
| 16-May-2020 |
James Y Knight <jyknight@google.com> |
Change the INLINEASM_BR MachineInstr to be a non-terminating instruction.
Before this instruction supported output values, it fit fairly naturally as a terminator. However, being a terminator while
Change the INLINEASM_BR MachineInstr to be a non-terminating instruction.
Before this instruction supported output values, it fit fairly naturally as a terminator. However, being a terminator while also supporting outputs causes some trouble, as the physreg->vreg COPY operations cannot be in the same block.
Modeling it as a non-terminator allows it to be handled the same way as invoke is handled already.
Most of the changes here were created by auditing all the existing users of MachineBasicBlock::isEHPad() and MachineBasicBlock::hasEHPadSuccessor(), and adding calls to isInlineAsmBrIndirectTarget or mayHaveInlineAsmBr, as appropriate.
Reviewed By: nickdesaulniers, void
Differential Revision: https://reviews.llvm.org/D79794
show more ...
|
#
e9eab303 |
| 28-Jun-2020 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
GlobalISel: Disallow undef generic virtual register uses
With an undef operand, it's possible for getVRegDef to fail and return null. This is an edge case very little code bothered to consider. Prop
GlobalISel: Disallow undef generic virtual register uses
With an undef operand, it's possible for getVRegDef to fail and return null. This is an edge case very little code bothered to consider. Proper gMIR should use G_IMPLICIT_DEF instead.
I initially tried to apply this restriction to all SSA MIR, so then getVRegDef would never fail anywhere. However, ProcessImplicitDefs does technically run while the function is in SSA. ProcessImplicitDefs and DetectDeadLanes would need to either move, or a new pseudo-SSA type of function property would need to be introduced.
show more ...
|
#
87e57426 |
| 15-Jun-2020 |
Dominik Montada <dominik.montada@hightec-rt.com> |
[NFC] Add braces to if-statement in MachineVerifier
|
#
c87bf291 |
| 10-Jun-2020 |
Dominik Montada <dominik.montada@hightec-rt.com> |
[MachineVerifier][GlobalISel] Check that branches have a MBB operand or are declared indirect. Add missing properties to G_BRJT, G_BRINDIRECT
Summary: Teach MachineVerifier to check branches for MBB
[MachineVerifier][GlobalISel] Check that branches have a MBB operand or are declared indirect. Add missing properties to G_BRJT, G_BRINDIRECT
Summary: Teach MachineVerifier to check branches for MBB operands if they are not declared indirect.
Add `isBarrier`, `isIndirectBranch` to `G_BRINDIRECT` and `G_BRJT`. Without these, `MachineInstr.isConditionalBranch()` was giving a false-positive for those instructions.
Reviewers: aemerson, qcolombet, dsanders, arsenm
Reviewed By: dsanders
Subscribers: hiraditya, wdng, simoncook, s.egerton, arsenm, rovka, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D81587
show more ...
|
#
bb6cb6bf |
| 09-Jun-2020 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
GlobalISel: Remove redundant check in verifier
This was already checked earlier for all instructions.
|
#
1b660227 |
| 09-Jun-2020 |
Kang Zhang <shkzhang@cn.ibm.com> |
[MachineVerifier] Add TiedOpsRewritten flag to fix verify two-address error
Summary: Currently, MachineVerifier will attempt to verify that tied operands satisfy register constraints as soon as the
[MachineVerifier] Add TiedOpsRewritten flag to fix verify two-address error
Summary: Currently, MachineVerifier will attempt to verify that tied operands satisfy register constraints as soon as the function is no longer in SSA form. However, PHIElimination will take the function out of SSA form while TwoAddressInstructionPass will actually rewrite tied operands to match the constraints. PHIElimination runs first in the pipeline. Therefore, whenever the MachineVerifier is run after PHIElimination, it will encounter verification errors on any tied operands.
This patch adds a function property called TiedOpsRewritten that will be set by TwoAddressInstructionPass and will control when the verifier checks tied operands.
Reviewed By: nemanjai
Differential Revision: https://reviews.llvm.org/D80538
show more ...
|
#
748d92b4 |
| 12-May-2020 |
James Y Knight <jyknight@google.com> |
Simplify MachineVerifier's block-successor verification.
There's two properties we want to verify:
1. That the successors returned by analyzeBranch are in the CFG successor list, and 2. That the
Simplify MachineVerifier's block-successor verification.
There's two properties we want to verify:
1. That the successors returned by analyzeBranch are in the CFG successor list, and 2. That there are no extraneous successors are in the CFG successor list.
The previous implementation mostly accomplished this, but in a very convoluted manner.
Differential Revision: https://reviews.llvm.org/D79793
show more ...
|