mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 16:17:05 +00:00 
			
		
		
		
	In some cases it is possible for CGP to attempt to reuse a base address from another basic block. In those cases we have to be sure that all the address math was either done at the same bit width, or that none of it overflowed before it was extended. Patch by Louis Gerbarg <lgg@apple.com> rdar://16307442 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204833 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			27 lines
		
	
	
		
			789 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			789 B
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s | FileCheck %s
 | |
| 
 | |
| ; Test to make sure that if math that can roll over has been used we don't
 | |
| ; use the potential overflow as the basis for an address calculation later by
 | |
| ; sinking it into a different basic block.
 | |
| 
 | |
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 | |
| target triple = "x86_64-apple-macosx10.9.0"
 | |
| 
 | |
| ; Function Attrs: nounwind ssp uwtable
 | |
| define void @test_sink(i8* %arg1, i32 %arg2, i8 %arg3) #0 {
 | |
|   %tmp1 = add i32 -2147483648, %arg2
 | |
|   %tmp2 = add i32 -2147483648, %tmp1
 | |
|   %tmp3 = getelementptr i8* %arg1, i32 %arg2
 | |
|   br label %bb1
 | |
| 
 | |
| bb1:
 | |
|   %tmp4 = getelementptr i8* %arg1, i32 %tmp2
 | |
|   store i8 %arg3, i8* %tmp4
 | |
|   ret void;
 | |
| }
 | |
| 
 | |
| ; CHECK-LABEL: test_sink:
 | |
| ; CHECK:   movslq  %esi, [[TEMP:%[a-z0-9]+]]
 | |
| ; CHECK:   movb    %dl, (%rdi,[[TEMP]])
 | |
| ; CHECK:   retq
 |