brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 3b82693 Raw
173 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -o - %s -mtriple=aarch64-linux-gnu | FileCheck %s3; RUN: llc -verify-machineinstrs -o - %s -mtriple=aarch64-linux-gnu -mattr=+cssc | FileCheck %s -check-prefix=CHECK-CSSC4 5define i4 @cttz4(i4 %x) {6; CHECK-LABEL: cttz4:7; CHECK:       // %bb.0:8; CHECK-NEXT:    orr w8, w0, #0x109; CHECK-NEXT:    rbit w8, w810; CHECK-NEXT:    clz w0, w811; CHECK-NEXT:    ret12;13; CHECK-CSSC-LABEL: cttz4:14; CHECK-CSSC:       // %bb.0:15; CHECK-CSSC-NEXT:    orr w8, w0, #0x1016; CHECK-CSSC-NEXT:    ctz w0, w817; CHECK-CSSC-NEXT:    ret18  %ctz = tail call i4 @llvm.cttz.i4(i4 %x)19  ret i4 %ctz20}21 22define i8 @cttz8(i8 %x) {23; CHECK-LABEL: cttz8:24; CHECK:       // %bb.0:25; CHECK-NEXT:    orr w8, w0, #0x10026; CHECK-NEXT:    rbit w8, w827; CHECK-NEXT:    clz w0, w828; CHECK-NEXT:    ret29;30; CHECK-CSSC-LABEL: cttz8:31; CHECK-CSSC:       // %bb.0:32; CHECK-CSSC-NEXT:    orr w8, w0, #0x10033; CHECK-CSSC-NEXT:    ctz w0, w834; CHECK-CSSC-NEXT:    ret35  %ctz = tail call i8 @llvm.cttz.i8(i8 %x)36  ret i8 %ctz37}38 39define i16 @cttz16(i16 %x) {40; CHECK-LABEL: cttz16:41; CHECK:       // %bb.0:42; CHECK-NEXT:    orr w8, w0, #0x1000043; CHECK-NEXT:    rbit w8, w844; CHECK-NEXT:    clz w0, w845; CHECK-NEXT:    ret46;47; CHECK-CSSC-LABEL: cttz16:48; CHECK-CSSC:       // %bb.0:49; CHECK-CSSC-NEXT:    orr w8, w0, #0x1000050; CHECK-CSSC-NEXT:    ctz w0, w851; CHECK-CSSC-NEXT:    ret52  %ctz = tail call i16 @llvm.cttz.i16(i16 %x)53  ret i16 %ctz54}55 56define i17 @cttz17(i17 %x) {57; CHECK-LABEL: cttz17:58; CHECK:       // %bb.0:59; CHECK-NEXT:    orr w8, w0, #0x2000060; CHECK-NEXT:    rbit w8, w861; CHECK-NEXT:    clz w0, w862; CHECK-NEXT:    ret63;64; CHECK-CSSC-LABEL: cttz17:65; CHECK-CSSC:       // %bb.0:66; CHECK-CSSC-NEXT:    orr w8, w0, #0x2000067; CHECK-CSSC-NEXT:    ctz w0, w868; CHECK-CSSC-NEXT:    ret69  %ctz = tail call i17 @llvm.cttz.i17(i17 %x)70  ret i17 %ctz71}72 73define i32 @cttz32(i32 %x) nounwind readnone {74; CHECK-LABEL: cttz32:75; CHECK:       // %bb.0:76; CHECK-NEXT:    rbit w8, w077; CHECK-NEXT:    clz w0, w878; CHECK-NEXT:    ret79;80; CHECK-CSSC-LABEL: cttz32:81; CHECK-CSSC:       // %bb.0:82; CHECK-CSSC-NEXT:    ctz w0, w083; CHECK-CSSC-NEXT:    ret84  %ctz = tail call i32 @llvm.cttz.i32(i32 %x)85  ret i32 %ctz86}87 88define i64 @cttz64(i64 %x) nounwind readnone {89; CHECK-LABEL: cttz64:90; CHECK:       // %bb.0:91; CHECK-NEXT:    rbit x8, x092; CHECK-NEXT:    clz x0, x893; CHECK-NEXT:    ret94;95; CHECK-CSSC-LABEL: cttz64:96; CHECK-CSSC:       // %bb.0:97; CHECK-CSSC-NEXT:    ctz x0, x098; CHECK-CSSC-NEXT:    ret99  %ctz = tail call i64 @llvm.cttz.i64(i64 %x)100  ret i64 %ctz101}102 103define i128 @cttz128(i128 %x) nounwind readnone {104; CHECK-LABEL: cttz128:105; CHECK:       // %bb.0:106; CHECK-NEXT:    rbit x8, x1107; CHECK-NEXT:    rbit x9, x0108; CHECK-NEXT:    cmp x0, #0109; CHECK-NEXT:    mov x1, xzr110; CHECK-NEXT:    clz x8, x8111; CHECK-NEXT:    clz x9, x9112; CHECK-NEXT:    add x8, x8, #64113; CHECK-NEXT:    csel x0, x9, x8, ne114; CHECK-NEXT:    ret115;116; CHECK-CSSC-LABEL: cttz128:117; CHECK-CSSC:       // %bb.0:118; CHECK-CSSC-NEXT:    ctz x8, x1119; CHECK-CSSC-NEXT:    ctz x9, x0120; CHECK-CSSC-NEXT:    cmp x0, #0121; CHECK-CSSC-NEXT:    add x8, x8, #64122; CHECK-CSSC-NEXT:    mov x1, xzr123; CHECK-CSSC-NEXT:    csel x0, x9, x8, ne124; CHECK-CSSC-NEXT:    ret125  %ctz = tail call i128 @llvm.cttz.i128(i128 %x)126  ret i128 %ctz127}128 129define i32 @cttz32combine(i32 %x) nounwind readnone {130; CHECK-LABEL: cttz32combine:131; CHECK:       // %bb.0:132; CHECK-NEXT:    rbit w8, w0133; CHECK-NEXT:    clz w0, w8134; CHECK-NEXT:    ret135;136; CHECK-CSSC-LABEL: cttz32combine:137; CHECK-CSSC:       // %bb.0:138; CHECK-CSSC-NEXT:    ctz w0, w0139; CHECK-CSSC-NEXT:    ret140  %rev = tail call i32 @llvm.bitreverse.i32(i32 %x)141  %ctz = tail call i32 @llvm.ctlz.i32(i32 %rev)142  ret i32 %ctz143}144 145define i64 @cttz64combine(i64 %x) nounwind readnone {146; CHECK-LABEL: cttz64combine:147; CHECK:       // %bb.0:148; CHECK-NEXT:    rbit x8, x0149; CHECK-NEXT:    clz x0, x8150; CHECK-NEXT:    ret151;152; CHECK-CSSC-LABEL: cttz64combine:153; CHECK-CSSC:       // %bb.0:154; CHECK-CSSC-NEXT:    ctz x0, x0155; CHECK-CSSC-NEXT:    ret156  %rev = tail call i64 @llvm.bitreverse.i64(i64 %x)157  %ctz = tail call i64 @llvm.ctlz.i64(i64 %rev)158  ret i64 %ctz159}160 161declare i4 @llvm.cttz.i4(i4 %x) nounwind readnone162declare i8 @llvm.cttz.i8(i8 %x) nounwind readnone163declare i16 @llvm.cttz.i16(i16 %x) nounwind readnone164declare i17 @llvm.cttz.i17(i17 %x) nounwind readnone165declare i32 @llvm.cttz.i32(i32) nounwind readnone166declare i64 @llvm.cttz.i64(i64) nounwind readnone167declare i128 @llvm.cttz.i128(i128) nounwind readnone168 169declare i32 @llvm.ctlz.i32(i32 %x) nounwind readnone170declare i32 @llvm.bitreverse.i32(i32 %x) nounwind readnone171declare i64 @llvm.ctlz.i64(i64 %x) nounwind readnone172declare i64 @llvm.bitreverse.i64(i64 %x) nounwind readnone173