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