summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/clear-lowbits.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/clear-lowbits.ll')
-rw-r--r--llvm/test/CodeGen/X86/clear-lowbits.ll106
1 files changed, 56 insertions, 50 deletions
diff --git a/llvm/test/CodeGen/X86/clear-lowbits.ll b/llvm/test/CodeGen/X86/clear-lowbits.ll
index bd77459a66b..f29717e630f 100644
--- a/llvm/test/CodeGen/X86/clear-lowbits.ll
+++ b/llvm/test/CodeGen/X86/clear-lowbits.ll
@@ -35,10 +35,11 @@ define i8 @clear_lowbits8_c0(i8 %val, i8 %numlowbits) nounwind {
; X64-LABEL: clear_lowbits8_c0:
; X64: # %bb.0:
; X64-NEXT: movl %esi, %ecx
-; X64-NEXT: shrb %cl, %dil
-; X64-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NEXT: shlb %cl, %dil
; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shrb %cl, %al
+; X64-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NEXT: shlb %cl, %al
+; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: retq
%mask = shl i8 -1, %numlowbits
%masked = and i8 %mask, %val
@@ -81,10 +82,11 @@ define i8 @clear_lowbits8_c4_commutative(i8 %val, i8 %numlowbits) nounwind {
; X64-LABEL: clear_lowbits8_c4_commutative:
; X64: # %bb.0:
; X64-NEXT: movl %esi, %ecx
-; X64-NEXT: shrb %cl, %dil
-; X64-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NEXT: shlb %cl, %dil
; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shrb %cl, %al
+; X64-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NEXT: shlb %cl, %al
+; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: retq
%mask = shl i8 -1, %numlowbits
%masked = and i8 %val, %mask ; swapped order
@@ -327,10 +329,10 @@ define i32 @clear_lowbits32_c0(i32 %val, i32 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits32_c0:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
-; X64-NOBMI2-NEXT: shrl %cl, %edi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shrl %cl, %eax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_c0:
@@ -362,10 +364,10 @@ define i32 @clear_lowbits32_c1_indexzext(i32 %val, i8 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits32_c1_indexzext:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
-; X64-NOBMI2-NEXT: shrl %cl, %edi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shrl %cl, %eax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_c1_indexzext:
@@ -475,10 +477,10 @@ define i32 @clear_lowbits32_c4_commutative(i32 %val, i32 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits32_c4_commutative:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
-; X64-NOBMI2-NEXT: shrl %cl, %edi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shrl %cl, %eax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_c4_commutative:
@@ -530,10 +532,10 @@ define i64 @clear_lowbits64_c0(i64 %val, i64 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits64_c0:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movq %rsi, %rcx
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shrq %cl, %rax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_c0:
@@ -583,10 +585,10 @@ define i64 @clear_lowbits64_c1_indexzext(i64 %val, i8 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits64_c1_indexzext:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shrq %cl, %rax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_c1_indexzext:
@@ -760,10 +762,10 @@ define i64 @clear_lowbits64_c4_commutative(i64 %val, i64 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits64_c4_commutative:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movq %rsi, %rcx
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
-; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shrq %cl, %rax
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_c4_commutative:
@@ -794,11 +796,12 @@ define i8 @clear_lowbits8_ic0(i8 %val, i8 %numlowbits) nounwind {
;
; X64-LABEL: clear_lowbits8_ic0:
; X64: # %bb.0:
+; X64-NEXT: movl %edi, %eax
; X64-NEXT: movb $8, %cl
; X64-NEXT: subb %sil, %cl
-; X64-NEXT: shrb %cl, %dil
-; X64-NEXT: shlb %cl, %dil
-; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shrb %cl, %al
+; X64-NEXT: shlb %cl, %al
+; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: retq
%numhighbits = sub i8 8, %numlowbits
%mask = shl i8 -1, %numhighbits
@@ -844,11 +847,12 @@ define i8 @clear_lowbits8_ic4_commutative(i8 %val, i8 %numlowbits) nounwind {
;
; X64-LABEL: clear_lowbits8_ic4_commutative:
; X64: # %bb.0:
+; X64-NEXT: movl %edi, %eax
; X64-NEXT: movb $8, %cl
; X64-NEXT: subb %sil, %cl
-; X64-NEXT: shrb %cl, %dil
-; X64-NEXT: shlb %cl, %dil
-; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shrb %cl, %al
+; X64-NEXT: shlb %cl, %al
+; X64-NEXT: # kill: def $al killed $al killed $eax
; X64-NEXT: retq
%numhighbits = sub i8 8, %numlowbits
%mask = shl i8 -1, %numhighbits
@@ -1126,11 +1130,11 @@ define i32 @clear_lowbits32_ic0(i32 %val, i32 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits32_ic0:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: movl %edi, %eax
; X64-NOBMI2-NEXT: negl %ecx
-; X64-NOBMI2-NEXT: shrl %cl, %edi
+; X64-NOBMI2-NEXT: shrl %cl, %eax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
-; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_ic0:
@@ -1167,11 +1171,11 @@ define i32 @clear_lowbits32_ic1_indexzext(i32 %val, i8 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits32_ic1_indexzext:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: movl %edi, %eax
; X64-NOBMI2-NEXT: negb %cl
-; X64-NOBMI2-NEXT: shrl %cl, %edi
+; X64-NOBMI2-NEXT: shrl %cl, %eax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
-; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_ic1_indexzext:
@@ -1298,11 +1302,11 @@ define i32 @clear_lowbits32_ic4_commutative(i32 %val, i32 %numlowbits) nounwind
; X64-NOBMI2-LABEL: clear_lowbits32_ic4_commutative:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: movl %edi, %eax
; X64-NOBMI2-NEXT: negl %ecx
-; X64-NOBMI2-NEXT: shrl %cl, %edi
+; X64-NOBMI2-NEXT: shrl %cl, %eax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shll %cl, %edi
-; X64-NOBMI2-NEXT: movl %edi, %eax
+; X64-NOBMI2-NEXT: shll %cl, %eax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits32_ic4_commutative:
@@ -1358,11 +1362,11 @@ define i64 @clear_lowbits64_ic0(i64 %val, i64 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits64_ic0:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movq %rsi, %rcx
+; X64-NOBMI2-NEXT: movq %rdi, %rax
; X64-NOBMI2-NEXT: negl %ecx
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
+; X64-NOBMI2-NEXT: shrq %cl, %rax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
-; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_ic0:
@@ -1416,11 +1420,11 @@ define i64 @clear_lowbits64_ic1_indexzext(i64 %val, i8 %numlowbits) nounwind {
; X64-NOBMI2-LABEL: clear_lowbits64_ic1_indexzext:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: movq %rdi, %rax
; X64-NOBMI2-NEXT: negb %cl
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
+; X64-NOBMI2-NEXT: shrq %cl, %rax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
-; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_ic1_indexzext:
@@ -1608,11 +1612,11 @@ define i64 @clear_lowbits64_ic4_commutative(i64 %val, i64 %numlowbits) nounwind
; X64-NOBMI2-LABEL: clear_lowbits64_ic4_commutative:
; X64-NOBMI2: # %bb.0:
; X64-NOBMI2-NEXT: movq %rsi, %rcx
+; X64-NOBMI2-NEXT: movq %rdi, %rax
; X64-NOBMI2-NEXT: negl %ecx
-; X64-NOBMI2-NEXT: shrq %cl, %rdi
+; X64-NOBMI2-NEXT: shrq %cl, %rax
; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
-; X64-NOBMI2-NEXT: shlq %cl, %rdi
-; X64-NOBMI2-NEXT: movq %rdi, %rax
+; X64-NOBMI2-NEXT: shlq %cl, %rax
; X64-NOBMI2-NEXT: retq
;
; X64-BMI2-LABEL: clear_lowbits64_ic4_commutative:
@@ -1670,9 +1674,10 @@ define i32 @oneuse32(i32 %val, i32 %numlowbits) nounwind {
; X64-NOBMI2-NEXT: pushq %rbp
; X64-NOBMI2-NEXT: pushq %rbx
; X64-NOBMI2-NEXT: pushq %rax
+; X64-NOBMI2-NEXT: movl %esi, %ecx
; X64-NOBMI2-NEXT: movl %edi, %ebx
; X64-NOBMI2-NEXT: movl $-1, %ebp
-; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $ecx
; X64-NOBMI2-NEXT: shll %cl, %ebp
; X64-NOBMI2-NEXT: movl %ebp, %edi
; X64-NOBMI2-NEXT: callq use32
@@ -1770,9 +1775,10 @@ define i64 @oneuse64(i64 %val, i64 %numlowbits) nounwind {
; X64-NOBMI2-NEXT: pushq %r14
; X64-NOBMI2-NEXT: pushq %rbx
; X64-NOBMI2-NEXT: pushq %rax
+; X64-NOBMI2-NEXT: movq %rsi, %rcx
; X64-NOBMI2-NEXT: movq %rdi, %r14
; X64-NOBMI2-NEXT: movq $-1, %rbx
-; X64-NOBMI2-NEXT: movl %esi, %ecx
+; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx
; X64-NOBMI2-NEXT: shlq %cl, %rbx
; X64-NOBMI2-NEXT: movq %rbx, %rdi
; X64-NOBMI2-NEXT: callq use64
OpenPOWER on IntegriCloud