Home | History | Annotate | Download | only in X86
      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 
      5 define 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 
     32 define 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 
     59 define 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 
     86 define 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 
    113 define <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 
    136 define <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 
    158 define <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 
    178 define <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 
    201 define <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 
    225 define <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 
    252 define 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 
    278 define 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