1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 00:12:50 +01:00
llvm-mirror/test/CodeGen/X86/2006-11-28-Memcpy.ll
Chris Lattner 0b34068b2b change selectiondag to add the sign extended versions of immediate operands
to instructions instead of zero extended ones.  This makes the asmprinter
print signed values more consistently.  This apparently only really affects
the X86 backend.

llvm-svn: 81265
2009-09-08 23:05:44 +00:00

35 lines
1.5 KiB
LLVM

; PR1022, PR1023
; RUN: llc < %s -march=x86 | grep -- -573785174 | count 2
; RUN: llc < %s -march=x86 | grep -E {movl _?bytes2} | count 1
@fmt = constant [4 x i8] c"%x\0A\00" ; <[4 x i8]*> [#uses=2]
@bytes = constant [4 x i8] c"\AA\BB\CC\DD" ; <[4 x i8]*> [#uses=1]
@bytes2 = global [4 x i8] c"\AA\BB\CC\DD" ; <[4 x i8]*> [#uses=1]
define i32 @test1() nounwind {
%y = alloca i32 ; <i32*> [#uses=2]
%c = bitcast i32* %y to i8* ; <i8*> [#uses=1]
%z = getelementptr [4 x i8]* @bytes, i32 0, i32 0 ; <i8*> [#uses=1]
call void @llvm.memcpy.i32( i8* %c, i8* %z, i32 4, i32 1 )
%r = load i32* %y ; <i32> [#uses=1]
%t = bitcast [4 x i8]* @fmt to i8* ; <i8*> [#uses=1]
%tmp = call i32 (i8*, ...)* @printf( i8* %t, i32 %r ) ; <i32> [#uses=0]
ret i32 0
}
define void @test2() nounwind {
%y = alloca i32 ; <i32*> [#uses=2]
%c = bitcast i32* %y to i8* ; <i8*> [#uses=1]
%z = getelementptr [4 x i8]* @bytes2, i32 0, i32 0 ; <i8*> [#uses=1]
call void @llvm.memcpy.i32( i8* %c, i8* %z, i32 4, i32 1 )
%r = load i32* %y ; <i32> [#uses=1]
%t = bitcast [4 x i8]* @fmt to i8* ; <i8*> [#uses=1]
%tmp = call i32 (i8*, ...)* @printf( i8* %t, i32 %r ) ; <i32> [#uses=0]
ret void
}
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
declare i32 @printf(i8*, ...)