mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Fixes PR15570: SEGV: SCEV back-edge info invalid after dead code removal. Indvars creates a SCEV expression for the loop's back edge taken count, then determines that the comparison is always true and removes it. When loop-unroll asks for the expression, it contains a NULL SCEVUnknkown (as a CallbackVH). forgetMemoizedResults should invalidate the loop back edges expression. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177986 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			35 lines
		
	
	
		
			814 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			814 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
; RUN: opt < %s -S -indvars -loop-unroll | FileCheck %s
 | 
						|
;
 | 
						|
; PR15570: SEGV: SCEV back-edge info invalid after dead code removal.
 | 
						|
;
 | 
						|
; Indvars creates a SCEV expression for the loop's back edge taken
 | 
						|
; count, then determines that the comparison is always true and
 | 
						|
; removes it.
 | 
						|
;
 | 
						|
; When loop-unroll asks for the expression, it contains a NULL
 | 
						|
; SCEVUnknkown (as a CallbackVH).
 | 
						|
;
 | 
						|
; forgetMemoizedResults should invalidate the backedge taken count expression.
 | 
						|
 | 
						|
; CHECK: @test
 | 
						|
; CHECK-NOT: phi
 | 
						|
; CHECK-NOT: icmp
 | 
						|
; CHECK: ret void
 | 
						|
define void @test() {
 | 
						|
entry:
 | 
						|
  %xor1 = xor i32 0, 1
 | 
						|
  br label %b17
 | 
						|
 | 
						|
b17:
 | 
						|
  br i1 undef, label %b22, label %b18
 | 
						|
 | 
						|
b18:
 | 
						|
  %phi1 = phi i32 [ %add1, %b18 ], [ %xor1, %b17 ]
 | 
						|
  %add1 = add nsw i32 %phi1, -1
 | 
						|
  %cmp1 = icmp sgt i32 %add1, 0
 | 
						|
  br i1 %cmp1, label %b18, label %b22
 | 
						|
 | 
						|
b22:
 | 
						|
  ret void
 | 
						|
}
 |