diff options
author | Adam Nemet <anemet@apple.com> | 2014-03-12 21:20:55 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2014-03-12 21:20:55 +0000 |
commit | a65ca9dcf0a7e4889a3130fa83e5e3045893a27b (patch) | |
tree | e0b2557dbcb104581d06b055c6c7cae89216bcce /test | |
parent | 9367c49f5de071784c732bbafeb66bf6a56c040f (diff) | |
download | llvm-a65ca9dcf0a7e4889a3130fa83e5e3045893a27b.tar.gz llvm-a65ca9dcf0a7e4889a3130fa83e5e3045893a27b.tar.bz2 llvm-a65ca9dcf0a7e4889a3130fa83e5e3045893a27b.tar.xz |
[X86] Add peephole for masked rotate amount
Extend what's currently done for shift because the HW performs this masking
implicitly:
(rotl:i32 x, (and y, 31)) -> (rotl:i32 x, y)
I use the newly factored out multiclass that was only supporting shifts so
far.
For testing I extended my testcase for the new rotation idiom.
<rdar://problem/15295856>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203718 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/rotate4.ll | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/test/CodeGen/X86/rotate4.ll b/test/CodeGen/X86/rotate4.ll index b549a9bd93..5372612aea 100644 --- a/test/CodeGen/X86/rotate4.ll +++ b/test/CodeGen/X86/rotate4.ll @@ -5,6 +5,7 @@ define i32 @rotate_left_32(i32 %a, i32 %b) { ; CHECK-LABEL: rotate_left_32: +; CHECK-NOT: and ; CHECK: roll entry: %and = and i32 %b, 31 @@ -18,6 +19,7 @@ entry: define i32 @rotate_right_32(i32 %a, i32 %b) { ; CHECK-LABEL: rotate_right_32: +; CHECK-NOT: and ; CHECK: rorl entry: %and = and i32 %b, 31 @@ -31,6 +33,7 @@ entry: define i64 @rotate_left_64(i64 %a, i64 %b) { ; CHECK-LABEL: rotate_left_64: +; CHECK-NOT: and ; CHECK: rolq entry: %and = and i64 %b, 63 @@ -44,6 +47,7 @@ entry: define i64 @rotate_right_64(i64 %a, i64 %b) { ; CHECK-LABEL: rotate_right_64: +; CHECK-NOT: and ; CHECK: rorq entry: %and = and i64 %b, 63 @@ -59,6 +63,7 @@ entry: define void @rotate_left_m32(i32 *%pa, i32 %b) { ; CHECK-LABEL: rotate_left_m32: +; CHECK-NOT: and ; CHECK: roll ; no store: ; CHECK-NOT: mov @@ -76,6 +81,7 @@ entry: define void @rotate_right_m32(i32 *%pa, i32 %b) { ; CHECK-LABEL: rotate_right_m32: +; CHECK-NOT: and ; CHECK: rorl ; no store: ; CHECK-NOT: mov @@ -93,6 +99,7 @@ entry: define void @rotate_left_m64(i64 *%pa, i64 %b) { ; CHECK-LABEL: rotate_left_m64: +; CHECK-NOT: and ; CHECK: rolq ; no store: ; CHECK-NOT: mov @@ -110,6 +117,7 @@ entry: define void @rotate_right_m64(i64 *%pa, i64 %b) { ; CHECK-LABEL: rotate_right_m64: +; CHECK-NOT: and ; CHECK: rorq ; no store: ; CHECK-NOT: mov |