mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	Summary: Different range metadata can lead to different optimizations in later passes, possibly breaking the semantics of the merged function. So range metadata must be taken into consideration when comparing Load instructions. Thanks! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211391 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: opt -mergefunc -S < %s | FileCheck %s
 | |
| define i1 @cmp_with_range(i8*, i8*) {
 | |
|   %v1 = load i8* %0, !range !0
 | |
|   %v2 = load i8* %1, !range !0
 | |
|   %out = icmp eq i8 %v1, %v2
 | |
|   ret i1 %out
 | |
| }
 | |
| 
 | |
| define i1 @cmp_no_range(i8*, i8*) {
 | |
| ; CHECK-LABEL: @cmp_no_range
 | |
| ; CHECK-NEXT  %v1 = load i8* %0
 | |
| ; CHECK-NEXT  %v2 = load i8* %1
 | |
| ; CHECK-NEXT  %out = icmp eq i8 %v1, %v2
 | |
| ; CHECK-NEXT  ret i1 %out
 | |
|   %v1 = load i8* %0
 | |
|   %v2 = load i8* %1
 | |
|   %out = icmp eq i8 %v1, %v2
 | |
|   ret i1 %out
 | |
| }
 | |
| 
 | |
| define i1 @cmp_different_range(i8*, i8*) {
 | |
| ; CHECK-LABEL: @cmp_different_range
 | |
| ; CHECK-NEXT:  %v1 = load i8* %0, !range !1
 | |
| ; CHECK-NEXT:  %v2 = load i8* %1, !range !1
 | |
| ; CHECK-NEXT:  %out = icmp eq i8 %v1, %v2
 | |
| ; CHECK-NEXT:  ret i1 %out
 | |
|   %v1 = load i8* %0, !range !1
 | |
|   %v2 = load i8* %1, !range !1
 | |
|   %out = icmp eq i8 %v1, %v2
 | |
|   ret i1 %out
 | |
| }
 | |
| 
 | |
| define i1 @cmp_with_same_range(i8*, i8*) {
 | |
| ; CHECK-LABEL: @cmp_with_same_range
 | |
| ; CHECK: tail call i1 @cmp_with_range
 | |
|   %v1 = load i8* %0, !range !0
 | |
|   %v2 = load i8* %1, !range !0
 | |
|   %out = icmp eq i8 %v1, %v2
 | |
|   ret i1 %out
 | |
| }
 | |
| 
 | |
| !0 = metadata !{i8 0, i8 2}
 | |
| !1 = metadata !{i8 5, i8 7}
 |