summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAdam Nemet <anemet@apple.com>2014-03-12 21:20:55 +0000
committerAdam Nemet <anemet@apple.com>2014-03-12 21:20:55 +0000
commita65ca9dcf0a7e4889a3130fa83e5e3045893a27b (patch)
treee0b2557dbcb104581d06b055c6c7cae89216bcce /test
parent9367c49f5de071784c732bbafeb66bf6a56c040f (diff)
downloadllvm-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.ll8
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