53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; RUN: opt -S <%s -simplifycfg | FileCheck %s
 | 
						|
 | 
						|
define void @test_br(i32 %x) {
 | 
						|
entry:
 | 
						|
; CHECK-LABEL: @test_br(
 | 
						|
; CHECK-NEXT: entry:
 | 
						|
; CHECK-NEXT: ret void
 | 
						|
  %cmp = icmp eq i32 %x, 10
 | 
						|
  br i1 %cmp, label %if.then, label %if.then
 | 
						|
 | 
						|
if.then:                                          ; preds = %entry
 | 
						|
  br label %if.end
 | 
						|
 | 
						|
if.end:                                           ; preds = %if.else, %if.then
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
define void @test_switch(i32 %x) nounwind {
 | 
						|
entry:
 | 
						|
; CHECK-LABEL: @test_switch(
 | 
						|
; CHECK-NEXT: entry:
 | 
						|
; CHECK-NEXT: ret void
 | 
						|
  %rem = srem i32 %x, 3
 | 
						|
  switch i32 %rem, label %sw.bb [
 | 
						|
    i32 1, label %sw.bb
 | 
						|
    i32 10, label %sw.bb
 | 
						|
  ]
 | 
						|
 | 
						|
sw.bb:                                            ; preds = %sw.default, %entry, %entry
 | 
						|
  br label %sw.epilog
 | 
						|
 | 
						|
sw.epilog:                                        ; preds = %sw.bb
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
define void @test_indirectbr(i32 %x) {
 | 
						|
entry:
 | 
						|
; CHECK-LABEL: @test_indirectbr(
 | 
						|
; CHECK-NEXT: entry:
 | 
						|
; Ideally this should now check:
 | 
						|
;   CHK-NEXT: ret void
 | 
						|
; But that doesn't happen yet. Instead:
 | 
						|
; CHECK-NEXT: br label %L1
 | 
						|
 | 
						|
  %label = bitcast i8* blockaddress(@test_indirectbr, %L1) to i8*
 | 
						|
  indirectbr i8* %label, [label %L1, label %L2]
 | 
						|
 | 
						|
L1:                                               ; preds = %entry
 | 
						|
  ret void
 | 
						|
L2:                                               ; preds = %entry
 | 
						|
  ret void
 | 
						|
}
 |