diff options
-rw-r--r-- | llvm/test/CodeGen/X86/bmi.ll | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/bmi.ll b/llvm/test/CodeGen/X86/bmi.ll index 6b614411236..ad436435af2 100644 --- a/llvm/test/CodeGen/X86/bmi.ll +++ b/llvm/test/CodeGen/X86/bmi.ll @@ -822,3 +822,16 @@ define i64 @blsr_disguised_constant(i64 %x) { ret i64 %r } +; The add here gets shrunk, but the and does not thus hiding the blsr pattern. +define i64 @blsr_disguised_shrunk_add(i64 %x) { +; CHECK-LABEL: blsr_disguised_shrunk_add: +; CHECK: # %bb.0: +; CHECK-NEXT: shrq $48, %rdi +; CHECK-NEXT: leal -1(%rdi), %eax +; CHECK-NEXT: andq %rdi, %rax +; CHECK-NEXT: retq + %a = lshr i64 %x, 48 + %b = add i64 %a, -1 + %c = and i64 %b, %a + ret i64 %c +} |