1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-bgq-linux" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Function Attrs: norecurse nounwind readonly 6*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foo(double* nocapture readonly %a) #0 { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %0 = load double, double* %a, align 8 9*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x double> undef, double %0, i32 0 10*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x double> %vecinit.i, <4 x double> undef, <4 x i32> zeroinitializer 11*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle.i 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo 14*9880d681SAndroid Build Coastguard Worker; CHECK: lfd 1, 0(3) 15*9880d681SAndroid Build Coastguard Worker; CHECK: blr 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foox(double* nocapture readonly %a, i64 %idx) #0 { 19*9880d681SAndroid Build Coastguard Workerentry: 20*9880d681SAndroid Build Coastguard Worker %p = getelementptr double, double* %a, i64 %idx 21*9880d681SAndroid Build Coastguard Worker %0 = load double, double* %p, align 8 22*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x double> undef, double %0, i32 0 23*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x double> %vecinit.i, <4 x double> undef, <4 x i32> zeroinitializer 24*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle.i 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foox 27*9880d681SAndroid Build Coastguard Worker; CHECK: sldi [[REG1:[0-9]+]], 4, 3 28*9880d681SAndroid Build Coastguard Worker; CHECK: lfdx 1, 3, [[REG1]] 29*9880d681SAndroid Build Coastguard Worker; CHECK: blr 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @fooxu(double* nocapture readonly %a, i64 %idx, double** %pptr) #0 { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %p = getelementptr double, double* %a, i64 %idx 35*9880d681SAndroid Build Coastguard Worker %0 = load double, double* %p, align 8 36*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x double> undef, double %0, i32 0 37*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x double> %vecinit.i, <4 x double> undef, <4 x i32> zeroinitializer 38*9880d681SAndroid Build Coastguard Worker store double* %p, double** %pptr, align 8 39*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle.i 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foox 42*9880d681SAndroid Build Coastguard Worker; CHECK: sldi [[REG1:[0-9]+]], 4, 3 43*9880d681SAndroid Build Coastguard Worker; CHECK: lfdux 1, 3, [[REG1]] 44*9880d681SAndroid Build Coastguard Worker; CHECK: std 3, 0(5) 45*9880d681SAndroid Build Coastguard Worker; CHECK: blr 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @foof(float* nocapture readonly %a) #0 { 49*9880d681SAndroid Build Coastguard Workerentry: 50*9880d681SAndroid Build Coastguard Worker %0 = load float, float* %a, align 4 51*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x float> undef, float %0, i32 0 52*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x float> %vecinit.i, <4 x float> undef, <4 x i32> zeroinitializer 53*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuffle.i 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foof 56*9880d681SAndroid Build Coastguard Worker; CHECK: lfs 1, 0(3) 57*9880d681SAndroid Build Coastguard Worker; CHECK: blr 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @foofx(float* nocapture readonly %a, i64 %idx) #0 { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker %p = getelementptr float, float* %a, i64 %idx 63*9880d681SAndroid Build Coastguard Worker %0 = load float, float* %p, align 4 64*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x float> undef, float %0, i32 0 65*9880d681SAndroid Build Coastguard Worker %shuffle.i = shufflevector <4 x float> %vecinit.i, <4 x float> undef, <4 x i32> zeroinitializer 66*9880d681SAndroid Build Coastguard Worker ret <4 x float> %shuffle.i 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foofx 69*9880d681SAndroid Build Coastguard Worker; CHECK: sldi [[REG1:[0-9]+]], 4, 2 70*9880d681SAndroid Build Coastguard Worker; CHECK: lfsx 1, 3, [[REG1]] 71*9880d681SAndroid Build Coastguard Worker; CHECK: blr 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerattributes #0 = { norecurse nounwind readonly "target-cpu"="a2q" "target-features"="+qpx,-altivec,-bpermd,-crypto,-direct-move,-extdiv,-power8-vector,-vsx" } 75*9880d681SAndroid Build Coastguard Worker 76