1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s --check-prefix=LA32
4 ; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s \
5 ; RUN: | FileCheck %s --check-prefix=LA64
7 declare i16 @llvm.bitreverse.i16(i16)
8 declare i32 @llvm.bitreverse.i32(i32)
9 declare i64 @llvm.bitreverse.i64(i64)
10 declare i16 @llvm.bswap.i16(i16)
11 declare i32 @llvm.bswap.i32(i32)
12 declare i64 @llvm.bswap.i64(i64)
14 define i16 @test_bswap_bitreverse_i16(i16 %a) nounwind {
15 ; LA32-LABEL: test_bswap_bitreverse_i16:
17 ; LA32-NEXT: revb.2h $a0, $a0
18 ; LA32-NEXT: bitrev.w $a0, $a0
19 ; LA32-NEXT: srli.w $a0, $a0, 16
22 ; LA64-LABEL: test_bswap_bitreverse_i16:
24 ; LA64-NEXT: revb.2h $a0, $a0
25 ; LA64-NEXT: bitrev.d $a0, $a0
26 ; LA64-NEXT: srli.d $a0, $a0, 48
28 %tmp = call i16 @llvm.bswap.i16(i16 %a)
29 %tmp2 = call i16 @llvm.bitreverse.i16(i16 %tmp)
33 define i32 @test_bswap_bitreverse_i32(i32 %a) nounwind {
34 ; LA32-LABEL: test_bswap_bitreverse_i32:
36 ; LA32-NEXT: bitrev.4b $a0, $a0
39 ; LA64-LABEL: test_bswap_bitreverse_i32:
41 ; LA64-NEXT: bitrev.4b $a0, $a0
43 %tmp = call i32 @llvm.bswap.i32(i32 %a)
44 %tmp2 = call i32 @llvm.bitreverse.i32(i32 %tmp)
48 define i64 @test_bswap_bitreverse_i64(i64 %a) nounwind {
49 ; LA32-LABEL: test_bswap_bitreverse_i64:
51 ; LA32-NEXT: bitrev.4b $a0, $a0
52 ; LA32-NEXT: bitrev.4b $a1, $a1
55 ; LA64-LABEL: test_bswap_bitreverse_i64:
57 ; LA64-NEXT: bitrev.8b $a0, $a0
59 %tmp = call i64 @llvm.bswap.i64(i64 %a)
60 %tmp2 = call i64 @llvm.bitreverse.i64(i64 %tmp)
64 define i16 @test_bitreverse_bswap_i16(i16 %a) nounwind {
65 ; LA32-LABEL: test_bitreverse_bswap_i16:
67 ; LA32-NEXT: revb.2h $a0, $a0
68 ; LA32-NEXT: bitrev.w $a0, $a0
69 ; LA32-NEXT: srli.w $a0, $a0, 16
72 ; LA64-LABEL: test_bitreverse_bswap_i16:
74 ; LA64-NEXT: revb.2h $a0, $a0
75 ; LA64-NEXT: bitrev.d $a0, $a0
76 ; LA64-NEXT: srli.d $a0, $a0, 48
78 %tmp = call i16 @llvm.bitreverse.i16(i16 %a)
79 %tmp2 = call i16 @llvm.bswap.i16(i16 %tmp)
83 define i32 @test_bitreverse_bswap_i32(i32 %a) nounwind {
84 ; LA32-LABEL: test_bitreverse_bswap_i32:
86 ; LA32-NEXT: bitrev.4b $a0, $a0
89 ; LA64-LABEL: test_bitreverse_bswap_i32:
91 ; LA64-NEXT: bitrev.4b $a0, $a0
93 %tmp = call i32 @llvm.bitreverse.i32(i32 %a)
94 %tmp2 = call i32 @llvm.bswap.i32(i32 %tmp)
98 define i64 @test_bitreverse_bswap_i64(i64 %a) nounwind {
99 ; LA32-LABEL: test_bitreverse_bswap_i64:
101 ; LA32-NEXT: bitrev.4b $a0, $a0
102 ; LA32-NEXT: bitrev.4b $a1, $a1
105 ; LA64-LABEL: test_bitreverse_bswap_i64:
107 ; LA64-NEXT: bitrev.8b $a0, $a0
109 %tmp = call i64 @llvm.bitreverse.i64(i64 %a)
110 %tmp2 = call i64 @llvm.bswap.i64(i64 %tmp)
114 define i32 @pr55484(i32 %0) {
115 ; LA32-LABEL: pr55484:
117 ; LA32-NEXT: srli.w $a1, $a0, 8
118 ; LA32-NEXT: slli.w $a0, $a0, 8
119 ; LA32-NEXT: or $a0, $a1, $a0
120 ; LA32-NEXT: ext.w.h $a0, $a0
123 ; LA64-LABEL: pr55484:
125 ; LA64-NEXT: srli.d $a1, $a0, 8
126 ; LA64-NEXT: slli.d $a0, $a0, 8
127 ; LA64-NEXT: or $a0, $a1, $a0
128 ; LA64-NEXT: ext.w.h $a0, $a0
133 %5 = trunc i32 %4 to i16
134 %6 = sext i16 %5 to i32