mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	when run on an Intel Atom processor. The failures have arisen due to changes elsewhere in the trunk over the past 8 weeks or so. These failures were not detected by the Atom buildbot because the CPU on the Atom buildbot was not being detected as an Atom CPU. The fix for this problem is in Host.cpp and X86Subtarget.cpp, but shall remain commented out until the current set of Atom test failures are fixed. Patch by Andy Zhang and Tyler Nowicki! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160451 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			66 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
| ; RUN: llc < %s -march=x86 -mtriple=i386-apple-darwin9 -mcpu=generic -regalloc=fast -optimize-regalloc=0 | FileCheck %s
 | |
| ; RUN: llc -O0 < %s -march=x86 -mtriple=i386-apple-darwin9 -mcpu=generic -regalloc=fast | FileCheck %s
 | |
| ; RUN: llc < %s -march=x86 -mtriple=i386-apple-darwin9 -mcpu=atom -regalloc=fast -optimize-regalloc=0 | FileCheck -check-prefix=ATOM %s
 | |
| ; CHECKed instructions should be the same with or without -O0 except on Intel Atom due to instruction scheduling.
 | |
| 
 | |
| @.str = private constant [12 x i8] c"x + y = %i\0A\00", align 1 ; <[12 x i8]*> [#uses=1]
 | |
| 
 | |
| define i32 @main() nounwind {
 | |
| entry:
 | |
| ; CHECK: movl 24(%esp), %eax
 | |
| ; CHECK-NOT: movl
 | |
| ; CHECK: movl	%eax, 36(%esp)
 | |
| ; CHECK-NOT: movl
 | |
| ; CHECK: movl 28(%esp), %ebx
 | |
| ; CHECK-NOT: movl
 | |
| ; CHECK: movl	%ebx, 40(%esp)
 | |
| ; CHECK-NOT: movl
 | |
| ; CHECK: addl %ebx, %eax
 | |
| 
 | |
| ; On Intel Atom the scheduler moves a movl instruction
 | |
| ; used for the printf call to follow movl 24(%esp), %eax
 | |
| ; ATOM: movl 24(%esp), %eax
 | |
| ; ATOM: movl
 | |
| ; ATOM: movl   %eax, 36(%esp)
 | |
| ; ATOM-NOT: movl
 | |
| ; ATOM: movl 28(%esp), %ebx
 | |
| ; ATOM-NOT: movl
 | |
| ; ATOM: movl   %ebx, 40(%esp)
 | |
| ; ATOM-NOT: movl
 | |
| ; ATOM: addl %ebx, %eax
 | |
| 
 | |
|   %retval = alloca i32                            ; <i32*> [#uses=2]
 | |
|   %"%ebx" = alloca i32                            ; <i32*> [#uses=1]
 | |
|   %"%eax" = alloca i32                            ; <i32*> [#uses=2]
 | |
|   %result = alloca i32                            ; <i32*> [#uses=2]
 | |
|   %y = alloca i32                                 ; <i32*> [#uses=2]
 | |
|   %x = alloca i32                                 ; <i32*> [#uses=2]
 | |
|   %0 = alloca i32                                 ; <i32*> [#uses=2]
 | |
|   %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
 | |
|   store i32 1, i32* %x, align 4
 | |
|   store i32 2, i32* %y, align 4
 | |
|   call void asm sideeffect alignstack "# top of block", "~{dirflag},~{fpsr},~{flags},~{edi},~{esi},~{edx},~{ecx},~{eax}"() nounwind
 | |
|   %asmtmp = call i32 asm sideeffect alignstack "movl $1, $0", "=={eax},*m,~{dirflag},~{fpsr},~{flags},~{memory}"(i32* %x) nounwind ; <i32> [#uses=1]
 | |
|   store i32 %asmtmp, i32* %"%eax"
 | |
|   %asmtmp1 = call i32 asm sideeffect alignstack "movl $1, $0", "=={ebx},*m,~{dirflag},~{fpsr},~{flags},~{memory}"(i32* %y) nounwind ; <i32> [#uses=1]
 | |
|   store i32 %asmtmp1, i32* %"%ebx"
 | |
|   %1 = call i32 asm "", "={bx}"() nounwind        ; <i32> [#uses=1]
 | |
|   %2 = call i32 asm "", "={ax}"() nounwind        ; <i32> [#uses=1]
 | |
|   %asmtmp2 = call i32 asm sideeffect alignstack "addl $1, $0", "=={eax},{ebx},{eax},~{dirflag},~{fpsr},~{flags},~{memory}"(i32 %1, i32 %2) nounwind ; <i32> [#uses=1]
 | |
|   store i32 %asmtmp2, i32* %"%eax"
 | |
|   %3 = call i32 asm "", "={ax}"() nounwind        ; <i32> [#uses=1]
 | |
|   call void asm sideeffect alignstack "movl $0, $1", "{eax},*m,~{dirflag},~{fpsr},~{flags},~{memory}"(i32 %3, i32* %result) nounwind
 | |
|   %4 = load i32* %result, align 4                 ; <i32> [#uses=1]
 | |
|   %5 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.str, i32 0, i32 0), i32 %4) nounwind ; <i32> [#uses=0]
 | |
|   store i32 0, i32* %0, align 4
 | |
|   %6 = load i32* %0, align 4                      ; <i32> [#uses=1]
 | |
|   store i32 %6, i32* %retval, align 4
 | |
|   br label %return
 | |
| 
 | |
| return:                                           ; preds = %entry
 | |
|   %retval3 = load i32* %retval                    ; <i32> [#uses=1]
 | |
|   ret i32 %retval3
 | |
| }
 | |
| 
 | |
| declare i32 @printf(i8*, ...) nounwind
 |