1*9880d681SAndroid Build Coastguard Worker; Check the vecpopcnt* instructions that were added in P8 2*9880d681SAndroid Build Coastguard Worker; In addition, check the conversions to/from the v2i64 VMX register that was also added in P8. 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>) nounwind readnone 7*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>) nounwind readnone 8*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>) nounwind readnone 9*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>) nounwind readnone 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_v16i8_v2i64(<2 x i64> %x) nounwind readnone { 12*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <2 x i64> %x to <16 x i8>; 13*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %tmp) 14*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vcnt 15*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v16i8_v2i64 16*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntb 2, 2 17*9880d681SAndroid Build Coastguard Worker; CHECK: blr 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_v8i16_v2i64(<2 x i64> %x) nounwind readnone { 21*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <2 x i64> %x to <8 x i16> 22*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %tmp) 23*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vcnt 24*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v8i16_v2i64 25*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcnth 2, 2 26*9880d681SAndroid Build Coastguard Worker; CHECK: blr 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_v4i32_v2i64(<2 x i64> %x) nounwind readnone { 30*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <2 x i64> %x to <4 x i32> 31*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %tmp) 32*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vcnt 33*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v4i32_v2i64 34*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntw 2, 2 35*9880d681SAndroid Build Coastguard Worker; CHECK: blr 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_v2i64(<2 x i64> %x) nounwind readnone { 39*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %x) 40*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vcnt 41*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v2i64_v2i64 42*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntd 2, 2 43*9880d681SAndroid Build Coastguard Worker; CHECK: blr 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_v4i32(<4 x i32> %x) nounwind readnone { 47*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <4 x i32> %x to <2 x i64> 48*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %tmp) 49*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vcnt 50*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v2i64_v4i32 51*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntd 2, 2 52*9880d681SAndroid Build Coastguard Worker; CHECK: blr 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_v8i16(<8 x i16> %x) nounwind readnone { 57*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <8 x i16> %x to <2 x i64> 58*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %tmp) 59*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vcnt 60*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v2i64_v8i16 61*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntd 2, 2 62*9880d681SAndroid Build Coastguard Worker; CHECK: blr 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_v2i64_v16i8(<16 x i8> %x) nounwind readnone { 66*9880d681SAndroid Build Coastguard Worker %tmp = bitcast <16 x i8> %x to <2 x i64> 67*9880d681SAndroid Build Coastguard Worker %vcnt = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %tmp) 68*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vcnt 69*9880d681SAndroid Build Coastguard Worker; CHECK: @test_v2i64_v16i8 70*9880d681SAndroid Build Coastguard Worker; CHECK: vpopcntd 2, 2 71*9880d681SAndroid Build Coastguard Worker; CHECK: blr 72*9880d681SAndroid Build Coastguard Worker} 73