; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-none-linux-gnu < %s -o -| FileCheck %s define i32 @lsr_bfi(i32 %a) { ; CHECK-LABEL: lsr_bfi: ; CHECK: // %bb.0: ; CHECK-NEXT: lsr w8, w0, #20 ; CHECK-NEXT: bfi w0, w8, #4, #4 ; CHECK-NEXT: ret %and1 = and i32 %a, -241 %1 = lshr i32 %a, 16 %shl = and i32 %1, 240 %or = or i32 %shl, %and1 ret i32 %or } define i32 @negative_lsr_bfi0(i32 %a) { ; CHECK-LABEL: negative_lsr_bfi0: ; CHECK: // %bb.0: ; CHECK-NEXT: and w0, w0, #0xffffff0f ; CHECK-NEXT: ret %and1 = and i32 %a, -241 %1 = lshr i32 %a, 28 %shl = and i32 %1, 240 %or = or i32 %shl, %and1 ret i32 %or } define i32 @negative_lsr_bfi1(i32 %a) { ; CHECK-LABEL: negative_lsr_bfi1: ; CHECK: // %bb.0: ; CHECK-NEXT: lsr w8, w0, #16 ; CHECK-NEXT: lsr w9, w8, #4 ; CHECK-NEXT: bfi w0, w9, #4, #4 ; CHECK-NEXT: add w0, w0, w8 ; CHECK-NEXT: ret %and1 = and i32 %a, -241 %1 = lshr i32 %a, 16 %shl = and i32 %1, 240 %or = or i32 %shl, %and1 %add = add i32 %or, %1 ret i32 %add } define i64 @lsr_bfix(i64 %a) { ; CHECK-LABEL: lsr_bfix: ; CHECK: // %bb.0: ; CHECK-NEXT: lsr x8, x0, #20 ; CHECK-NEXT: bfi x0, x8, #4, #4 ; CHECK-NEXT: ret %and1 = and i64 %a, -241 %1 = lshr i64 %a, 16 %shl = and i64 %1, 240 %or = or i64 %shl, %and1 ret i64 %or } define i64 @negative_lsr_bfix0(i64 %a) { ; CHECK-LABEL: negative_lsr_bfix0: ; CHECK: // %bb.0: ; CHECK-NEXT: and x0, x0, #0xffffffffffffff0f ; CHECK-NEXT: ret %and1 = and i64 %a, -241 %1 = lshr i64 %a, 60 %shl = and i64 %1, 240 %or = or i64 %shl, %and1 ret i64 %or } define i64 @negative_lsr_bfix1(i64 %a) { ; CHECK-LABEL: negative_lsr_bfix1: ; CHECK: // %bb.0: ; CHECK-NEXT: lsr x8, x0, #16 ; CHECK-NEXT: lsr x9, x8, #4 ; CHECK-NEXT: bfi x0, x9, #4, #4 ; CHECK-NEXT: add x0, x0, x8 ; CHECK-NEXT: ret %and1 = and i64 %a, -241 %1 = lshr i64 %a, 16 %shl = and i64 %1, 240 %or = or i64 %shl, %and1 %add = add i64 %or, %1 ret i64 %add }