; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple=xtensa -verify-machineinstrs < %s \ ; RUN: | FileCheck %s define i32 @lshl(i32 %x, i32 %y) nounwind { ; CHECK-LABEL: lshl: ; CHECK: ssl a3 ; CHECK-NEXT: sll a2, a2 ; CHECK-NEXT: ret %c = shl i32 %x, %y ret i32 %c } define i32 @lshl_imm_1(i32 %x) nounwind { ; CHECK-LABEL: lshl_imm_1: ; CHECK: slli a2, a2, 1 ; CHECK-NEXT: ret %c = shl i32 %x, 1 ret i32 %c } define i32 @lshl_imm_10(i32 %x) nounwind { ; CHECK-LABEL: lshl_imm_10: ; CHECK: slli a2, a2, 10 ; CHECK-NEXT: ret %c = shl i32 %x, 10 ret i32 %c } define i32 @lshl_imm_31(i32 %x) nounwind { ; CHECK-LABEL: lshl_imm_31: ; CHECK: slli a2, a2, 31 ; CHECK-NEXT: ret %c = shl i32 %x, 31 ret i32 %c } define i32 @lshr(i32 %x, i32 %y) nounwind { ; CHECK-LABEL: lshr: ; CHECK: ssr a3 ; CHECK-NEXT: srl a2, a2 ; CHECK-NEXT: ret %c = lshr i32 %x, %y ret i32 %c } define i32 @lshr_imm_1(i32 %x) nounwind { ; CHECK-LABEL: lshr_imm_1: ; CHECK: srli a2, a2, 1 ; CHECK-NEXT: ret %c = lshr i32 %x, 1 ret i32 %c } define i32 @lshr_imm_15(i32 %x) nounwind { ; CHECK-LABEL: lshr_imm_15: ; CHECK: srli a2, a2, 15 ; CHECK-NEXT: ret %c = lshr i32 %x, 15 ret i32 %c } define i32 @lshr_imm_20(i32 %x) nounwind { ; CHECK-LABEL: lshr_imm_20: ; CHECK: extui a2, a2, 20, 12 ; CHECK-NEXT: ret %c = lshr i32 %x, 20 ret i32 %c } define i32 @ashr(i32 %x, i32 %y) nounwind { ; CHECK-LABEL: ashr: ; CHECK: ssr a3 ; CHECK-NEXT: sra a2, a2 ; CHECK-NEXT: ret %c = ashr i32 %x, %y ret i32 %c } define i32 @ashr_imm_1(i32 %x) nounwind { ; CHECK-LABEL: ashr_imm_1: ; CHECK: srai a2, a2, 1 ; CHECK-NEXT: ret %c = ashr i32 %x, 1 ret i32 %c } define i32 @ashr_imm_10(i32 %x) nounwind { ; CHECK-LABEL: ashr_imm_10: ; CHECK: srai a2, a2, 10 ; CHECK-NEXT: ret %c = ashr i32 %x, 10 ret i32 %c } define i32 @ashr_imm_31(i32 %x) nounwind { ; CHECK-LABEL: ashr_imm_31: ; CHECK: srai a2, a2, 31 ; CHECK-NEXT: ret %c = ashr i32 %x, 31 ret i32 %c } define i64 @lshl_64(i64 %x, i64 %y) nounwind { ; CHECK-LABEL: lshl_64: ; CHECK: ssl a4 ; CHECK-NEXT: src a3, a3, a2 ; CHECK-NEXT: addi a8, a4, -32 ; CHECK-NEXT: ssl a8 ; CHECK-NEXT: sll a10, a2 ; CHECK-NEXT: movi a9, 0 ; CHECK-NEXT: blt a8, a9, .LBB12_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: or a3, a10, a10 ; CHECK-NEXT: .LBB12_2: ; CHECK-NEXT: ssl a4 ; CHECK-NEXT: sll a2, a2 ; CHECK-NEXT: blt a8, a9, .LBB12_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: or a2, a9, a9 ; CHECK-NEXT: .LBB12_4: ; CHECK-NEXT: ret %c = shl i64 %x, %y ret i64 %c } define i64 @lshr_64(i64 %x, i64 %y) nounwind { ; CHECK-LABEL: lshr_64: ; CHECK: ssr a4 ; CHECK-NEXT: src a2, a3, a2 ; CHECK-NEXT: addi a8, a4, -32 ; CHECK-NEXT: ssr a8 ; CHECK-NEXT: srl a10, a3 ; CHECK-NEXT: movi a9, 0 ; CHECK-NEXT: blt a8, a9, .LBB13_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: or a2, a10, a10 ; CHECK-NEXT: .LBB13_2: ; CHECK-NEXT: ssr a4 ; CHECK-NEXT: srl a3, a3 ; CHECK-NEXT: blt a8, a9, .LBB13_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: or a3, a9, a9 ; CHECK-NEXT: .LBB13_4: ; CHECK-NEXT: ret %c = lshr i64 %x, %y ret i64 %c } define i64 @ashr_64(i64 %x, i64 %y) nounwind { ; CHECK-LABEL: ashr_64: ; CHECK: ssr a4 ; CHECK-NEXT: src a2, a3, a2 ; CHECK-NEXT: addi a9, a4, -32 ; CHECK-NEXT: ssr a9 ; CHECK-NEXT: sra a8, a3 ; CHECK-NEXT: movi a10, 0 ; CHECK-NEXT: blt a9, a10, .LBB14_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: or a2, a8, a8 ; CHECK-NEXT: .LBB14_2: ; CHECK-NEXT: ssr a4 ; CHECK-NEXT: sra a8, a3 ; CHECK-NEXT: blt a9, a10, .LBB14_4 ; CHECK-NEXT: # %bb.3: ; CHECK-NEXT: srai a8, a3, 31 ; CHECK-NEXT: .LBB14_4: ; CHECK-NEXT: or a3, a8, a8 ; CHECK-NEXT: ret %c = ashr i64 %x, %y ret i64 %c }