diff --git a/llvm/test/CodeGen/LoongArch/ir-instruction/and.ll b/llvm/test/CodeGen/LoongArch/ir-instruction/and.ll --- a/llvm/test/CodeGen/LoongArch/ir-instruction/and.ll +++ b/llvm/test/CodeGen/LoongArch/ir-instruction/and.ll @@ -425,6 +425,25 @@ ret i64 %i } +;; TODO: this can be codegened to bstrins.[wd] $a0, $zero, 23, 16. +define i64 @and_i64_0xffffffffff00ffff(i64 %a) { +; LA32-LABEL: and_i64_0xffffffffff00ffff: +; LA32: # %bb.0: +; LA32-NEXT: lu12i.w $a2, -4081 +; LA32-NEXT: ori $a2, $a2, 4095 +; LA32-NEXT: and $a0, $a0, $a2 +; LA32-NEXT: ret +; +; LA64-LABEL: and_i64_0xffffffffff00ffff: +; LA64: # %bb.0: +; LA64-NEXT: lu12i.w $a1, -4081 +; LA64-NEXT: ori $a1, $a1, 4095 +; LA64-NEXT: and $a0, $a0, $a1 +; LA64-NEXT: ret + %b = and i64 %a, 18446744073692839935 + ret i64 %b +} + define i32 @and_add_lsr(i32 %x, i32 %y) { ; LA32-LABEL: and_add_lsr: ; LA32: # %bb.0: