summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/X86/X86InstrCompiler.td2
-rw-r--r--test/CodeGen/X86/rotate4.ll8
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrCompiler.td b/lib/Target/X86/X86InstrCompiler.td
index 370e4d875c..401849f40e 100644
--- a/lib/Target/X86/X86InstrCompiler.td
+++ b/lib/Target/X86/X86InstrCompiler.td
@@ -1556,6 +1556,8 @@ multiclass MaskedShiftAmountPats<SDNode frag, string name> {
defm : MaskedShiftAmountPats<shl, "SHL">;
defm : MaskedShiftAmountPats<srl, "SHR">;
defm : MaskedShiftAmountPats<sra, "SAR">;
+defm : MaskedShiftAmountPats<rotl, "ROL">;
+defm : MaskedShiftAmountPats<rotr, "ROR">;
// (anyext (setcc_carry)) -> (setcc_carry)
def : Pat<(i16 (anyext (i8 (X86setcc_c X86_COND_B, EFLAGS)))),
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