mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155432 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; Test that GCSE uses basicaa to do alias analysis, which is capable of 
 | |
| ; disambiguating some obvious cases.  All loads should be removable in 
 | |
| ; this testcase.
 | |
| 
 | |
| ; RUN: opt < %s -basicaa -gvn -instcombine -dce -S | FileCheck %s
 | |
| 
 | |
| @A = global i32 7
 | |
| @B = global i32 8
 | |
| 
 | |
| ; CHECK:      define i32 @test()
 | |
| ; CHECK-NEXT:   store i32 123, i32* @B
 | |
| ; CHECK-NEXT:   ret i32 0
 | |
| 
 | |
| define i32 @test() {
 | |
| 	%A1 = load i32* @A
 | |
| 
 | |
| 	store i32 123, i32* @B  ; Store cannot alias @A
 | |
| 
 | |
| 	%A2 = load i32* @A
 | |
| 	%X = sub i32 %A1, %A2
 | |
| 	ret i32 %X
 | |
| }
 | |
| 
 | |
| ; CHECK:      define i32 @test2()
 | |
| ; CHECK-NEXT:   br label %Loop
 | |
| ; CHECK:      Loop:
 | |
| ; CHECK-NEXT:   store i32 0, i32* @B
 | |
| ; CHECK-NEXT:   br i1 true, label %out, label %Loop
 | |
| ; CHECK:      out:
 | |
| ; CHECK-NEXT:   ret i32 0
 | |
| 
 | |
| define i32 @test2() {
 | |
|         %A1 = load i32* @A
 | |
|         br label %Loop
 | |
| Loop:
 | |
|         %AP = phi i32 [0, %0], [%X, %Loop]
 | |
|         store i32 %AP, i32* @B  ; Store cannot alias @A
 | |
| 
 | |
|         %A2 = load i32* @A
 | |
|         %X = sub i32 %A1, %A2
 | |
|         %c = icmp eq i32 %X, 0
 | |
|         br i1 %c, label %out, label %Loop
 | |
| 
 | |
| out:
 | |
|         ret i32 %X
 | |
| }
 | |
| 
 | |
| declare void @external()
 | |
| 
 | |
| ; CHECK:      define i32 @test3()
 | |
| ; CHECK-NEXT:   call void @external()
 | |
| ; CHECK-NEXT:   ret i32 7
 | |
| 
 | |
| define i32 @test3() {
 | |
| 	%X = alloca i32
 | |
| 	store i32 7, i32* %X
 | |
| 	call void @external()
 | |
| 	%V = load i32* %X
 | |
| 	ret i32 %V
 | |
| }
 | |
| 
 |