diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:25:18 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:25:18 +0000 |
commit | ca089b24d48ef6fa8da2d0bb8c25bb802c4a95c0 (patch) | |
tree | 3a28a772df9b17aef34f49e3c727965ad28c0c93 /test/CodeGen/X86/shift-folding.ll | |
parent | 9df3605dea17e84f8183581f6103bd0c79e2a606 (diff) |
Notes
Diffstat (limited to 'test/CodeGen/X86/shift-folding.ll')
-rw-r--r-- | test/CodeGen/X86/shift-folding.ll | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/test/CodeGen/X86/shift-folding.ll b/test/CodeGen/X86/shift-folding.ll index 698878708977..76cf4a41a6cb 100644 --- a/test/CodeGen/X86/shift-folding.ll +++ b/test/CodeGen/X86/shift-folding.ll @@ -1,12 +1,13 @@ -; RUN: llc < %s -march=x86 -verify-coalescing | FileCheck %s +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=i686-unknown-unknown -verify-coalescing | FileCheck %s define i32* @test1(i32* %P, i32 %X) { ; CHECK-LABEL: test1: -; CHECK-NOT: shrl -; CHECK-NOT: shll -; CHECK: ret - -entry: +; CHECK: # BB#0: +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: andl $-4, %eax +; CHECK-NEXT: addl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: retl %Y = lshr i32 %X, 2 %gep.upgrd.1 = zext i32 %Y to i64 %P2 = getelementptr i32, i32* %P, i64 %gep.upgrd.1 @@ -15,11 +16,11 @@ entry: define i32* @test2(i32* %P, i32 %X) { ; CHECK-LABEL: test2: -; CHECK: shll $4 -; CHECK-NOT: shll -; CHECK: ret - -entry: +; CHECK: # BB#0: +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: shll $4, %eax +; CHECK-NEXT: addl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: retl %Y = shl i32 %X, 2 %gep.upgrd.2 = zext i32 %Y to i64 %P2 = getelementptr i32, i32* %P, i64 %gep.upgrd.2 @@ -28,11 +29,11 @@ entry: define i32* @test3(i32* %P, i32 %X) { ; CHECK-LABEL: test3: -; CHECK-NOT: shrl -; CHECK-NOT: shll -; CHECK: ret - -entry: +; CHECK: # BB#0: +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: andl $-4, %eax +; CHECK-NEXT: addl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: retl %Y = ashr i32 %X, 2 %P2 = getelementptr i32, i32* %P, i32 %Y ret i32* %P2 @@ -40,25 +41,27 @@ entry: define fastcc i32 @test4(i32* %d) { ; CHECK-LABEL: test4: -; CHECK-NOT: shrl -; CHECK: ret - -entry: +; CHECK: # BB#0: +; CHECK-NEXT: movzbl 3(%ecx), %eax +; CHECK-NEXT: retl %tmp4 = load i32, i32* %d %tmp512 = lshr i32 %tmp4, 24 ret i32 %tmp512 } -define i64 @test5(i16 %i, i32* %arr) { ; Ensure that we don't fold away shifts which have multiple uses, as they are ; just re-introduced for the second use. -; CHECK-LABEL: test5: -; CHECK-NOT: shrl -; CHECK: shrl $11 -; CHECK-NOT: shrl -; CHECK: ret -entry: +define i64 @test5(i16 %i, i32* %arr) { +; CHECK-LABEL: test5: +; CHECK: # BB#0: +; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %eax +; CHECK-NEXT: shrl $11, %eax +; CHECK-NEXT: xorl %edx, %edx +; CHECK-NEXT: addl (%ecx,%eax,4), %eax +; CHECK-NEXT: setb %dl +; CHECK-NEXT: retl %i.zext = zext i16 %i to i32 %index = lshr i32 %i.zext, 11 %index.zext = zext i32 %index to i64 |