diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/clear-lowbits.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/clear-lowbits.ll | 106 |
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 |