1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi | FileCheck %s
4 ; Check if sqshl/uqshl with constant shift amount can be selected.
5 define i64 @test_vqshld_s64_i(i64 %a) {
6 ; CHECK-LABEL: test_vqshld_s64_i:
8 ; CHECK-NEXT: fmov d0, x0
9 ; CHECK-NEXT: sqshl d0, d0, #36
10 ; CHECK-NEXT: fmov x0, d0
12 %1 = tail call i64 @llvm.aarch64.neon.sqshl.i64(i64 %a, i64 36)
16 define i64 @test_vqshld_u64_i(i64 %a) {
17 ; CHECK-LABEL: test_vqshld_u64_i:
19 ; CHECK-NEXT: fmov d0, x0
20 ; CHECK-NEXT: uqshl d0, d0, #36
21 ; CHECK-NEXT: fmov x0, d0
23 %1 = tail call i64 @llvm.aarch64.neon.uqshl.i64(i64 %a, i64 36)
27 define i32 @test_vqshld_s32_i(i32 %a) {
28 ; CHECK-LABEL: test_vqshld_s32_i:
30 ; CHECK-NEXT: fmov s0, w0
31 ; CHECK-NEXT: sqshl s0, s0, #16
32 ; CHECK-NEXT: fmov w0, s0
34 %1 = tail call i32 @llvm.aarch64.neon.sqshl.i32(i32 %a, i32 16)
38 define i32 @test_vqshld_u32_i(i32 %a) {
39 ; CHECK-LABEL: test_vqshld_u32_i:
41 ; CHECK-NEXT: fmov s0, w0
42 ; CHECK-NEXT: uqshl s0, s0, #16
43 ; CHECK-NEXT: fmov w0, s0
45 %1 = tail call i32 @llvm.aarch64.neon.uqshl.i32(i32 %a, i32 16)
49 declare i64 @llvm.aarch64.neon.uqshl.i64(i64, i64)
50 declare i64 @llvm.aarch64.neon.sqshl.i64(i64, i64)
52 declare i32 @llvm.aarch64.neon.uqshl.i32(i32, i32)
53 declare i32 @llvm.aarch64.neon.sqshl.i32(i32, i32)