mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	As with the prefetch intrinsic to which it maps, simply have dcbt marked as reading from and writing to its arguments instead of having unmodeled side effects. While this might cause unwanted code motion (because aliasing checks don't really capture cache-line sharing), it is more important that prefetches in unrolled loops don't block the scheduler from rearranging the unrolled loop body. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171073 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			23 lines
		
	
	
		
			650 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
		
			650 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
 | |
| target triple = "powerpc64-unknown-linux-gnu"
 | |
| ; RUN: llc -mcpu=a2 -enable-misched -enable-aa-sched-mi < %s | FileCheck %s
 | |
| 
 | |
| define i8 @test1(i8* noalias %a, i8* noalias %b, i8* noalias %c) nounwind {
 | |
| entry:
 | |
|   %q = load i8* %b
 | |
|   call void @llvm.prefetch(i8* %a, i32 0, i32 3, i32 1)
 | |
|   %r = load i8* %c
 | |
|   %s = add i8 %q, %r
 | |
|   ret i8 %s
 | |
| }
 | |
| 
 | |
| declare void @llvm.prefetch(i8*, i32, i32, i32)
 | |
| 
 | |
| ; Test that we've moved the second load to before the dcbt to better
 | |
| ; hide its latency.
 | |
| ; CHECK: @test1
 | |
| ; CHECK: lbz
 | |
| ; CHECK: lbz
 | |
| ; CHECK: dcbt
 | |
| 
 |