97 lines · plain
1; Test population-count instruction2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s4 5declare i32 @llvm.ctpop.i32(i32 %a)6declare i64 @llvm.ctpop.i64(i64 %a)7 8define i32 @f1(i32 %a) {9; CHECK-LABEL: f1:10; CHECK: popcnt %r0, %r211; CHECK: sllk %r1, %r0, 1612; CHECK: ar %r0, %r113; CHECK: sllk %r1, %r0, 814; CHECK: ar %r0, %r115; CHECK: srlk %r2, %r0, 2416; CHECK: br %r1417 18 %popcnt = call i32 @llvm.ctpop.i32(i32 %a)19 ret i32 %popcnt20}21 22define i32 @f2(i32 %a) {23; CHECK-LABEL: f2:24; CHECK: llhr %r0, %r225; CHECK: popcnt %r0, %r026; CHECK: risblg %r1, %r0, 16, 151, 827; CHECK: ar %r0, %r128; CHECK: srlk %r2, %r0, 829; CHECK: br %r1430 %and = and i32 %a, 6553531 %popcnt = call i32 @llvm.ctpop.i32(i32 %and)32 ret i32 %popcnt33}34 35define i32 @f3(i32 %a) {36; CHECK-LABEL: f3:37; CHECK: llcr %r0, %r238; CHECK: popcnt %r2, %r039; CHECK: br %r1440 %and = and i32 %a, 25541 %popcnt = call i32 @llvm.ctpop.i32(i32 %and)42 ret i32 %popcnt43}44 45define i64 @f4(i64 %a) {46; CHECK-LABEL: f4:47; CHECK: popcnt %r0, %r248; CHECK: sllg %r1, %r0, 3249; CHECK: agr %r0, %r150; CHECK: sllg %r1, %r0, 1651; CHECK: agr %r0, %r152; CHECK: sllg %r1, %r0, 853; CHECK: agr %r0, %r154; CHECK: srlg %r2, %r0, 5655; CHECK: br %r1456 %popcnt = call i64 @llvm.ctpop.i64(i64 %a)57 ret i64 %popcnt58}59 60define i64 @f5(i64 %a) {61; CHECK-LABEL: f5:62; CHECK: llgfr %r0, %r263; CHECK: popcnt %r0, %r064; CHECK: sllg %r1, %r0, 1665; CHECK: algfr %r0, %r166; CHECK: sllg %r1, %r0, 867; CHECK: algfr %r0, %r168; CHECK: srlg %r2, %r0, 2469 %and = and i64 %a, 429496729570 %popcnt = call i64 @llvm.ctpop.i64(i64 %and)71 ret i64 %popcnt72}73 74define i64 @f6(i64 %a) {75; CHECK-LABEL: f6:76; CHECK: llghr %r0, %r277; CHECK: popcnt %r0, %r078; CHECK: risbg %r1, %r0, 48, 183, 879; CHECK: agr %r0, %r180; CHECK: srlg %r2, %r0, 881; CHECK: br %r1482 %and = and i64 %a, 6553583 %popcnt = call i64 @llvm.ctpop.i64(i64 %and)84 ret i64 %popcnt85}86 87define i64 @f7(i64 %a) {88; CHECK-LABEL: f7:89; CHECK: llgcr %r0, %r290; CHECK: popcnt %r2, %r091; CHECK: br %r1492 %and = and i64 %a, 25593 %popcnt = call i64 @llvm.ctpop.i64(i64 %and)94 ret i64 %popcnt95}96 97