diff options
Diffstat (limited to 'test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll')
-rw-r--r-- | test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll b/test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll index e97e38743e..900abe55cd 100644 --- a/test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll +++ b/test/CodeGen/X86/2006-05-08-CoalesceSubRegClass.ll @@ -1,23 +1,25 @@ ; Coalescing from R32 to a subset R32_. Once another register coalescer bug is ; fixed, the movb should go away as well. -; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -relocation-model=static | \ +; RUN: llvm-as < %s | llc -march=x86 -relocation-model=static | \ ; RUN: grep movl -%B = external global uint -%C = external global ushort* +@B = external global i32 ; <i32*> [#uses=2] +@C = external global i16* ; <i16**> [#uses=2] -void %test(uint %A) { - %A = cast uint %A to ubyte - %tmp2 = load uint* %B - %tmp3 = and ubyte %A, 16 - %tmp4 = shl uint %tmp2, ubyte %tmp3 - store uint %tmp4, uint* %B - %tmp6 = shr uint %A, ubyte 3 - %tmp = load ushort** %C - %tmp8 = cast ushort* %tmp to uint - %tmp9 = add uint %tmp8, %tmp6 - %tmp9 = cast uint %tmp9 to ushort* - store ushort* %tmp9, ushort** %C +define void @test(i32 %A) { + %A.upgrd.1 = trunc i32 %A to i8 ; <i8> [#uses=1] + %tmp2 = load i32* @B ; <i32> [#uses=1] + %tmp3 = and i8 %A.upgrd.1, 16 ; <i8> [#uses=1] + %shift.upgrd.2 = zext i8 %tmp3 to i32 ; <i32> [#uses=1] + %tmp4 = shl i32 %tmp2, %shift.upgrd.2 ; <i32> [#uses=1] + store i32 %tmp4, i32* @B + %tmp6 = lshr i32 %A, 3 ; <i32> [#uses=1] + %tmp = load i16** @C ; <i16*> [#uses=1] + %tmp8 = ptrtoint i16* %tmp to i32 ; <i32> [#uses=1] + %tmp9 = add i32 %tmp8, %tmp6 ; <i32> [#uses=1] + %tmp9.upgrd.3 = inttoptr i32 %tmp9 to i16* ; <i16*> [#uses=1] + store i16* %tmp9.upgrd.3, i16** @C ret void } + |