1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -csky-no-aliases -mattr=+e2 -mattr=+2e3 < %s -mtriple=csky | FileCheck %s 3 4define i32 @ctlz_0(i32 %x) { 5; CHECK-LABEL: ctlz_0: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: ff1.32 a0, a0 8; CHECK-NEXT: rts16 9entry: 10 %nlz = call i32 @llvm.ctlz.i32(i32 %x, i1 0) 11 ret i32 %nlz 12} 13 14define i32 @ctlz_1(i32 %x) { 15; CHECK-LABEL: ctlz_1: 16; CHECK: # %bb.0: # %entry 17; CHECK-NEXT: ff1.32 a0, a0 18; CHECK-NEXT: rts16 19entry: 20 %nlz = call i32 @llvm.ctlz.i32(i32 %x, i1 1) 21 ret i32 %nlz 22} 23 24define i32 @cttz_0(i32 %x) { 25; CHECK-LABEL: cttz_0: 26; CHECK: # %bb.0: # %entry 27; CHECK-NEXT: brev32 a0, a0 28; CHECK-NEXT: ff1.32 a0, a0 29; CHECK-NEXT: rts16 30entry: 31 %ntz = call i32 @llvm.cttz.i32(i32 %x, i1 0) 32 ret i32 %ntz 33} 34 35define i32 @cttz_1(i32 %x) { 36; CHECK-LABEL: cttz_1: 37; CHECK: # %bb.0: # %entry 38; CHECK-NEXT: brev32 a0, a0 39; CHECK-NEXT: ff1.32 a0, a0 40; CHECK-NEXT: rts16 41entry: 42 %ntz = call i32 @llvm.cttz.i32(i32 %x, i1 1) 43 ret i32 %ntz 44} 45 46define i32 @bswap(i32 %x) { 47; CHECK-LABEL: bswap: 48; CHECK: # %bb.0: # %entry 49; CHECK-NEXT: revb16 a0, a0 50; CHECK-NEXT: rts16 51entry: 52 %revb32 = call i32 @llvm.bswap.i32(i32 %x) 53 ret i32 %revb32 54} 55 56define i16 @bswap16(i16 %x) { 57; CHECK-LABEL: bswap16: 58; CHECK: # %bb.0: # %entry 59; CHECK-NEXT: revb16 a0, a0 60; CHECK-NEXT: lsri16 a0, a0, 16 61; CHECK-NEXT: rts16 62entry: 63 %revb16 = call i16 @llvm.bswap.i16(i16 %x) 64 ret i16 %revb16 65} 66 67define i32 @bitreverse_32(i32 %x) { 68; CHECK-LABEL: bitreverse_32: 69; CHECK: # %bb.0: # %entry 70; CHECK-NEXT: brev32 a0, a0 71; CHECK-NEXT: rts16 72entry: 73 %brev32 = call i32 @llvm.bitreverse.i32(i32 %x) 74 ret i32 %brev32 75} 76 77define i16 @bitreverse_16(i16 %x) { 78; CHECK-LABEL: bitreverse_16: 79; CHECK: # %bb.0: # %entry 80; CHECK-NEXT: brev32 a0, a0 81; CHECK-NEXT: lsri16 a0, a0, 16 82; CHECK-NEXT: rts16 83entry: 84 %brev = call i16 @llvm.bitreverse.i16(i16 %x) 85 ret i16 %brev 86} 87 88declare i32 @llvm.bswap.i32(i32) 89declare i16 @llvm.bswap.i16(i16) 90declare i32 @llvm.ctlz.i32 (i32, i1) 91declare i32 @llvm.cttz.i32 (i32, i1) 92declare i32 @llvm.bitreverse.i32(i32) 93declare i16 @llvm.bitreverse.i16(i16) 94