1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=KNL 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f -mattr=+avx512vl -mattr=+avx512bw -mattr=+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=SKX 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker attributes #0 = { nounwind } 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_16x32_to_16x8(<16 x i32> %i) #0 { 8*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_16x32_to_16x8: 9*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 10*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdb %zmm0, %xmm0 11*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 12*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i32> %i to <16 x i8> 13*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_8x64_to_8x16(<8 x i64> %i) #0 { 17*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_8x64_to_8x16: 18*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 19*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqw %zmm0, %xmm0 20*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i16> 22*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @trunc_v16i32_to_v16i16(<16 x i32> %x) #0 { 26*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_v16i32_to_v16i16: 27*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 28*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdw %zmm0, %ymm0 29*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 30*9880d681SAndroid Build Coastguard Worker %1 = trunc <16 x i32> %x to <16 x i16> 31*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %1 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @trunc_qb_512(<8 x i64> %i) #0 { 35*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qb_512: 36*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 37*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqw %zmm0, %xmm0 38*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 39*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i8> 40*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %x 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qb_512_mem(<8 x i64> %i, <8 x i8>* %res) #0 { 44*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qb_512_mem: 45*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 46*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqb %zmm0, (%rdi) 47*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 48*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i8> 49*9880d681SAndroid Build Coastguard Worker store <8 x i8> %x, <8 x i8>* %res 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @trunc_qb_256(<4 x i64> %i) #0 { 54*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qb_256: 55*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 56*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 57*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 58*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 59*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 60*9880d681SAndroid Build Coastguard Worker; 61*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qb_256: 62*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 63*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqd %ymm0, %xmm0 64*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 65*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i8> 66*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %x 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qb_256_mem(<4 x i64> %i, <4 x i8>* %res) #0 { 70*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qb_256_mem: 71*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 72*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 73*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 74*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u] 75*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %xmm0, (%rdi) 76*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qb_256_mem: 79*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 80*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqb %ymm0, (%rdi) 81*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 82*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i8> 83*9880d681SAndroid Build Coastguard Worker store <4 x i8> %x, <4 x i8>* %res 84*9880d681SAndroid Build Coastguard Worker ret void 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine <2 x i8> @trunc_qb_128(<2 x i64> %i) #0 { 88*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qb_128: 89*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 90*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 91*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i8> 92*9880d681SAndroid Build Coastguard Worker ret <2 x i8> %x 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qb_128_mem(<2 x i64> %i, <2 x i8>* %res) #0 { 96*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qb_128_mem: 97*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 98*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u] 99*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %xmm0, %eax 100*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: movw %ax, (%rdi) 101*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 102*9880d681SAndroid Build Coastguard Worker; 103*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qb_128_mem: 104*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 105*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqb %xmm0, (%rdi) 106*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 107*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i8> 108*9880d681SAndroid Build Coastguard Worker store <2 x i8> %x, <2 x i8>* %res 109*9880d681SAndroid Build Coastguard Worker ret void 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_qw_512(<8 x i64> %i) #0 { 113*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qw_512: 114*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 115*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqw %zmm0, %xmm0 116*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 117*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i16> 118*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qw_512_mem(<8 x i64> %i, <8 x i16>* %res) #0 { 122*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qw_512_mem: 123*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 124*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqw %zmm0, (%rdi) 125*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i16> 127*9880d681SAndroid Build Coastguard Worker store <8 x i16> %x, <8 x i16>* %res 128*9880d681SAndroid Build Coastguard Worker ret void 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @trunc_qw_256(<4 x i64> %i) #0 { 132*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qw_256: 133*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 134*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 137*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 138*9880d681SAndroid Build Coastguard Worker; 139*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qw_256: 140*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 141*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqd %ymm0, %xmm0 142*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 143*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i16> 144*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %x 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qw_256_mem(<4 x i64> %i, <4 x i16>* %res) #0 { 148*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qw_256_mem: 149*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 150*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 151*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 152*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 153*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, (%rdi) 154*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 155*9880d681SAndroid Build Coastguard Worker; 156*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qw_256_mem: 157*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 158*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqw %ymm0, (%rdi) 159*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 160*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i16> 161*9880d681SAndroid Build Coastguard Worker store <4 x i16> %x, <4 x i16>* %res 162*9880d681SAndroid Build Coastguard Worker ret void 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <2 x i16> @trunc_qw_128(<2 x i64> %i) #0 { 166*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qw_128: 167*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 168*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 169*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i16> 170*9880d681SAndroid Build Coastguard Worker ret <2 x i16> %x 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qw_128_mem(<2 x i64> %i, <2 x i16>* %res) #0 { 174*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qw_128_mem: 175*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 176*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 177*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7] 178*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %xmm0, (%rdi) 179*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 180*9880d681SAndroid Build Coastguard Worker; 181*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qw_128_mem: 182*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 183*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqw %xmm0, (%rdi) 184*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 185*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i16> 186*9880d681SAndroid Build Coastguard Worker store <2 x i16> %x, <2 x i16>* %res 187*9880d681SAndroid Build Coastguard Worker ret void 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @trunc_qd_512(<8 x i64> %i) #0 { 191*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qd_512: 192*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 193*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqd %zmm0, %ymm0 194*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 195*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i32> 196*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %x 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qd_512_mem(<8 x i64> %i, <8 x i32>* %res) #0 { 200*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qd_512_mem: 201*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 202*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovqd %zmm0, (%rdi) 203*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 204*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i64> %i to <8 x i32> 205*9880d681SAndroid Build Coastguard Worker store <8 x i32> %x, <8 x i32>* %res 206*9880d681SAndroid Build Coastguard Worker ret void 207*9880d681SAndroid Build Coastguard Worker} 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_qd_256(<4 x i64> %i) #0 { 210*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qd_256: 211*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 212*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 213*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 214*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 216*9880d681SAndroid Build Coastguard Worker; 217*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qd_256: 218*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 219*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqd %ymm0, %xmm0 220*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 221*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i32> 222*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %x 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qd_256_mem(<4 x i64> %i, <4 x i32>* %res) #0 { 226*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qd_256_mem: 227*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 228*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 229*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovqd %zmm0, %ymm0 230*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %xmm0, (%rdi) 231*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 232*9880d681SAndroid Build Coastguard Worker; 233*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qd_256_mem: 234*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 235*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqd %ymm0, (%rdi) 236*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 237*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i64> %i to <4 x i32> 238*9880d681SAndroid Build Coastguard Worker store <4 x i32> %x, <4 x i32>* %res 239*9880d681SAndroid Build Coastguard Worker ret void 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @trunc_qd_128(<2 x i64> %i) #0 { 243*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_qd_128: 244*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 245*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 246*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i32> 247*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %x 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine void @trunc_qd_128_mem(<2 x i64> %i, <2 x i32>* %res) #0 { 251*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_qd_128_mem: 252*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 253*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 254*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, (%rdi) 255*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 256*9880d681SAndroid Build Coastguard Worker; 257*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_qd_128_mem: 258*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 259*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovqd %xmm0, (%rdi) 260*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 261*9880d681SAndroid Build Coastguard Worker %x = trunc <2 x i64> %i to <2 x i32> 262*9880d681SAndroid Build Coastguard Worker store <2 x i32> %x, <2 x i32>* %res 263*9880d681SAndroid Build Coastguard Worker ret void 264*9880d681SAndroid Build Coastguard Worker} 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_db_512(<16 x i32> %i) #0 { 267*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_db_512: 268*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 269*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdb %zmm0, %xmm0 270*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 271*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i32> %i to <16 x i8> 272*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine void @trunc_db_512_mem(<16 x i32> %i, <16 x i8>* %res) #0 { 276*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_db_512_mem: 277*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 278*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdb %zmm0, (%rdi) 279*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 280*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i32> %i to <16 x i8> 281*9880d681SAndroid Build Coastguard Worker store <16 x i8> %x, <16 x i8>* %res 282*9880d681SAndroid Build Coastguard Worker ret void 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @trunc_db_256(<8 x i32> %i) #0 { 286*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_db_256: 287*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 288*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 289*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdw %zmm0, %ymm0 290*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 291*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 292*9880d681SAndroid Build Coastguard Worker; 293*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_db_256: 294*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 295*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdw %ymm0, %xmm0 296*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 297*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i32> %i to <8 x i8> 298*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %x 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdefine void @trunc_db_256_mem(<8 x i32> %i, <8 x i8>* %res) #0 { 302*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_db_256_mem: 303*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 304*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 305*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdw %zmm0, %ymm0 306*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, (%rdi) 308*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 309*9880d681SAndroid Build Coastguard Worker; 310*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_db_256_mem: 311*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 312*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdb %ymm0, (%rdi) 313*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 314*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i32> %i to <8 x i8> 315*9880d681SAndroid Build Coastguard Worker store <8 x i8> %x, <8 x i8>* %res 316*9880d681SAndroid Build Coastguard Worker ret void 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @trunc_db_128(<4 x i32> %i) #0 { 320*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_db_128: 321*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 322*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 323*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i32> %i to <4 x i8> 324*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %x 325*9880d681SAndroid Build Coastguard Worker} 326*9880d681SAndroid Build Coastguard Worker 327*9880d681SAndroid Build Coastguard Workerdefine void @trunc_db_128_mem(<4 x i32> %i, <4 x i8>* %res) #0 { 328*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_db_128_mem: 329*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 330*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u] 331*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovd %xmm0, (%rdi) 332*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 333*9880d681SAndroid Build Coastguard Worker; 334*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_db_128_mem: 335*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 336*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdb %xmm0, (%rdi) 337*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 338*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i32> %i to <4 x i8> 339*9880d681SAndroid Build Coastguard Worker store <4 x i8> %x, <4 x i8>* %res 340*9880d681SAndroid Build Coastguard Worker ret void 341*9880d681SAndroid Build Coastguard Worker} 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @trunc_dw_512(<16 x i32> %i) #0 { 344*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_dw_512: 345*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 346*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdw %zmm0, %ymm0 347*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 348*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i32> %i to <16 x i16> 349*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %x 350*9880d681SAndroid Build Coastguard Worker} 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Workerdefine void @trunc_dw_512_mem(<16 x i32> %i, <16 x i16>* %res) #0 { 353*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_dw_512_mem: 354*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 355*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpmovdw %zmm0, (%rdi) 356*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 357*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i32> %i to <16 x i16> 358*9880d681SAndroid Build Coastguard Worker store <16 x i16> %x, <16 x i16>* %res 359*9880d681SAndroid Build Coastguard Worker ret void 360*9880d681SAndroid Build Coastguard Worker} 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_dw_256(<8 x i32> %i) #0 { 363*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_dw_256: 364*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 365*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 366*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdw %zmm0, %ymm0 367*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 368*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 369*9880d681SAndroid Build Coastguard Worker; 370*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_dw_256: 371*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 372*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdw %ymm0, %xmm0 373*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 374*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i32> %i to <8 x i16> 375*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %x 376*9880d681SAndroid Build Coastguard Worker} 377*9880d681SAndroid Build Coastguard Worker 378*9880d681SAndroid Build Coastguard Workerdefine void @trunc_dw_256_mem(<8 x i32> %i, <8 x i16>* %res) #0 { 379*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_dw_256_mem: 380*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 381*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 382*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdw %zmm0, %ymm0 383*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %xmm0, (%rdi) 384*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 385*9880d681SAndroid Build Coastguard Worker; 386*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_dw_256_mem: 387*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 388*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdw %ymm0, (%rdi) 389*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 390*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i32> %i to <8 x i16> 391*9880d681SAndroid Build Coastguard Worker store <8 x i16> %x, <8 x i16>* %res 392*9880d681SAndroid Build Coastguard Worker ret void 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerdefine void @trunc_dw_128_mem(<4 x i32> %i, <4 x i16>* %res) #0 { 396*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_dw_128_mem: 397*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 398*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 399*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, (%rdi) 400*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 401*9880d681SAndroid Build Coastguard Worker; 402*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_dw_128_mem: 403*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 404*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovdw %xmm0, (%rdi) 405*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 406*9880d681SAndroid Build Coastguard Worker %x = trunc <4 x i32> %i to <4 x i16> 407*9880d681SAndroid Build Coastguard Worker store <4 x i16> %x, <4 x i16>* %res 408*9880d681SAndroid Build Coastguard Worker ret void 409*9880d681SAndroid Build Coastguard Worker} 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @trunc_wb_512(<32 x i16> %i) #0 { 412*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_wb_512: 413*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 414*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 415*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm0, %xmm0 416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm1, %zmm1 417*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm1, %xmm1 418*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 420*9880d681SAndroid Build Coastguard Worker; 421*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_wb_512: 422*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 423*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovwb %zmm0, %ymm0 424*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 425*9880d681SAndroid Build Coastguard Worker %x = trunc <32 x i16> %i to <32 x i8> 426*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %x 427*9880d681SAndroid Build Coastguard Worker} 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Workerdefine void @trunc_wb_512_mem(<32 x i16> %i, <32 x i8>* %res) #0 { 430*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_wb_512_mem: 431*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 432*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 433*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm0, %xmm0 434*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm1, %zmm1 435*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm1, %xmm1 436*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 437*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %ymm0, (%rdi) 438*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 439*9880d681SAndroid Build Coastguard Worker; 440*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_wb_512_mem: 441*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 442*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovwb %zmm0, (%rdi) 443*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 444*9880d681SAndroid Build Coastguard Worker %x = trunc <32 x i16> %i to <32 x i8> 445*9880d681SAndroid Build Coastguard Worker store <32 x i8> %x, <32 x i8>* %res 446*9880d681SAndroid Build Coastguard Worker ret void 447*9880d681SAndroid Build Coastguard Worker} 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_wb_256(<16 x i16> %i) #0 { 450*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_wb_256: 451*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 452*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 453*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm0, %xmm0 454*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 455*9880d681SAndroid Build Coastguard Worker; 456*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_wb_256: 457*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 458*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovwb %ymm0, %xmm0 459*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 460*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i16> %i to <16 x i8> 461*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %x 462*9880d681SAndroid Build Coastguard Worker} 463*9880d681SAndroid Build Coastguard Worker 464*9880d681SAndroid Build Coastguard Workerdefine void @trunc_wb_256_mem(<16 x i16> %i, <16 x i8>* %res) #0 { 465*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_wb_256_mem: 466*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 467*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovsxwd %ymm0, %zmm0 468*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpmovdb %zmm0, %xmm0 469*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovaps %xmm0, (%rdi) 470*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 471*9880d681SAndroid Build Coastguard Worker; 472*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_wb_256_mem: 473*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 474*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovwb %ymm0, (%rdi) 475*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 476*9880d681SAndroid Build Coastguard Worker %x = trunc <16 x i16> %i to <16 x i8> 477*9880d681SAndroid Build Coastguard Worker store <16 x i8> %x, <16 x i8>* %res 478*9880d681SAndroid Build Coastguard Worker ret void 479*9880d681SAndroid Build Coastguard Worker} 480*9880d681SAndroid Build Coastguard Worker 481*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @trunc_wb_128(<8 x i16> %i) #0 { 482*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_wb_128: 483*9880d681SAndroid Build Coastguard Worker; ALL: ## BB#0: 484*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 485*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i16> %i to <8 x i8> 486*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %x 487*9880d681SAndroid Build Coastguard Worker} 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Workerdefine void @trunc_wb_128_mem(<8 x i16> %i, <8 x i8>* %res) #0 { 490*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_wb_128_mem: 491*9880d681SAndroid Build Coastguard Worker; KNL: ## BB#0: 492*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 493*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: vmovq %xmm0, (%rdi) 494*9880d681SAndroid Build Coastguard Worker; KNL-NEXT: retq 495*9880d681SAndroid Build Coastguard Worker; 496*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_wb_128_mem: 497*9880d681SAndroid Build Coastguard Worker; SKX: ## BB#0: 498*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: vpmovwb %xmm0, (%rdi) 499*9880d681SAndroid Build Coastguard Worker; SKX-NEXT: retq 500*9880d681SAndroid Build Coastguard Worker %x = trunc <8 x i16> %i to <8 x i8> 501*9880d681SAndroid Build Coastguard Worker store <8 x i8> %x, <8 x i8>* %res 502*9880d681SAndroid Build Coastguard Worker ret void 503*9880d681SAndroid Build Coastguard Worker} 504