1; Test population-count instruction on z15 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s 4 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: llgfr %r0, %r2 11; CHECK: popcnt %r2, %r0, 8 12; CHECK: br %r14 13 14 %popcnt = call i32 @llvm.ctpop.i32(i32 %a) 15 ret i32 %popcnt 16} 17 18define i32 @f2(i32 %a) { 19; CHECK-LABEL: f2: 20; CHECK: llghr %r0, %r2 21; CHECK: popcnt %r2, %r0, 8 22; CHECK: br %r14 23 %and = and i32 %a, 65535 24 %popcnt = call i32 @llvm.ctpop.i32(i32 %and) 25 ret i32 %popcnt 26} 27 28define i32 @f3(i32 %a) { 29; CHECK-LABEL: f3: 30; CHECK: llgcr %r0, %r2 31; CHECK: popcnt %r2, %r0, 8 32; CHECK: br %r14 33 %and = and i32 %a, 255 34 %popcnt = call i32 @llvm.ctpop.i32(i32 %and) 35 ret i32 %popcnt 36} 37 38define i64 @f4(i64 %a) { 39; CHECK-LABEL: f4: 40; CHECK: popcnt %r2, %r2, 8 41; CHECK: br %r14 42 %popcnt = call i64 @llvm.ctpop.i64(i64 %a) 43 ret i64 %popcnt 44} 45 46define i64 @f5(i64 %a) { 47; CHECK-LABEL: f5: 48; CHECK: llgfr %r0, %r2 49; CHECK: popcnt %r2, %r0, 8 50 %and = and i64 %a, 4294967295 51 %popcnt = call i64 @llvm.ctpop.i64(i64 %and) 52 ret i64 %popcnt 53} 54 55define i64 @f6(i64 %a) { 56; CHECK-LABEL: f6: 57; CHECK: llghr %r0, %r2 58; CHECK: popcnt %r2, %r0, 8 59; CHECK: br %r14 60 %and = and i64 %a, 65535 61 %popcnt = call i64 @llvm.ctpop.i64(i64 %and) 62 ret i64 %popcnt 63} 64 65define i64 @f7(i64 %a) { 66; CHECK-LABEL: f7: 67; CHECK: llgcr %r0, %r2 68; CHECK: popcnt %r2, %r0, 8 69; CHECK: br %r14 70 %and = and i64 %a, 255 71 %popcnt = call i64 @llvm.ctpop.i64(i64 %and) 72 ret i64 %popcnt 73} 74 75