| ; 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 |
| } |