You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			56 lines
		
	
	
		
			1022 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1022 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: opt -S -gvn-hoist < %s | FileCheck %s
 | |
| 
 | |
| %struct.__jmp_buf_tag = type { [8 x i64], i32 }
 | |
| 
 | |
| ; Check that hoisting only happens when the expression is very busy.
 | |
| ; CHECK: store
 | |
| ; CHECK: store
 | |
| 
 | |
| @test_exit_buf = global %struct.__jmp_buf_tag zeroinitializer
 | |
| @G = global i32 0
 | |
| 
 | |
| define void @test_command(i32 %c1) {
 | |
| entry:
 | |
|   switch i32 %c1, label %exit [
 | |
|     i32 0, label %sw0
 | |
|     i32 1, label %sw1
 | |
|   ]
 | |
| 
 | |
| sw0:
 | |
|   store i32 1, i32* @G
 | |
|   br label %exit
 | |
| 
 | |
| sw1:
 | |
|   store i32 1, i32* @G
 | |
|   br label %exit
 | |
| 
 | |
| exit:
 | |
|   call void @longjmp(%struct.__jmp_buf_tag* @test_exit_buf, i32 1) #0
 | |
|   unreachable
 | |
| }
 | |
| 
 | |
| declare void @longjmp(%struct.__jmp_buf_tag*, i32) #0
 | |
| 
 | |
| attributes #0 = { noreturn nounwind }
 | |
| 
 | |
| ; Check that the store is hoisted.
 | |
| ; CHECK-LABEL: define void @fun(
 | |
| ; CHECK: store
 | |
| ; CHECK-NOT: store
 | |
| 
 | |
| define void @fun() {
 | |
| entry:
 | |
|   br label %if.then
 | |
| 
 | |
| if.then:                                          ; preds = %entry
 | |
|   br i1 undef, label %sw0, label %sw1
 | |
| 
 | |
| sw0:
 | |
|   store i32 1, i32* @G
 | |
|   unreachable
 | |
| 
 | |
| sw1:
 | |
|   store i32 1, i32* @G
 | |
|   ret void
 | |
| }
 |