brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · a077dd0 Raw
163 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 | FileCheck %s3 4define i4 @parity_4(i4 %x) {5; CHECK-LABEL: parity_4:6; CHECK:       @ %bb.0:7; CHECK-NEXT:    and r0, r0, #158; CHECK-NEXT:    eor r0, r0, r0, lsr #29; CHECK-NEXT:    eor r0, r0, r0, lsr #110; CHECK-NEXT:    and r0, r0, #111; CHECK-NEXT:    bx lr12  %1 = tail call i4 @llvm.ctpop.i4(i4 %x)13  %2 = and i4 %1, 114  ret i4 %215}16 17define i8 @parity_8(i8 %x) {18; CHECK-LABEL: parity_8:19; CHECK:       @ %bb.0:20; CHECK-NEXT:    uxtb r0, r021; CHECK-NEXT:    eor r0, r0, r0, lsr #422; CHECK-NEXT:    eor r0, r0, r0, lsr #223; CHECK-NEXT:    eor r0, r0, r0, lsr #124; CHECK-NEXT:    and r0, r0, #125; CHECK-NEXT:    bx lr26  %1 = tail call i8 @llvm.ctpop.i8(i8 %x)27  %2 = and i8 %1, 128  ret i8 %229}30 31define i16 @parity_16(i16 %x) {32; CHECK-LABEL: parity_16:33; CHECK:       @ %bb.0:34; CHECK-NEXT:    uxth r0, r035; CHECK-NEXT:    eor r0, r0, r0, lsr #836; CHECK-NEXT:    eor r0, r0, r0, lsr #437; CHECK-NEXT:    eor r0, r0, r0, lsr #238; CHECK-NEXT:    eor r0, r0, r0, lsr #139; CHECK-NEXT:    and r0, r0, #140; CHECK-NEXT:    bx lr41  %1 = tail call i16 @llvm.ctpop.i16(i16 %x)42  %2 = and i16 %1, 143  ret i16 %244}45 46define i17 @parity_17(i17 %x) {47; CHECK-LABEL: parity_17:48; CHECK:       @ %bb.0:49; CHECK-NEXT:    bfc r0, #17, #1550; CHECK-NEXT:    eor r1, r0, r0, lsr #1651; CHECK-NEXT:    eor r0, r1, r0, lsr #852; CHECK-NEXT:    eor r0, r0, r0, lsr #453; CHECK-NEXT:    eor r0, r0, r0, lsr #254; CHECK-NEXT:    eor r0, r0, r0, lsr #155; CHECK-NEXT:    and r0, r0, #156; CHECK-NEXT:    bx lr57  %1 = tail call i17 @llvm.ctpop.i17(i17 %x)58  %2 = and i17 %1, 159  ret i17 %260}61 62define i32 @parity_32(i32 %x) {63; CHECK-LABEL: parity_32:64; CHECK:       @ %bb.0:65; CHECK-NEXT:    eor r0, r0, r0, lsr #1666; CHECK-NEXT:    eor r0, r0, r0, lsr #867; CHECK-NEXT:    eor r0, r0, r0, lsr #468; CHECK-NEXT:    eor r0, r0, r0, lsr #269; CHECK-NEXT:    eor r0, r0, r0, lsr #170; CHECK-NEXT:    and r0, r0, #171; CHECK-NEXT:    bx lr72  %1 = tail call i32 @llvm.ctpop.i32(i32 %x)73  %2 = and i32 %1, 174  ret i32 %275}76 77define i64 @parity_64(i64 %x) {78; CHECK-LABEL: parity_64:79; CHECK:       @ %bb.0:80; CHECK-NEXT:    eor r0, r0, r181; CHECK-NEXT:    mov r1, #082; CHECK-NEXT:    eor r0, r0, r0, lsr #1683; CHECK-NEXT:    eor r0, r0, r0, lsr #884; CHECK-NEXT:    eor r0, r0, r0, lsr #485; CHECK-NEXT:    eor r0, r0, r0, lsr #286; CHECK-NEXT:    eor r0, r0, r0, lsr #187; CHECK-NEXT:    and r0, r0, #188; CHECK-NEXT:    bx lr89  %1 = tail call i64 @llvm.ctpop.i64(i64 %x)90  %2 = and i64 %1, 191  ret i64 %292}93 94define i32 @parity_64_trunc(i64 %x) {95; CHECK-LABEL: parity_64_trunc:96; CHECK:       @ %bb.0:97; CHECK-NEXT:    eor r0, r0, r198; CHECK-NEXT:    eor r0, r0, r0, lsr #1699; CHECK-NEXT:    eor r0, r0, r0, lsr #8100; CHECK-NEXT:    eor r0, r0, r0, lsr #4101; CHECK-NEXT:    eor r0, r0, r0, lsr #2102; CHECK-NEXT:    eor r0, r0, r0, lsr #1103; CHECK-NEXT:    and r0, r0, #1104; CHECK-NEXT:    bx lr105  %1 = tail call i64 @llvm.ctpop.i64(i64 %x)106  %2 = trunc i64 %1 to i32107  %3 = and i32 %2, 1108  ret i32 %3109}110 111define i8 @parity_32_trunc(i32 %x) {112; CHECK-LABEL: parity_32_trunc:113; CHECK:       @ %bb.0:114; CHECK-NEXT:    eor r0, r0, r0, lsr #16115; CHECK-NEXT:    eor r0, r0, r0, lsr #8116; CHECK-NEXT:    eor r0, r0, r0, lsr #4117; CHECK-NEXT:    eor r0, r0, r0, lsr #2118; CHECK-NEXT:    eor r0, r0, r0, lsr #1119; CHECK-NEXT:    and r0, r0, #1120; CHECK-NEXT:    bx lr121  %1 = tail call i32 @llvm.ctpop.i32(i32 %x)122  %2 = trunc i32 %1 to i8123  %3 = and i8 %2, 1124  ret i8 %3125}126 127define i32 @parity_8_zext(i8 %x) {128; CHECK-LABEL: parity_8_zext:129; CHECK:       @ %bb.0:130; CHECK-NEXT:    uxtb r0, r0131; CHECK-NEXT:    eor r0, r0, r0, lsr #4132; CHECK-NEXT:    eor r0, r0, r0, lsr #2133; CHECK-NEXT:    eor r0, r0, r0, lsr #1134; CHECK-NEXT:    and r0, r0, #1135; CHECK-NEXT:    bx lr136  %a = zext i8 %x to i32137  %b = tail call i32 @llvm.ctpop.i32(i32 %a)138  %c = and i32 %b, 1139  ret i32 %c140}141 142define i32 @parity_8_mask(i32 %x) {143; CHECK-LABEL: parity_8_mask:144; CHECK:       @ %bb.0:145; CHECK-NEXT:    uxtb r0, r0146; CHECK-NEXT:    eor r0, r0, r0, lsr #4147; CHECK-NEXT:    eor r0, r0, r0, lsr #2148; CHECK-NEXT:    eor r0, r0, r0, lsr #1149; CHECK-NEXT:    and r0, r0, #1150; CHECK-NEXT:    bx lr151  %a = and i32 %x, 255152  %b = tail call i32 @llvm.ctpop.i32(i32 %a)153  %c = and i32 %b, 1154  ret i32 %c155}156 157declare i4 @llvm.ctpop.i4(i4 %x)158declare i8 @llvm.ctpop.i8(i8 %x)159declare i16 @llvm.ctpop.i16(i16 %x)160declare i17 @llvm.ctpop.i17(i17 %x)161declare i32 @llvm.ctpop.i32(i32 %x)162declare i64 @llvm.ctpop.i64(i64 %x)163