34 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 | 
						|
; RUN: opt -newgvn %s -S -o - | FileCheck %s
 | 
						|
define hidden void @foo() {
 | 
						|
; CHECK-LABEL: @foo(
 | 
						|
; CHECK-NEXT:  top:
 | 
						|
; CHECK-NEXT:    br label [[IF:%.*]]
 | 
						|
; CHECK:       if:
 | 
						|
; CHECK-NEXT:    [[TMP0:%.*]] = phi double [ [[TMP1:%.*]], [[IF]] ], [ undef, [[TOP:%.*]] ]
 | 
						|
; CHECK-NEXT:    [[TMP1]] = fadd double [[TMP0]], 1.000000e+00
 | 
						|
; CHECK-NEXT:    br i1 false, label [[L50:%.*]], label [[IF]]
 | 
						|
; CHECK:       L50:
 | 
						|
; CHECK-NEXT:    store i8 undef, i8* null
 | 
						|
; CHECK-NEXT:    ret void
 | 
						|
;
 | 
						|
top:
 | 
						|
  %.promoted = load double, double* undef, align 8
 | 
						|
  br label %if
 | 
						|
 | 
						|
;; This is really a multi-valued phi, because the phi is defined by an expression of the phi.
 | 
						|
;; This means that we can't propagate the value over the backedge, because we'll just cycle
 | 
						|
;; through every value.
 | 
						|
 | 
						|
if:                                               ; preds = %if, %top
 | 
						|
  %0 = phi double [ %1, %if ], [ %.promoted, %top ]
 | 
						|
  %1 = fadd double %0, 1.0
 | 
						|
  br i1 false, label %L50, label %if
 | 
						|
 | 
						|
L50:                                              ; preds = %if
 | 
						|
  %.lcssa = phi double [ %1, %if ]
 | 
						|
  store double %.lcssa, double* undef, align 8
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 |