[llvm] r315502 - [MachineCombiner] Fix initialisation of LastUpdate for incremental update.
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 11 13:25:58 PDT 2017
Author: fhahn
Date: Wed Oct 11 13:25:58 2017
New Revision: 315502
URL: http://llvm.org/viewvc/llvm-project?rev=315502&view=rev
Log:
[MachineCombiner] Fix initialisation of LastUpdate for incremental update.
Summary:
Fixes a bogus iterator resulting from the removal of a block's first instruction at the point that incremental update is enabled.
Patch by Paul Walker.
Reviewers: fhahn, Gerolf, efriedma, MatzeB
Reviewed By: fhahn
Subscribers: aemerson, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D38734
Added:
llvm/trunk/test/CodeGen/AArch64/machine-combiner.mir
Modified:
llvm/trunk/lib/CodeGen/MachineCombiner.cpp
Modified: llvm/trunk/lib/CodeGen/MachineCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineCombiner.cpp?rev=315502&r1=315501&r2=315502&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineCombiner.cpp Wed Oct 11 13:25:58 2017
@@ -415,7 +415,7 @@ bool MachineCombiner::combineInstruction
bool IncrementalUpdate = false;
auto BlockIter = MBB->begin();
- auto LastUpdate = BlockIter;
+ decltype(BlockIter) LastUpdate;
// Check if the block is in a loop.
const MachineLoop *ML = MLI->getLoopFor(MBB);
if (!MinInstr)
@@ -503,9 +503,11 @@ bool MachineCombiner::combineInstruction
InstrIdxForVirtReg, P,
!IncrementalUpdate) &&
preservesResourceLen(MBB, BlockTrace, InsInstrs, DelInstrs)) {
- if (MBB->size() > inc_threshold)
+ if (MBB->size() > inc_threshold) {
// Use incremental depth updates for basic blocks above treshold
IncrementalUpdate = true;
+ LastUpdate = BlockIter;
+ }
insertDeleteInstructions(MBB, MI, InsInstrs, DelInstrs, MinInstr,
RegUnits, IncrementalUpdate);
Added: llvm/trunk/test/CodeGen/AArch64/machine-combiner.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/machine-combiner.mir?rev=315502&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/machine-combiner.mir (added)
+++ llvm/trunk/test/CodeGen/AArch64/machine-combiner.mir Wed Oct 11 13:25:58 2017
@@ -0,0 +1,48 @@
+# RUN: llc -mtriple=aarch64-none-linux-gnu -mcpu=cortex-a57 -enable-unsafe-fp-math \
+# RUN: -run-pass machine-combiner -machine-combiner-inc-threshold=0 \
+# RUN: -verify-machineinstrs -o - %s | FileCheck %s
+---
+# Test incremental depth updates succeed when triggered after the removal of
+# the first instruction in a basic block.
+
+# CHECK-LABEL: name: inc_update_iterator_test
+name: inc_update_iterator_test
+registers:
+ - { id: 0, class: fpr64 }
+ - { id: 1, class: gpr32 }
+ - { id: 2, class: gpr32 }
+ - { id: 3, class: gpr32 }
+ - { id: 4, class: gpr32 }
+ - { id: 5, class: gpr32 }
+ - { id: 6, class: gpr32 }
+ - { id: 7, class: fpr64 }
+ - { id: 8, class: fpr64 }
+ - { id: 9, class: fpr64 }
+body: |
+ bb.0:
+ successors: %bb.1, %bb.2
+
+ %3 = COPY %w2
+ %2 = COPY %w1
+ %1 = COPY %w0
+ %0 = COPY %d0
+ %4 = SUBSWrr %1, %2, implicit-def %nzcv
+ Bcc 13, %bb.2, implicit %nzcv
+ B %bb.1
+
+ bb.1:
+ ; CHECK: MADDWrrr %1, %2, %3
+ %5 = MADDWrrr %1, %2, %wzr
+ %6 = ADDWrr %3, killed %5
+ %7 = SCVTFUWDri killed %6
+ ; CHECK: FMADDDrrr %7, %7, %0
+ %8 = FMULDrr %7, %7
+ %9 = FADDDrr %0, killed %8
+ %d0 = COPY %9
+ RET_ReallyLR implicit %d0
+
+ bb.2:
+ %d0 = COPY %0
+ RET_ReallyLR implicit %d0
+
+...
More information about the llvm-commits
mailing list