mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
8a9d5a8c29
clear out deleted loops from the current queue beyond just the current loop. This is important because SimpleLoopUnswitch will now enqueue the same loop to be re-processed. When it does this with the legacy PM, we don't have a way of canceling the rest of the pipeline and so we can end up deleting the loop before we reprocess it. =/ This change also makes it easy to support deleting other loops in the queue to process, although I don't have any use cases for that. Differential Revision: https://reviews.llvm.org/D48470 llvm-svn: 335317
39 lines
927 B
LLVM
39 lines
927 B
LLVM
; RUN: opt -simple-loop-unswitch -loop-deletion -S < %s | FileCheck %s
|
|
;
|
|
; Check that when we do unswitching where we re-enqueue the loop to be processed
|
|
; again, but manage to delete the loop before ever getting to iterate on it, it
|
|
; doesn't crash the legacy pass manager.
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
define void @pr37888() {
|
|
; CHECK-LABEL: define void @pr37888()
|
|
entry:
|
|
%tobool = icmp ne i16 undef, 0
|
|
br label %for.body
|
|
; CHECK: %[[TOBOOL:.*]] = icmp ne
|
|
; CHECK-NEXT: br i1 %[[TOBOOL]], label %if.then, label %[[ENTRY_SPLIT:.*]]
|
|
;
|
|
; CHECK: [[ENTRY_SPLIT]]:
|
|
; CHECK-NEXT: br label %for.end
|
|
|
|
for.body:
|
|
br i1 %tobool, label %if.then, label %if.end
|
|
|
|
if.then:
|
|
unreachable
|
|
; CHECK: if.then:
|
|
; CHECK-NEXT: unreachable
|
|
|
|
if.end:
|
|
br label %for.inc
|
|
|
|
for.inc:
|
|
br i1 undef, label %for.body, label %for.end
|
|
|
|
for.end:
|
|
ret void
|
|
; CHECK: for.end:
|
|
; CHECK-NEXT: ret void
|
|
}
|