1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=+power8-vector -mattr=-vsx < %s | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s -check-prefix=CHECK-VSX 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@vsc = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, align 16 7*9880d681SAndroid Build Coastguard Worker@vsc2 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, align 16 8*9880d681SAndroid Build Coastguard Worker@vuc = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, align 16 9*9880d681SAndroid Build Coastguard Worker@vuc2 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>, align 16 10*9880d681SAndroid Build Coastguard Worker@res_vll = common global <2 x i64> zeroinitializer, align 16 11*9880d681SAndroid Build Coastguard Worker@res_vull = common global <2 x i64> zeroinitializer, align 16 12*9880d681SAndroid Build Coastguard Worker@res_vsc = common global <16 x i8> zeroinitializer, align 16 13*9880d681SAndroid Build Coastguard Worker@res_vuc = common global <16 x i8> zeroinitializer, align 16 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 16*9880d681SAndroid Build Coastguard Workerdefine void @test1() { 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker %0 = load <16 x i8>, <16 x i8>* @vsc, align 16 19*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* @vsc2, align 16 20*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.ppc.altivec.vbpermq(<16 x i8> %0, <16 x i8> %1) 21*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* @res_vll, align 16 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1 24*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG1:[0-9]+]], 0, 3 25*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG2:[0-9]+]], 0, 4 26*9880d681SAndroid Build Coastguard Worker; CHECK: vbpermq {{[0-9]+}}, [[REG1]], [[REG2]] 27*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: vbpermq {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}} 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 31*9880d681SAndroid Build Coastguard Workerdefine void @test2() { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker %0 = load <16 x i8>, <16 x i8>* @vuc, align 16 34*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* @vuc2, align 16 35*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.ppc.altivec.vbpermq(<16 x i8> %0, <16 x i8> %1) 36*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* @res_vull, align 16 37*9880d681SAndroid Build Coastguard Worker ret void 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2 39*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG1:[0-9]+]], 0, 3 40*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG2:[0-9]+]], 0, 4 41*9880d681SAndroid Build Coastguard Worker; CHECK: vbpermq {{[0-9]+}}, [[REG1]], [[REG2]] 42*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: vbpermq {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}} 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 46*9880d681SAndroid Build Coastguard Workerdefine void @test3() { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker %0 = load <16 x i8>, <16 x i8>* @vsc, align 16 49*9880d681SAndroid Build Coastguard Worker %1 = call <16 x i8> @llvm.ppc.altivec.vgbbd(<16 x i8> %0) 50*9880d681SAndroid Build Coastguard Worker store <16 x i8> %1, <16 x i8>* @res_vsc, align 16 51*9880d681SAndroid Build Coastguard Worker ret void 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3 53*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG1:[0-9]+]], 54*9880d681SAndroid Build Coastguard Worker; CHECK: vgbbd {{[0-9]+}}, [[REG1]] 55*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: vgbbd {{[0-9]+}}, {{[0-9]+}} 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 59*9880d681SAndroid Build Coastguard Workerdefine void @test4() { 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker %0 = load <16 x i8>, <16 x i8>* @vuc, align 16 62*9880d681SAndroid Build Coastguard Worker %1 = call <16 x i8> @llvm.ppc.altivec.vgbbd(<16 x i8> %0) 63*9880d681SAndroid Build Coastguard Worker store <16 x i8> %1, <16 x i8>* @res_vuc, align 16 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4 66*9880d681SAndroid Build Coastguard Worker; CHECK: lvx [[REG1:[0-9]+]], 67*9880d681SAndroid Build Coastguard Worker; CHECK: vgbbd {{[0-9]+}}, [[REG1]] 68*9880d681SAndroid Build Coastguard Worker; CHECK-VSX: vgbbd {{[0-9]+}}, {{[0-9]+}} 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 72*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ppc.altivec.vbpermq(<16 x i8>, <16 x i8>) 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone 75*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ppc.altivec.vgbbd(<16 x i8>) 76