You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: opt -mem2reg < %s -S | FileCheck %s
 | |
| ; RUN: opt -passes=mem2reg < %s -S | FileCheck %s
 | |
| 
 | |
| declare i32 @def(i32)
 | |
| declare i1 @use(i32)
 | |
| 
 | |
| ; Special case of a single-BB alloca does not apply here since the load
 | |
| ; is affected by the following store. Expect this case to be identified
 | |
| ; and a PHI node to be created.
 | |
| define void @test1() {
 | |
| ; CHECK-LABEL: @test1(
 | |
|  entry:
 | |
|   %t = alloca i32
 | |
|   br label %loop
 | |
| 
 | |
|  loop:
 | |
|   %v = load i32, i32* %t
 | |
|   %c = call i1 @use(i32 %v)
 | |
| ; CHECK: [[PHI:%.*]] = phi i32 [ undef, %entry ], [ %n, %loop ]
 | |
| ; CHECK: call i1 @use(i32 [[PHI]])
 | |
|   %n = call i32 @def(i32 7)
 | |
|   store i32 %n, i32* %t
 | |
|   br i1 %c, label %loop, label %exit
 | |
| 
 | |
|  exit:
 | |
|   ret void
 | |
| }
 | |
| 
 | |
| ; Same as above, except there is no following store. The alloca should just be
 | |
| ; replaced with an undef
 | |
| define void @test2() {
 | |
| ; CHECK-LABEL: @test2(
 | |
|  entry:
 | |
|   %t = alloca i32
 | |
|   br label %loop
 | |
| 
 | |
|  loop:
 | |
|   %v = load i32, i32* %t
 | |
|   %c = call i1 @use(i32 %v)
 | |
| ; CHECK: %c = call i1 @use(i32 undef)
 | |
|   br i1 %c, label %loop, label %exit
 | |
| 
 | |
|  exit:
 | |
|   ret void
 | |
| }
 |