Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions llvm/lib/Target/Hexagon/HexagonGenInsert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,10 @@ void HexagonGenInsert::collectInBlock(MachineBasicBlock *B,
// successors have been processed.
RegisterSet BlockDefs, InsDefs;
for (MachineInstr &MI : *B) {
// Stop if the map size is too large.
if (IFMap.size() >= MaxIFMSize)
break;

InsDefs.clear();
getInstrDefs(&MI, InsDefs);
// Leave those alone. They are more transparent than "insert".
Expand All @@ -942,8 +946,8 @@ void HexagonGenInsert::collectInBlock(MachineBasicBlock *B,

findRecordInsertForms(VR, AVs);
// Stop if the map size is too large.
if (IFMap.size() > MaxIFMSize)
return;
if (IFMap.size() >= MaxIFMSize)
break;
}
}

Expand Down
45 changes: 45 additions & 0 deletions llvm/test/CodeGen/Hexagon/insert-big.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
; Check that llc does not abort, which happened due to incorrect MIR.
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=1 < %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=2 < %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=3 < %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=4 < %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=5 < %s

; Look for this symptom, in case llc does not check invalid IR.
; CHECK-NOT: insert(%14,%5,#5,#5)

; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=1 -debug-only=hexinsert -stop-after hexinsert < %s 2>&1 | FileCheck %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=2 -debug-only=hexinsert -stop-after hexinsert < %s 2>&1 | FileCheck %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=3 -debug-only=hexinsert -stop-after hexinsert < %s 2>&1 | FileCheck %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=4 -debug-only=hexinsert -stop-after hexinsert < %s 2>&1 | FileCheck %s
; RUN: llc -O2 -mtriple=hexagon -insert-max-ifmap=5 -debug-only=hexinsert -stop-after hexinsert < %s 2>&1 | FileCheck %s

define i32 @f(i32 %0, i32 %1, i32 %2) {
entry:
switch i32 %0, label %common.ret1 [
i32 8907, label %3
i32 4115, label %6
]

common.ret1:
%common.ret1.op = phi i32 [ %5, %3 ], [ %526, %6 ], [ 0, %entry ]
ret i32 %common.ret1.op

3:
%4 = shl i32 %2, 5
%5 = and i32 %4, 992
br label %common.ret1

6:
%7 = shl i32 %0, 10
%8 = and i32 %7, 7168
%9 = shl i32 %0, 5
%10 = and i32 %9, 992
%11 = or i32 %10, %8
%12 = and i32 %0, 1
%13 = or i32 %11, %12
%14 = shl i32 %1, 1
%15 = and i32 %14, 2031616
%526 = or i32 %13, %15
br label %common.ret1
}
Loading