1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2;RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=KNL 3;RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=SKX 4 5define i32 @hadd_16(<16 x i32> %x225) { 6; KNL-LABEL: hadd_16: 7; KNL: # %bb.0: 8; KNL-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 9; KNL-NEXT: vpaddd %zmm1, %zmm0, %zmm0 10; KNL-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] 11; KNL-NEXT: vpaddd %zmm1, %zmm0, %zmm0 12; KNL-NEXT: vmovd %xmm0, %eax 13; KNL-NEXT: retq 14; 15; SKX-LABEL: hadd_16: 16; SKX: # %bb.0: 17; SKX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 18; SKX-NEXT: vpaddd %zmm1, %zmm0, %zmm0 19; SKX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] 20; SKX-NEXT: vpaddd %zmm1, %zmm0, %zmm0 21; SKX-NEXT: vmovd %xmm0, %eax 22; SKX-NEXT: vzeroupper 23; SKX-NEXT: retq 24 %x226 = shufflevector <16 x i32> %x225, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 25 %x227 = add <16 x i32> %x225, %x226 26 %x228 = shufflevector <16 x i32> %x227, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 27 %x229 = add <16 x i32> %x227, %x228 28 %x230 = extractelement <16 x i32> %x229, i32 0 29 ret i32 %x230 30} 31 32define i32 @hsub_16(<16 x i32> %x225) { 33; KNL-LABEL: hsub_16: 34; KNL: # %bb.0: 35; KNL-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 36; KNL-NEXT: vpaddd %zmm1, %zmm0, %zmm0 37; KNL-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] 38; KNL-NEXT: vpsubd %zmm1, %zmm0, %zmm0 39; KNL-NEXT: vmovd %xmm0, %eax 40; KNL-NEXT: retq 41; 42; SKX-LABEL: hsub_16: 43; SKX: # %bb.0: 44; SKX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 45; SKX-NEXT: vpaddd %zmm1, %zmm0, %zmm0 46; SKX-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] 47; SKX-NEXT: vpsubd %zmm1, %zmm0, %zmm0 48; SKX-NEXT: vmovd %xmm0, %eax 49; SKX-NEXT: vzeroupper 50; SKX-NEXT: retq 51 %x226 = shufflevector <16 x i32> %x225, <16 x i32> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 52 %x227 = add <16 x i32> %x225, %x226 53 %x228 = shufflevector <16 x i32> %x227, <16 x i32> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 54 %x229 = sub <16 x i32> %x227, %x228 55 %x230 = extractelement <16 x i32> %x229, i32 0 56 ret i32 %x230 57} 58 59define float @fhadd_16(<16 x float> %x225) { 60; KNL-LABEL: fhadd_16: 61; KNL: # %bb.0: 62; KNL-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 63; KNL-NEXT: vaddps %zmm1, %zmm0, %zmm0 64; KNL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 65; KNL-NEXT: vaddps %zmm1, %zmm0, %zmm0 66; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 67; KNL-NEXT: retq 68; 69; SKX-LABEL: fhadd_16: 70; SKX: # %bb.0: 71; SKX-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 72; SKX-NEXT: vaddps %zmm1, %zmm0, %zmm0 73; SKX-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 74; SKX-NEXT: vaddps %zmm1, %zmm0, %zmm0 75; SKX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 76; SKX-NEXT: vzeroupper 77; SKX-NEXT: retq 78 %x226 = shufflevector <16 x float> %x225, <16 x float> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 79 %x227 = fadd <16 x float> %x225, %x226 80 %x228 = shufflevector <16 x float> %x227, <16 x float> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 81 %x229 = fadd <16 x float> %x227, %x228 82 %x230 = extractelement <16 x float> %x229, i32 0 83 ret float %x230 84} 85 86define float @fhsub_16(<16 x float> %x225) { 87; KNL-LABEL: fhsub_16: 88; KNL: # %bb.0: 89; KNL-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 90; KNL-NEXT: vaddps %zmm1, %zmm0, %zmm0 91; KNL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 92; KNL-NEXT: vsubps %zmm1, %zmm0, %zmm0 93; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 94; KNL-NEXT: retq 95; 96; SKX-LABEL: fhsub_16: 97; SKX: # %bb.0: 98; SKX-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 99; SKX-NEXT: vaddps %zmm1, %zmm0, %zmm0 100; SKX-NEXT: vmovshdup {{.*#+}} xmm1 = xmm0[1,1,3,3] 101; SKX-NEXT: vsubps %zmm1, %zmm0, %zmm0 102; SKX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 103; SKX-NEXT: vzeroupper 104; SKX-NEXT: retq 105 %x226 = shufflevector <16 x float> %x225, <16 x float> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 106 %x227 = fadd <16 x float> %x225, %x226 107 %x228 = shufflevector <16 x float> %x227, <16 x float> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 108 %x229 = fsub <16 x float> %x227, %x228 109 %x230 = extractelement <16 x float> %x229, i32 0 110 ret float %x230 111} 112 113define <16 x i32> @hadd_16_3(<16 x i32> %x225, <16 x i32> %x227) { 114; KNL-LABEL: hadd_16_3: 115; KNL: # %bb.0: 116; KNL-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 117; KNL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 118; KNL-NEXT: vpaddd %zmm0, %zmm2, %zmm0 119; KNL-NEXT: retq 120; 121; SKX-LABEL: hadd_16_3: 122; SKX: # %bb.0: 123; SKX-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 124; SKX-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 125; SKX-NEXT: vpaddd %zmm0, %zmm2, %zmm0 126; SKX-NEXT: retq 127 %x226 = shufflevector <16 x i32> %x225, <16 x i32> %x227, <16 x i32> <i32 0, i32 2, i32 16, i32 18 128, i32 4, i32 6, i32 20, i32 22, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 129 %x228 = shufflevector <16 x i32> %x225, <16 x i32> %x227, <16 x i32> <i32 1, i32 3, i32 17, i32 19 130, i32 5 , i32 7, i32 21, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, 131 i32 undef, i32 undef> 132 %x229 = add <16 x i32> %x226, %x228 133 ret <16 x i32> %x229 134} 135 136define <16 x float> @fhadd_16_3(<16 x float> %x225, <16 x float> %x227) { 137; KNL-LABEL: fhadd_16_3: 138; KNL: # %bb.0: 139; KNL-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 140; KNL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 141; KNL-NEXT: vaddps %zmm0, %zmm2, %zmm0 142; KNL-NEXT: retq 143; 144; SKX-LABEL: fhadd_16_3: 145; SKX: # %bb.0: 146; SKX-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 147; SKX-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 148; SKX-NEXT: vaddps %zmm0, %zmm2, %zmm0 149; SKX-NEXT: retq 150 %x226 = shufflevector <16 x float> %x225, <16 x float> %x227, <16 x i32> <i32 0, i32 2, i32 16, i32 18 151, i32 4, i32 6, i32 20, i32 22, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 152 %x228 = shufflevector <16 x float> %x225, <16 x float> %x227, <16 x i32> <i32 1, i32 3, i32 17, i32 19 153, i32 5 , i32 7, i32 21, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 154 %x229 = fadd <16 x float> %x226, %x228 155 ret <16 x float> %x229 156} 157 158define <8 x double> @fhadd_16_4(<8 x double> %x225, <8 x double> %x227) { 159; KNL-LABEL: fhadd_16_4: 160; KNL: # %bb.0: 161; KNL-NEXT: vunpcklpd {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 162; KNL-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] 163; KNL-NEXT: vaddpd %zmm0, %zmm2, %zmm0 164; KNL-NEXT: retq 165; 166; SKX-LABEL: fhadd_16_4: 167; SKX: # %bb.0: 168; SKX-NEXT: vunpcklpd {{.*#+}} ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 169; SKX-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] 170; SKX-NEXT: vaddpd %zmm0, %zmm2, %zmm0 171; SKX-NEXT: retq 172 %x226 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 undef, i32 undef, i32 undef, i32 undef> 173 %x228 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 undef ,i32 undef, i32 undef, i32 undef> 174 %x229 = fadd <8 x double> %x226, %x228 175 ret <8 x double> %x229 176} 177 178define <4 x double> @fadd_noundef_low(<8 x double> %x225, <8 x double> %x227) { 179; KNL-LABEL: fadd_noundef_low: 180; KNL: # %bb.0: 181; KNL-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 182; KNL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 183; KNL-NEXT: vaddpd %zmm0, %zmm2, %zmm0 184; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 185; KNL-NEXT: retq 186; 187; SKX-LABEL: fadd_noundef_low: 188; SKX: # %bb.0: 189; SKX-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 190; SKX-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 191; SKX-NEXT: vaddpd %zmm0, %zmm2, %zmm0 192; SKX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 193; SKX-NEXT: retq 194 %x226 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> 195 %x228 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5 ,i32 13, i32 7, i32 15> 196 %x229 = fadd <8 x double> %x226, %x228 197 %x230 = shufflevector <8 x double> %x229, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 198 ret <4 x double> %x230 199} 200 201define <4 x double> @fadd_noundef_high(<8 x double> %x225, <8 x double> %x227) { 202; KNL-LABEL: fadd_noundef_high: 203; KNL: # %bb.0: 204; KNL-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 205; KNL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 206; KNL-NEXT: vaddpd %zmm0, %zmm2, %zmm0 207; KNL-NEXT: vextractf64x4 $1, %zmm0, %ymm0 208; KNL-NEXT: retq 209; 210; SKX-LABEL: fadd_noundef_high: 211; SKX: # %bb.0: 212; SKX-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 213; SKX-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 214; SKX-NEXT: vaddpd %zmm0, %zmm2, %zmm0 215; SKX-NEXT: vextractf64x4 $1, %zmm0, %ymm0 216; SKX-NEXT: retq 217 %x226 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> 218 %x228 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5 ,i32 13, i32 7, i32 15> 219 %x229 = fadd <8 x double> %x226, %x228 220 %x230 = shufflevector <8 x double> %x229, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 221 ret <4 x double> %x230 222} 223 224 225define <8 x i32> @hadd_16_3_sv(<16 x i32> %x225, <16 x i32> %x227) { 226; KNL-LABEL: hadd_16_3_sv: 227; KNL: # %bb.0: 228; KNL-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 229; KNL-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 230; KNL-NEXT: vpaddd %zmm0, %zmm2, %zmm0 231; KNL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 232; KNL-NEXT: retq 233; 234; SKX-LABEL: hadd_16_3_sv: 235; SKX: # %bb.0: 236; SKX-NEXT: vshufps {{.*#+}} ymm2 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] 237; SKX-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] 238; SKX-NEXT: vpaddd %zmm0, %zmm2, %zmm0 239; SKX-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 240; SKX-NEXT: retq 241 %x226 = shufflevector <16 x i32> %x225, <16 x i32> %x227, <16 x i32> <i32 0, i32 2, i32 16, i32 18 242, i32 4, i32 6, i32 20, i32 22, i32 8, i32 10, i32 24, i32 26, i32 12, i32 14, i32 28, i32 30> 243 %x228 = shufflevector <16 x i32> %x225, <16 x i32> %x227, <16 x i32> <i32 1, i32 3, i32 17, i32 19 244, i32 5 , i32 7, i32 21, i32 23, i32 9, i32 11, i32 25, i32 27, i32 13, i32 15, 245 i32 29, i32 31> 246 %x229 = add <16 x i32> %x226, %x228 247 %x230 = shufflevector <16 x i32> %x229, <16 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4 ,i32 5, i32 6, i32 7> 248 ret <8 x i32> %x230 249} 250 251 252define double @fadd_noundef_eel(<8 x double> %x225, <8 x double> %x227) { 253; KNL-LABEL: fadd_noundef_eel: 254; KNL: # %bb.0: 255; KNL-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 256; KNL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 257; KNL-NEXT: vaddpd %zmm0, %zmm2, %zmm0 258; KNL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 259; KNL-NEXT: retq 260; 261; SKX-LABEL: fadd_noundef_eel: 262; SKX: # %bb.0: 263; SKX-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 264; SKX-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 265; SKX-NEXT: vaddpd %zmm0, %zmm2, %zmm0 266; SKX-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 267; SKX-NEXT: vzeroupper 268; SKX-NEXT: retq 269 %x226 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> 270 %x228 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5 ,i32 13, i32 7, i32 15> 271 %x229 = fadd <8 x double> %x226, %x228 272 %x230 = extractelement <8 x double> %x229, i32 0 273 ret double %x230 274} 275 276 277 278define double @fsub_noundef_ee (<8 x double> %x225, <8 x double> %x227) { 279; KNL-LABEL: fsub_noundef_ee: 280; KNL: # %bb.0: 281; KNL-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 282; KNL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 283; KNL-NEXT: vsubpd %zmm0, %zmm2, %zmm0 284; KNL-NEXT: vextractf32x4 $2, %zmm0, %xmm0 285; KNL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 286; KNL-NEXT: retq 287; 288; SKX-LABEL: fsub_noundef_ee: 289; SKX: # %bb.0: 290; SKX-NEXT: vunpcklpd {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6] 291; SKX-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7] 292; SKX-NEXT: vsubpd %zmm0, %zmm2, %zmm0 293; SKX-NEXT: vextractf32x4 $2, %zmm0, %xmm0 294; SKX-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0] 295; SKX-NEXT: vzeroupper 296; SKX-NEXT: retq 297 %x226 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> 298 %x228 = shufflevector <8 x double> %x225, <8 x double> %x227, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5 ,i32 13, i32 7, i32 15> 299 %x229 = fsub <8 x double> %x226, %x228 300 %x230 = extractelement <8 x double> %x229, i32 5 301 ret double %x230 302} 303 304