1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -instcombine %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: julia_2xdouble 4*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: insertvalue 5*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: extractelement 6*9880d681SAndroid Build Coastguard Worker; CHECK: store <2 x double> 7*9880d681SAndroid Build Coastguard Workerdefine void @julia_2xdouble([2 x double]* sret, <2 x double>*) { 8*9880d681SAndroid Build Coastguard Workertop: 9*9880d681SAndroid Build Coastguard Worker %x = load <2 x double>, <2 x double>* %1 10*9880d681SAndroid Build Coastguard Worker %x0 = extractelement <2 x double> %x, i32 0 11*9880d681SAndroid Build Coastguard Worker %i0 = insertvalue [2 x double] undef, double %x0, 0 12*9880d681SAndroid Build Coastguard Worker %x1 = extractelement <2 x double> %x, i32 1 13*9880d681SAndroid Build Coastguard Worker %i1 = insertvalue [2 x double] %i0, double %x1, 1 14*9880d681SAndroid Build Coastguard Worker store [2 x double] %i1, [2 x double]* %0, align 4 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; Test with two inserts to the same index 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: julia_2xi64 20*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: insertvalue 21*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: extractelement 22*9880d681SAndroid Build Coastguard Worker; CHECK: store <2 x i64> 23*9880d681SAndroid Build Coastguard Workerdefine void @julia_2xi64([2 x i64]* sret, <2 x i64>*) { 24*9880d681SAndroid Build Coastguard Workertop: 25*9880d681SAndroid Build Coastguard Worker %x = load <2 x i64>, <2 x i64>* %1 26*9880d681SAndroid Build Coastguard Worker %x0 = extractelement <2 x i64> %x, i32 1 27*9880d681SAndroid Build Coastguard Worker %i0 = insertvalue [2 x i64] undef, i64 %x0, 0 28*9880d681SAndroid Build Coastguard Worker %x1 = extractelement <2 x i64> %x, i32 1 29*9880d681SAndroid Build Coastguard Worker %i1 = insertvalue [2 x i64] %i0, i64 %x1, 1 30*9880d681SAndroid Build Coastguard Worker %x2 = extractelement <2 x i64> %x, i32 0 31*9880d681SAndroid Build Coastguard Worker %i2 = insertvalue [2 x i64] %i1, i64 %x2, 0 32*9880d681SAndroid Build Coastguard Worker store [2 x i64] %i2, [2 x i64]* %0, align 4 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: julia_4xfloat 37*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: insertvalue 38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: extractelement 39*9880d681SAndroid Build Coastguard Worker; CHECK: store <4 x float> 40*9880d681SAndroid Build Coastguard Workerdefine void @julia_4xfloat([4 x float]* sret, <4 x float>*) { 41*9880d681SAndroid Build Coastguard Workertop: 42*9880d681SAndroid Build Coastguard Worker %x = load <4 x float>, <4 x float>* %1 43*9880d681SAndroid Build Coastguard Worker %x0 = extractelement <4 x float> %x, i32 0 44*9880d681SAndroid Build Coastguard Worker %i0 = insertvalue [4 x float] undef, float %x0, 0 45*9880d681SAndroid Build Coastguard Worker %x1 = extractelement <4 x float> %x, i32 1 46*9880d681SAndroid Build Coastguard Worker %i1 = insertvalue [4 x float] %i0, float %x1, 1 47*9880d681SAndroid Build Coastguard Worker %x2 = extractelement <4 x float> %x, i32 2 48*9880d681SAndroid Build Coastguard Worker %i2 = insertvalue [4 x float] %i1, float %x2, 2 49*9880d681SAndroid Build Coastguard Worker %x3 = extractelement <4 x float> %x, i32 3 50*9880d681SAndroid Build Coastguard Worker %i3 = insertvalue [4 x float] %i2, float %x3, 3 51*9880d681SAndroid Build Coastguard Worker store [4 x float] %i3, [4 x float]* %0, align 4 52*9880d681SAndroid Build Coastguard Worker ret void 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker%pseudovec = type { float, float, float, float } 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: julia_pseudovec 58*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: insertvalue 59*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: extractelement 60*9880d681SAndroid Build Coastguard Worker; CHECK: store <4 x float> 61*9880d681SAndroid Build Coastguard Workerdefine void @julia_pseudovec(%pseudovec* sret, <4 x float>*) { 62*9880d681SAndroid Build Coastguard Workertop: 63*9880d681SAndroid Build Coastguard Worker %x = load <4 x float>, <4 x float>* %1 64*9880d681SAndroid Build Coastguard Worker %x0 = extractelement <4 x float> %x, i32 0 65*9880d681SAndroid Build Coastguard Worker %i0 = insertvalue %pseudovec undef, float %x0, 0 66*9880d681SAndroid Build Coastguard Worker %x1 = extractelement <4 x float> %x, i32 1 67*9880d681SAndroid Build Coastguard Worker %i1 = insertvalue %pseudovec %i0, float %x1, 1 68*9880d681SAndroid Build Coastguard Worker %x2 = extractelement <4 x float> %x, i32 2 69*9880d681SAndroid Build Coastguard Worker %i2 = insertvalue %pseudovec %i1, float %x2, 2 70*9880d681SAndroid Build Coastguard Worker %x3 = extractelement <4 x float> %x, i32 3 71*9880d681SAndroid Build Coastguard Worker %i3 = insertvalue %pseudovec %i2, float %x3, 3 72*9880d681SAndroid Build Coastguard Worker store %pseudovec %i3, %pseudovec* %0, align 4 73*9880d681SAndroid Build Coastguard Worker ret void 74*9880d681SAndroid Build Coastguard Worker} 75